From c406119fa9e3ea6911812a2292efdf4911a997c5 Mon Sep 17 00:00:00 2001 From: Trishna Guha Date: Wed, 15 Mar 2017 16:06:50 +0530 Subject: [PATCH] AsciiBinder setup for Atomic host Doc --- .gitignore | 1 + _distro_map.yml | 11 + _images/project_atomic_horizontal_logo.png | Bin 0 -> 30240 bytes _javascripts/.gitkeep | 0 _javascripts/bootstrap-offcanvas.js | 6 + _stylesheets/asciibinder.css | 568 ++++++++++++++++++ _templates/_css.html.erb | 3 + _templates/_nav.html.erb | 31 + _templates/page.html.erb | 84 +++ _topic_map.yml | 42 ++ .../cockpit/installing_cockpit.adoc | 94 +++ atomic-host-guide/cockpit/overview.adoc | 22 + atomic-host-guide/cockpit/using_cockpit.adoc | 191 ++++++ index-main.html | 35 ++ welcome/index.adoc | 21 + 15 files changed, 1109 insertions(+) create mode 100644 .gitignore create mode 100644 _distro_map.yml create mode 100644 _images/project_atomic_horizontal_logo.png create mode 100644 _javascripts/.gitkeep create mode 100644 _javascripts/bootstrap-offcanvas.js create mode 100644 _stylesheets/asciibinder.css create mode 100644 _templates/_css.html.erb create mode 100644 _templates/_nav.html.erb create mode 100644 _templates/page.html.erb create mode 100644 _topic_map.yml create mode 100644 atomic-host-guide/cockpit/installing_cockpit.adoc create mode 100644 atomic-host-guide/cockpit/overview.adoc create mode 100644 atomic-host-guide/cockpit/using_cockpit.adoc create mode 100644 index-main.html create mode 100644 welcome/index.adoc diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..1eeece8 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +_preview diff --git a/_distro_map.yml b/_distro_map.yml new file mode 100644 index 0000000..8c5afc2 --- /dev/null +++ b/_distro_map.yml @@ -0,0 +1,11 @@ +--- +atomic_host_docs: + name: Atomic Host + author: Project Atomic Documentation Project + site: main + site_name: Atomic Host Documentation + site_url: http://docs.projectatomic.io/ + branches: + master: + name: Latest + dir: latest diff --git a/_images/project_atomic_horizontal_logo.png b/_images/project_atomic_horizontal_logo.png new file mode 100644 index 0000000000000000000000000000000000000000..5bf2549ad601680cbad1120d0a6c4a9262e307cd GIT binary patch literal 30240 zcmX_n1z3~q`}P>!U6Kw2rAxYm5h5YN=uRa^Ny9*;Q>3IsL|`;19aCBm3_8YW$qkUM z?|I+%|NF)Pvj}>6dr7WE^}gXQq$I!D@HuaNkVQwZVJ3ZDny(@M1}X9cpbk7Rf6I`Iim`Yv&3~y zLv)ih*6!3l#VC5jlFU;pkJz+JpExznXoq!hp3=alc@4%u&EQCIjp+nz@=nt6@pEaf z`9TcEZoHNX)P~3gi4rmCHKYe7B~6=Tm5W1j=cC5;=*jyl0l z7S}&fr3zv>6@_)m)5(;Slr%vk5?Oej8W1Ss`Gbe((An6Et#%6w3lyh3%PcXZ zX}6d-$^{??w=f&3?{zg)Nb{+!%8+b4JyJzu8N+K;QzK%(Hl=cP`L>L{qr_3oQCGu3 zx#Y%2Vd;S>`-jkKM!LaDe#D%hVr}t5Ps8Zyt`-1a2X{uhHw79ISwtRutw~a$@ z5SorG&G$Dkdo8kZcZltun~UdFR8Azw$jC@aNkNT_eh(l_^?y1ufyzL&xia49A6ded zdlVXDO;>oDyA966Oq!aSH0d(ISW)6pJSM%LYwO^=w{PEiv9q)PJ^uUe)8tf-yktz% zLv@f@@8MyN&=(V}R$jo>y&riy}|`+k3}Ya#2^ ztX%TMQ(|QS$O&)8(8ko%l)|?DgoZ#SIQskgkdtp9Z7cpMpAmhXT?4zPu;c$$Y9&Fi zCN5&3nhe=EB6spsx#$Kek?ZklW3+|s_Xn!ExgnQEe}DgR*TxxYxeZRRjTs?qZpvcd z|8D(xI9~uc?3(Wv2;9@T)ryL?zVr5PZEtVUP5*ODdU|>{*cR_?7APCM2K#$C_C&sqQM z$$zFLBkZ(7vx~y&9)#Fgf>opi1Gc2hb&$xV$dmR|gB}w_kX#ZxE&qz7GIwYFzrC=T z{2SsciCcykv~!*+<4DA|^4*WoqWJoJ+E2|!T^l%0Um_zG+h)hp^~YgZDbN&~Eb*WUNKyzgM;ge~8iM%XoPqR73u%$B6|GU4dlQ zx~cy!Fxz(#ugIDCVq#*@1Yva3&w_1lpdr3YhV|b61ycs*zZF zTH^o-=OS?aqdI|K#xYxHf(~0)Xw_V1>8|0#;M!JX0?m7RaguqERTZ+ELojIIwSL)< zlSJI$TvQ@oa55KiYp#m$|2Ft|2t(CCqU>=7N~BNg&Ev{NB_K6C(B!%s4e;ZTeXW*{^?Uh#9(Hc#5!Fe8}R2kwH1VT3f7Q z{9h=yD~b)Rco|Q04S5h?x3}kx+mR`&zODC>A^K1AmDMp=u53b-GsHIv8L}PGcN_Be z=t!fI>ITo>C`2UZ2(^ivEky?H94RP z>q*^%7B;m9wA&D2Vd3&EF5`eej1ek^Zu?4(w)F}0IF7>IacY^z>WGH+3=daImpFoF zi(goa>`tAvbFJjaz(nxTW(pUL<&hWuZ^tph3f?FHz@7f2Mp8^nRUk8==FA+!f-${g za^sIlh4{jsnpt}1w^Y-nzd+1DdS7}Hu0gZen++SXTLCMipy&ooC6ZlIT}=tI*1+f=eW6Rdba?b=*t?{GC%bk==Puor#%e68 z?@d<5+9M!zd10MONft1w?8^EN(*b7N_mOY^LyR6^6GI?DSkp%LlWhEt%jbr@Lf9)! z*p>W)4^_!`7=k~>&1dMB{hslVCfk>HziX9Aldc&ZF1?ZYc+~{M3%fE44-b!g^oTrH z*9D2}-Vi~T3E|#R%KdK-*nc(OQG~CEP$@ArZJgef0kC#*(!}_P`YbF0`*7S9lC^et z#-`!)j4z|Oq~yi=`nvf~))E*g?M${^;~DE6hCt#vW0*G$EdVO``1nTVSDm>*guKJ6 zJ(~ZXF2F=rm>isS5Z5gB*%SBp`Gvj7yS|QiJ;VzEjn-f1T_k5zO%A+rV;8A0@u` zH};6hoflO>34jD%q}IF#&hg_K5WfY6Od0yb}jcn1#$RA44>|Uw>+D zRzM`P$wZK~e0cf3hJV_l3o>G1`||>a=Blqer=+0pDD-?lm^9P#@MJlw7P2s*e(_N0 zQ^C0U+&v|!g4v$=8qQnoA#iJ@6>R$Xg6wTIeH-hU^T4AwW%*H*M zJ9U(iNl!qmi7|=qm4q3(@oKoUi%Mqe*-@|shZJa(IGv|6wj=g7@tNEag(8l(FS#TS5_13jk;KoR$`qb7|#Gb1)Rd-l&awL#+$r0ERP%6lMpbpyX2tM2k z-l{13SQ7CQIXHkYplvbjTgpZ$!0zYimz7CW?YsdFntzf_hy>Ru9!?%L@F$T6rGY#z z-0Uct1kRwgwzgtYDpv04cU{4J)i$jCvfx$m=Nw7)4PjO78KSUL&M?-5A&?-Vh<$oA zA=Wo-_{;8qUiek^3F_OZ=ZP;bP5`q;@IWtN2}^Jx5J^2hzA)r?{}(Ye2_f!jR9$CD zd!x{<{EYmkSn0TvH0tj0gLu`J*VK_QU&j=10dqIfw>Va!&O?nRPyL`17EzDKGcqt6S$m$!158{-rZrj=Vp)z#I1Pfn(w3a@5X zp1HXp^ArO2?yH)PyeEokuGlICRTv{3LY4cU4NrkpiZE$KG^-M<;&=`taJ&P8ABO!7 zwu=jLOYN||P?pj#uOZIUkU;*8?#qal^>+zPePsx0&{~|rjV$~@AioOMf^gwcWgGQ1 zD9GKeX9aPDvRNodGOnXi!KdQS;U12?LdA9)ai=^#Y8GDd>u#qzQZ6N~nG>4rK1W}O%5Ct`ao2)B z>LH+N4`H>BN}p(jVr%))NlW6YffBij%GtxtC9qd+d~~EhLVrX_N$HNba%9RR);FEV zq^T;`jXjO)Wxy3$v)rDl*ovdP-!JrTK9o#_`m!ThGIy=28((>PqK9#cz4tq#RMseg zGTDf*QF;zwFL4jHvVoOXJHn@tbS< z2dA6oxD`Y{&YN=S=Kf2~9vc*?V^U40y~V=a5K@=Gfm@&BeIlem5ACjVBy6~DX&Q|l zaIS;AZ)t@k(X~XU?0o2?BlM&TC(ES{qY2t3Rl>!NzTJ#GyVYDFupBY5Kx(bTE=$%7 zs>oRumcLegS5_GtY4dZ4v220b)YR+Xomc+Dm(T~1B9kk;dJgLzMq+ppeMH4^vf%9O zv7NudK6{?1sgJ({Dw>sV4BtdnaT&gHrKk^xU80kRi0@Kq2^PZ?%pZ-!^YAoZe8M8Wt{)t6R91-_9T_ zsc9IBC-|gd+;GO@cnLi9?is(unReOl(DlPJVnkMs#t~?sVk^symJ3Ki{SXk->QfYcS-Vq47!u#?0Et8_7V|Zj^ zdxi>wrHv_dJHD;3$6O6;XQA`WfF6S3h)R(ljJo`g6U**L)@$=gfQ9fwt|hM7o_+gc zTSFiR>2T;%U)-$E^(9SR7RvcvNS5E%&?@RkZ@es;s%yqy(85E+O_e>~a)l(G1NejN z-km{G-x2-muE$WDk4PE)W_uQEh3sL^S=XZQYq`AdHdOhH1Dwa`TH5q%@{gbxk2_y+ZJ5vyGvpuy))^w7d<5S25rb3qd4EckMqTyFoltT6npb|@doCen=<;O@bzIjI zBTmlZ4(gJ})6!hhppSa=g6GRq>!{F&$_Dt{C^PT<1fjLUb1|!nXrCK@Ra5HPJJauO zXQtt;CZl-|U-Q$@B>c`l>u+n0NL|CdGs?cHsBa_h}jQ`67}! zznNgom2%;2WmVDJS!#j&GD#UDjTP>ce(luuaHRLUcE3DO?w{ZkM(*y-y;a8vZm=F= z1axqQQ8M7ATLhNLHXrkYIbo0vW^GA%l+y6gwb6WWcJ_R;txcXQAK1yLG*e1(b_ZvJOS!inJ@;R=rP6S(osk6skrGn_W`aPJq6YqLb_ln}_ zcTtO^zCbMK?jMr7^=MZKCao!^S7wKLyHr_N|rX z*%FGY2_ervU~WhvHGk&Np$ys;&ca`9b->ww%FE|kaZU*@EET}Vf|<^c=-%C|lQgp# zxq4NpeS5IelT}~2Clw4pR;>z+=pXfqR^*bE&(x`|&eEGpk6Kt<#6}q;YJ*SBlBC^0 zUIu&_)&K{xCKaE`Ob=~O;89k@IRm-5K&Edz^y|s-v55wo1{+Wk5P-X<3ikb?W%pvl zE$=o{A4`rO+UHp8i^qo|1(z-h_tab496ldOr8w@LNhl{Juw>A$Sx;+3#Jl-_al>17 zGH7KM;8T6uf2pvyzKyL5CxlbsK%_`Hf^f8&RW9hBAYt^fO0Mj^rO<|%owbRk2eRM1 zYLG<~>SVUiq^eDzc+pr*MxJl$RJ~+~OI?XtY&hfw(UVdWhe2W8Z5Mm(hkt(?TnOx1 z+5*c^jjHu+&0o6~b15OYN33#$o5>^=|M8iqjXL){q3ADnfDw)Rb~}i_I(l0$4K=2a zU*ZA&;N=l|?pyOwSCxh7_|K1^F?y@ON1T&Y`Lg`#_iGTnrLWT$`^o35jJr3tz61mw zpl`9&YPySj?;uUv+BjWFb^ZSKz5&=2?7FifMk@z}O&J?4Naj))#@WHH>f=^PU-L65 z)ZNF+zLPOT@7p>rY;^AvS?_>2iYrcrehblz-0A}vs9gEOj;kNr=}GaoGqnuGF!f+k zQ5+tN)43$c9JV+=mOsRW2XL9->m7D=!EA}Pjxvd5d~OxBD~40%aHf{0&aTc`R93+~ zO?%v`aK`z^)Xd<4dZoaj#jWV@KzfZBWQ-E`T0@1vy~6(Cq9?|-TYDdvJcH-#yucqW z=fe)a$Hftg6sjViFRV;IPpFX5ve(317R8Ozk9=gzTWA`U3-n_-a@R>(24bK6L1C)w z;tCI{-T26X)(2_v{l$!B&h+PSaC+ z6pQf+t6uSTF>ICnj9Z*Jv>7|rev}^ighyeI)t9hHvxy&7#o87kE8Q_RScff1iEX1U zjPN=5rO;o1`mRu?K|{~I#xIrNP0VSxk=vi0IQRu9z3<;j%GHfYNuiSVn8xwY4uNm9 zI^a#F@q^pOM}cd)CT85qDFhMt`|m%ZWYDuU!7ZhL6=P{;&8gffye0zKExD838A<_ORdxex`NL@K@Up6?ZNB!mt5FjQ zs{tsvYr`*mtjRx%=vI;jGOv|c-Hon_+cO#yO(HX^16obM{U1T6Ji%E;x2HPebEb5! za4CUuTb}fTpI+w-$&?{GQLuK|9mfd|F|X;mD1f4(TYn=pa@OZ{9loPW_>M;g^-W8hC&?F!c`_GUEch`o0|g#jM@`q_)#GE)p_lSsxH}}9 zbLpW@DzNZ!3vbMfYf&=A^QuA3k{ z1!-eQzNcev+>mMj*XBH>L!BROdpe1`u+?M{#&O-W*G->exgGK=|42@g%oDO3;v!uG zjxaslNA%E*xm!(BcBhix{C;WE;8qbnduvECnIRt3Fxhn{Gp@0w&@-Mfw&!@LQE79b z%kf)~$NYGj(Xd%hC!uV4rR&^!Fm;ehH1(YG+zn$`DkzEfKvB=xgqoA%5POU}oOU9Y z4SK1uk_5{0+N??mX9`Fj-v|t&KMarzAwv@kexlne4zhrXI1C8o(1wC*|NQyW0`G~T zgoTP4*3iJN3gYtdtcX4&G|}Z--iFkgOzg?-nGqI0RUnlTo}Yztn2WWd1y6DEqkOJi(K7~f0iCCtGc6h1~Ifh6Bg{Dq0EG21fYLGmaYCD)77^ zO|#(17$WeFKH&-&?R1S+S822Fi6IZ1^OPwJUe85#7J+GfJL5WNTcVduxhxR2Wlt(f z8fSL!`{L5X%psfpAw^-zk;J{vMP>D1wefouZvo1>W0|oQGim94^_3v@2tT_5sWBnu z!ZFnaYBR|wU)#+eO>Q5OE4nKZ>*v6(-sa%=Ra9ZAj_p)aiK_CBrXUr4B{kj7X0C`1#Xt;>3ts ztp?AAoW5UUk@Y+Jq8;jVSeKb}200Hy{RYLfX)KZPk!^bskNgi2K-NaKf%K zDEa$6R>xzDFCL$_EBO3$^?wu7UmaF!viF7fwu>lUmjR8^{tbdSA^%AbnHgh52qIQ7 zGm$;uS0{Wd{&Y{@2Csw74F4}(iv^=P=N}&Um$R`w{n2fke(lm;VpKq^1X(@@T3vk6 z=LO0Q^J%a2=@c>{ur$Uu;GqDoO}oMjI4pPHbepcY94UG##Spd?=%97|zCEKm-{MZn zuGi(zaad<5dEwskT#lFNZ@qF*Y4frY5)A_=6iPLD-hh|H=3(6qC%^pUZ`3gC2n{Gy z&$E0wP`hpqPAOJ2HzM6x+?x63->9YYqK;5Y^z0#Tkv2y0FH>U-jh0uvT8?pBHI7qm zf0RGoyE?i&y2`s{82(>j^penr+n~;K>iZ`1=1-lxhw4H0Vh-I zyGVuutjD_L!hjt>&n~kCq&P{mzK-uHk1&U+wAp=$emkvg#jQ39j$rbu3kAfNuO8BK z3WazaSBuev;RCL3_ZixSa+&~o0A0cs{2xD19HqH52!8Msl)e_6Wr)H=U)Ep962J* zYK2dXsF%dXnm#v?YEBksBOGLTao~dKqh~+ZgF^OI&=(DNcJkaH#oUk$np1I^{=4g5 z*egMv{fXIGoybU)-QC?}K;Z1=iCZ_MP~NfKsN8z>nOB+2B+JGCgKm>RD~{AP!oT-i%gF<*+=8u5Y67s?V>V;|DpH5s_L7t!8Vnha@h@zFaSHvmu8TsO*{?&ZM z_=c(;_Ru9z1M^sd66KTq+NQAR6*B@$m!}WE*cjqC(3n=P~V= zs+1pRWgdNc`W_i!19gL~Mlj^ub-r}7E2X^sFHz3YC%$b}XJKhsQCS%(UKd^9O3y`< zRle0`k>D{7@PhIM>-7Vi>QH5>FliUVZsKcwns4G%i%010DY@+0FG^fAP|Gv=x*LMn zE<>2;=iV3pcU41~Ij^AY$!aNSY2{39UVTuZ$``+9Td|wBjZq>NR@S8%S9hIeac{J=cZWBa-t+p* zS|qz&IHc>pNzwFanF;!BI6Z4DFtOCR2Z%$^V^T$;qJT{UfEVP8Ff- zVM?g^Z+BW+If_%sIZ1+4XGyr`U7P<@v?LZ@mlZu%3D((v6(DAaK&bSkB@($ z(Ns9~=rC%9mAkaTJSZFvu7`GKsdyN*=FD{4J&GPkam8|UO5OM@rp=5q`}_MHNnexc z_YS<@c=o>~x%al(viUtS690Lo?w&g2m(4KI^Sf$=MEdxgqU!ZMs7lxoEp3H)b7gcV zdy(UYeJ-Ae(S(ZD*zbR}u%5WsMlBGe0TdKX3gN=T5{Mk2r*?EBzg%%@rET-T)Wk)N zCi2|ms5LDu*#LnBfD6e2zwQFe55o4}`vW8%_mWBTl>0Z*SR}{oMA&ix;iN0?s`DtrIXQuakX% z0{^lZF+tBhyOe)n!fW9M^LSM>1{!$tcsw0)Ac$b)9#kIg6?|X-RzY_J`+aZA{Z9@C z6c9CF;x%WE1O~ek25CR9`!al=k3CW@;GQ+A*bBUYK#CCDRX)jN4fu%0=RVV^u%mcF za;E7={|x}pldJmgqV!Nj&wc(VxSetuI8U+d@h9Rd--ft4OXONuGs=Uf!=t-z@J|{3 zNnm&Hi2nx=cu$m#8DR?)VfM_iB2}M5hg}-u2E|bZ->m%caelPHJ`B$)`=?r2R{fRFFv1K zPXg0qANb!+{1*3WiDMD&jpv0=#d=safM7r9(dWcB3<(G z@@86m9APR&O-<5t@zA%ZJG&Z=*Ovr8N|Dqvb9Vo&oXyq_?GCr{qWg!ckaU(oCyD#!XZ1uiaXSw& zIvreanmXz)ZdmX;&;0#x`XA(ql!{b}B#NL*J(#JMnloR@F60-*Cw;^HGbkh-um(YBKzX88cs6<-2)+JAKrjTCX6UR9A9Fl;A?hI_I=SAtt z@>L15&~p+@mTzg#ix;Cu5?Jpkrw~Ta8YzZ7fpybloq(gE;e7|rw5?jOo2QW8oO`@< z@$`tB+^;^3;`vfRw!(_3Vam1}`3hXJ*>-)OCZB=23dc4?oh}ko^=RW$;ovQf;;5fg zBY94=hdpBsP5hM{gc6Vgp)ZB4wUus6(XdquM)wtf8RF8_gBSke9N8rZeN+~0f)TK5 zzW1k{5>>j?Sn<4zklprckQ7UoOypZqjQ>a03jzI^gn1Kb;n2kGti_aOjQ^G~^Y8UFFB^;CINy+z#lBQ#61T{bO61 zz>- z-c8pI^93**ALBX*HFCe(@p1Wz6R%L^71&8X%14%QT&HR2)twZryr|aC^YKO%3}<1= zzM1|IUn^NY|Ezrp(r76nj-?!&IBn~o+{wL-`Ey;q75wMB$RakK;#`?_7eOWpVN{%LtPX#ZaDg~`xouRT3nUDrs>AV8CF0g?3KmeaW4#Y8f;`)nV zAgeS;4Y&ZTHgWF@6*IJXZFDf?Rzj{IY^qI?zq}`<%Q&Q(VE7^vl|<^89TO8Ll`yz~ z3hwo56=o)WNu*`^_bOeNuR8tt>Y35Be(cOjK_?WO7bg`r$Q&gqaX-E+aWnO#^ht#? zef4@CsKTC1qM!&btZ?}%ODSq@BK+sC1vB4P_6p+!UA{xvsK}7~KQy*<=`v=CtbD4v z2$ubL7kUjR+8;(5F&kEPuK=Mx+#4`HC4HNY`gyUQe*wY$6sWN1Jh|qimHQ0ek-(Fn zuPUCLe9GiOi^DHuYY%P+GlbnR=fLspa|}6Po$=fWYRa0KqIBsstPJ9PId_E2>g+5C zv@I?3l)_fzRu9jfHlEdze0^%d1~}8$s!RKwz29}^d$}bti#9z>G}i|ny1DaY!_=Np zlri1MR1L6il`jixzixibP4}SQsu;@%)8B5V{Y3yFW+u zEyXT_r5{(5zB5AAzRkaxI9b{=Pp2w|A=`YvT5mwk7w~tG;;BTs;>+~4 z?BSsT*>2sk63K47;?@-QffLqFFz_WxP#`?*M>JL!P}|6kHgW_Oq2b3CTS1dDyi-5w zW?5HYH>TytXc|xiShct`0;KVtlrU7WU-H9Uk|5^@8Ng5}e00=DxcX;%ThO?+7H==! z=ju0bu89%>TudF&eYaPonGD>zo`d=&{VeS4P$(6_b)_cqQiAp@^|6#WzJ4`m^V5L* z#oeIVE?o@Tbhkr%z7`k`3y{X~|0eyIpOuw$x9d>6cla?CjtmxV26b?*6NdL~5uyou zbC*Lh;yO;g5OY=iIn4WG0mO5CikEJ0F(VUq=nRhxH{208ut+hBzO6*F@9Dkxrk}zBQ+=?!sg7tKe>|Zg1kphoLF!@Q& zraY{q;p9#GFc3&V@#Y-1Qk_$kj_a5mnfx$O#QFo-9e`_MZqTI>*kqjui$q>CgCpo_ z1yhz<@cWmqLVp9$phk8+_UgXLQAyMa#Ih=)N!kv`$=PJQ*qaUKW@jz7x3-Rt(O5ki zdF&bLH2@fR79_8$SEB}?t1k>$<|-I?ii^=%V;i+Z%eqBjp}#-ssd#vMFY=Y^*arp4 zBB$;^ele|RXybJ=q+h`T%B!nAzez7>p6LO0%IA-G>6q!AKGhIQCnqIQ#A$Qkg1&5s zW3L=rtwex&t&QWG!pXef+0WDnrxJ`1Fd$CuOr6gm*bUg}uf$)QpN5?z&=&T`4e%wk z!ti5r5?{p$3o|L=d;!RfXwg`0<2y1uNJBRAx`f@i6GJHauDLldFcjI?z$JXg%CPeG zEkq=t*VAXua&y5SK7al!rekdXLgU4IztNw-!{uo6QU#21=+kIj)WN0gQ%*9@(TmJ2 z8qlnAw?&4)rVxyK?;J%tS00%KJ|Yg(2QzC)t@Mnkcktt=xR9VfqOeV$@}{`{%A zytW|jLQ;GRYOxb&JJyG)%gu28+1cK#p#C^N7OcoHZ#?h>TS9ph8sQ5~SMrobzu{}I@h8#gAbKsYmGtChCj zWL5~)H=g)eVOB~y%to7@`Vw4YW_#ucUG+nr?~84p8;=8-!ALMnKR{N=OaB4-s` z+Q~JZU2>cvfk&LO{HVIuvuE~pcBq(NDc#FvVdiZT zKI3b!BADXkZVNG-;EU6*C*L;SUlC#2e5yHb3Q$OtuT6{7wz;_y<7mPIki$Dt7v1T^- z9bb9}{0IiAo+pvgI7$E~0iw9LxOKFZ{+sdYZ&WBkrQGc~IMm-3vw$MjF;PHwH?9+C zOXT*-#hw%z3)~+Fjg*2*{Lm14q-1>}si>i;1o=ffn#JHgo(kfEO|+A1%o_ign$iMF zHGqOIHWml~vVloR;#2?8D;wx@qlpGldR{tGO)afMqj}=>S4B?`aq)HEGZW!1OGFqx z?3HJ$m43G33@7#Fq{Cl=UTC9Wcg7XAduUsgu&I_6V4!Fwk>1 zCLL{0@jzk?3t>N_0AdKJ2@VH2LwD*0753AC2sosV?=>22t<4HrC;^P^w<-Y&NFq0% zO;bpIQtpHgbAejyIC+68A_;R$bqL8G6%`4L0(hP{Z5|vxn7P5>>=p9bpp;Y9*49?4 z#E%WPpF?yh3|Nk;UTgwbJ^~bPT0LD71w#0v#5KO7&Kj#em@-tm#_Ao&0hl(ISWzp? ztp9ZLPJzA*U5mE~`^Nl(NpNExP+gWTO`8d*5J!mR;8=kpto= zmo)UFL&^U1OD9tOPTL8HSaL~1xji|vR0V%T;ig_8(hNd$t;i=|;+zBJ5jYY#h z1lwH?h^PGDU|8Ud8ic)K?ujrK7Q(YJNE1Kpuk)Hp9K4Ai42CqY6tdO$ybqJ=9|!!V zCq@0kT+f8Xwr7fdxwgpQGb6YDIGKLsp?$5*>qXA5qvIU>RLU|@E#suiX$jNmO~5p_ zlAqb}fx_7eiIicS&daF(&dSa{qOhTC6|>D{a~}*GxU}h_af6Pdt*!_zd~c!@9+DT9 zdg+|f_%ir6S=zj9029*h``uV8lpDGl6#ad-@8IRh^=G8K#6)ovKMkY@^-Pt$Y%vfh zAG^PgXBcOSQT(mFxA6TGgKPg{Aywzhlv$h~Ba!Ji zP6F6h)-JtHu?_}td{98haEs<$Em=g#FnWH(@?$>JNZ9M6;xfQji zFIyig7hq4ofNc$2dqQNe7saUIu|)OCKsi^Jb34C1k2_FD{89}{WirA4?e=?-&cDC@ znARdyO6@capjomTOu<;@*cWFG(ayU~b?9osA|2A>ax9iG3?+AhN6YFzYQ52UbA`j< zIxCE~hCHO(^)S0ae?J*YTnu=eB%`beB)feszNfEo+9u83F3{&cI17`LD7GOR8@l&I zs50t^;DXY@py9)l3MHUKc(p=l^6A@>yt5z>pYU!^M^=w?Ekv14l5QYr>27Km`VCpy zpG3*?1BUe92va%_mc?vtHCQPt5hwVX={k%hh>wANt8+|l!x%;!SPCtfXIzt@`pSCK ziaNRLrT&pRdD5U_>%LFT!ap`GDY}-{0@8800ZLSbp#0K@(4}+d3}!=nf^045YA1^N zo>%H<7)G8}P7NlLUAaX5N|(W26E+2QA9$8{9;RHR%S)$5L#j!l_G4EoZ4e&$ZG}^O zQ&bpxm1{reaexLgtxCjV#g_NQ#f7l_!g!tc$d?FmI2-QC@|c~d$i}I|I1_-^w14iZ z8_Ixu`iSG9%kg2#i>B{EUqZY2ACTDLXYpn{WG3>x`?iNlA!&dsvg3kRJ%q3sz4c5VeA%(y^4*Rq7zaw`L*j#{vdA9vcRu76pQ60$-I>k zi{_^z?QRr3jc@SFR`9XmorJCyFm!(zr1g-$(XltrSX<@9MX~+J?s=XdTUr^L*QOA> z>C~qM{bXE*RAEXNiN2!hgM)AdrH`@;F96>{cKGv1)7x-Zz)RGts^+@nj+2z#A)#>P zqHHL{r{(0@3>^5yG3Pv~?~qjbvnW3LE+iNufxVgn!cmFPf$7m}vtKV&d1z#YaqI9M zR^fUoV&oS7Y!TR@Kya1>D)>OW&$(4svJS@tLP*a_;~sYRZwJ-VNZ@=by@XHY~45)r;2dY$iSWJzf_!8l4}_S;2_YOKqja{KVR~|Ma^u!^+?d2TPEe`W z^-k0ok-5YlLTo`YKb-g(AaDd>u*R{rOv(eTnUmiCih>SJG=SrNrI}Ne81RC zd%pQ{@qE9vX}IF!n6$M*l;2&i@byeyRe5>&={kG-8ILS~`Gq%Q8;gV;`KZ8Pq)SvY zsF}V+<}VGeVX#2a*iA`ot#@p)uOsD@o9^}G;$mvt4zU%}%HQv(;H#^v7vI14-8r}6 zsv!(G!YM}+z!X+GOGvMM!uf6gwX^7p%$PoSYC~d$^(v7qf)QV8L-$N329OV4GBh-H zF|13p-nsno>le@{W!tR~MLtznEE{ZpTIm0#)#4Fi44*j&i)BoA&-cp)3azq%P_Cr- z4I;!V@v(3-*ah^%`1f|;jJ^xi^dw7rBJ(a4T$+&jC-kGSkgY}(2=A88{+AQ9Xybsa z;5{wXkJZk|VLQ@|(fB*6K+*Wj+uL<__A@|zP;JcfAD&$*kYpv5IUJtuqB2nv=!@8V zzY^7ms%SRvfRfqd>L0L=q%CPdjn!DAiFS~*myk%^Z)?%08cuyziJwjEwtHJkTnh!4 zJF63Q%Rh#!d8}q0z^38{yYadO4id{*TS(2U+++N-w1@#brl6om0!31*L^7res;@u* z%6~!bL(Lhm34?1WE#sqSY~6w10j-aPlhf+=hDbbkgvW zSiM3y;L0)uf1r3%lF#S)+xs4?EA@Y4w&AuVT=}|6PuukAQ{4dPmxwZe zp^xe6>MDgCSZ~aSL`&^aI@57&lgyWkfNkVlNAopdO8T(wDx^CQg^yXr!eWWdk}KKh zX`L1L2WNaNk{}``6I{>z8D!$o6OFqY50?B2WrnCiH-{>NHxtzDgU42DnMsLZoo~6* zo$7_?(y>?TGTjvwyHe#(wT{D41t13p`odhHTzBWqxcW{^CRC7Hv9Kc+3^cmj)D}YW z%ACrE`M6*)VUX2vZXk#%wqNO|TyvW)*r_JY>_eWpN7-!Wh?&ENFHO2jwBAmPVIwc! z&z}I*3aEFxd=NpBCv`>UF{3IvViysrry4gAu&Yuex@dUq;8o*!UmMc|7-(Q=YHDJ@ zu_f5bJpoTu3it7CTe7a6Kjjg3g&IDx|tNvWSSA3Xl^_JcWls{>vTc8qVZ_6Y?g z%9(?MLl3a@^&iE4W!(c@{n|;2RY+4jW>9Qwt4^2B=0gUysEjB<=qdmco!PHKII>4u z_+1)j2EKOLG=Pc~mIObYE!vu zB8m#PE*#3i<;XqRUp_f*9Pq7T>7ZHyS*ge^q`$n0EP#$oul!BXwdu4TdQR~E|UqSXglg| zev+?`$wYz9&q(HU1At~Dd__;Kxx<+D`KKsQ=c4Jhe>j1A#awu``Z(MR{0fdwlUVPm zzGqg0+Gt`#4y|?OD4NMm0|9ZO@I5jcf9~?k)yTN;sYX1vX#b3O!s%;dgi5B4;fM}u z{fk{@U#K$MVVk4e*U+xeZ{gzseI#}7kuo$R>&(OAkb~B**OF{;$1;o^l2gd7O@Qr3 zKVb2xBv9V%?6!f9zV*beQXyA5ECae?yG zCkf(3plrJH&{_$8B@t#yeM1%2lGOZn{gT8RYeP1iNOPO;f>Qt%xSu%a+?!XB62yLrKmy>whfA3r9s2aQKSm2p}zLj~emCsTH@y7h{ zJ>`;hMGWyj&h7zcEJ0ihb&Q&n~Kp0$?`=@XM1qAX9c zI^R#wwhw8N1@?4NrgZVWkBpDl94S7S>j`AOZ*9#5I#xwN7Xx>f!(g2k&Z40+9}HxD zj->bNK`lAI9KT_EG0QU6N`2nt9%kGMz$6 zHM+?DFr|mP97I%+$|4E&C7vtQjgz=M`dT#vOe_~w5CcoD8y>hW;_7_E(2C}rjUDRk zP`M5s-R>P6dJ)_q0fH9$I>x4?^)mZEbL0j{zHLES5Rm4`fcM6~a< zx&Pu{s0%0Goj@Iy;f^h$u+NXucDC;A<-R03{Mj3p`t zG((%YIU1aJRw8(fyFUHacrzm@p~^Z;+(!3Wie-&MvW z+8b*kKyicKaYfU7dD^^L6(m)6SMCI(x$hfoEeIs>!Uy=O|8)? znxLmWInhIX_x8LkEjwXYu|m>!pRMq|0`_&{Rt3$QPF3hJVNU#+gHCaM{m;s+E%=kA z{hU5_sxVQDzNFXbqu`XdVDt(DZz{#BIU=1$cW2f+n@2raCWKX&s}P^ces4M$-P$q# z01AF<=g=#LOgP6qI`ty_EH`8C*hUf9wYifAc)?7TZl=w1M@GGr`-$|NKFE;KPAw9m-N zy@+!f!^AByD#9$THDC(xDLD)h>IZ?ZMtpw zmZRiVZZMYm?owxP3W#(@SB$*Xm2^U$jPFLDHOA0TIu-)4t^(ol39ACO5stptH5;w{ zP$5c3wXgHx+1XDtqft|5X*nC-1QB$s>HW{&Q+|Oo$l$mbics~Iux<%&bjQP@AD;zi zxLhxjH8Ho|Ip6XM7r|xLa2`i5OO(bIoKK-d9j#8>A--|(sT}6r5#g(3{yh6V;!SkW zskf9nrU@X!iF&XT{r<@kl-)~dMhuxHj}a9gO(Ymx6?tMhW%dEY+GnDlEO6(+GZA^9 zUD7@@NkKwNis9<~2GOTccnuJTpC8Y6#q5bO>}6G7vdhA6c}GTKB0+8KOH~i|i0@7R zxinc`Yi!YmS_mbcv@|l(yiBxWY$PFO=Z74+ep!)61POjENy^Bzfe{aLtELc<%XzZE zbi#GAmBre*gdRa~ylm?9nNEkL;BZi9}@2 zW0XVo-USpLbdVKD~bkc zSFvgyMrNXrqKa5eL3!Stcw?@XF#Kui#V_M1?X)eT-%dta^Eo!UDU7#8UcA2Xuz}~3 zISHOa+Hu$qeBwQI7;B99(VXuiOQ{MJx2|&e*eiG+hbchz%Sfn;%n5pDxbv?8M2X=` z`^R-EK*{165_v15Z@x90y^GgpnmkudUOpQPi)pjJIJeFrVfuS^VS?YR+x4N?Wcp(v zW8dN6>!5gl)=9?3VQY7IhIGeM|BMXNX%%9pQ|B*`HI$&Lmx5V?&tR4C3rHOUb!XZ0 zZM5g0{abO%Vv%E}+R5ziWlqrj1lm6Bz@6*YI>qv&lHxGmj!7;>#=`)ZyZF6GgJx~>Fd|;#uVP1&utdyUK@w0-~&Fj;M0leZ<4+j zp_~P8gZ_qYqOUjC=L?{NUqbeWq@)UKpkJ+)j?5$6`@37XQgNhRJ*jrrlQrM%wTMkV zI>`pp&RN+F1nhW3DlF4+W8IPg2?m;tem>|zu7b;}*c*bX+jTtRV2=bs0cR5Rk~h6@ zoD0qAw9VB%BVeeUX8P+4imQA%@K-iPbX2QLbEYgTlklx|=;XxZj2p2;$X>kKUw z)Rk8gDYGFw!V6Frqq^1vKv{ox9<5e{V!I9h3@d=Gq|eh{KN|CP>Wui4E7%O-f9n8M z^OS>-ca{m|sL>b-X+abyIKy{ZkKynt`mABuoPlc0f8W}BL;j%PV4?^~`>(Q#byObB z$5*Q$QQ#eGKY4!K6-$@9b*r{9hy!?k9ID}Sv@5bB*GgD0T5;`rr{HB?k05(OIY^2y z7!!=F>26$+(QxSICXAac<}*Q~gos3-+pr}5QOA6Ohk1YcJY#4qBFfh1{5-WkY*Tyl zi;#V^V@l6!2jx#0X%#ao>IXYRVB!C^x31Ex17a$8xx|%%h|_De+J8b5Q7yM5c$`T; z7zymxUvqhQrIud5;BwY77+P97e_Ii&ROF3(o$Pz$(V?U%OPGjuCF43I!M%akd?pWI zb?u8aIJm5?okR5^H689;x3x+pr&S0XTpb&^uN@j58Ts-GL8I;wf7}s}j36alN6S+# zbTp!Ie;PL$`xHbLqvHGe6$bePPCC$0%@Sh7@o$A_->5#iudSU@Qa5Vl``p+6XK>yz z$o47yd3$NLe0|+Ke`nQO#rXbslkc|D@oZ4osv_A1ec6&umykz3=I=K{4KJnn>5GoZ zdG76nJ>qeXCP6N@KcuL_U;Ew;&aa)n>6$;<>oWo_LZWJFH zy~9MrA^$`(t5sqix1UFhWX_$Qf-MceI^#2#C!6*R7rnmmy+4cujznmf@xCUgyug}$ zt2rW#?zoSgoRd=LY7>tEbKe)VmE!XHJ&7y_S65e3l^H)dHX*n$U%a8WDY7)OM~7aN zcWdqX{CqWheUb2O1;oH58@oHu-VOmi7+2|Y+mx?|bGs&D0{0bmvuvC1YdnX9!KNLn zd?7s?!9vG#Hs{Bnw}z)`e^OZes&+wcbnQ}gX_woWoWgj;G0kQXae!Ck9cUW>G}oW~ zE+%ppgfH5#v}fD9&fTT)4Qm9~`S?6hZqB>%W`|b>xN-@OegC-L@d&CeDT#1OHuoyP zlW0|AKGMIeKn^wqGFAZIDOY^O2j_}oL+Eb6LofB(qrq%AVpu&A)FtQd!aT4O2Y(w$ z#5bh$9OGSGgr|1T;C0tL%|%pI9SC)69HrFDI4#j@r5aAyTf-e_zU(nIV26WlJjjA6UMSt)WpdPRkh;- zVzCGjXf$4b6TbH-0qJM9`e4W@8OLr#W6w?Me@u}8UlxU7yPt;TqC$R{2YaSIFwq;C zn;Qa9e2c6OPudW`r`_?bqihP)OsC5mI0fiQZGd6%v0i4!$!m$pd%iW3kE$UguY$`U z2CpX_B*O*@8U@pNp~1Oq4@yUc2b&tLsaSpaUVowCs?D)E{e`WvXv^2-ao4_0t3s5- zHy;zPCNMGUgbvI>>Ee14ElCu);B?)YabSjbZy_XDf3x(mc=Q=i?g5~q50u-oc#b}V zvksdCW5|iTo~^%`>6sF=JF~8dLP6gQ^!NLqdPhzKEmxuE#_t{w;BJCsEyba!lz$xj zf^SI4YpPW&F;FA=&-eo%|g8O*%Qkk-a*XbY~=R99tLiWT! zTpo;H%WQ)MHVV(|zB&1VTQqm60##2MFj4 z?7voC%3mE2B{D~f(xvV!mTp`cl63p?e}Xv^PO*u(pqUv{h1&<(-AhYL-H#OAKj(zj zS%DcN{d;mUGybe);?*74J7V9#&`zcUmcItQ&!FLg@S0leRjqj)*StTf_d~mPW(1tIV)*OyS##TO1hTct)R>rGg9e6H@LcD9@}mP=C6ioX)3ml#>BOHSfcT^c<=QdS z$Nu~Uc5+0C*+QS2GXCms&;ld=SqtVbm4LE9!fK%1qceG$Q;uYomo* zS-Llz#mocrd>}-GQ_z!olX*-)rnplZi@cTp{5VNdhq;0&RaSd>|GXn{ig26;+~s2I z;e~OE7k=-ayk)%M=!Hma;==GZj`a%=l9BWK_wPmmZ6e^G&82+tQw$H^kIb;gTp`BB z@yz06Y-rB9L+>-w?LC-I=i8rZyPYbOoAfkf7tl8QL-oO?Sg_<8Wjv`%;0&oSlug{Z z0ivHVVJOc~t|K5??cFXAmU`a!8vNL3kS?{a64SP|wr1z*x_O_IxGNUL_9s`NgUOpb z%qpj7cZND+u?El2AXKKD?*ei{x=YlI!!z2eV_mL{a82ApaDtpSS%OE<4}6$DEA9pb z4GmiCy>MO5m(J}@?$CPsI07Yq%>_r~rb zO%F9(u_Php8rFE3VAZDrb&lVl65X8DI`M_$;fv0V_mr6(HqaKflh+tOExy9^(xqqI zq|{pIA3fMf5*mJ!2%#YdiM-#gPppLKiwWznvo`kMrp6)%j6&Q$_t0}m8Z~5oD*W{Z z@;i+Q2zJP+sPv%)FlAo&5X>5_g77EZ3t`HLf<bLTgwnA5ekbl$b;+F*H@scy-OjZo= zAf0q{bhpyd(zp|nfoN!E{r)e3W#USEU`t?LwJZ=X;rv6^kghp3&mGd0E#De01DnIE zh7nd`4g_Q>(~F*mr)t09S8eEVt-m8iJNe^JJt?*3hr99lO~Jz*y){(!IDtEMgq;2+=!IT#%s&55`cgrCD|U?T0w?9Ym%FIW4P znf|7d6xG+K4Gunx7*T!gkkCNWF4-M0*rXUX7Jx+mqp;eY=Z)yjWdCO9F6-M?I==Ai zGJ0nq>N;3}ym@Fkn;?8@V*~7D;GuQPjj!cyJiJY-r20cH|?A{u{G_$O3rS9w~Vct3;jxcQ+~UipA*SZi!-#2gDEEDMMu zUWWgwbXf-fD;o8lueEw4VDHCc0D@5VKn0ZPi~X9K(ZRue9sk5IO%v6+j0u2|&4>Q= z$_*~E@ZE$&UgQ>{ouQp!L4Wxe8q0(j^c-wWIrAPj*OBLM&CE7rC6`^Tmh84nF8Cmf zteUBk3N-M1q-2q9=gaJdI5)RIUf+fPUYcWc+5MfTS5yL z)D55?k2&X+E(-{RcE!S^i^6q^4O_c28Rv;&3ZmQOUlE@@_aRP~=eA6pB$>v$`1FX+ zl2N3!vsyMO`l&SLhdo;E3!0&cXfdRbk98J7-^B1n)l||pE$MCHuiFZ{i^_}G7xE;2 z7V}A9P91w(QwI3}$zM&xn;vX)nb!yRyG5*gl4^KP-;<2O3UFJ~VLBci?Y< z^q1s1KRW}aA(EO4m$|F1(%@hzcHQ2sgDOD z@q)gHuZTuE6HT%BH9hBEn4O5Hoy_}2!T42~avC~KIepddtn7X1_Ic*UX$*N+>_-PS zLzhlKYRzR#9DbEJpDqVC=Q8P(MVtBx53t$15Py(H%E39Rba+$gKqvhvR5^Ml(r7=~ zbf*5Zt>w@`1I{_Eu}~YsPFUHce;v&9b>oT6$QwhuLVEESo6p>gEy|HLJ$AQhKVUFN z$pAnf?V@m=-wA?p^c%@r?HU-@QQIwVjhAC_|a2Zur3{XEjh#{#CqT znqriS0mFESEJ;;HP~bw(zZ?( zd0YhD)=T!@uJ6vgCemd=bOWnK*t>K3_Pa#v-+?8sVOU~}&Xf}o^6vx!)%kHx8aPIH z;G-uW${*a|>dvI}D;{`4U)(SeRX`YSMuLaGK=kjhwH{NFwKfOxysWR^09p`J1{Tw&irv-F_4vs4$}caTU8)C!~q!S20I&e#Aca9&|jutsKD{ zM^#)cTa0d4CJcVgSATi)q>d}T@E1?=YuURV_PZ?p1WQn*Wu4aH^3wJio)!=VtFdH> zGZW8Ff;yWb$B)4_2cFn=@(vZF(~3DsWxJ>smcoZ%YQNoscusV*4)uLdRa+P5%w*QM z9I^H7ug30~Gos&CB!iV9Rpg?4%*sHNg65PFxz+P& z-cs1D2uUWaL3|6Q3QxD6-!SD;B9+21v+7F#79P zYmKj9^w!vU-ThAcQME8aCj2H`zevh|0MElVD|Q6z7`DJ@k$rT}z~w+rk{>?xVs2L! z%)3_-wRDBAya%@|>+A`pKD&>n{kvNbfz}d;U8!r}`-hvGn^X3RDALXB4>f#wd3hy3 z4O|NTPBD#cu?y;PY|OLIlr@uxK)zt zoi^CSkLcIfJq6!@=jwC-mzWc^84 z6ZN*L%zZI`wzeDr$v0oag~sj&Zm+M~_avR1RT$n2Px%q3p&>$0jUGAdY?rCTywFUq zOg~#CURU}3J+58Gmye;?>6Cppn-;&F*faDgQO_1 zdlG0X-Gui*M3WF&ungC^udTJ-s}EbF*6CNLPsMX`LH=DqMFl4XuPTcjfri0rmg0(v zjcVE)zwS>Xgm@?z3sqmp!u&9E^x;4Gq??K87*g?j{POqu2rG* z!>UX2rSkQz0yhppi^Th`TSYN z@-pD2hdH_=d9c4fq`am^zb2dTEuZmx>E4Uu!hJZ-Xy_n5y3$Y!i~+HD@7wNDuHo;J zl?#9kP{^;`70fY45x?YtBN~uK!neXGuM-sH<)=3{E3NNPs6DcI54o`FFEP2h{1YZP z<`@vbbkSkkO5vs51F;h~F81_jw}i0|>Cz=Ht0%NvS7Q9`xo4HUrCr=~!O1%1Jd9}B z3Ee?Ff4)tB!8TdsNtrdzw2*q8AtHl8Dx9pSN8$*!OM;;Ly+_I-xNe> z=?zsDgx?eO2)@K*?`m4+lpxR_&^jtJl0O>!aUL*AoB}|EX!jb_X!Rq$7DAtA^{IP` z$pC1HZ6l?{q&z0u^`m(|aGFjA{ zQM8AOQkvnd?!bvcYYt`+vh1%Z*ep=f_R>07Uzzd9Ypz){&7NY(}`fw^6q(z|2Kg%yKp6HUZx#7 z1_|;TdBzn_MrLMOO=I*%#Q^o0U(**UtAB7Dk22UZkjXW#zKJ1r6{^4dmS8)<_h5*V zUnSIycUS+ekd`N5PAdzuSb@(n8;+YnHpvDuAf&7&-o%8F-yWZOFULnqDq~{nKcrV| zSd$>A44Ng;-6qnI>n|~kTzAI~!WM)XFZ<1dgGbaGO9-$499~>p1VPcG8cRj+{Zt?M zOUAM7HdH3=$du;vEy_{|K1A>oX!MTO$9z3oO_4G%mBf+Fr#SLZMXa=@r~EQ;N-*Px zV5-*&RP(tTvS)vaeBZKe93x@r_nS}Ea5mqDZ0kRhRHO@<46@3>_q}kz4Dzoz*G(r4 zY{f5{#y9eQ`dsL9``M#UV^A%ARBfpTFX?XNuZ~PjO+809MKRU=3bq?G57tsAODW9C zZ*;e^bcH||;{JU{fXmiEFe}`~EGK?zdq77;q{7q=kQ^r?br|GeLPcIUQkmoPkh23T*H_I{WuE=yL~Ayh$_G*FBI zRKLJ`dk5@EY)s|8;a9cc-#(s&Tv09Q!j!;M8KC z{lrVw8>9qyrz68e22=##%8aO9CGdKK#gjT`JT}T)g7<{Z za^KGtk1QETN)8GZ7CE6ej3ej=N~|n>?ustCBKng@*AC~<;7<=pNV)VoS&8nJ897Gd zh}%(%;pb6%1}+JhWnusbcP9L*(b+uKV4v;oG!ITdDMB}GzRf7-1l%|KF@G)}e^6Pm zd&N0{(pEx0289FF9JU|NHSGO{Oh_Ej_Z7bSyVl%ST}a3JCBrsslp z{Q1L&|80pTaKikYu56&=#Xk;nA}Yng;uAz#g(sW zR|Cg^q%oU}gYxm8cAKalRH3lRbJ9eF;sy0`?-BigZ^eL*eHP)m1xqGho za^r4dfnlu?RD#6SX6ZQy6@H=?@yjcUh+7#u=@GTsY*a$JXaBKF?syPb9mqoow^MZ( zHnQ%SsAgxUrqX~oj@!FQxS%rQFbp6&j$aOajG^b!l>Flkx)D#@IELvqBPyBUBujD- z4YZ#ptYBl)aJc`(yF>L<^<^&0$WsNZoPP%DeFx{H`Asy@N33<+PAq%$6C4~IHP{y{ zD#?K#qQ|=7r0ZT2F*{ETD79|beAZb^(eA&t45vN0TlII8>A+>^fG{@Z)9s(uuJlw) zRqfkOJiNT1r87l_Q?xYSYd+@l7y%Qq#nY)fuOTGU0dHX83`M_{u#>SaYqIgv)lXn; z5Uj>iY06yICA7`QtkOrl1ogfadoy)}aH$!piEN!>%45YEo|!tdxJ}aD9@Pe-ZpGB% z-jsNGJ)U7TWQ{%*P3gNx^N`OB$r~YK7_7<58z~6_lE3)KSAjHrge+7Mv~(2uy1Mj~ zN{5e>>hvDk9$XUb*0F3%67RYow{CU)wNodhhOAC|o}{xD?H}0}g?}I+_t#j`xX{7$ z+{9-|K= zNdiS%0Z8OVAu08$CAVd*eA)9YPRD2HM9+|nY4d+TJXV193F~`IO8zSn0lH>S(RRQi z9-*b>u;$>D!cOWh215qMR6k>h{MOim>z7${B2Xw2^i0|F8|v7}jSgrf!QOlzNTOH7 z5f%P+`x+{Kq?XS&i5)b%}{Mvo_d?7LM~xwm|EiQQ;o8q{yh!%VSEtPY)S!Q)`;-rAkA4QVW?ww8DT@w^m0XHEk%gU* zoL37_?&5odh-3tdi5((c6hX~i=*ua*ulMIf4uVgd7sxX~+V=eP|28_xa*#j9=xelrRdbWN~EwoCU%WQ2?vvInUu^%W9c zEU->>EP&kN`(dd6$jIU2TkQDpm{N_5;ZP%4*GrU_bb$BT@DWC(XspG5N1?wZU*q6q2c(?WxA&``fF5CfC{KSRi(i z^DWS+X#V}Ha1(B&3I^y=x$$i6+bg@yQvRmb-_{Q|`E?%a83_UMw6$Gg)iOuCd%mV{ zXQIiwROZf|qxZ(ez!n=5`#>~#OiYjq?!`VbZ4Y^lbaPYk4hRTnn7kwprv`!Kq=^2b zc9Qd_3sIh5KGoMBT!QqW>ijM(ZG-Nb8yBBEZ4xJZAaj?Sk&k+X4cgjBTKMhjEvhii zQXP%_@js;qNggcUe9NaZ=DNzA(|?D;3(o{9LswR~_rpN=ZZtisMlM0#X{ zvXrw#;+VTdb(zu++G}|KyX^Qvy!Q_Qpf)d_3y#Ygb-PCdo*LlyvvmCudJ_kmsO~AQ zT13A1_nb2?3$2>~-Tg~X223ZtbhM zGdFGA5!}l!;Hu&~Ohc3>oiJ%wE9t+B6;NF-NJBkop#prWd%2x9QTL%jqzzO{%k@kX zSB#yE^iUbNmr9)FG1z+JL~XY;wCOE7`GtmtvTapyO-(WoW=+goDvgkFka#pId;Q-f zt^$ChE&kvXNL$Wt6mf#}1K7y9pY&@CseOBo`}{PYDkIRRDVV>PudSg??=-YQT>woc zI2@=T?nx6qa)9)^aPaf<3uK7@qNIDsKplbjx#mL#iURzAYfcuE?qE77lsyC86Z>O; zKQip-OXoP++vCy5QK%?wuog-ai2PXg%6QrR84rM2|9)j()*Mg1ttD%@UKt|#L*WuT ze;b%8z?pD&fnigAR&KncsN&yG2QZ`jdp_xfOs0Vt^~DB5de#Q`{!lxnz5bT;97GYo zVR`lj#hdW{E61u#KnL&ypn&IohXIy#FTw?UMXY>Mn{WN|leQpl|mC6vJOKZr!kUr*!~Njn2gjxXLdADk+_ zSCW|2{qOOy$w#CozIK~;b;T<@)BjZhfwr%l#L8-h@xlX;p!DB(JaZH7{!O1b*pHm% z5S%_)*vUEpC)aXhywzwW#vNaoTKy3R$uvcaiH0E{kkU7^HtT^L064q7I=vH718t?r*@jp@ue#*xA6nlqW_sbV{EzuL0ZtUf!T2+w zz;P2~srjyST&72%92Q8aaRKa_|5Yo1TA4LH8DrlJ|D6D_46n$C^7A<~ZgazJq`NCS zMKc-4ATxN1Gv>ioz)bm6V}pSyZCFpZEcYwG1=+}^A0E0IX|W=n-$?BPk3R?$#H?@y zfPkO-Cv}O&FvWKI&@=qMRpCruY@)>V+yc>m4ke8aovI+i>pymPa|`7S+luw?Ir$-n ztH4eIe&r^Oor8l$O$(_d3ce{q;Q@|B@JS_cqE&0T3kvwGOiUQDlfe-g3(nO)gzYl0Yi0kpyu+FtNxqIk z$MNnXx5i0a^Z`9%Ra3$OMC^5lSR0P_#l?;t=D|nbzkd&Fr+QQNV0`0$zxuO3Ge`wO z!%PrVe(3udW&@^J*^}p1du5V9GJhJv5djuejQEN@?$r3~Oe^wM1WD`j|5eA6bw7gJ zXpG08m0@(v6kZFSEHIp|`IvWUu^Zl2-c{VWfvbsRg!r4xZ`Ak=>aF?y|2KJCY5~}& zm4_Bi4};q+Dly1PjEZ@)-&V-(eUXgOiqfP##i2GRZCoC9lC=uMyVw&OkZ_pZIoPxl zm~R5O^MCJIM{?9~D9;A)1b~l^1`Mj(i6DKt2Y*hdsPb`oQ&UqLi2w8V_4gm0n(8aj z%Q=jHCdR|Vvofdu@ZnXMm)HI)psy3+YQJKjUn@9P+*t=$JUHQwz6<`l#D0FtyeCUc zBM!1#9`sF*`9}ywo>yYNd>?TD(CcZsFwGh?iNKn|68}?r-9|zc=9+fX#OnC}9X&rG zc=$+RxED)UOu5l_zz~p!_&PbQeB9gHdv=F5J^By~w1D%yV&4_PH8Sb-M36=9z#i7{ z|5vfE32C^x3U8+U^9dBK3>2tQ@dWoOOo#ByY(W71t_3awJLxvB41g78PR{WPwJcuZ zCk5BwEk)BRsoJ>&xs+@qY{Z8I;}bp}iAwmEL?NB#&5wr)|2wpPh+L^arm6h$ a { + top: 24px; + } +} + +.fa-inverse:hover { + color: #ccc; +} + +.collapse a.active { + background-color: #DEEAF4; + color: #000; + position: relative; +} + +.collapse a.active:hover { + text-decoration: none; +} + +.collapse a.active:before { + background-color: #A0C3E5; + content: ""; + display: inline-block; + height: 100%; + left: 0; + position: absolute; + top: 0; + width: 3px; +} + +.main h2, .main .h2 { + border-top: 0px; + padding-top: 10px; +} + +.page-header { + height: 100% !important; +} + +.page-header h2{ + font-size: 28px; +} + +.navbar-brand { + padding: initial; + height: initial; +} + +.nav > li > a.hover{ + background-color: none; +} + +h1, h2, h3, h4, h5, h6, .h1, .h2, .h3, .h4, .h5, .h6 { + position: relative; +} + +h2 > a.anchor, h3 > a.anchor, h4 > a.anchor, h5 > a.anchor, h6 > a.anchor { + display: block; + font-weight: normal; + margin-left: -1.5ex; + position: absolute; + text-align: center; + text-decoration: none !important; + visibility: hidden; + width: 1.5ex; + z-index: 1001; +} + +h2 > a.anchor:before, h3 > a.anchor:before, h4 > a.anchor:before, h5 > a.anchor:before, h6 > a.anchor:before { + content: "\f0c1"; + display: block; + font-family: FontAwesome; + font-size: 0.7em; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + padding-top: 0.2em; +} + +h4 > a.anchor:before, h5 > a.anchor:before, h6 > a.anchor:before { + font-size: 1em; +} + +h2:hover > a.anchor, +h2 > a.anchor:hover, +h3:hover > a.anchor, +h3 > a.anchor:hover, +h4:hover > a.anchor, +h4 > a.anchor:hover, +h5:hover > a.anchor, +h5 > a.anchor:hover, +h6:hover > a.anchor, +h6 > a.anchor:hover { + visibility: visible; +} + +.main { + border-left: 1px solid #e7e7e7; + margin-left: -1px; + padding-left: 25px; +} + + +@media (min-width: 768px) { + .main { + padding-left: 30px; + } +} + +/* + * Sidebar + */ + +.nav-header { + font-size: 16px; +} + +.nav-header ul { + font-size: 14px; +} + +.nav-header ul li a { + display: block; + padding: 5px 20px 5px 25px; + font-size: 13px; + font-weight: normal; +} + +.nav-sidebar .fa { + text-align: center; + top: -1px; + width: 14px; +} + +.nav-sidebar li a { + color: inherit; +} + +.nav-sidebar li a:hover { + color: #000; +} + +.nav-sidebar ul li ul.nav-tertiary li a { + padding-left: 50px; +} + +.nav-sidebar > li > a { + padding: 7px 0; +} + +.nav-sidebar > li > a:focus, .nav-sidebar > li > a:hover { + background: transparent; +} + +.sidebar { + font-weight: 300; + display: none; + padding-top: 13px; +} + +@media screen and (max-width: 767px) { + .sidebar { + padding-left: 30px; + padding-right: 0; + } +} + +@media screen and (min-width: 768px) { + .sidebar { + border-right: 1px solid #e7e7e7; + display: block; + } +} + +/* + * Off Canvas + * -------------------------------------------------- + */ + +body, html { + overflow-x: hidden; /* Prevent scroll on narrow devices */ +} + +.toggle-nav { + margin-right: 20px; +} + +@media screen and (max-width: 767px) { + .row-offcanvas { + position: relative; + -webkit-transition: all .25s ease-out; + -o-transition: all .25s ease-out; + transition: all .25s ease-out; + } + + .row-offcanvas-right { + right: 0; + } + + .row-offcanvas-left { + left: 0; + } + + .row-offcanvas-right + .sidebar-offcanvas { + right: -75%; /* 8 columns */ + } + + .row-offcanvas-left + .sidebar-offcanvas { + left: -75%; /* 8 columns */ + } + + .row-offcanvas-right.active { + right: 75%; /* 8 columns */ + } + + .row-offcanvas-left.active { + left: 75%; /* 8 columns */ + } + + .sidebar-offcanvas { + overflow: hidden; + position: absolute; + top: 0; + width: 75%; /* 8 columns */ + } +} + + p { + margin: 0 0 1.6em; + } + + /* Remnants of Asciidoctor default stylesheet - remove styles as needed */ + +#map_canvas img, #map_canvas embed, #map_canvas object, .map_canvas img, .map_canvas embed, .map_canvas object { max-width: none !important; } +.left { float: left !important; } +.right { float: right !important; } +.text-left { text-align: left !important; } +.text-right { text-align: right !important; } +.text-center { text-align: center !important; } +.text-justify { text-align: justify !important; } +.hide { display: none; } +.subheader, #content #toctitle, .admonitionblock td.content > .title, .audioblock > .title, .exampleblock > .title, .imageblock > .title, .listingblock > .title, .literalblock > .title, .stemblock > .title, .openblock > .title, .paragraph > .title, .quoteblock > .title, table.tableblock > .title, .verseblock > .title, .videoblock > .title, .dlist > .title, .olist > .title, .ulist > .title, .qlist > .title, .hdlist > .title { line-height: 1.4; color: #7a2518; font-weight: 300; margin-top: 0.2em; margin-bottom: 0.5em; } +abbr, acronym { text-transform: uppercase; font-size: 90%; color: #333333; border-bottom: 1px dotted #dddddd; cursor: help; } +abbr { text-transform: none; } +blockquote { margin: 0 0 1.25em; padding: 0.5625em 1.25em 0 1.1875em; border-left: 3px solid #487c58; } +blockquote cite { display: block; font-size: inherit; color: #454545; } +blockquote cite:before { content: "\2014 \0020"; } +blockquote cite a, blockquote cite a:visited { color: #454545; } +blockquote, blockquote p { line-height: 1.6; color: #6e6e6e; } +@media only screen and (min-width: 768px) { + #toctitle, .sidebarblock > .content > .title { line-height: 1.4; } + #toctitle, .sidebarblock > .content > .title { font-size: 1.6875em; } +} +table { background: white; margin-bottom: 1.25em; border: solid 1px #dddddd; } +table thead, table tfoot { background: whitesmoke; font-weight: bold; } +table thead tr th, table thead tr td, table tfoot tr th, table tfoot tr td { padding: 0.5em 0.625em 0.625em; font-size: inherit; color: #333333; text-align: left; } +table tr th, table tr td { padding: 0.5625em 0.625em; font-size: inherit; color: #333333; } +table tr.even, table tr.alt, table tr:nth-of-type(even) { background: #f9f9f9; } +table thead tr th, table tfoot tr th, table tbody tr td, table tr td, table tfoot tr td { display: table-cell; line-height: 1.6; } +.clearfix:before, .clearfix:after, .float-group:before, .float-group:after { content: " "; display: table; } +.clearfix:after, .float-group:after { clear: both; } +*:not(pre) > code { font-size: inherit; padding: 0; white-space: nowrap; background-color: inherit; border: 0 solid #dddddd; -webkit-border-radius: 4px; border-radius: 4px; text-shadow: none; line-height: 1; } +.keyseq { color: #666666; } +kbd:not(.keyseq) { display: inline-block; color: #333333; font-size: 0.75em; line-height: 1.4; background-color: #f7f7f7; border: 1px solid #ccc; -webkit-border-radius: 3px; border-radius: 3px; -webkit-box-shadow: 0 1px 0 rgba(0, 0, 0, 0.2), 0 0 0 2px white inset; box-shadow: 0 1px 0 rgba(0, 0, 0, 0.2), 0 0 0 2px white inset; margin: -0.15em 0.15em 0 0.15em; padding: 0.2em 0.6em 0.2em 0.5em; vertical-align: middle; white-space: nowrap; } +.keyseq kbd:first-child { margin-left: 0; } +.keyseq kbd:last-child { margin-right: 0; } +.menuseq, .menu { color: #1a1a1a; } +b.button:before, b.button:after { position: relative; top: -1px; font-weight: normal; } +b.button:before { content: "["; padding: 0 3px 0 2px; } +b.button:after { content: "]"; padding: 0 2px 0 3px; } +p a > code:hover { color: #561309; } +#header, #content, #footnotes, #footer { width: 100%; margin-left: auto; margin-right: auto; margin-top: 0; margin-bottom: 0; max-width: 62.5em; *zoom: 1; position: relative; padding-left: 0.9375em; padding-right: 0.9375em; } +#header:before, #header:after, #content:before, #content:after, #footnotes:before, #footnotes:after, #footer:before, #footer:after { content: " "; display: table; } +#header:after, #content:after, #footnotes:after, #footer:after { clear: both; } +#content:before { content: none; } +#header { margin-bottom: 2.5em; } +#header > h1 { color: black; font-weight: 300; border-bottom: 1px solid #d8d8d8; margin-bottom: -28px; padding-bottom: 32px; } +#header span { color: #6e6e6e; } +#header #revnumber { text-transform: capitalize; } +#header br { display: none; } +#header br + span { padding-left: 3px; } +#header br + span:before { content: "\2013 \0020"; } +#header br + span.author { padding-left: 0; } +#header br + span.author:before { content: ", "; } +#toc { border-bottom: 3px double #e5e5e5; padding-top: 1em; padding-bottom: 1.25em; } +#toc > ul { margin-left: 0.25em; } +#toc ul.sectlevel0 > li > a { font-style: italic; } +#toc ul.sectlevel0 ul.sectlevel1 { margin-left: 0; margin-top: 0.5em; margin-bottom: 0.5em; } +#toc ul { font-family: "Open Sans", "DejaVu Sans", "Sans", sans-serif; list-style-type: none; } +#toc a { text-decoration: none; } +#toc a:active { text-decoration: underline; } +#toctitle { color: #7a2518; } +@media only screen and (min-width: 768px) { body.toc2 { padding-left: 15em; padding-right: 0; } + #toc.toc2 { background-color: #fafaf9; position: fixed; width: 15em; left: 0; top: 0; border-right: 1px solid #e5e5e5; border-bottom: 0; z-index: 1000; padding: 1.25em 1em; height: 100%; overflow: auto; } + #toc.toc2 #toctitle { margin-top: 0; font-size: 1.2em; } + #toc.toc2 > ul { font-size: .90em; margin-bottom: 0; } + #toc.toc2 ul ul { margin-left: 0; padding-left: 1em; } + #toc.toc2 ul.sectlevel0 ul.sectlevel1 { padding-left: 0; margin-top: 0.5em; margin-bottom: 0.5em; } + body.toc2.toc-right { padding-left: 0; padding-right: 15em; } + body.toc2.toc-right #toc.toc2 { border-right: 0; border-left: 1px solid #e5e5e5; left: auto; right: 0; } } +@media only screen and (min-width: 1280px) { body.toc2 { padding-left: 20em; padding-right: 0; } + #toc.toc2 { width: 20em; } + #toc.toc2 #toctitle { font-size: 1.375em; } + #toc.toc2 > ul { font-size: 0.95em; } + #toc.toc2 ul ul { padding-left: 1.25em; } + body.toc2.toc-right { padding-left: 0; padding-right: 20em; } } +#content #toc { border-style: solid; border-width: 1px; border-color: #e3e3dd; margin-bottom: 1.25em; padding: 1.25em; background: #fafaf9; border-width: 0; -webkit-border-radius: 4px; border-radius: 4px; } +#content #toc > :first-child { margin-top: 0; } +#content #toc > :last-child { margin-bottom: 0; } +#content #toctitle { font-size: 1.375em; } +#footer { max-width: 100%; background-color: #333333; padding: 1.25em; } +#footer-text { color: #cccccc; line-height: 1.44; } +.audioblock, .imageblock, .literalblock, .listingblock, .stemblock, .verseblock, .videoblock { margin-bottom: 2.5em; } +.admonitionblock td.content > .title, .audioblock > .title, .exampleblock > .title, .imageblock > .title, .listingblock > .title, .literalblock > .title, .stemblock > .title, .openblock > .title, .paragraph > .title, .quoteblock > .title, table.tableblock > .title, .verseblock > .title, .videoblock > .title, .dlist > .title, .olist > .title, .ulist > .title, .qlist > .title, .hdlist > .title { text-rendering: optimizeLegibility; text-align: left; font-family: "Noto Serif", "DejaVu Serif", "Serif", serif; font-weight: normal; font-style: italic; } +table.tableblock > caption.title { white-space: nowrap; overflow: visible; max-width: 0; } +table.tableblock #preamble > .sectionbody > .paragraph:first-of-type p { font-size: inherit; } +.admonitionblock > table { border: 0; background: none; width: 100%; } +.admonitionblock > table td.icon { text-align: center; width: 80px; } +.admonitionblock > table td.icon img { max-width: none; } +.admonitionblock > table td.icon .title { font-weight: 300; text-transform: uppercase; } +.admonitionblock > table td.content { padding-left: 0; padding-right: 1.25em; color: #6e6e6e; } +.admonitionblock > table td.content > :last-child > :last-child { margin-bottom: 0; } +.exampleblock > .content { border-style: solid; border-width: 1px; border-color: #e6e6e6; margin-bottom: 1.25em; padding: 1.25em; background: white; -webkit-border-radius: 4px; border-radius: 4px; } +.exampleblock > .content > :first-child { margin-top: 0; } +.exampleblock > .content > :last-child { margin-bottom: 0; } +.exampleblock > .content h1, .exampleblock > .content h2, .exampleblock > .content h3, .exampleblock > .content #toctitle, .sidebarblock.exampleblock > .content > .title, .exampleblock > .content h4, .exampleblock > .content h5, .exampleblock > .content h6, .exampleblock > .content p { color: #333333; } +.exampleblock > .content h1, .exampleblock > .content h2, .exampleblock > .content h3, .exampleblock > .content #toctitle, .sidebarblock.exampleblock > .content > .title, .exampleblock > .content h4, .exampleblock > .content h5, .exampleblock > .content h6 { line-height: 1; margin-bottom: 0.625em; } +.exampleblock > .content h1.subheader, .exampleblock > .content h2.subheader, .exampleblock > .content h3.subheader, .exampleblock > .content .subheader#toctitle, .sidebarblock.exampleblock > .content > .subheader.title, .exampleblock > .content h4.subheader, .exampleblock > .content h5.subheader, .exampleblock > .content h6.subheader { line-height: 1.4; } +.exampleblock.result > .content { -webkit-box-shadow: 0 1px 8px #e3e3dd; box-shadow: 0 1px 8px #e3e3dd; } +.sidebarblock { border-style: solid; border-width: 1px; border-color: #e3e3dd; margin-top: -1.0em; margin-bottom: 1.6em; padding: .5em; background: #F1F3F5; -webkit-border-radius: 4px; border-radius: 4px; overflow-x: auto; } +.sidebarblock > :first-child { margin-top: 0; } +.sidebarblock > :last-child { margin-bottom: 0; } +.sidebarblock h1, .sidebarblock h2, .sidebarblock h3, .sidebarblock #toctitle, .sidebarblock > .content > .title, .sidebarblock h4, .sidebarblock h5, .sidebarblock h6, .sidebarblock p { color: #333333; } +.sidebarblock h1, .sidebarblock h2, .sidebarblock h3, .sidebarblock #toctitle, .sidebarblock > .content > .title, .sidebarblock h4, .sidebarblock h5, .sidebarblock h6 { line-height: 1; margin-bottom: 0.625em; } +.sidebarblock h1.subheader, .sidebarblock h2.subheader, .sidebarblock h3.subheader, .sidebarblock .subheader#toctitle, .sidebarblock > .content > .subheader.title, .sidebarblock h4.subheader, .sidebarblock h5.subheader, .sidebarblock h6.subheader { line-height: 1.4; } +.sidebarblock > .content > .title { color: #7a2518; margin-top: 0; line-height: 1.6; } +.exampleblock > .content > :last-child > :last-child, .exampleblock > .content .olist > ol > li:last-child > :last-child, .exampleblock > .content .ulist > ul > li:last-child > :last-child, .exampleblock > .content .qlist > ol > li:last-child > :last-child, .sidebarblock > .content > :last-child > :last-child, .sidebarblock > .content .olist > ol > li:last-child > :last-child, .sidebarblock > .content .ulist > ul > li:last-child > :last-child, .sidebarblock > .content .qlist > ol > li:last-child > :last-child { margin-bottom: 0; } +.literalblock pre, .literalblock pre[class], .listingblock pre, .listingblock pre[class] { border: 0px; background-color: #F0F3F5; -webkit-border-radius: 5px; border-radius: 5px; padding: 1.5em 2.5em; word-wrap: break-word; } +.literalblock pre.nowrap, .literalblock pre[class].nowrap, .listingblock pre.nowrap, .listingblock pre[class].nowrap { overflow-x: auto; white-space: pre; word-wrap: normal; } +.literalblock pre > code, .literalblock pre[class] > code, .listingblock pre > code, .listingblock pre[class] > code { display: block; } +.listingblock > .content { position: relative; } +.listingblock:hover code[class*=" language-"]:before { text-transform: uppercase; font-size: 0.9em; color: #999; position: absolute; top: 0.375em; right: 0.375em; } +.listingblock:hover code.asciidoc:before { content: "asciidoc"; } +.listingblock:hover code.clojure:before { content: "clojure"; } +.listingblock:hover code.css:before { content: "css"; } +.listingblock:hover code.go:before { content: "go"; } +.listingblock:hover code.groovy:before { content: "groovy"; } +.listingblock:hover code.html:before { content: "html"; } +.listingblock:hover code.java:before { content: "java"; } +.listingblock:hover code.javascript:before { content: "javascript"; } +.listingblock:hover code.python:before { content: "python"; } +.listingblock:hover code.ruby:before { content: "ruby"; } +.listingblock:hover code.sass:before { content: "sass"; } +.listingblock:hover code.scss:before { content: "scss"; } +.listingblock:hover code.xml:before { content: "xml"; } +.listingblock:hover code.yaml:before { content: "yaml"; } +.listingblock.terminal pre .command:before { content: attr(data-prompt); padding-right: 0.5em; color: #999; } +.listingblock.terminal pre .command:not([data-prompt]):before { content: '$'; } +table.pyhltable { border: 0; margin-bottom: 0; } +table.pyhltable td { vertical-align: top; padding-top: 0; padding-bottom: 0; } +table.pyhltable td.code { padding-left: .75em; padding-right: 0; } +.highlight.pygments .lineno, table.pyhltable td:not(.code) { color: #999; padding-left: 0; padding-right: .5em; border-right: 1px solid #d8d8d8; } +.highlight.pygments .lineno { display: inline-block; margin-right: .25em; } +table.pyhltable .linenodiv { background-color: transparent !important; padding-right: 0 !important; } +.quoteblock { margin: 0 0 1.25em 0; padding: 0.5625em 1.25em 0 1.1875em; border-left: 3px solid #487c58; } +.quoteblock blockquote { margin: 0 0 1.25em 0; padding: 0 0 0.625em 0; border: 0; } +.quoteblock blockquote > .paragraph:last-child p { margin-bottom: 0; } +.quoteblock .attribution { margin-top: -0.625em; padding-bottom: 0.625em; font-size: inherit; color: #454545; line-height: 1.6; } +.quoteblock .attribution br { display: none; } +.quoteblock .attribution cite { display: block; } +table.tableblock { max-width: 100%; } +table.tableblock td .paragraph:last-child p > p:last-child, table.tableblock th > p:last-child, table.tableblock td > p:last-child { margin-bottom: 0; } +table.spread { width: 100%; } +table.tableblock, th.tableblock, td.tableblock { border: 0 solid #dddddd; } +table.grid-all th.tableblock, table.grid-all td.tableblock { border-width: 0 1px 1px 0; } +table.grid-all tfoot > tr > th.tableblock, table.grid-all tfoot > tr > td.tableblock { border-width: 1px 1px 0 0; } +table.grid-cols th.tableblock, table.grid-cols td.tableblock { border-width: 0 1px 0 0; } +table.grid-all * > tr > .tableblock:last-child, table.grid-cols * > tr > .tableblock:last-child { border-right-width: 0; } +table.grid-rows th.tableblock, table.grid-rows td.tableblock { border-width: 0 0 1px 0; } +table.grid-all tbody > tr:last-child > th.tableblock, table.grid-all tbody > tr:last-child > td.tableblock, table.grid-all thead:last-child > tr > th.tableblock, table.grid-rows tbody > tr:last-child > th.tableblock, table.grid-rows tbody > tr:last-child > td.tableblock, table.grid-rows thead:last-child > tr > th.tableblock { border-bottom-width: 0; } +table.grid-rows tfoot > tr > th.tableblock, table.grid-rows tfoot > tr > td.tableblock { border-width: 1px 0 0 0; } +table.frame-all { border-width: 1px; } +table.frame-sides { border-width: 0 1px; } +table.frame-topbot { border-width: 1px 0; } +th.halign-left, td.halign-left { text-align: left; } +th.halign-right, td.halign-right { text-align: right; } +th.halign-center, td.halign-center { text-align: center; } +th.valign-top, td.valign-top { vertical-align: top; } +th.valign-bottom, td.valign-bottom { vertical-align: bottom; } +th.valign-middle, td.valign-middle { vertical-align: middle; } +table thead th, table tfoot th { font-weight: bold; } +tbody tr th { display: table-cell; line-height: 1.6; background: whitesmoke; } +tbody tr th, tbody tr th p, tfoot tr th, tfoot tr th p { color: #333333; font-weight: bold; } +td > div.verse { white-space: pre; } +ul.unstyled, ol.unnumbered, ul.checklist, ul.none { list-style-type: none; } +ul.unstyled, ol.unnumbered, ul.checklist { margin-left: 0.625em; } +ul.checklist li > p:first-child > .fa-check-square-o:first-child, ul.checklist li > p:first-child > input[type="checkbox"]:first-child { margin-right: 0.25em; } +ul.checklist li > p:first-child > input[type="checkbox"]:first-child { position: relative; top: 1px; } +ul.inline { margin: 0 auto 0.625em auto; margin-left: -1.375em; margin-right: 0; padding: 0; list-style: none; overflow: hidden; } +ul.inline > li { list-style: none; float: left; margin-left: 1.375em; display: block; } +ul.inline > li > * { display: block; } +.unstyled dl dt { font-weight: normal; font-style: normal; } +ol.arabic { list-style-type: decimal; } +ol.decimal { list-style-type: decimal-leading-zero; } +ol.loweralpha { list-style-type: lower-alpha; } +ol.upperalpha { list-style-type: upper-alpha; } +ol.lowerroman { list-style-type: lower-roman; } +ol.upperroman { list-style-type: upper-roman; } +ol.lowergreek { list-style-type: lower-greek; } +.hdlist > table, .colist > table { border: 0; background: none; } +.hdlist > table > tbody > tr, .colist > table > tbody > tr { background: none; } +td.hdlist1 { padding-right: .75em; font-weight: bold; } +td.hdlist1, td.hdlist2 { vertical-align: top; } +.literalblock + .colist, .listingblock + .colist { margin-top: -0.5em; } +.colist > table tr > td:first-of-type { padding: 0 .75em; line-height: 1; } +.colist > table tr > td:last-of-type { padding: 0.25em 0; } +.qanda > ol > li > p > em:only-child { color: #1d4b8f; } +.thumb, .th { line-height: 0; display: inline-block; border: solid 4px white; -webkit-box-shadow: 0 0 0 1px #dddddd; box-shadow: 0 0 0 1px #dddddd; } +.imageblock.left, .imageblock[style*="float: left"] { margin: 0.25em 0.625em 1.25em 0; } +.imageblock.right, .imageblock[style*="float: right"] { margin: 0.25em 0 1.25em 0.625em; } +.imageblock > .title { margin-bottom: 0; } +.imageblock.thumb, .imageblock.th { border-width: 6px; } +.imageblock.thumb > .title, .imageblock.th > .title { padding: 0 0.125em; } +.image.left, .image.right { margin-top: 0.25em; margin-bottom: 0.25em; display: inline-block; line-height: 0; } +.image.left { margin-right: 0.625em; } +.image.right { margin-left: 0.625em; } +a.image { text-decoration: none; } +span.footnote, span.footnoteref { vertical-align: super; font-size: 0.875em; } +span.footnote a, span.footnoteref a { text-decoration: none; } +span.footnote a:active, span.footnoteref a:active { text-decoration: underline; } +#footnotes { padding-top: 0.75em; padding-bottom: 0.75em; margin-bottom: 0.625em; } +#footnotes hr { width: 20%; min-width: 6.25em; margin: -.25em 0 .75em 0; border-width: 1px 0 0 0; } +#footnotes .footnote { padding: 0 0.375em; line-height: 1.3; font-size: 0.875em; margin-left: 1.2em; text-indent: -1.2em; margin-bottom: .2em; } +#footnotes .footnote a:first-of-type { font-weight: bold; text-decoration: none; } +#footnotes .footnote:last-of-type { margin-bottom: 0; } +#content #footnotes { margin-top: -0.625em; margin-bottom: 0; padding: 0.75em 0; } +.gist .file-data > table { border: none; background: #fff; width: 100%; margin-bottom: 0; } +.gist .file-data > table td.line-data { width: 99%; } +div.unbreakable { page-break-inside: avoid; } +.replaceable { font-style: italic; font-color: inherit; font-family: inherit; } +.parameter { font-style: italic; font-family: monospace; } +.userinput { font-weight: bold; font-family: monospace; } +.envar { font-weight: bold; font-family: monospace; font-size: 90%; } +.sysitem { font-weight: bold; font-size: 90%; } +.package { font-weight: bold; font-size: 90%; } +.filename { font-weight: bold; font-style: italic; font-size: 90%; } +.big { font-size: larger; } +.small { font-size: smaller; } +.underline { text-decoration: underline; } +.overline { text-decoration: overline; } +.line-through { text-decoration: line-through; } +.aqua { color: #00bfbf; } +.aqua-background { background-color: #00fafa; } +.black { color: black; } +.black-background { background-color: black; } +.blue { color: #0000bf; } +.blue-background { background-color: #0000fa; } +.fuchsia { color: #bf00bf; } +.fuchsia-background { background-color: #fa00fa; } +.gray { color: #606060; } +.gray-background { background-color: #7d7d7d; } +.green { color: #006000; } +.green-background { background-color: #007d00; } +.lime { color: #00bf00; } +.lime-background { background-color: #00fa00; } +.maroon { color: #600000; } +.maroon-background { background-color: #7d0000; } +.navy { color: #000060; } +.navy-background { background-color: #00007d; } +.olive { color: #606000; } +.olive-background { background-color: #7d7d00; } +.purple { color: #600060; } +.purple-background { background-color: #7d007d; } +.red { color: #bf0000; } +.red-background { background-color: #fa0000; } +.silver { color: #909090; } +.silver-background { background-color: #bcbcbc; } +.teal { color: #006060; } +.teal-background { background-color: #007d7d; } +.white { color: #bfbfbf; } +.white-background { background-color: #fafafa; } +.yellow { color: #bfbf00; } +.yellow-background { background-color: #fafa00; } +span.icon > .fa { cursor: default; } +.admonitionblock td.icon [class^="fa icon-"] { font-size: 2.5em; cursor: default; } +.admonitionblock td.icon .icon-note:before { content: "\f05a"; color: #4E9FDD; } +.admonitionblock td.icon .icon-tip:before { content: "\f0eb"; color: #2C8596; } +.admonitionblock td.icon .icon-warning:before { content: "\f071"; color: #ec7a08; } +.admonitionblock td.icon .icon-caution:before { content: "\f06d"; color: #ec7a08; } +.admonitionblock td.icon .icon-important:before { content: "\f06a"; color: #c00; } +.conum[data-value] { display: inline-block; color: white !important; background-color: #333333; -webkit-border-radius: 100px; border-radius: 100px; text-align: center; width: 20px; height: 20px; font-size: 12px; line-height: 20px; font-family: "Open Sans", "Sans", sans-serif; font-style: normal; font-weight: bold; text-indent: -1px; } +.conum[data-value] * { color: white !important; } +.conum[data-value] + b { display: none; } +.conum[data-value]:after { content: attr(data-value); } +pre .conum[data-value] { position: relative; top: -2px; } +b.conum * { color: inherit !important; } +.conum:not([data-value]):empty { display: none; } +.print-only { display: none !important; } +@media print { @page { margin: 1.25cm 0.75cm; } + * { -webkit-box-shadow: none !important; box-shadow: none !important; text-shadow: none !important; } + a, a:visited { color: inherit !important; text-decoration: underline !important; } + a[href^="http:"]:after, a[href^="https:"]:after { content: " (" attr(href) ")"; } + a[href^="#"], a[href^="#"]:visited, a[href^="mailto:"], a[href^="mailto:"]:visited { text-decoration: none !important; } + abbr[title]:after { content: " (" attr(title) ")"; } + pre, blockquote { page-break-inside: avoid; } + code { color: #191919; } + thead { display: table-header-group; } + tr, img { page-break-inside: avoid; } + img { max-width: 100% !important; } + p { orphans: 3; widows: 3; } + h2, h3, #toctitle, .sidebarblock > .content > .title, #toctitle, .sidebarblock > .content > .title { page-break-after: avoid; } + #toc, .sidebarblock { background: none !important; } + #toc { border-bottom: 1px solid #d8d8d8 !important; padding-bottom: 0 !important; } + .sect1 { padding-bottom: 0 !important; } + .sect1 + .sect1 { border: none !important; } + body.book #header { text-align: center; } + body.book #header > h1 { border: none !important; margin: 2.5em 0 1em 0; padding: 0; } + body.book #header span { line-height: 1.6; } + body.book #header br { display: block; } + body.book #header br + span { padding-left: 0; } + body.book #header br + span:before { content: none !important; } + body.book #toc { border: none !important; text-align: left !important; padding: 0 !important; } + #footer { background: none !important; } + #footer-text { color: #333333 !important; } + .hide-on-print { display: none !important; } + .print-only { display: block !important; } + .hide-for-print { display: none !important; } + .show-for-print { display: inherit !important; } } diff --git a/_templates/_css.html.erb b/_templates/_css.html.erb new file mode 100644 index 0000000..0fca7ae --- /dev/null +++ b/_templates/_css.html.erb @@ -0,0 +1,3 @@ +<%- Dir.glob("_stylesheets/*").sort.each do |sheet| -%> + +<%- end -%> diff --git a/_templates/_nav.html.erb b/_templates/_nav.html.erb new file mode 100644 index 0000000..95a7e5c --- /dev/null +++ b/_templates/_nav.html.erb @@ -0,0 +1,31 @@ + diff --git a/_templates/page.html.erb b/_templates/page.html.erb new file mode 100644 index 0000000..ca09dd0 --- /dev/null +++ b/_templates/page.html.erb @@ -0,0 +1,84 @@ + + + + + + + <%= distro %> <%= version %> | <%= [group_title, subgroup_title, topic_title].compact.join(' | ') %> + + + + + + <%= render("_templates/_css.html.erb", :css_path => css_path) %> + + + + + + +
+

+ +

+ +
+ +
+ + <%= content %> +
+
+
+ + + + + + + diff --git a/_topic_map.yml b/_topic_map.yml new file mode 100644 index 0000000..cd30bf9 --- /dev/null +++ b/_topic_map.yml @@ -0,0 +1,42 @@ +# This configuration file dictates the organization of the topic groups and +# topics on the main page of the doc site for this branch. Each record +# consists of the following: +# +# --- <= Record delimiter +# Name: Origin of the Species <= Display name of topic group +# Dir: origin_of_the_species <= Directory name of topic group +# Topics: +# - Name: The Majestic Marmoset <= Topic name +# File: the_majestic_marmoset <= Topic file under group dir +/- .adoc +# - Name: The Curious Crocodile <= Topic 2 name +# File: the_curious_crocodile <= Topic 2 file +# - Name: The Numerous Nematodes <= Sub-topic group name +# Dir: the_numerous_nematodes <= Sub-topic group dir +# Topics: +# - Name: The Wily Worm <= Sub-topic name +# File: the_wily_worm <= Sub-topic file under / +# - Name: The Acrobatic Ascarid <= Sub-topic 2 name +# File: the_acrobatic_ascarid <= Sub-topic 2 file under / +# +# The ordering of the records in this document determines the ordering of the +# topic groups and topics on the main page. +--- +Name: About +Dir: welcome +Topics: +- Name: Welcome + File: index + +--- +Name: Tools +Dir: atomic-host-guide +Topics: + - Name: Cockpit + Dir: cockpit + Topics: + - Name: Overview + File: overview + - Name: Installation + File: installing_cockpit + - Name: How to Use + File: using_cockpit diff --git a/atomic-host-guide/cockpit/installing_cockpit.adoc b/atomic-host-guide/cockpit/installing_cockpit.adoc new file mode 100644 index 0000000..48b43b7 --- /dev/null +++ b/atomic-host-guide/cockpit/installing_cockpit.adoc @@ -0,0 +1,94 @@ +=== Setting up a Cockpit server + +A Cockpit server is the machine that is running the cockpit service and exposes the user interface. Depending on the operating system, you need to install the _cockpit_ packages or the _cockpit-ws_ container. You can then open the interface in a browser by typing _localhost:9090_, or use any other machine and type in the IP address of the Cockpit server. Through Cockpit, you can also add more secondary hosts to this primary server. They need to have the cockpit packages installed on them. This document refers to the Cockpit server as the primary server and the added hosts as secondary. + +==== Installing Cockpit + +*A.* On Red Hat Enterprise Linux Atomic Host + +1. Run the *cockpit-ws* image. Use this command: ++ +.... +-bash-4.2# atomic run rhel7/cockpit-ws +.... + +Afterwards, you can log into Cockpit. Go to xref:opening_the_interface[Opening The Interface] + +*B.* On Red Hat Enterprise Linux + +1. Once you have Red Hat Enterprise Linux installed and with enabled networking, you need to register the system and enable the Extras and Optional repositories: ++ +.... +# subscription-manager register --auto-attach --username= --password= +# subscription-manager repos --enable=rhel-7-server-extras-rpms +# subscription-manager repos --enable=rhel-7-server-optional-rpms +.... + +1. Allow external connections to port 9090 through the firewall: ++ +.... +# firewall-cmd --add-port=9090/tcp +# firewall-cmd --permanent --add-port=9090/tcp +.... + +1. Install the _cockpit_ packages: ++ +.... +$ sudo yum install cockpit +.... + +1. Enable and start the cockpit.socket service: ++ +.... +$ sudo systemctl enable cockpit.socket +$ sudo systemctl start cockpit.socket +.... + +==== Opening The Interface + +[[opening_the_interface]] + +1. Open a web browser and enter the server's IP address with port 9090 in the address bar. If the web browser is on the Cockpit server, open _localhost:9090_ or _hostname:9090_. If you get a security warning by the browser, you will need to add this connection to the security exceptions. Click *Advanced* -> *Add Exception* -> *Confirm Security Exception*. After that, you will see the login screen: ++ +image:cockpit_login_rhel.png[caption="Cockpit login screen", title="Cockpit Login Screen", alt="Sunset"] + +1. Log into the Cockpit interface with the same user name and password that you would use to log into the Atomic system. + +==== Changing Expired Passwords + +If there is an account on your Atomic system that has an expired password, you can change it from Cockpit. For example, if you have provisioned your system using *cloud-init* to set up an expired password, you will be prompted to change it the first time you log into the system. It can also be used by system administrators who want to make sure the user changes his password on the first login. + +// image:password_login.png[caption="Cockpit Login", title="Cockpit Login", alt="Sunset"] + +When you try to log in with the usual password and that password has expired, Cockpit will prompt you to enter the current password again. Enter your current password and click *Login*. + +image:password_current.png[caption="Current Password", title="Current Password", alt="Sunset"] + +Choose a new password and click *Login*. + +image:password_new.png[caption="New Password", title="New Password", alt="Sunset"] + + +[NOTE] +If you can't log into Cockpit and you are not redirected to the changing password screen, check the `/etc/ssh/sshd_config` file on the Cockpit Server and make sure the `ChallengeResponseAuthentication` line is set to `yes`. After that, restart `sshd` with the `systemctl restart sshd` command. + +==== SSH two-factor authentication with Cockpit + +Cockpit now supports two-factor authentication so if you have protected your SSH server with such configuration, the Cockpit login screen will prompt you to enter your password and PIN pair. To set up SSH for two-factor authentication you need two components: + +* Your company's authenticator application that provides one-time passwords or PIN numbers. An example application is the `Google Authenticator`, which also has its own PAM (Pluggable Authentication Module). +* A server that validates the PINs from your dongle. + +These two components can be built in many different ways depending on the infrastructure of your particular company. When you have these two set up, you will need to do the following things: + +1. Enter the following line in the `/etc/pam.d/sshd` file as the last `auth` line: ++ +.... +auth required +.... + +2. Edit the `/etc/ssh/sshd_config` file so that the `ChallengeResponseAuthentication` line is set to `yes`. + +3. Restart the `sshd` service with the `systemctl restart shhd` command. + +When you open Cockpit's interface, and enter your password, you will then be prompted to enter your Verification code: diff --git a/atomic-host-guide/cockpit/overview.adoc b/atomic-host-guide/cockpit/overview.adoc new file mode 100644 index 0000000..e574cef --- /dev/null +++ b/atomic-host-guide/cockpit/overview.adoc @@ -0,0 +1,22 @@ +Cockpit is a system administration tool that provides a user interface for monitoring and administering servers through a web browser. It allows you to monitor current values and adjust limits on system resources, control life cycle on container instances, and manipulate container images. Here are a few important facts about Cockpit: + +* Cockpit does not add a layer of other functionalities that are not present on your systems. It exposes user interface elements that enable you to interact with the system. + +* Cockpit does not take control over your servers, in a way that when you configure something from Cockpit, you can only manage it from there. You can effectively move away from Cockpit to the command-line and come back to it at any point. + +* Cockpit does not require configuration or infrastructure, and once you install it, it is ready for use. You could, however, configure it to make use of the authentication infrastructure that is available to you, for example a single sign-on system like Kerberos. + +* Cockpit has zero memory and process footprint on the server when not in use. + +* Cockpit does not store data or policy. This also means it does not have its own users. The users from the systems can authenticate in Cockpit using their system credentials and they keep the same permissions. + +* Cockpit dynamically updates itself to reflect the current state of the server, within a time frame of a few seconds. + +* Cockpit is not intended for configuration management. This means that Cockpit itself does not have a predefined template or state for the server that it then imposes on the server. Cockpit can interact with other configuration management systems or custom tools that are manipulating server configuration. + +This document provides instructions on how to install and enable Cockpit so you can monitor your servers, describes basic configuration, and walks you through the interface. + +Both Red Hat Enterprise Linux and Red Hat Enterprise Linux Atomic Host can be used for the role of a Cockpit server and that of a secondary server. In this document, all monitored systems are Atomic, but the instructions also cover how to set up Red Hat Enterprise Linux as a primary server. + +[NOTE] +Cockpit does not yet have support for Kubernetes on Red Hat Enterprise Linux or Red Hat Enterprise Linux Atomic Host servers. diff --git a/atomic-host-guide/cockpit/using_cockpit.adoc b/atomic-host-guide/cockpit/using_cockpit.adoc new file mode 100644 index 0000000..3d85484 --- /dev/null +++ b/atomic-host-guide/cockpit/using_cockpit.adoc @@ -0,0 +1,191 @@ +=== Getting to know the Cockpit interface + +Once you have logged in, you will see the tabs for the Dashboard and the individual machines added to Cockpit. + +*Dashboard*: Shows a list of all systems added to the Cockpit server with graphs for CPU usage, memory usage, disk I/O, and network traffic. + +image:dashboard.png[caption="Dashboard", title="Dashboard", alt="Sunset", link="dashboard.png"] + +You can then select a system name, in this case "rhel atomic 7.2.3", and have a look at the side menu: + +*System*: Shows information about the system that Cockpit is running on. This includes CPU usage, memory usage, disk I/O, and network traffic, as well as hardware and operating system details. + +image:select_system.png[caption="Select system", title="Select system", alt="Sunset", link="select_system.png"] + +*Services*: Shows the systemd services running on the Cockpit server. You can see which are active/enabled or inactive. You can also see other systemd features: Targets, sockets, timers, and paths. + +image:services.png[caption="Services", title="Services", alt="Sunset", link="services.png"] + +Select a service to view its details: + +image:services_detail.png[caption="Services Detail", title="Services Detail", alt="Sunset", link="services_detail.png"] + +*Containers*: Lists all images available on the system, all running and non-running containers, combined CPU & memory usage graphs, and a storage usage bar. + +image:containers.png[caption="Containers", title="Containers", alt="Sunset", link="containers.png"] + +*Logs*: See messages produced by the systemd journal. These are errors, warnings, and notices that are generated by systemd services and gathered by the journal (like the output of the journalctl command). Errors are listed by the date they occurred. You can also view warnings, notices, or all messages. + +image:logs.png[caption="Logs", title="Logs", alt="Sunset", link="logs.png"] + +*Networking*: See networking interfaces (eth0, docker0, etc.) as well as the amount of data being sent and received. + +image:networking.png[caption="Networking", title="Networking", alt="Sunset", link="networking.png"] + +*Tools*: View other system information: + +* *Subscriptions*: Displays what Red Hat products are installed and subscribed. + +image:subscriptions.png[caption="Subscriptions", title="Subscriptions", alt="Sunset", link="subscriptions.png"] + +* *Accounts*: Shows which administrative (root) and other users (atomic_user1, atomic_user2) have accounts on the system. + +image:accounts.png[caption="Accounts", title="Accounts", alt="Sunset", link="accounts.png"] + +* *Diagnostic report*: Collects system configuration and diagnostics information and prepares a report in an XZ format. + +image:diagnostics_report.png[caption="Diagnostics Report", title="Diagnostics Report", alt="Sunset", link="diagnostics_report.png"] + +You can then download the report locally on your system: + +image:diagnostics_report_download.png[caption="Download Diagnostics Report", title="Download Diagnostics Report", link="diagnostics_report_download.png"] + +* *Terminal*: Opens a Terminal (command line) session to the Cockpit system. From there, you can run any commands available to the user you are logged in as. For example, as root, you could run docker or kubectl commands. + +image:terminal.png[caption="Terminal", title="Terminal", alt="Sunset", link="terminal.png"] + +* *Software Updates*: Shows the available OSTrees on the system. You can also check for a newer tree, or rollback to a previous version. + +image:software_updates.png[caption="Software Updates", title="Software Updates", alt="Sunset", link="software_updates.png"] + +==== Adding another system to monitor + +Once you log in to the primary server, you will be able to connect to additional servers. These secondary systems need to have: + +* The Cockpit packages installed. +* An SSH server running and available on port 22 that supports password or key-based authentication. + +The cockpit-ws component is not necessary on these additional systems. + +From the "Dashboard" tab next to the system name, choose the "plus" button to add a new host. You can then add the IP of the secondary machine and choose which color will represent it in the user interface. + +image:add_host.png[caption="Adding another system", title="Adding another system", alt="Sunset", link="add_host.png"] + +Select the user name and type in the password: + +image:add_host_passwd.png[caption="Adding another system password", title="Adding another system password", link="add_host_passwd.png"] + +*Configuring Key-Based Authentication* + +If you have keys generated on the primary server, you need to add them to the target server, in the _~/.ssh/authorized_keys_ file. If you do not have keys, use the following command: + +.... +$ ssh-keygen +.... + +Next, copy the contents of the _~/.ssh/id_rsa.pub_ file to the _~/.ssh/authorized_keys_ file *on the target server*. Then, return to the user interface on the primary server, click the top right corner menu with the user name on it, choose *Authentication*, and enable the preloaded key. + +image:key_auth_on.png[caption="Adding another system password", title="Adding another system password", alt="Sunset", link="key_auth_on.png"] + +After you type in the IP when adding the new system to the Dashboard, change the *Authentication* type to *Use available credentials*. + +==== Logging to other systems through Cockpit + +On the login screen, you can also choose an alternate host to connect to. Type in your username and password from that alternate host, then click *Other Options*, in the entry field type the IP address of the new host, and click *Log In*. You will be prompted for the SSH fingerprint, click *Log In* again, and you will be able to browse the new system. Cockpit uses SSH to authenticate you against that host, and you do not need to configure anything additionally on the new system. As a prerequisite, it will need to have SSH listening on port 443, and the `cockpit-bridge` package installed and the same version as in the Cockpit server. + +[NOTE] +As a prerequisite, it will need to have SSH listening on port 443, and the `cockpit-bridge` package installed and the same version as in the Cockpit server. If the new machine is not known to Cockpit, and you get the *Refusing to connect. Host is unknown* use the following command to allow connections from unknown hosts: ++ +.... +ssh-keyscan -H [ip_address] >> /var/lib/cockpit/known_hosts +.... + +Logging into a system via a Bastion Host +---------------------------------------- + +On the Cockpit login screen you can now choose an alternate host to +connect to. Cockpit with use SSH to authenticate you against that host, +and display the admin interface for that host. + +Although browsers cannot use SSH directly to connect to machines or +authenticate against them, Cockpit can make this happen. Only one host +needs to have Cockpit listen on port 9090 available to browsers over +TLS, and other hosts can only have SSH accessible on the usual port 22. + +==== Working with containers + +The *Containers* tab presents you with a UI to interact with your images and containers. Apart from the system resources graphs, there are lists of all images you have locally on the system as well as all running and non-running containers. + +* *Download an image.* Click the "Get new image" button from the images list to the right and enter an image name or a keyword. Choose an image and click "Download". + +image:image_search.png[caption="Image Search", title="Image Search", alt="Sunset", link="", link="image_search.png"] + +* *Starting and stopping containers.* From the "Containers" list, you can start and stop containers using the buttons on the right-hand side. Use the drop-down menu to see all or filter out the non-running containers. + +image:containers_list.png[caption="Containers List", title="Containers List", alt="Sunset", link="containers_list.png"] + +* *Click on a container to inspect it.* Shows the state, the command executed, the container's and image's IDs, a timestamp, as well as the container's own terminal: + +image:container_details.png[caption="Container Details", title="Container Details", alt="Sunset", link="container_details.png"] + +* *Click on an image to inspect it.* Shows the image's ID, entrypoint and command, and a list of containers based on that image. You can also delete the image from here or run a container from it. + +image:image_details.png[caption="Image Details", title="Image Details", alt="Sunset", link="image_details.png"] + +* *Run a container*. To run a container from an image, either click the triangle button from the right-hand side of the list or choose the image first and then click "Run" from the top right corner. A dialog is displayed where you can enter the required data for the new container: + +image:run_image.png[caption="Run Image", title="Run Image", alt="Sunset", link="run_image.png"] + +You can select which command the container should run, and you can also link that container to other containers, which will allow them to interact. In addition, you can expose a port when you want a specific service to be visible from the host. + +==== Changing the port + +*A.* On Red Hat Enterprise Linux Atomic Host: + +.... +atomic run rhel7/cockpit-ws --port 9898 +.... + +*B:* On Red Hat Enterprise Linux: + +Create the _/etc/systemd/system/websocket.cockpit.d/listen.conf_ file and, if needed, the preceding directories. + +.... +$ mkdir /etc/systemd/system/websocket.cockpit.d/ +$ touch /etc/systemd/system/websocket.cockpit.d/listen.conf +.... + +The file should have the following content: + +.... +[Socket] +ListenStream=9898 +.... + +Next, allow the new port through the firewall: + +.... +$ sudo firewall-cmd --add-port=9898/tcp +$ sudo firewall-cmd --permanent --add-port=9898/tcp +.... + +If you have SELinux enabled, change the default SELinux policy to allow the websm_port_t domain to listen on the TCP 9898 port: + +.... +$ sudo semanage port -a -t websm_port_t -p tcp 9898 +.... + +If the port is already defined by some other part of the SELinux policy, use the _-m_ argument instead of _-a_ to modify the definition: + +.... +$ sudo semanage port -m -t websm_port_t -p tcp 9898 +.... + +In order for the changes to take effect, run the following commands: + +.... +$ sudo systemctl daemon-reload +$ sudo systemctl restart cockpit.socket +.... + +You can now use the address with the newly assigned port in the web browser. diff --git a/index-main.html b/index-main.html new file mode 100644 index 0000000..5fc11d7 --- /dev/null +++ b/index-main.html @@ -0,0 +1,35 @@ + + + + + + + + + Project Atomic Host Documentation + + + + + + + + + + +
+
+

Atomic Host Documentation

+

Welcome to Atomic Host Documentation

+

Please Visit Here.

+
+
+ + + + + + diff --git a/welcome/index.adoc b/welcome/index.adoc new file mode 100644 index 0000000..0769bf2 --- /dev/null +++ b/welcome/index.adoc @@ -0,0 +1,21 @@ +[welcome-index] += {product-title} Documentation +{product-author} +{product-version} +:data-uri: +:icons: + +[.lead] +Welcome to the {product-title} {product-version} Documentation. where you can find information and guides +for using and exploring {product-title}. + +Atomic Host from link:http://www.projectatomic.io[Project Atomic] is a lightweight, +container-based OS built upon the principle of immutable infrastructure using the LDK (Linux, Docker, Kubernetes) +stack. Atomic Hosts are built from standard RPM packages composed into filesystem +trees using link:https://rpm-ostree.readthedocs.io[RPM-OSTree]. + + +[TIP] +==== +Use the left navigation bar to browse the documentation. +====