From 720e1ae3a1f59f4b2927c5cdef0908561f8ff122 Mon Sep 17 00:00:00 2001 From: uu59 Date: Thu, 24 Jul 2014 13:52:04 +0900 Subject: [PATCH 01/10] Separate fluentd log and error log page --- app/controllers/fluentd_controller.rb | 7 +++++-- app/views/fluentd/errors.html.haml | 18 ++++++++++++++++++ app/views/fluentd/log.html.haml | 23 +++++------------------ app/views/shared/_global_nav.html.erb | 3 +++ config/locales/translation_en.yml | 3 ++- config/locales/translation_ja.yml | 3 ++- config/routes.rb | 1 + 7 files changed, 36 insertions(+), 22 deletions(-) create mode 100644 app/views/fluentd/errors.html.haml diff --git a/app/controllers/fluentd_controller.rb b/app/controllers/fluentd_controller.rb index 0e37f15..00cb909 100644 --- a/app/controllers/fluentd_controller.rb +++ b/app/controllers/fluentd_controller.rb @@ -1,6 +1,6 @@ class FluentdController < ApplicationController - before_action :find_fluentd, only: [:show, :edit, :update, :destroy, :log, :raw_log] - before_action :check_fluentd_exists, only: [:edit, :log, :raw_log] + before_action :find_fluentd, only: [:show, :edit, :update, :destroy, :log, :raw_log, :errors] + before_action :check_fluentd_exists, only: [:edit, :log, :raw_log, :errors] def show end @@ -37,6 +37,9 @@ class FluentdController < ApplicationController end def log + end + + def errors @error_duration_days = 5 @errors = @fluentd.agent.errors_since(@error_duration_days.days.ago) end diff --git a/app/views/fluentd/errors.html.haml b/app/views/fluentd/errors.html.haml new file mode 100644 index 0000000..91ff3e7 --- /dev/null +++ b/app/views/fluentd/errors.html.haml @@ -0,0 +1,18 @@ +- page_title t('fluentd.common.recent_errors', days: @error_duration_days) + +%p= link_to t('fluentd.common.raw_log_link'), raw_log_fluentd_path(@fluentd), class: "btn btn-primary" + +%div.row + %div.col-lg-12 + - @errors.each do |error| + %div.panel.panel-default + %div.panel-heading + %h4= error[:subject] + - if error[:notes].present? + %div.panel-body + %ul + - error[:notes].each do |stack| + %li= stack + - if @errors.empty? + %p= t('.error_is_empty') + diff --git a/app/views/fluentd/log.html.haml b/app/views/fluentd/log.html.haml index 6a6ee5d..30f8bff 100644 --- a/app/views/fluentd/log.html.haml +++ b/app/views/fluentd/log.html.haml @@ -1,21 +1,8 @@ - - page_title t('.page_title', label: @fluentd.label) -= link_to t('.raw_log_link'), raw_log_fluentd_path(@fluentd), class: "btn btn-primary" +%p= link_to t('fluentd.common.raw_log_link'), raw_log_fluentd_path(@fluentd), class: "btn btn-primary" - -%h3= t('.recent_errors', days: @error_duration_days) - -%div.row - %div.col-lg-12 - - @errors.each do |error| - %div.panel.panel-default - %div.panel-heading - %h4= error[:subject] - - if error[:notes].present? - %div.panel-body - %ul - - error[:notes].each do |stack| - %li= stack - - if @errors.empty? - %p= t('.error_is_empty') +.row + .col-lg-12 + = preserve do # partial containing
, so shouldn't break indent
+      = render partial: "shared/vue/fluent_log", locals: { fluentd: @fluentd }
diff --git a/app/views/shared/_global_nav.html.erb b/app/views/shared/_global_nav.html.erb
index c46c4fb..c35a5ab 100644
--- a/app/views/shared/_global_nav.html.erb
+++ b/app/views/shared/_global_nav.html.erb
@@ -17,6 +17,9 @@
       
  • <%= link_to_other t('fluentd.common.log'), log_fluentd_path %>
  • +
  • + <%= link_to_other t('fluentd.errors.page_title'), errors_fluentd_path %> +
  • <% end %> diff --git a/config/locales/translation_en.yml b/config/locales/translation_en.yml index 7585395..e153f33 100644 --- a/config/locales/translation_en.yml +++ b/config/locales/translation_en.yml @@ -120,8 +120,9 @@ en: <<: *fluentd_common page_title: fluentd | Edit log: - <<: *fluentd_common page_title: fluentd log + errors: + page_title: エラーログ error_is_empty: No errors settings: source_and_output: diff --git a/config/locales/translation_ja.yml b/config/locales/translation_ja.yml index 8b5a347..c0f892b 100644 --- a/config/locales/translation_ja.yml +++ b/config/locales/translation_ja.yml @@ -119,8 +119,9 @@ ja: <<: *fluentd_common page_title: fluentd | 編集 log: - <<: *fluentd_common page_title: fluentd ログ + errors: + page_title: エラーログ error_is_empty: エラーはありません settings: <<: *fluentd_common diff --git a/config/routes.rb b/config/routes.rb index ad8bca2..c5580bd 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -4,6 +4,7 @@ Rails.application.routes.draw do resource :fluentd, controller: :fluentd do get "log" get "raw_log" + get "errors" resource :agent, only: [], module: :fluentd do put "start" From 77153928d5252918ba7f519330b350990ac9931d Mon Sep 17 00:00:00 2001 From: uu59 Date: Thu, 24 Jul 2014 13:52:30 +0900 Subject: [PATCH 02/10] Auto log reload to be true by default --- app/views/shared/vue/_fluent_log.html.erb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/views/shared/vue/_fluent_log.html.erb b/app/views/shared/vue/_fluent_log.html.erb index 86a1145..e9a4580 100644 --- a/app/views/shared/vue/_fluent_log.html.erb +++ b/app/views/shared/vue/_fluent_log.html.erb @@ -1,5 +1,5 @@ -<% auto_reload ||= false %> +<% auto_reload ||= true %>
    ">

    - <%= link_to fluentd_ui_title, root_path, class: "navbar-brand" %> + <%= link_to fluentd_ui_logo, root_path, class: "navbar-brand fluentd-ui-logo" %>

    diff --git a/public/fluentd-logo-right-text.png b/public/fluentd-logo-right-text.png new file mode 100644 index 0000000000000000000000000000000000000000..46fc653876c78aeb2768a68fef4eab1e4742f831 GIT binary patch literal 63239 zcmeEul8S_YfCWe+(hVk!ba!{>5=tpZD6&YSq#)gmBDs`=bW69y(mb>L zSk~|J7d$T>-gsTi%!&Kl=ggUz55AR`eU6VqfrEyIhA;8ri2@oLjyf6|CKmP;@SEP7 zP+ag2xzkfMCq-KmCs%z3V>B@%TLa_U64v^r#tO#zM(*~l#)4>QyI&=qh$*=ZuZ+n+ zDF>XfHa_r7CXQSQA!4}NBf5cuopU<}-D;>nx_IWvZsrh^nE|F%n8AF5|MX9q@1maXbp^H|1L~q-EpqltQr^AOjaWk)rr>m@&v4>y%od>-O$@yGg zR-(eoX5}YVF&WJ^E)Tte<6jX{36mepuF8gh?tJC`!UP@wK^ZxfQgFem0Ye>ti?;2h0MmrvIh^G!x z-%(`hGK~Fg^l*uUA5j7jKcbXC)#cw2cC)G-z5HsxRDSILji8A}UIjyaz}H24wh%{_ zy{FQTB3aPSN6pypNcoB$6wS(djJC>VsFpU~&q-;_EbGxfpMVzoq=o4An~v=^EOUH~ zy{+KlUDA|st&9r+I6wdz5Wp*duU0zt(#0d7{3{f>*q`3$s(cafE|962>Y(+hNfs?~ z2>&)1iafEZh@`ePUah7+Vs3j2bxpX89RC7<$$aHItJ~h|(YP~({PmOjU|9i>c!de( zI~z8(r}aMJ3X7Z-CUU}iNCPRF()0Si@Bcc;^^C6!BMRr)&)tWuM9Ft^u|*M;s$qx#*Lb3`?*&ea#%o28c`zl1p`nZwi=UW5wRZ~SYp}kBKZCW>UFvX;hW2Le! zM3Xq%rZ5gQ^()NUH*`XkHQ3mm)!fiT!ct#~09fm-XN<3LlrUk*t|@F(1-U$*1&EFY zWOMB`w4!HJy}~jvDt#Rp8($_s2fM3r62XKkPpq%((jXnNzFv5_Jf36H^n*c-%VE*1 z_6Sm7z48q(lzd|4PA?Sba@W71qhu91W@nsOh>12|RzY_ZuD+G7Mrxjry3;u~Q5Tb- zQ;}e+5}DKE;r?(bf%h|Vg%&0V5H1LVt#L<;fqJU5NX|@SrYfYvwyifM{))SR0KN|Q zOY(eXKPXcMG1591U?Oiu2iFvwLf(R$GoJZbO$zQ&6Ngbn((m$DEV1bm)$^%H4%n#! z1m?SwEq}n?hUG!V{df7)Okc0=l(=V`?rAs!$7HMyN0H_@C9r~n)St|}2Gfc|T z*3#>|lHt)j>+fu;E0&OCL+k8toYF=rTq{z1V~*D#wr%WY?$&No zoJa!NQPZho2&!*0WzZ{QF-t8b%T{oSNagjeC8S=T0M2il9jY(PB*!UQGZh;ktg2*-PE5&H0KuW zZ}F`+BBCoi^!!TaB?_q59h&J7b41h5>j4EXEz&{gj_kh*>`PORWY zLhMU_t?=^RYfuv7s2h@JNz_*?f7BV>C}z$h2GuLRBhHnBddF(-v*IsRWWhUOKS*G=p*)MR5_WcE^0C*;>QInCS&A;{cDgG5Ep zcDn;$=!JIupss~CcfvG^$7Y{&M*2F>#wD{{*cA{#D+(Qxu%tJ$#=y=kpTG-3f zox-=$1-+Dnv4jv6 zD;MK7%zjSr05Pr*WZIy81T{ib)jC~GxZNO-nI1tgERPKnkCiJ-*?8qT6I#|6!3l~1 z8rAnjhQtXtRDE$roSXpF|u3^iT{I=VTl_J?C0WlwUmN^enLUqEy&` zYE@|w-xzP8j;Io>Tz8MhBe!|6)nd(|NUNzp5p+@>WPoa0HPNYg-1_#dT10bv=PPpD zDHwDS&00d$^C~4;h!(yyBswvg=WC}%lS z2jMkaW0yeUEg(k*2444n}`u#+IY1=EbC^VA6-HuRcfw6)@E|;L(+V4C9 z2((`mTQq6V*5p z0z*QZ&@K6OfQP@eayk-aF`|rOk&TOJ2nZ>n#da;~&5ld4SKfmnGGd$eszN7w!uQX) z7ycqb$6a>mw-OjP%o)n65iJqyMkb}N3#f@2DF{;wDDycLnaivmE=5H$r)W_oW)!(S zS4E16l>Ei+Po>QZWHQC>K6+dv?V(Hy`U;m#SQ}EclY5-4*K_Am4DAx7PLR5XX2OJ6o#D``7aK(VmWo-lkTzf&ud(en7Eg6`W{?<*| zZ7OS{DVU?f;Ty8yK-&bE$P`iL(npI=1Z~Lt3L4y=RB~!HxVw}ypjXE4}$`FZlN7B zUxKNcDW?n{+rqQN8_9U5Q6|@V%+vU2Bf!4*{YJzhri1MW92haqb0DJD??wom8ohRROeoVmWN;hC{SZtx{xfBOpE5lvK$A}0Ws{k@53&|`e5ymh zh0O3|4WP)V4CA*`VTE`sfjT75HNKxFSEvtp6X9zC{Ls%S+ObOrID9k^)0x=p7uz+y zv447Elz9WGsUPeL;=}%}h>fLm&8fF)qRQn1b#E-}AD6^|CMD2wbd;p`(wXo{XdQ9X=4yt&x9ZQvlh#U8g6J z`lYg`*KBKY1R%m4P6;v=!Xa=cq_291fOc=LfX&wuKh3qy$68~{{ifjQpt1|)ELMd`-Vb?;LRce*f3<~uwWoY1QR zI^+`%kLhQXrv%WYJfFL|`TOzf)}m;mmkp+v1um~_ZKxG<4N%l(Rf`KJgi2`7bF?Ns zLP@d&)6{-1NB6XS$$`t}1qMFnlQcC_p4sO_&5=421vaK%q}1~@>$;k0&8ba9f9Jhb z-#H`Qo?JpiP!L{qS1w#o&)jirYPlM2;r)^NX(;U{6J(t8F@fjz{gRz)Qn=#3i-oTL zV=ykz^1=o)2j)B__{%eIu35cCQ4ZCUlp7$H-l12og6;VDNta^I&tabQc<#y@4%g`j zak8P~N>oRsQZ9lQjZ$LE9IYQhcqJ{Bd#kogeJn4e)GLEF;I$gz8H_#=xatlzi=*Fq z_G9|oT-JpSM}h<{qHo6s93l1t{ZmOmh{q|`0L&cvR3?uNQJatqnREbP3?tSxB&U&7 zHqcV_?X7vC%wYw)>Knal#ksDNh1BkEwZ6LfTAhXFdwjXmJ1aYwB$ z*Ep04F`yzR@wlTwzq;HuP5ZRmBsTjBGm(5VmrRPdmPAL9o8Wxzw&EvCWPhDIr?m7r1^xoU%%yx{O_3^So z#gH6Oct_pTz5Wh#mXR}vCF!^(w$p_?AC(G|??7DmLA`bU!e!Nq<#W0%2+DQMII18& z0ySpIiN#Di$qb+5Q{T1@DrlWxW6bQmZKh49Ug#WW4(*NAvHeFmprLaxMIm!>U@$6S zu6+UkhQyuj*!TGw^Xcbz-(eKAeEuJeh(ozWfsUzwxiNZl_K&Z__YFbA084$@L`GuF>OIojRWx5!58NTL2~2f!DuxN`K4y{cYR$5(tN)OQ9T~ z1_z}~De7X@NanAjK_Ul`*xA&?vOKu$(fo5%%mrTqlOuN!>BRqwa%p2KJTWnSOI68d z?*CHd@I7NL#z-Pz*TN$YMZ0i7yFUGECHaIt+wUZxeeNgV5Rf<3Z(Q&24Y_rr>4IaB zl5GOM!8ox^Fzub%a0!`tpNTo-I3xy`5R^GU6lWl@DhyfOGKV&ERrA+vE{8YqBdhF& zD!_yaQE=`{ec{bqtO+WmJ|COR17U87nGd5*;%DT=o(z>KBYm$-)uC6tbE78o~ z{4o3i|02Z9=Zg?hF31g3L=r%ksaG$}sKtXeMf3f<_cS54EE#Aowi4Z2K%{WoCqD?%=T> zH~?iQ*2an)H(?oS5}xDd^cI+!CI-zZ`h*)h17@l$j*jO|2|T>m02hewNTHdfBQj#z z6;-#Kg3lIqSI%iX?u9@OP29EjQUg`jN4(A@Co=(*7*_`|%K3qLd>vUyCVXxOp@e}h z$cyC#3}7PBKnBg9WoPJ9?QW&TBkI15j$6a-ND+u#G3(DOOMze1u}f2XbM`97QSgRk z#fz-;-39G_OW|n|Cg*5s;6LUSgVs$x>J^LcsvB=DUl)p1@mmkbvv1*qYN*mmvi3ANP-9egr1X~mVy&+aVrI(P^LIEXY+43Ypg05r zwN?4%AV#K20et1B?$?f18o>4XKZ3WN=-E{s|Mx;a!lTmAUzt#k+Q= ze}>FG;+6h|<2M-1nyj?T>=J8SM|D+Z;A%4&N1zmK>E+R%A$N~PR0h+HYHO&dB?BzEP zoA&d@Vb;iVcDE6T=|GJk?!xP7`Yw{ihdKZH7z&cyYRrSmQ!GfjCq`F!&nqen+MDxz3ke+j!}9$f&ARtt@w%~u{cSsl|a)iM1{ z=G5=uCBF$bxu`we55R?R_sgWC?fseUPpW%un3lchTwOa zB{uc1Sr7kYbanN*vgd8YQNmFqDl(gF!mL#m3+FblY6_xv( zV3W(Yu3+(f_DShT_`-VM4G=&1?f|2Ip&LbwC|aa zT9UOe0#4_yR>(c+8rZkGogZtWWk65&ju?g3fOn{_&lhY5=)P=>d3d_Y+pH*^-9RUc zqb@IJ>mny?M=W4s(tBN(4CTlj06&^;;ZgGmr%-UPPFWGEL}G&qJjm$C{JCIaE%k@3 z-KhX-89G=tLTh|AbUVW#c9uU*b(?A}71cLi3yYvd+u)7FnJ76;@Ie*JH{dD;%`H{r zSkWhudMj85T>GLDT^yX?&}zd_956-L7G4r#!k4q)jMDuX#A{^t1B-7HDybIkgDfBM zPfMOU*_J!L`_I5_Fi`ayU#(ufcGeFt)hqgNVjo3I(PIEmjz;t848J32vrG1Nwn;XsmyFlWM>%yZO^R6n2^MK&SEY73N8ziM`Y>wp^#XY$v8xb>{~W zUq%q01bB|_k(>?Lq=E49P{>o2U!1TKR0I*7K#oPrEtpouq{76$m_{~ZZNDuF0wvJ( z4(2+~HQAX}bb0SiGkQITGacxlIKc?^a5Sv|1nkxHr@uu|O@tEYq3WHd?97vnj~f4n zJ1SsN0Lg2G{!E)gUAmwxB2|VIp#~ABu~KVe++;;mifaIAgQYh#(Z&!<;#IcCP@1ej zbp>xeg_w3}1dJZx7v9yYAo!`eRFqW5D;MsLnfJdpbg1$bBv>>|Dk z*ZyJ`n=PH+5Ky|ff0RV@gskEHKUl~Jl%@KaXDYbk8}|P(3VaZPrk6OU(DAqHWWZ;~ znd>~i>_8sZ-;yTa$Ta@?fwuj7+38$Y&?baZ#YZ;#0+M*dK3pT=#_hNBBN~smy<_-R z=i*w@apZ;h^+Uio;**u66RB>Zxyccqt=}&pH{1WkH6FB_^-|2_1Y1Q^BVvtpkGYUn z!jsYn-)}BrOqSdFYyf!D{^PeINaQ*FkFDOjcqHxpHu4uOP$qb>LDRcad;GmD-8b#R z7Ex;u8vs^_^L zBZ&Rv|=j}=^p`~!_wnD_RPJ3%nPOQ;H<&UHo!3?7sae!@Lw{>f{%kHXIU38)Z*8V zR!5$FK1fEPQ~wr0qlZ_q3IdoZ@)!0ETnQWlFR-hp0@yh|ys9q}`Odh@?7M;2{9{{z zH}lhJSzS9K`_EBq905@&|DJR-bE@5go3A!;+&xk{-Hj|JRUDf>qQ2SP)r z!_Y4YY&a!rX7suaFo;yvuI#e@Ys)}DW#;}#Z{B?v!N zyU3GKybz#vWysvuI`j+Z&rV~h)6Ml{HkEhIAP@8W4hIF*Ii7O&*P454-&JZ8RM}k z?Wq@*&CiW61J`AGYjk(sakQ!9sEZ%3HaYGj|8N&YDFUyzde@(kuUZb+iPd=78uGD_ z)xMk++#tPRdvX+r@6($gzGQf0eG_mVC>BWQ@QaGgW%-UI+TvvQ@BV$0+;8IjYEcOST)3wNJ-tk=) zQ$aFZQY|fT5y;8y#Ig~R&Z}`g+k^wr+eiu_-gfgJG_>!kwh(b_`4J|`^)o*wv96^Y zsnj{Ie7+`t1*FCwhfZ|ZjUv)kamu`2q6`Kbsoov$jj64ahyjl&Ms@K-$Bx^Hbq&FD z0cnF5d!O$Wgbedf0OaFe(Yd%9;)z)~Ci`ipN*83M0QFTZx%I&xa0vY+i9mOlf$a*IkuDeLVdp#YgMl2 zKTE%Qo)@-cas=^5y6loX1M&avHas5}en;pR%w2Z^7MQBCofl!z6EH2{VCtT&$Qwee znAP1&&j={=tNsHZs3?8)Mk1vVFPF(5wM-DwxF0@9>>45IxN*$mvnf*PL4MBlzu@5B z_r0Wjw~R>;Gqiv*D?2^=BK3{Hy`NgO#9&u;#H{`@Iq#XEW--B}GNxGi1KX3=qTJ_V z{(#q!Ouv_bhmi02VvmkCez~rw@DidRB1h0>EhxO!P^4jOjhxTyV@Yu7KZ+2`10=8; z+Ewt@YbES(C}t3I)usefQN{pXW#aZD5Xv;GI_B}35@|<%>lXnYUy@l9JM5C!ZgQK2 z(Fh%c5${qf6}w+lhue=qA1WmM!@I?*W@FIf3IT=by~GhL<#sY#56KHww1k4*3s>Y| zLBK(awfZnU<0Qp$J6X)}SIRo?8^UPD;p&UcI|6KH$+CguYg<|ReoaH6)=J-9PzARg zkjD9gJ{PPNv*Aj|-;{7_m7>vHvrbeI;Q*xRYxy%YD6Ye@{f?5eD_r;>OiZvjNV%Qd z)?;a+gYq2Oh^t6NJ#mQ#aO1~Vp-L~gVEHMQ=d`&^2wby1T1fGE7)*#ozIKrH%kNpI zM8lq4+G`oMy2Y

    &yD*!ZJmGFcrExEAyp#ZdPRPZgINE4riK;5B61^&ye>4(rToC zltk#Z6@nsodideH-<-R!@?e7hD$ZP}O+3$m$IbJ}OJL8*jMGm)9DC%{tyWb)rIfFI z0eSKq;A!Phms1@JIRX9-xE;8Q$;`tzSbTw@yd%(+L#&^E%MY6UjF3Wz2cI!Ej(h#^ z&_}nY0cnsNm_#*uvrw93u`-Z=BIknzv><0$1L+asfhH{1xN;&(UEELTw4m;0Q;cx5WzxfSabE@GbfxylJ${yAJ|-?l5reB(itw$I7Tx*+@O z?uC7G`j0fh(pyb@TgY=xUx*}Blto7Trfhn6MM>f>zowC}`2(?5$L5|VD3Rd0FgX`t z6Cnk^S?QPIKQ6$a^6fu$&O7YqcK3lzMqU*d<=WLPwnYUwN~qe@SNdxbZ7_n01r2bW z1u@nj?OIa>*0WHGnFW;Kln$YqgC)c}KoN*Rjm1LpelWWm$<{{{!Z(0~1Z|j89Sx^b zHwCJy`GErJ%-!x(7mb;kOhq7k(upXsdcB?=$ebbtpO$3iG^DxFZw3j*(KdW$q0<*A z_4_a%G2V0I^mlK?xg+^%K*bpTqcK~lz{gUzAkzt0oBCBpEOOjCtmjjhLH{Z57-<;; zEnHy{+U%g6!CJN3cwB@a|Cio#s-Mc8m^_u8np;By29b1ZVF0 z1+Da6A;u3k>BqU+-Qa*)t8sa`AFGGPDUyZVC89b*(_#sd^cm{-wSSjUqP>mtK z+z0`+xNqXV7Vds7c`gQ3aZ9+!X6{SD^)ji%=asfcM?8lYFw6lMTE4T-c-86cB|Ezq z3OsO+i>pL_fPomztfBGwtKA^)t!J*IROr9kp>AHw=sAQsk?NrXi?#3`jjgBgc%Q_* zhIVs^ocyV}vZ-J9r(^BszLCWG`6GAz5vUs#<$ z9@!d)Iv+5Co#@Y8%saSOKagTUNo&idT%`3o=Uj(8$f?^rP&}-{?MS&}L!y2_sVW)yG6_V|YS1r5(GHo|g^YEOYpza_`V z6Iqdv{RNN>?YCwSMvshj?J+RdO% z(Y$%gjitF4X59j6I}=+Wr-!Gj>q_x{rH6}#>(n4*Z{w=XY|f4IbwCj50F2ZU(GYO> zPyi@Cgc6lSVL$~ckzWLNf+nJ6jD734&J6oilJM@@@m{{>G@WAFXl^1Bu_AD5>kxhT zVG8zIUQ}P;qh^AuVl*-*5Vsu_RXx7*$+5H%S?Y+0y^WLZXZE~sUKYVWjq8$aLS{oe zA4DH!q|r9OrAAXP(!%ZvaA%iJ-@%%w@MNNg=46cL;2F__x#Ccw`DmSZT@MdrLdzn) zCVb7LPb5CKD%OB~U&M1osDYOrPcmNDWgGdCY&^J`j;Kiz+D&}1soHTv7bL}! z^VN@MR#>#wmVBLTUfRf7Qv_O{*y+V9f#4og@B$ z2nZ>kO}2DV`*f*5ZblVXtkHPSQ7&KDW&&c&`J;>4_UDHwhRY=uoUaUjOOF0Fi8q8g zF`V-^9$dF}-h_b`5c3%4&aIw)r%|8pT-$NOHl=Nh2`pS&aXN(+N4u z?$-;9=3}cZAx(Rmn^Bz2+q!kAqf9(F%5-xAt00RzBNGdhl9N{~X>Ba!T#+$O04Wpt zcdG;bPW;nK(9r;%&!8CwPrGdcFOL?3dDvo&_u;Zo4HD8a#7B|8dI4YzXeCw;UQzzf zer{*vZTcvvHr-EDDgFwwQb9=PL0W2U~ItF z%S-#hlMdjCjB%@7a)Ed4&ba>Dtj%?Ex2`%ljnNDoN7e0)grIuN`r2sY<$^2 z$v18fh%TGH^^j3NQ9amN@xpc(0^*&J9C*61Qy%A^MQjoDvO<*}mjevsCGQ5}*|wL< zxOIcrTZ1FMKGeGac<_KtzBc3edB#uDf+;D-2Fo?7Ka3o%X_|>@@_eahvHHk4u%lD9 zUy`_X{)M;iS5Ig3_U3}_HV3QcBv)y8ceg@M*HWK7t@>4>dBl^VYjxV6X*`z1SiM8J zA;{WPI%|btvkj~Zn|7X4II=JD?^ylmqLX)yyePKoBF2NRW$rqt_=hoed?{+o2cBHx zv&Vx3!AW^z8>XRG4N1`lvhn%ae@~a=#aq|2%vH??FGo~dLG!IxbmD)mOCe*uKUh~; zmwMPsN7=ZW!|ugKS3_SULLE-%g!nKnf_S}Z#i+0H2ECa zj9w-k)eL9@nN*SYD$NLcscF;9Cdn8A$yMcQ`bfu@UtewrVhG81=e5C)_#2cHn<4%lKix=)qluTuWjb-%naR8Qx8>Ibs$!lg|$v~9oFr&>xRy8i5^xg2(B_%5Pw9Qx}9Ox-=L(rcL=$L);QSej~tb96$6XnlaP(M;~6d^^~hU zSl9md1#8FejfmOn>yGlC;?Ux8OPW)S1HC%|Or9PoE`d{O8-Jrs@pNhdI4m;hQh_|P zeyNUi#1IS{q4^!U+3LwkqWRdM?FZ!JGijbx#HrQSba0gB<}xwnUSe-;%@{u_rk3akjF)L3alW@|Z^I?bfnwK7@??o1Z^JbkwT#`KEN`Ko9Yv2C@klb2QKc4Gbhrkh|7 zVz=!UWWiPUNb(ydDoo|lIown24KRH~y(?7n%P7+67geCSa>f*!$kxDNo*-#06yy0= zpy0&n-mS8C0(Q&G6Z*4rHAHi9CA<@O+YfMSlcZqYBDV-0-*a`|X?fcd!j!ut4Y5 z4HZNwdqSk&l-^cn9p2N%h{yx68Hc}^YICmn zWx+JF>6VE&vnQ)-fU|0Km)I({dXHJ2*HQLj!=6%&rG%~gi_fo#?=NsI@PUhw(M69> z;uZrPJVs9KE)7z!c$b|Pt+nu6|7h`Ogzz9xKL~r-u6s;eQbv3=mi$VCqHtRntK^=M z#J!r`f;`s76oCLH)txIWcGu{pM%hk5woY;nG&R@73PVIJo$qbo_m9`5d6rcXG(^EX zj6SEsLgaq*ZbDRNiIM|@)4ul}QVZ35e>e}S(hDA-LDaFB^MACeP$lc;%=7w|sl#V( zMG}-E`HtsgsEFjamM2gXi>gx0`78gYKn3xe3pkUYbrp!OVbqJYRZw%32~wD@(X8y^ z&C;kK4p%0%tuR}*hlFKm32(vb4wsoKujp;^Cxj^rlt(#Ptt=t#C6mzsQaPDM5-HWY z1qxYCENy3H*8P)%NOYFIJznM1EPCSh=dR6&xzNuYvy* zxEd!3t~xzFKB5jkzNVDZ{;r<39>bYGA%(4ad*@17J}B^A%Lr9wVWg^O2;Kz<62qj@ zLnH}kde+HUFd2dhsMG>Cjc43A1Dkz>soPhs^gpsSW}%h>Sw5DEaC+B(eZmT1B z{LjaMgYAG%A>X5!9bAdarKN%iov}nqf@i<8Vd=_FcCJx|H)EZBdmsC`@eb_g;jO;F z2-=}TzeS?RMZZ8Bd{LPU6_Ur+U!KE*f4v!{8?;VHxi<)g_N;QG$4XCG8pLCZm{{5VZ2 z-9=0voWHx<&n(kC|0s<)@O0jQ{zc;rxT{x@LI3HOo*;GJ;#sf)p+U?wU1HYQ>L1cX z_O|P`8w^CuKB;`GUe3+HWTLbe6e5c)Dc&2-6F#hc^&Znk0G@Vj)X3pCnbD$$8*3*Y zhSDu<#a>*mDM_1;Yf_~%S`R_hp}(isN{-h&vl)!|gF@d)8sUF81zjh%caga{2awVPiu3yl!6;yukk5xu9JTr&)GO-z12fs zL%BMe=fRML#pcZs{9faqgicqx#iO+iL6?*%nbEu092B%%stams;{sa5r8`m%?0Epz z(h`G3v*ASrD*=2D;h=uz5JqRTvX8l5_O*iqrkcA|WMu^uWzJ8-xnY*VJ8WZBYy5bs zyW3Ytr21bTZhjg$*_j_N%NFo01>DxmMI8N=zAcx~qs4<`L&HA#AUF-o+4=ftiAG#mnC46abafeQPPj^Jtbi5)}5TzB*2A?$!JsSP>ytfT@yGvzc9enB&ek_eHd?#*P@i|!x zA8EbR|9D(K!ZaJTKQ@waty#ahJQ(H?QoyqA8h^s^d*Jt+@T_ z-bJU70!g?uS&wt`F+wxDEy#$QG;91Y?&>adQ`czLWLBN6);vM7to>yD(}5(PQ+J_u zhOpL}>A5fFosEtLM*gq(w3B$Ik{TbJ7<0y@g<24~&G_=X40ZvV4h|tUqF0+*^IJvaHpp~+i>Q6e7 zto*vHlE3)Uipk@Xq9n=afsCiZ4e(Mkl)68?q&^q#mOxXT+&21Uy+mb3ZDnj$^KA%J z+?PjyELVA>YOSvI*qMj3$YWSRur{x02Ex+GrFzRmG&F4>TBe#bV|nCJfi@_Kq4?Eg z%G_n3`+p!^SB|J-5wz=$^((1f>gB3(*^J7{ty4$1jKg-NGg}U3CXIPfZZ>$K>~=pY z?C7QII$SiW>^q0LBZtCh%AjkHo)-vd9&KfswTg|cKb|T0#pEpwpMo`Z5fYz{;=5nr zQ0#V??7qB|*}JGz^1AtMD$lfH{;@)&UsM@6Ok+a#>juz2`p3ClMZT4&eE$fX8F|s8 zn7{gQs;gelAH9~JdO2GB(PQZ1)4uKv40yRs6c;v6(+8%*66VJV}8Om#;%QDHZREJiV}Fh zHHpDhoIEPDbmX4t2gk4Pe zCAMu_4dM;9n|OTQSD;*zEdK$+C`ntM0iVazTe$6_Hly9w&s~=D{Ym8}4C<3lf@vem zy7J!=ujvd#MvbYarQN#Byw0rrb@a_@t=q(&`~gRRuW{N|6Z`JgGpqRqPNM{jaMihT z+~esZG_};AN2Bvj)?j;ZZ}vo7eEHIWlpB2&L5s^-@kvr0I$FBJL_(G4H%P$9YeF`r zP_Hm~mA8N_(e2bGUSPM2eccMjHJWL6UUp@mW-)%ed|63-HMty`B&T2JbgLQsmrSSo z_q^^{MEuCHXI=}jW+`QIym?yVmbe{?mXD3tWV#^g^-Y-^6ZeOSk=iME?UT$>>)@6)jFoxT+k&CA7*dsg zloJ{}v!hiF&1+helFqVC-8sz@SNRdg@I#EK6d0^5u=+m zdp`p{C#FfV3EJy#XUS<%{-im?hj<+CjV8KKqd(Guxi%DYD8fI+z369F-Tt#O4H*kR zuFIgeVbsnjo7u5SWh$(hki4^2;udd94A&xi><(K=XM<{mjmU~*cqVQ?KJaQF!?b^e z;2}l zzd0XD{8~d~mJU3RI(AtpVFBj}kK#uu3jwdR}lFIYx^oFPztjI?y_GX63 z=Mo}I)28D`-mO|#bu~L~dRTcD>=-UnT%Ww`LB2BcK#l6`@^P}%pE)L5)$2%uM9NsZ zr>I>qYm_v$>YEEseC=JT?oPgk$}XA$4RowHOk=y_U&+#?3YSy9Dj6@2hRETlmO{qK zQ)h0six3yzO7CZd8+fuNCNa3V^93}9IFd}l!F5UOBZobVktR1mm9J-yrIXx1VHuXx z`1nbP+<|XGfSE%YApn$aQzQPhZHBf1M*t!B&NNe+g}XjQzLLJ%!E9iZ+c%*<7SOsl*l3d$Hc|s4g>?LFn>hZK^p}h?>llcRDGE3 zJ^1+4ZL{^6YLQm(d{+Gp_H3n&zs1TC2YCm3`5CynM2Cj-(%G{mWBO@*Ze!XExixk( zLPHOzXf~UJI@z(J7y_~sls8~g`NOm9C9r~=xcOvf>J~j3mKy{JMRpkQC5*XQWf~e% zDPx(o(Qm=H%-#1{lqW0~BBfqsWavT)c{n@kB~r5-?8jfw^sUD`++Y|TJK&?=ol^J} zbo^mG#^GaF#+VyRp+5tCj9>20E&7f-4Dr<(DcZ}V)+M~nj~@6&JinR;{d zn-=;Zr{D0-jzM~4u-Zi?qtJ{^c!=_+p}o@I0_}{_ML#dSCijOO zZ$~oX9eW_Xm3FT2ri#~QJRm19{My9Pud7Wix!BEO4300Y=0gmb%C_{sx~+c9(oWyl z*|JY8rykL9)|_kr+$4y02RRx8(*89Ln{DQLoNP{hfr-2R+$ zQ=f&}5-TQ&X>mtMq_k!*F~qTXt3W%DcY-7yKBN33ronx5z;L>zW5pC&cl~rQUsrITbU17P z{8tQ;D$Q0|?JhG!<%e}&_r3N*dOb^=XdElV;FjjhDk0Dxi$R9h({-Ozsl0==yu`)b zYNA-z)L$|fNr zH@SD|s>je_PBdk7)k%%^!}z_|CIZ-xd-{4Vj=HO4y$OGi)W*epb_ zkXhHbaBn@Xd%1(JlYA$Vs@MdCvTAu_ic&@Bh6cLh3!Ea~h zNjJ8l5uEiB#krkm`3K*v>Jl_dbJZ|N1Uv)JH>dPg!ZE+GfHudmstj$?UQ=k;9NPEx)PDr_Pp>-I#hSVb-R3Ylc#)d-(0VJOneN1)gp0^9I%73)~BdfbALHet9>_EUG{a zbUIa8pD7}1UaI&I{;R*ZqkOfWqElwETr1?zwfl$TU$VQ0UB!PXtepWF)fp7C2+0|JqM%(0*6jbZn8NJj*$hoTjya$&s z-yCPe;st(#9W7N}j%|LP2JXWq6b_AQ4uM-nI@+(~@m@N!z|oeV`RDkyYrl>6aQLB% zaOrXP-w)6-b677Qb87ycqy4R<@KpyZ&5Eur`S<*)zEtFAe>Lno1hSbBzKo%fzSz$k zy?(sV|9@Dz>VT-5r+dOFMG~jc#Iw4H6&0 zH|ZX-?9{lPt1@M=msl|n`EoM6fp#OxX3Z(bWo@TS=VaH4X6gRS*8DF^(Yg!FS*U&Q zTtlv0!LKFZD$d7)rT7(FXs*jdiVe1&(3O3XN6h2XX)#l6`k~$=J@6IIMXd7)AGgL( znT+LWD$K&hR1F;}uO|Lnm8yPt_{W5uLVbyn-JO3l44eVICi$~wm!Bvq_iB~IGn*cX zbrB87#BWe>&bG?t;E#(?H`S8_GB$w9nXLG|9Y zyuRv~`^K8H?>`s)5n6=&i6u6W$6Hz`KF`y7K++(_2H+^QJ8#73HY$PgO|4%-Q+$ErD+i4%6 zsFYjUoaGCj;UI4l4zWn3RwDde&`DVa$ z)=}yF_mn?0cX?xCx?1J&lnDKI2Vtt1lYg|kznX$cTG#O;pB%p5tpHyrOQzwB`zJ5Q z#dq8ajcX_d-DzJ-Xrobe$=r9mS)tvz1Addm8+jMN8okl{QjiTP?9HR!;KRco;_YMz zwee;Z8;?D%wYMwa=jAhPAfG!%kk$P&B^{>!!-3snmrx2PK-0nwQdnn>PV7_C1&#T7+C%vHwDv5++KpwNy3lbktgniPxcR$)uGb70jBtz)YLEziYl;``7=kW%Yzc zu5hx*DEZ~WdshFe;CN$Svg+l6eKNacqRI9xV07!?qnFGt=Q0D$$%{f)tL!>5lB>`u zZgnyuuWDS2i^g~Z!)z`()c577Y-)ayn z083UbCsF@3-v}Qq(tn9N!2d4Iedh3#AI{AEbK-ty>BQoB*AocAXUGE0@qO>fCtRA= z{<7-Ms$G3*93DUA{w)+(f1esE>Aksx;0_0$WFSsSghz?^bvPDVBVEi2EoMM#Ui`0V z?LR3l!&!#W#|zm@pW9|`_DDsIybd>0Z1nvcSDOhKVT+^A%St_7(gA3Y)=1!cdPjMj z2$p*68ZHFv4qMiViQSt2GDg(iSFulcnRkW71Z&0<1`~!Hqhn02pe~eF2;X`l10C(H zbH8ykAuAv;sChWmiX0j9Y^$?YuYP?-QxCHc!3*upKgcmT<4K{y1 zJ>C2bl4>ADw4pj6P=q)bcEi{KItFp<eOqi>)Z@P>T#dJ7+~Qff4D!BM((MnFXTAK1u4UmDH$6iai~>EMa)%1~d-fAp zgRBFcy>MHQe|wBQ8NUATC$R{9^rRwNB`!=f&=lU`Zq-v!k?bLMw87MJwTdn+{fxhW zs9M(Lo#zF`<*RbSyG8aP0T-`tMI2P?J|OJlj}!$?dJz*!8Wv zcgmD681YocfExd@C-|PB{s7}R661&j8?U};sQr@XtAyg9E3R?( zhj^Ik#@H2Yr^=!9oA}#QoUHmwJ;r=(E$SsG|0VukZJtdth|$NG99t%40Xx0>!|O^z z;XKy^G3;^tHsbi?WhBkdiB&zN7`dluYb(OVQozOghr&AU zusj!IP;O12aF5PoYb>S4!Vr1sh@r-xzDcRp5}yO8;opM!Un||8IsN)T#`~|AhQ#)B z-t9+FJI=>md6g4~A1&h~*rN^?={-m>No%CEFys|xdD^TpdYjEBQOegi=V5wh$A78g zzFT5!IB}82*7U?vwk)=usqmTJ1fjMLNDxT&jQ4gn*E7YrRGc7jm|R`2 zbKbwqnm%JeO#a?^s~^)_nf;U4^hmUN%!jgIRfVG2H$cdGv61M(<0OB!2E#^0`Kf*f zVwdSMskJ|1?#(rOO`pUCdma{Aids}l2#IppG9s<_)BB*CV|k=bd!Xz(|KmMWtwi_i zk?KfWsD~M=x<}*mX9@{G+&s4=^A6RA3lp9(%G))$5rO989b`7;OOJ3HCS{PLZUsNt z3!Pe>XEL01TS_%PoHb%WcqSTF5LRI|#>!3)YQs#4nXWPx+WOX1(zB5fs$IF_TFQZe zb&Ldx7U zzA%~*l)PHy>3OQhunBho286Ke!A~$Zute@t1{`Do4GT}dweamPS+ zUPY|BsJt|diScgKw`tlv+-7qlQ%7ST?pvDw`C1P@zuBpH{KBsaV-0)2PIQ53bDT&A zS^ses{oT}HiOGzsQ5&!;BtIWlM(P~7@*ViE_uGej(uVgE&HvzOjN437`3zunTuu27 z+gMYsIPXz_pIzdXR?YS*Gj>BR`g6RsH8OO}&sLx5Kh###oGF|e_8W+854zC^D}#|A zGg%q@v{Sy`SZ78h@TdM*0#USt=K}WdMHagorq&rYoaOX$8J*+R#mVbp|0++Bu0cZ^ z`$xud`S-(-yR>b3kA*QAQBo|@C|t^q*ul7f^?1Z)6VN^YpaG*D58B z{SNZozWhy^C3GGC{OmPabpz7k2Z1v=Z2tOeP|Qc<#g8B9;TBHEXHYzNJe#i>dEqS$ zZ)88+>c05+p{){>peWkoMMRumv_qBAfY)H7BJ0xj^9k;khjHx1e}xNlcNT7*03PES zjzf34)e`DTahWti8q9Y)OTyP&7qp*1Ki-I3=8#iH%<&v#8OZIAM%Ua-^P0$kDE;{v ztPT~TSVEC&{J9wxxLHR-R#y1#y&KWYun7@AO* z(sfayP5Ixklo#$~3KgT!SArOEgAJlb!}^lA1FIf}g2k>iLTiRQT^E~bY^-Zbat?oa zPlLCfpTXbTN~jJMRbC%EerhPAMj9(m-7@TJ&N>e}tCb(=QN|sY?{)J!Lm_V%a5c{k z+eo=Xjav2GA_PwA%|mpv3~PRx7ZPaf#h-=H^>j?ni4j54U5n9-zTgT*KVy!V z!DO(iQ;j-@H1f zP^*v?PLG$^yDoPpGWhLRNJTVMp8p#^->K!r0oN~*E60v+ojCA`*UY(@XVTXTZUIq; zj*^B6&oqi7ZvsTC7gj-FQwW#K`>()MeOG0qFz+2nVS2at^CIF&Qh}kZh$jV~KVCcK z)rP3#wZ;sauG&g+z=_7`=N)_X0Q&LwZ1r^^`zXB;G z0Tv3_XEgR5Jpt@rY!uD@u^05Wd`%?`n3JA)&6mf%&ASUSV=3bIuOrR>N-aL-Dm~}Of%-YX@h8K1gpn7V?45(km zN?fYESJHgL14Mh9<{_>$ix-TMACgz)7hZQ%Er(4^GtiH-TXZ6oaEuC_m;JEeO4TEa zskK>V=C@C5R~lr!v2I2}-G@S~hAs41$A)7GgxPC9c zi6(;e0BYh~W49u5)-!VNiK7)|0NgI*DadwnV~!G1A5*D~E7KnpQ0=MqoeI74>i-R7 zD4s@`d(C$|;#lF%VlE<}ndt7uz*Y_?*;G}m#H@^#>n^>?M>mF+2`}i`1UI)M=PI|- z@8-`MhT`TT-Bb?N7}(uZKUJ3pJ$31p0<$T8s+q=k*nWRFZTclcjSA1y^!A;$=EyeF zbAjIRZ%Th3)eGHKeW%gU&rz^oBAbw)#%amG29CuW$;jXAy z^H@o=jk7bzAoA(VAhOpwc30bE!$Ka$x<&{24|-lvR7&w&zi`@|R5eBo!@lypsN(Ay z`k3S9yndS+1DVR8l&KHMKF`?+3fZr7p-kQnNRm;f=L<}9O=;BYP01vOPya-$x0s!M^9O3 ziTTr3vV_G${)=j;hm5(vymJ`cFT&=q<@!G6^5;@8rCpVq>}5$z%zg(Oxt{#s0JV?D2m?4qa4F&mQA?_5l$BHf~vRI zpG&PVpyNT+Y_er$D|K#^I`Wl~>QCPBooB7yxij5r*QLbJ(08(x_=F7~+&D+KcqVCG z<2NQMVvhHj{4sSG3?9m9M13 z*MgBpvCO^d0O9mDj_szsEK!608^$eVnb#oSIdm+K&Gx!8Trge>g7f)`eJ*z%twLJe?jwe zdZAnt;lYjx>L;=}W(uantGr%%SWj=n+KCL`n=zY$D9$wZQ)vUm*@u~>m^CFAatQg3J4cB!&Yx`gif|-~e$(h{L^CTr zzAb=Ee%iMh@ZAeWP_jDhQxjLC4@nOBx_l$1{u*CUQyd$={YrzrQd8t2S2vw!uCmdiR`4Lu{hnM(0MrmljqaT} zirdalO29&4+T@A!>Qvagl@>tKX>I0EckhQ?V9S=|m@x0{gxQuB5U{K~vL#i7i56m6 z)oP6z{mES76P+$QMJxN7Xf!>UERF$nM60>IMn^>K_;&^Dgr~QE`mXiJ5wj7A>%p!9g{2cO+I#q#>n28 zP?pOmI<0mE+jNaGy$LMn=oV$F#*81wzyzrheCH+xhgJ&}0?#K$C1xOGj={u$+T~=L zH^2j0{xg~(S{QM6Mf*ddM5o0&EUmq9BOJEth$9PK|5!48`ziEWr8q^L74Cq8QJd#X z2*n!=Xjy)3^YpE_Z(aQWCKQoXaU-EZ2VtkCPLz1qw`U$RP&XN8H8XTU-J|!}{MS6z z+Uz)vvX^kY(adh`<#GA5n4X^c2QZ5UM`sJ&XGsUQTfDW1uA3(4;NH2^YBeDw@ufjp zkmu956e^zcniP6_l;gQu@nRi9>c@-glF=VH6bgNt676sH3_!()z>T$StY`i$$LNun zFctN7`0fcw;+^F%#A;Ko+KykXCN0)z#uwSaPc2s#G$T`C) zSEg*8fJ4BBHtZ+yvEgTP7qVV1k7_QyB8Pz^{B8{y|MG8V%Bh090B*Ld!n0mirpz|(lz)>3*6l=1f~EE?q}o%Fw9GlKw{X@jRnDf9 z^fs>7G5DCFtD0o?%HD)fY2r)+CDJ8YrI)t^1YDpZbLl^4A>M#Y|Rrm=27LKJ5~VvbagRc zm)zTkb==MmNpYAA4&$|O6;tc(S(0e~j3)wIQdy-wK<}8zf8NMJ3Ux5)=oSgU5_Er# zF_#;4)Z1G{HJd%xn(^-Asc6FOI|aeyTyWekd#3}j$?zM)$`Z7_vb%_$m6RA+Nu?|e7a7UcC-x(yF2@Y_CX`aa|aff z5g+4RoXefCjv3a%NNAIZ&h(4w+K6fIjw>#DD-jGo9`-NfPtf*Bt9k9R&atiJ_*zw_ zR0~CFl5H6DBxC8+7yg#MZycrGHqkL-tBlI@i`SzjM&7PT$>O)BtV&i-RS4T-K-nA4 zS0+w^x4S9tiahbkt?fVw#7igve6IAE>ac^33$ z(`Mtqw?`H-@PsR-KhaApD+_9baSVWwQ5et#fm_Wl?89n;ppIto6^W*xP!=isJv2iE z*RFOTyH7i)g-zow#;!%)BC6N6lxR@4R@i6ry2AQ$JKnj1hqtmY(;hA1i;%O~k|64OMOv-) zT_hBlz8vRMSv%`x6IMTdw@ZMj}b{USh>&JcNQ_n&u#avjfs z`+RN<<(EXqA1;}5is$;c{e7wHglO&&n>dd1=H@8rTk3%}Q)oIwQ&SI+=GpGoFM*4r4zBF{rPG_;3PST1#% zLmO3&>BitJ42CI7+8awBns*muPmnEZ%m573e#+ZSTD$b0p(W9*L9L>tM~e#mlid)+ z*Ior=cw@SH&jZ4_kUVQoS?u383oBdH~eMwttKh(`v?E~xwZhy6U_ZC?Lt)7Ght#*ZT9D0kZ@6J9_^9!- zf7#}Z^MZ5XI96d51S455?nuY7UW~8z<)zA1N4ChxPyRJOw^=WAKc=>Mz7QPRy7a8ZaEOS6JpQU^RkTqrfH8y zW%y?>nfBR%_l$Mm8f)ZwZL!Rw4ST)iF$QQm7f^m zy7#}!QXtUk<_YTdyWftg)3+>?1te(1-xOpw_$z+-uC1ahoM2+I(IH3(8P-(Bx~b8J z{ctC*wg`VHD}49qVn02pQP(8W3lFMJ)$Yv< zRiZIkpvoK=HB2*IIZJBv&5rQR9v<~dLa4E*uPnweOBtO#)Jl9*h>f&y5 zUbOM^6+f&1%EKz1)9E>Vq?UtZM`wvqgfA0os{aFx=0k@rmwC<$k)BRuR7I>>GAy;@ zMf%(R#0SYARg`yozylW4vMl9Ch2?DUEsbwr=wKDQ2k}PW%%s{)rq=|)yA7QkMO=hO z$h2=BP5D#ucd>L6iA1HL8pYYfvCP&NC*kok^j&9tn_7K#mv1({{emQN+3$ytIqRwJ z#u{Nv)t*`|8Dg>cEBKYQQbxE4X_QfJ$wI8E&czE)A>48>;)J0>P24$tEA!PWcZ<-b z@ph+h3B|V5aO;Ump$%xMKy-lcK54&a{4da8=~z|q!ZEIpw}-Z~ zslwSYYf=Ypa@@>CItI)^xV&`HfCl*V-QsvprFY0pOkx?=Q<9Q_%9P?zGRI|R$Yx|p zaz?5eWodOT0%UJ%b3Hor1TaflS}BEa_Y@N?n-3obLYbJlL`Dcluu~N+YkvQlZg)>E z)HHY!XX@OlAssr;RODNwK$%B0JaNYykP9W^ew~Z)N4HK>K}c7q%Ts+lfygiIJ=C%3 zoJL%=8bfSh@O39_fqrSKd;7PPC~;l}0*F=oXrY6*8%Jfmt>@ij`i;*L17zUik=U(` zUb5Q7h$GW=Dw+sh0+U!u_}mw^qa#d=(a7GQkpDIqWp)v8(FdciiX(oE_Nz{N%N|`7_^w0?3DBlp{_I-g$I* zS93O1kN`ah4LoD$)#6bVH>z_swAJZ2{?612zdn*(+^()n+StLM8ZVQ1x#dPQYf;B? z?u50u-7l3UCE}gQ!fm18_KhrIpS#X`gScEkqbib^#jg{MC)P}sPSMa4=8moyVUajg zwZKjtJy&PrSxz#Wr5kX0U^Dc<2v?WJz1TUm0z@XPq@{Bi&w}cl1KI>g2$^e6Xd#Ya z-&g~E<7MreB5?)i4Hm5B)N`cFpjLIJow0}SQGtL|cCK%AkPJ?c4Li>ZURN`qk-`eR zrEX<^TT)kG>o!AYS&vHiv1j7UWaBlw+9KF2)yuvV@Uj)xXFTJ77^oc|f55AG(t}4I zfH15%< z{E{ARy}~r=LBBw7b2!qa0~_~LJ!?Y8a)K#FS5(tfY+bF*rDS}|(-0eOruFpN`b(`s zwc8{Y;==Vt8)PTm0~h9fY3cc}CMwnYxR&#ch0KKsa(DZitrk0e!a#ww%?hd{-1hWW z7g(%MV52vOYgHx)(p;ZSkeTDw1Q9C9sYYpX=!5>Qu2d3>!j6aNT)Qs14!L?e6dcj2G-^C;D~j zZ*s9iU$zy%@7CdR3MgVg`IOJ*EFOgxCYk%B3~qgbd0N0WPa2QuvL2~|3n0nfvhY49 zV781HC1A;rh-EGqv+4@)M^2{S>T2?J{8?x7_tKKDskAE6dd5Vr0~4SKe7a_#S7f`i z9K#PHQqqX2wUOv{u``Fmp3VpTpB6zZv&mTW=nUNCua6!ER!eXGwitiA<=XYv){nP{ zfUl-jJK*_u>4`93y+#jrXl>ZH@SZ1NhDVGdW~&Nb8Jz-w|IurB?M%!^Pcn39;3L&g zgA>EC(rOJEC^vW-L>-ECt+XcCqadaSRDOyEG#UfiL~+dl%n{`0Gv}ExXI0M0vGqgj z28Tp)7W(7-_dZQ~^3mfBCa)_l9XG6dz_&F0YcrROy1)FXtcO%9pEt6#TH31gK7*=p z&SM;h9qK~L;7F`L+hC= zRLz!C$B8!{T%^d(EvG$&=nUIzs&$>qj?(Qx2>2|AeRt?pGFNxPc=GL009pzmtm%gR zU9^O*?lrlAZSV!pNHRbUV+yF1Q%3i!=}T7WJ++mZkFT7NxdJCVdmgv8OU^jUtoLh` z^7meom2Xc)PT^tHl-gWaX~A({;8|2ATp$%b8&0isAeLBRX|DE+My*hJ$45#+Drp_28p8k+j2lE%0F0YHUak=>a zz(zASoQqBB)Vs;-?SJXjpx$Q=-!CwRuj!7b7ukx4;2iK=^cxCbxR@4wzDRJ^#oAjI z2%B!*EqCGTj9TF-&!LzVX?nPUV^KR4;*JmR!YQ58HO9pSZOM>IX`k(K8K0MUT>Ra0Az{!ROZUbrb9Ec&uiPVJ{Nk^)a)rD)7fbBrjv*0^#|bT* zkr98O9v$9apTwl#v{G7JtUAE!#55R4+l95Tre?BMH}MeFi{I{1v?ZfkuB#$$Y={ow zlcN>_1^|o1f)~E+zs9kB;(zR^m2F6)P>wU(2-~*gMUPe|F=#$oi}w>j>8AsyZ35qN z_N~v_WK0HztxmR_bk=I)n0$SPv>o#YGWA5(GKXF5T_)5u5Ni&G>{vtv# zgQr`Mw5Y(N14hn`tIUO`@Y{1A{Tu9IZ+O6MU$1NV>?U*n_#~cF=0POHA~H3U#(vk3 zP}7?RHqD#jzNmJKKu&g0@`vvnQut$(6K~GF0qy;7d;qFg%eo-_+*p(hV5hUx^#fk{ z+A?Zy?$nmKZF7qBE?LeYrBAGu+?beCZnX6kg67vti~QzmFJvcj#JQz?!b;Nw@I|h@R#oS7^OZ~|1nW^AcR?_A{)0<^Uz~{ za?p`(qb)C5t@+_5e#?2owy~`|r_hK(<)(#ml987(GhN$}Cb~BOPUj{ z;?!&N75)^txq4%_n0nZ*T*J91QYHNfHAdbhXDmT$Kc*>r%WrI z|g41572Wy6=Lk zE?5R;(jkJzQ@N_ zhG1&Lo1&bw$3Mf(Z$dDrlaWeWKI~L6>Nl4{6+^2<*O%YOK7P)T-*<6JK?r zhy~7ClDt9bPi}oBv5wQliz1NjFl$gA;;jAxzx{jn^;v6$3EWRa>ZLt-K$?+&wqbh} zFTK`fD?nY!coiKIsx$9s(*KSEE_T|J_d4_RzM6b$CfQi6Zq~SXeGlxmU-lB)zX5ml zRO8U2SQh$urtw&_rP?sNrAktrDtNja1`MSse1-U~&-?4E2Ji4<2eQ1WPB6L93nO6u z`2fW~QaW#FtT1R+P?F`CVH1kLsvN02aFi;9ee#D0^&zsJJaKE4-Gzp}d32-1Bp~Xk zk7T^`@vbMgs5bxL#wfb(r>3!onn>qvPz9@_Se4b}`?fK-%H4L9-^jc8{XSE&EWfQA zEXMw}S4QAdk)>xWcbS4`j`Zg1KSkG`bfK#p9HKFiT1|cLGbiisbMk*yQ(G>pK5#H7 zGEUzhiJNd-2K!lrLei`4t=d*N5M>&3FeNq!m1mzgG zO;PlvnyRs^7bWkWSJl-K&&mk&kDrhJ`+O#yV~NM@<xggbxu~>geVu~8|yf;=5 zhw0MCe&=K2f>6NC4#GGnT=k$n5A_*)*5K;VHYP{gSoKP_pUb)Z=MB!z1S5|=H_(~e z`r~^M%d^7I3E8g-sI>CNKMZm{E7Y2N*COdRm0^EAsvsgAbS})UV~t_T$*lG=qz;Ia zqPm}7KA8Hv1t@n~TQ)mRDCTiEPkmdYg{ns?w1(C-STspX13ft*l3gTY@$8hj2^Pvp%cE@h25^dZKF?0C5?TF<0VY9G@;i>{LoN`w-q3eB zNi|&CHy+^K*05n3i#yy6I&{|6+tnN*EB(JR`B|bnMh)V#DYAa0vB{8~%;j83a>Fmx zmutku?YK0O8wRjdE*XI*c2=ITc{((tA81%`V*j+wZojC;1n5~n6Tne(tYzQ^C_Jwm z0!&*DM-bNN1T3GJOyLs~fj%@LTIprZc^J_C5+g6Yd}n~&8(`f?%{AZ??!6igiYc-5 z{OH6F+5_upFk*jZP!+t=#>M%-8%aFy*GvCRKgm*Q5bwx_<4cZ=)zFLr>?>HJmDlyz z(rrj6Mr*KyFIfm^nY(p@$C7bk-$j=;YljijYJr)>(Jr8+GEtIm#nh*2e5=vqYl@he zR516?s`h%i<}8H^k-c6|;jX`l=_)S3F@!699yaJk|_Vqjtf=grnugK}04i*P3y`lXM9h5~c z`MyvGsbVBVsmGwsB<-8;eCH<4VoQu$`GXN!Y%)+BwnAQw_3B9+e&s7E;yu5BLpD$i z4Kb0bW=}sWOses!9B1n`$;^59+HoSulB+Tf%j9q8($im}X}%*nS=e{QG* z;4vsRR7<=BiYiK6mrhPAt=6t~PhyEllv^~`3PW#muSG~fWv*fQZUU#=R1?oh_5Q{e zUI@?P!S~-B0BT?zreJI3hSo!@>JkXVM1^R~bBpo!QpN7eG_syo2cib%BL+T82Xma1 zP;QU4#)UtG!yo|HBNg-Li0Qz(H58(8cRj_AU?gkw!t0TU+!A1+KjLJUc+u7(nCB84h1j&aG?{C@kJ8H!OkaKTZQ+vAgPR4>q2t;!l z)5*kD{JPAJAIod$Kx{ws*wV6h>et#<9q89AW2b(B*3bFpAtbNMK!t}>cqY~iV+xS= zeVW?22bd!!cXGDWRH5rx>-6pR%Kxt1jA1!;+RK_}+2HFlis`k&uTK*WzEZdV!rlDnKzvtJ2)B3_sqZzt`h3i zDBuD}INU8T_0TBV8sZDNOYACdefbgOl0!Z8;|sA~$9|BDYj!A5U4d`0-B3m>QWf)( z&uK1=#0(j=+j(fUV-^fL%3=C$ zV0oYc0~%LFXPCUo<74BEbKm77GbBR_p|#7$(zD6v1vir>TYIjNd|(DR^HWW8BS*<^ z`n;n|Q1Tr;Zeg;PI!VpHtW_i?BjB7@GOI*~CrMVyjWy(sk)+i)4mrKzqq!95ED7ZJN;DEWZh}u=ky!~TC zU$X`St&E!H3IS{vJ6*+%96OQ9Ec^&s9aOlfrF`HVHezL6uaSR*YY!iWf$Z=^YQ`-Y z+J+wYM?441f}h$DTDjPhNlm^`sZ(8M5C9gX&jAt3NUK$oKZ9CfH1fIoo4XMC+ooQX zuJ+J0c<0WvlOa1|e3&lR&{rDC|C)m&BB}_`5})v-P$2p7v~nuE#pefeBOA(LiLci` z{oVkZ8TQ;MO6CyvyPFSifVnSZ&eWxID!4Dtgqa~RbZJXdN=L@jK(D$3?#)&R-#KVaB zS#K-G2^6K$7~bKouq)%e7f%~da@WXAZ_VtaroM~w2R!=sQUdg2KG@XH3tH{f%@b`8 zHzBpPl2U&Yv1_uwVN5_eyAA*w4D}4viq10KnetWoc;`GZdDwqSd^1z-y;042&sCf} zV}L(Z@lma~fugWe5iZW~)HCdn%sKWIsx*~iDvg#K4iL|zJA~CVUxqE!bXn`&+X+&1ji^e!^5EEE!D0M z@#FpscMTbw!=nzDo^Ah#wC~QPKHDvJe)en#!v>7ou1zZx+T+ID%diJDSQZ2*y4H24 z4}P)c2N!Ias~12e?zzE3>JXv;q(qN$@&vj6*E@f)&WvU*#Xt!xLLwB?5wkbqO~ZPwOe=2QxL--yEc3cG)Wwj_IO@Xzd5Tm%Z0Dj3kA!*3R)H@C*v;0>U zFGdNzI&q0w%`n-5^ekuZ=?AMK|FTNrZr|)46!3l#qc%)q8_5`JixQZUqNV#w0xX>X z;xc=xsS~7q{)2~A5$ZG1ZXNPKHCe_7PDu#=-HMv+q@7Y1Qxn8C^~)~;tN4S63^pZ# z)XxCJ4BublH%McETP!X)ZsOx~{|B4Pg^~V7e0EksO8WJEtS-;o2wO}Hdn@Adi-XO zxH{FHt`B*o+l_ng3h!Rq9wvV=;S|6q$taCB!$~j3#+VwQzglrXb~;h3CifL1A`6rtq*Ni#Uu6Zw4E8Wx zRM3amfKzI^sqbwy-%U6m!S)U;@x-bq{IO3u2f!5+8_d6G3=fs@SrOzPTLAfqmxWpy zuTI}XMF3x!nSDQMi>K!LmJVb6=MHMd*jzUpZ2QY}3{&|tY9ItB3Auz6DuqibAGNB) zQ?H&dfm5zr)|3KPSnf6eW={6zVj;;4fW=-GXkygB`sB5+dOUjcMNl*WPeA?84pqxz zH}YXpZC8dj?!&L&aPAWku)s(0_GB{YT91Mf$*IZJ)mf%_SHRXJf%B~Ed7=9Q;pwYF zYv5F%4BkZf{cd}wFai66`#eP(Hn@mi9kaKay=L!_lH~WRBWUd8`2|KPT$sPVipxR< z-0BjrpxFQAhAPs>FkbH1f_V%h*mqK-e}*(xCgg5jZq0=}2D1Jdv9|LxbC--O@e{4w z5zi0d$0hkW!4U&jVs|X0QHFB$i$Q3pQ-_o6Fyb(!~0s>!egykcVA6-0(t zecCzCCjhocLbM9E|FA%sR*iuU+}<*EPrHz(DHPy0fqJw}9fn$(r`R7fB1s28%C*i% z86Lce2A*e7@jp9N!o!q(eJrR@c^&vxF0k(VPHUlPy#V%9ZH56@DW|pw>!VXj8%MKA zA_QW?v{T3n25uqr%aNVzXtGeVJ&g~Pi%GY|Ip9Sf31^c`^ThNof~JxoK-acX_IY09 zXOj6j_oIWfS($tx@gx|((DPBQX9x$fEKH0?dPa*_&efNlEC2ZO z@uy)hk`tplq$J5yGI}yX)``d@32bjiKKz}Oo1y!Dyo~{{c_Dp!KO4L=c{@5|99U9b z`gH&vH2QvyC<%3o_lWkYEx|J41*Tvr+mlS^gD#jA7wej2CBP7E6NOh-^(!0-$iqr( zvTpyRWw)4~mpXK3rWqXCiW0eSTCVQdlxF4_SzY}A;_L_rP)Lv#n#LLk@T#;v;5p&E zP$`b56Nx|mT(!b)dxOzqx$6jL%XfS0fZy|u2IjSbcKCfO$)Q5kSblMG2Lg$zgkco| zKwEt<=~p)j3&%)`4bTk)Yn$xu1*3rlXtggr>27?o6CdxSvJc3B+%DqhX3JeG{u^)q z%c!OBxuQjkLEfU{r4ir`@#jT`#V}qo;dQv#=EH&hv)+|a`-SkNOds8FOdsddfha#c z$RtU)tpC^nUFnT`jO7C2TvhCkw^t3+=ksExIB41LGB?@*4>oGbmlZS8ciTW2L206l z*4(_kIZdX04Lf?Y`Us+&8ngX5c!o12d3y^rF_l)1JVQQ{{EshLb5Mw@>D$KM|EvVW zfS&2HChlLzoDIdnYp=4&20KbB0#mV0Byxls6nfadnCfAGmzBMGN}2UO zY-=&jJ~4ouS{BOP+fh#%xPj&QT--b}r_ks)&I+Sa=W755uEvFgJJD=&8sNhX|PbgY=nCas_SV=|g?W2oc#SnaZ zzQE7%_}H~*lm8od0D4cx7j1TvdtU)ab99}LdAvIWk~G-AzAXcl8#aE_12Ag@fsbS_ zyiALq@7;`}f>Esbzt`4?bwgg|rnq!J+yq60+?gVuCuFlC9gwZdEj}?WndchoRyw09 znRFwp$cT?M{rs$@ssNynezk)MX1EoHf}H&WeF%9*F>NX*^>Y^c#5N94rR$w>RKmPZ ztdDoH8SUH>Si;fLZ+c)Efvz_v$>}pVV!#wFx}eJoCyx`NZ}ny`Si;l<^II2(qUi{4WQG0i-}2HPm^@>dg_t zr074Zy2oI_wRq|QwHr=%GMIv76Y!eU?tUDWyWtFf1X%)um0-UXjPnOr0o_t zH?{}rzzsDPQhnL{>dfQ+3hE*5!;UB;5C%=JgQsa-Ali-V>^Xy*QcnKe|1@@3$QsxM z_U&}P@5pdjCm^#fKxUoU8F(dy6rWqHPXdOGB3hlb|LW8fZo0kfih~8}TAsbNDjW>3 zB8o8{s+cvA5hwakAHD%iI3c9i-EMvy3(F^^KdDc7LUedFsk-zPh!>fy3(+ymo|gnH zx7@IizLuF+y1V5qRHed2^8QK{HS4nhWrTT1A(k;We`3pZTWjjqPoN|Y!f?3+*U=^tAit;Cf!&(rY#d$l zvFPBRlK#vz{~y@+&i#sC4ozK|uG5p|nn)FE(jIVrr9jA)YKNP z61&@7Jh~I*T%OAG7vLbMz*|Z@r-6BZZv0U>6^*Bjd9Nzs#zQTuanPSz3J8b#PO!7= zI!X5w%BY_r-#1BAY1MK79WYyx>6!RD@r#SlIhazHKs;cVQbf|v20JsE3XqbT|UKeFe7 z?^=G#v`vEi--m-Khl943pGC&bB)l&w>--^kly~%qj?V zYC=3OmR}Wutgjl)X+m!e&gkHGwpD84amFv})@;Al7Rm?dAd}rpPo`WJ3)uGAvrL=V zGO8=Ca`^Lh8!_cTj!BxyP)|%|-O-))nYaex<)W4SR#>n+lTNtTn^lRFZQ@hm$_N`Z zb%41k)b+`cr|VCSP}gqc9+(CepJeNmpYYxXZE<3Vb8N@y8Em~FSmgI#tu?YaUf-_1 z(?b6cIuJ8aWFMh6z)D_!dU&%=?Qf|pQ>mxsTZi~Rvfer_>gRbJKU)DosRJoNN>WNX z1OaK3ZlnbSk8Usk={~wkTDn8w2tkhS?nb)dyY~`&e}0eO{(1YH-I>|h+1Z)dxkjkl zB3aEGBvg_5(_ray=Lh*L{}J-!$do@`7O4GCzuw25IHf!!HL$D6#8agDXh6u>q?Pnr z8#(tVCuaWoFUDzcLXvI%{vRqEN%C7{a1dz>P^oJmrL^KAVm|E@tZ?+M(R<}jhRq1A ze~5AyQ_{KB4(Cm8Dj~2TN$MBTz*;bkT0muQduB5Pu#g7b5!IHs_S$73{kyO>Y ze_r8%^7p3qLB7iUQA}he@NTyJ#a|gL9s|38{r`-9py%>U$ftGq&uy3*|xiaa68;r6!xc24DD~tDx zC8R`Uie`(mdZ-s4@LP1U+3Wn%HD|${PRkeSPLOZPF@;x=W(NcosP1O!M&Y~DCLdYaOqI0JQmkvenLvck@YFh$#Z8v z;Z|n2ITgN?l_|J&s(T*xq8Bb{2f#icL0(Xw9ypMiosIf6@*n>wBKh@R+B=%G?qz$4 zo)~AzV7^b@>h$DrzlKmdU+0o)wda>Z(Lse&46HL+?fQVJfB`{Ro%zx|Rq!^cL`IUi zZ1(z(vgzRD#M6Qc{Q7TXOFo`JBbmN-8+)_Zp8ul4&ENkfM2OKUYalgdo{CbntkbT! zg{hl0AnGBAihP=9KtA4-T!M_GNjJ2wkF4mY9nBy9aIb+n%_S^}9Y`;r z_wlR_IrZmP55Cc8=OXH`E)Ks{I5_`l*DIiVCp1cIWLI<0ev@^9Xf_NZh_{ZHuP89a z`F@{0@@5WDx%<($&OYl&&VPOyn-gJj1B*Eh_eQk`a~}w_qHO`c00@f}8ogQTBiQkp zj$vU35%$uycZ_APm37T(S=Cl(PxW;yOWx!fIfia+wK$r$x0~vVt?iKE`@Ih#)VGvl zzRtMK)u=CUw{V0voe=ocD*~N@m#3vl;wKkY7s~+&g`-fYvKD5FUK`6-Iod?6!0tCft%ap1Rb$`%V}(-d=bN9y(YltnsfBU zqs+y^xmr*LNfaa+6FBctcTs>9KM3)KTMsjDpP7iJ%$u(!)p1}bf;4PKj$x^sG>yWo zpT>2|=(eqW?A=zZ@(EVShn(X)nt*5u^17z?KL^eHZBswQ6A;{kc#Pa<;~D66o-e~x z%Ze@bqCUuVjj^h^xv82MhjG?+Pbg(x zbM_Q0(~Fe({?#NdEI_s=AX^fUjSTc%jwE`@?J&(Yx%P;p^?Cj`6UX9MJs)^OPlQ=c zd<@p?#}M#ld+t_WdIH$;t8W>w)a^E!Cyz>F2LE_xNLrN8O;HytGRE8wplF=sBk zg;1ZCy3wj0ZQ__qgCF=2Y$-#H{dTw`qI97FcuDcBb!-dYdbNyMwztn(_tUTPxzDnZ zkV#M(f!hyk*sQgnmp)_Edy=gPy~Wp}lH;%&ZPxRET}Wf@944VjUr&9sF;c3y(a(U~ zfa#|gBGtbY;|q@YEV{S5+3v(q0u!m!Z96DY2KJ)c8L(oEgD1F@*Yjn&DDdOMshdJ8 zl!nB9d&5-oxxwku*MAEM42VVwBpOqIYzapFsF(>XXEOdKCQW}Nl7Gj(MuUCPQN!ij zwm#Q%nQ&;WFh!&Jr{VkiZu4<|g%SlKPreqb=;*}$`RG7AJNOIBu0j)q*?_$G`*YQF zY1Xs1Qkz&+87xnO4Sa6>)u@R*?|7L{2RNO*Zf`46_m17OKH@4I3Y7xMinL8Humn9k zJqfV&+s-6hj z*ZJxdw+eDk)o8QGpjBF)G}0r_O06R-PVmnAn{Va%jn2FkaSMt+oR&3l6*MbGXbyJ z#M545EpX}J*`@N*T!A&WkZy*!N1fn1E{4+UOD)?E^9~}PI;F3N*@Hq*KZDl2ChE`S zZ{-{7A=Ku7U8qRYk1M-st-|$h%rPo=Y^-?E7Zfz6aBmjPsFJ-ZtFg(|=V*To^5eBD z-AqrtU(KKOnu$J&xLECjA|-(PKz)NQISC*k} zu1AlU?|916RV0P#StJ3c@ad4mAiD- z$jIM!DpgpuLJt}0vydZI^IRA8eTxU7`iKz)pCMNy0SMx$L3OIdNO6B>eK_2;mKPy=NAKQURVs@0zc)3_4z>-gne^SldmILnrQv}-g)()EJh794=GzW}N~Ns*FV_-QY1z%R z#^5*iZ>@2h9{3GLoy?c+tsRe8F2|TwC$D}hE>(cH!R4q_HYnY&B3|+h;`L3#nLM(3 zZzi-Yf3ELq676iabX&E4k_u3bDt(|IZd0$uP=lkFY@jqX!*#N3+2oD6b?qe@7MV7F z0c0f0<#AouOd*JrBCkdA4uBVx@9Ak8w->{x;^e9cgS0f6&+EMsVp8?gqZeRGKA-3P zmbu6*A_c9T2px{cIClGKy}8`lw#Xs{b?V=_w9*dmn&%#iR+o7M=%0O$qP`u(8u)|7 zs776ye%p>M#*7($uWo>Iphy+UX{6=yL-qVw>QIgE>e}$giXifAM`@tFbW^PYWXG1z+QsO{4|UnBGpIGBiIXB2eYM5k_*c7EOYt4 zGg)j`4*$d=P@a}$BFq1>C1Bd%dI4D|x|E`XW6pvB5qHI7HAGvzn zA!z-jS0F z_^;25r!_wJh2`p$9bOkqm~7Om@^o>rd#gwb1%^Fu74n-+|TpI@+?+;QvzF|6sQDDgi5 z;xV{Mef(_dG4bfqZ%bDOH<)~79?T)76gLZ?tY$We9U7rsexh#IVs8*-V_A^`*GB@mNOr2TH&}O-CD+l=|4{=8GEu4VAy(9 z4w#T&AJ!KO9}`R>UcZg~LycVKsw+%MpW{@1DiEZ2i_oNzXE-KHYqmCvMtyUr#pDCO z1jx*<6khByS{+{5l!98(BOW|Oy(e^M6)t0 zA_pIMu6jN24BFi2`eSD5GO+Au?A+|EDor2NGvQ3-(~oi~fAB%E>;p^m8iJn|=RFbG zX`hG>yelpW2frZf#ZMNRd5}`^`l}CkZKFhe(0-IC$xx&O%m^dJV)KY~)@wlvNHZU} zBKYg~r2Be3{jWGnjPBzJ3K1>&D34ed+ywb;_f#BqMhlt|FMmP9&+iECeYZ?YVqp;% zZAV0)>;Pe+aBKc_jxLF>({*dNA+2Gia7F^)YT)a-zfRsAiuS7O&d3M;(g2&2CR2Fm z`pA6O^XX^20P)&BsV8LMSngJ|EbDjj!e-9zxGTJQ z$WFUquF=P2&e+uSgymrjeaB|NpVY{qx5ISAkjMIl^O$%VF~$VV13M9R$aSs)9rk*) z(B3Ak(RbGwYZ5Tgs=t@Mt3lF59m}T=%eGV!Tk491GQ7nP(-SNK4%5)}T&LJH3KM_8 z{guZZn|TJavcF`czhqP=s*V++7|iy~Zis>9-miUlTtO=(OJFPkJ~qQN>l3Xm-_>`g z9}JUd)Y&HJK9x_M4_4h?plQQ4`m-Qd{|NdZ%YDxUu2^E!l*CeKEDvn<-YD8`>_?Ox z%WfbuckMgKt`kBB*MnqjlewskRUa{~oac+_&y06YC`%&I+sGM=nBxTX&@@T)#hsEl z%FxLeOWs*Xm6-33G*=PeKL!)+f{Az-dfdC5Vib3iCy7yu(3DWo8UgMH|IL-8IXNcx zrz?Sg1me*=M6am-Yg`70q4uT4_ad~&?9vV#teNLA)m7Iu1z(d?rR$TnjPU+4B2*o1 zn4whrNo;`^R@)_(jCZd*N}3XdIkmc1Wi8%_#LN~A0=PV5X0_vb?==%fFkDNj^{Prz z`vq+&i|QO?rBjuBWOB|o$-G$k<#B#>b3Jh<^x$;rxUG2A&<(|c9=~(>3!cwGkuXUJ|Mz-+(iS#@$(FFYM0sw+d{7==tWj(DJ!*P$rtJP{CCud z@td>l-!;juL)O`QZv9qJHhaCyB-lPeF;-*I!WYzbof(S#vSMg>e`@AhhdoIK|6q6V z%l706liyKT=sxhuSneN1#FkUnff&eIo>~iPEAE3gNWH#rF^ore?t$Y?4Cep&wdYpc zxPugShPr^awKg9e95gnZT{y#EnK5*w&Qru8Q6PMuCn`KNT47dnt{#2TKXOMlIIvK%HR29&*pXfnja@dh>{ zxyaj2yT%~56mL#;VMv$h!1dqwIcnLz!t2iP%pHv_%3nr5#$K#iZycr%D@C||SU0FM zd#CBWzU(vLe=y7|IoR&PP$gPXfe8&ZxQFgA%R65-?YQK=6b5owlhs&SWjbaCeD$nw zXHs5DwKf~jbl)I~*dl_k=OQ=eOkp~5p`4f4UC3Qb+ZWcr+o?^ENfRh8?fWQdkO5W~ z^y|G``R}8FrjYmj^gs5((zV2q0;&%bG^`R8^JDk-#EQx+Rkw7cy-}Pb0z_(56Eflh zS=rGG&VJ+v0w|8J9M@B-?n55%_ucxftZd|aFcF&H^9*Ahp+qej(N=mxYkY*8EbNwE z=vQd_Zw}houT2kB^Y2tORB=-mK+CW!d!t%{6w1cvspf6O2V(QBf1T)VCQd&E2lRrK zIv3brUfhu;%Re?xGkoBQAhGi)ni*XCuv_Zzfj0=g)8f?TqK~k23RvY%YUf5NP`}8J zxw&G8Jc^>k&KYWc-t#2jVZk7am$?$Ic#>^l@t=fGGmGF#47>mSw*wZKb+$rt6$8Gz zD3RcuiK5X7(Aa`V8)`Sn96R?Gfc>E@;Yhs`;3ER^cD#=GzY`sftuu5NtxA7tlJ<@N zqTd3Gp2LJZ$m;94j?HMsL6&l zGBF;MV##-b`QXKSUIF+@+g4%D9^^9PoPR=5kg%pC~r znJqn&G>FGerxI7V$#4S8B%|UxHP7C;Z(a4wncwp)kKVjap;|=xRGclx3#YvD6`OYn zh@iJ$mF&6=+qT(wuMVAkG_t`ZuUzUftXi;^@YKy8Ur;h<#*IC2zR=>11pK?ArON^O z)=cQA%37h*s2SPF=}6VXFJg$)7t>S?DJ)yGO)q`m@`-&ps-)fotK=+@KmJzE;3uGD z-?F&ExVng>9-eF=SU+;4!vb683DJ=q?miT41bB;Ow<0xxt}?K_Um9rPz(Cu=Q%>?i z0blUC#=E^==*?Sesc(GXB?(}I7jf2|c#i8~Gg&y|eOSfsO``yYNv;F?-JO&9E?L~H zxEzU+FEL*nK{1f;kq-U@kDh|Z0@}3YRvmJk@5%Xko}l}ftwj-+MwnVDMw`5|uY*42)5WX%TqJ~V-&7;pB zrgXJ?+XXngNVx2O8sa}R_d@K7PRH|T<1(=}d%omh5)>3OOlcKI^P$MGd9%OiXBhfJ zK2m6VbtX!+w1Bf>;Zc=FemZA+DSXdnr}-!?S9LStod8UxQfY$iJ`O=6mw359*?X{A zl&1p3Gc{gW7&$DlL@#xFKd&F)^zHf#b z#yKD95)JPMoLNjGrfqK{s@ozOF&6jL=HK}AY1#$G$>G8h7{u3Fq7;upirmGkZWj6a zje_&Vp^g~d|6B0Qs|xd7^{g6W-@+dpXL^M?Wp8qav`B-Twbhrw?YjS{Ye5BMZobIy zuD@tbWwsy^HBpr2$y3#k4!aXQ{*I&T0nRvWgQ>ovzg%q-7I;zeDTsg(!US@;?EGHR zvjw4U*Q@-TRnslwT{D;z<74h*i@hDQq??VK5&Dz+ScfzGdyh-*$Vdj#E!qi|sDOGd z?N;hwS+)~LS1-{JgILhyOK&Tu;divaKNPqWIb@J6XW z6tYF(zS!ce!}mO<>)TL?2Bo?o&D+lp(93OZFmT}KMXsh1n|l#_FzEw{)LvdxnwaSQ zi@Jm?$tpF~c%}+CXnHkYB_bLhFxOZ^l6+TJ)wd?Hoi5TV_?C0*Hxk7StCyVik1O2; zY7-=S)Q?;h3RDgGw4WR}34_8@d)jm3obo-z7we!zyc znJJa7LpXKF;+3wuXT1_!?rEXwdKSu%EPP+WXyjsR8d@Ge%})3HeR$zJ8Osi7@HBzu z+@>*z%*d*O=Iw-g)3<97c~5JN>^R;N(v)8%Zl>y0-Ktf+22m^&Sc%slvNcmDipSkNtC&-LL&Y9MDfMm0o3k!d zp){i%!>@Op)qN1U(iJs?TfQ3KWLk~QXv}#RCJ(NS##-zc*5`q*Z$Oe{4H4}-j84mA zXQygb3%Q-xsVU&NOyhHY!Bw=!X@Eo2i9FLj+F8z%Ukt#?JoveIesntU&A3n`4gz_j zO%z{mS>?K+!+kNSW2{(H{r;3~m7EMN%HGpogTSD?V@FO}ol zxG~f0@0{L@y%TcDF4_|z=KHYUAiSFFX0&rAe)|%31Vm8!rdopJ%7+6ZkXDlxyzpUx zulK}~hxG_za1v+iDsI%W6i1m<<`C)H%~wrZ7szJ+-{qD^+~8(=i7{mxwy7eux&`OlAgCl% zhUIO9_(qUe22%Jin}ni5IeF+|;pqj~333%{VvWxajgem;@k#heB8>%kG<^PreDt9l?8z$o2#GT@AU9V^5p|So@UOgg( zZ4@Q3_iRmy^6`UL!jaEl(vN9+baa=|rLR{|(G-#xhu|{%#HWLQc3=0Kle1n>puaQ=ed$v%W#oQvnQicw{~Z@#>~)eQJvfV zcG5=rR@k4_U5bySB#l(-H}{LiNr_wB%aRkyFCxF?P~pzzs^5>_sFvxjNK;g`E7CBz zZOBfzt>Hf&Ebw<~T4qsr@Z0e~<1B})Z=Ue1239XuR zGrzdT{db=5C<>|8k9nT(CtFyzNcy=3@?Cl}Wt(3|*tX8A_512mpI4|(6=y^B83GM0 zF$^D09>iMJ86$rIXDq6PM*?skMHB8fr-AS`1LDjA0FG}!V&$xze#VQVS?JtW%#>h_ z#`v^m!<~yIe#fxS5X5p(?Uz&t)m*D}R;pn&|3h*5K>4ZHKKkdsCeP=bh&iIYH4{|m zskjUF*)nDcGrL0d{5BoQ_v!zF%Bw#Sh8$VXTe@2@$eO_vC5r$I8}h7s^SL3JmA$r7 z)nb2?iMbg|f+hM-p%+MxJuao48m|h$vxKW4Bp<`6D1R?cw1&8LaNkBH}TD{ z9dQ?^kMEd@vX@2h9LS>I5XG5XZ42JH-j02y4wBMQZO97{orR6BPF0pSa@MQ059Vuc4ulZ9uc&R2b+Y#om-eUPbW zp2aqXNEenG%vQL&rIp|Ot_UIp)BX!7)b_OKOWbIMZ~1t_*VKpNwB6sD3ti?dUG*3P zV>qu_SsUfqAaj-5I&x)JA3?`}Nl|QW7 z@6`PCWeTb0RyyePp%d}hHb{0)_}sY6Ej4ikx+{FezCe6ue@!00r0Z0}L{ubL7p%ZK zZ2c-c))FT`nJjQl%Y(wt4vmrpBp-mwpT0)%_} zhOP26nr<2FbY!=@rweUC! zDcXjRNz_hm??L_x;DBvrHrL}&T>xq56@vWB)D%F&_00oG=v&K6G}xc{&!=VdW?-R#QLr3;rjmmho9NB- z;Fn^bjy2@usp|CkjlhcfQ|l;2!bexBP@Y$8TL zu$>UMw$VnB)l$nrUi}wk4`(p1uk~M-s-kaXf|+g zq=DA~sP@XH=w^cb6sO>GA{qow^&kebO}RPR9jWp=?6wLzaokIp>xB~2yGeQPs{1YTRqn>Qxh zdy{*ohutp8LTj^~Zg5OEThr*>ixQvt=GUAc?e%-L$?|k)`y&xq94_|KNu|I=>*kt=7(=n1ecOdNybH&F>PBkboc6-{wD!08A!In%H$0wbG@hz`YmHzhrt6L+)1QefDdxXed`B%* z0*OPTxB~f<)soFygJ(S)Gkf11^9~o?>Yq}EA7W%TFPE?_74>klkRtuy@?DK*_8AS% z%kPyE6}wRFbl-GctANC+SD;^W=jrjML1>{`RTWH#YMWlj#sQ$RBipIujO^7g-Q4b-A=AtXt~3zc?^9Bd>L4Nb1S#mZoU>)+DW8-d#Xe+Jo@x{sB1y^4b`wX^+fVA|ImabCTpv+#Bjc1eaZ5TTFU z4vja$l1X|vQkA+}YmMy9?P|>9PCn&$FYgd;AK$^BVQ0qX=YSsM=Y$L|lS+?g1wkEr z@+!zM+u8pP^F0EreiCM#TPltgU1$tmfN-|A?3Uq*Q>B_q))RtSF5c|qUPKYaBYsZO zgLfhXLq7!g2z|#Rsz?uhev!VEAPv9~ubHV;G6M8?3ssJ8+8RZJ;ibUMn~2D@^$yj* z-jY|l?}JDSX@-9Ym_uEBq+nznZC42Ne|rFF>{^d`4*Ro*CG9O+n7(0yhyaz(ptya_ zV=aPZtI54bR>g-!wj1c2gP#67lMyGq)ohH|XJe`BrCdSiw<3qU!$8S;wJY8-rG-&F zv$><=UQgdt*=2OlZnT7}`@A|81_oFyQ>kO4z=I6DOxc9bocADt*7v8kuwCTjXm?SM zzCmM3YsGH$|6EW%i8r&>CpOr=;bPaG$cc2FUdZ@^yP_Et*jw}pqeF2_BCjT zTsBykhm+)g!5chr)vibP)`qg|RR2&KT5U-}%Yk;ig1S$$W&2NKOMzpfffMwBJ+Q zpQAH}DU3Usea!gOF`amAhk_;CH3W@OL->U~v#j@weRy7ry_;~^rK&*(i^KXpHB8GS zlOjj0Ter0gUxzxg>~w4`P$s}yhc83uy^iz6OOEg)Yi+N*CVK}lf~Ad?Fjx%3A#3Ce zuOQ9n|Dmh0i?Kpd<*S_UZSFpdMd(}VOs4IFe&&6w#FLpqr+Wvd>T#yp@yRhhn-jjz z9vsX@%b(`=SZ}%NgucHdM;M5$Cifu`jcKyA>jxQj-NpfWWO=XuEU)wFfzHqm>j%xk zncrfjB`XuT4iNhHlWF%3EJlJdrM~z1u;Q0oN?c?nSfg}{!g(uVrEbVl*uL1u^`=T@ z60>_^67`k^f-FStE%II|i;atQOZ=DXs%@@#*Mo1xE|$mY&oK@-@P>=%=pg*%!%8+{ zw34ePCQ!Ek8PBFmYVGnLTz`!0bX^{jBo-IWgnWBS0paI#1(0Ds<<$*aYjp(wehC=` z7aZJAdQu*B>H-dDKH1O0r8*q*D5dzRt~h6>3B|;fq$~69{q14b?3OmJ zX3rGqkTX~DUIwmcSTq%zYrjGbiPjHz8;@)#rCs)TY?@#_9>Zuau72P>-I zn7Y&TT^SQb`r!s24v&_!UoPI{Vq?*zcfwpegi4-H0dTf#GoipVp`Jf!S(4^4Y8T0jlA@*xXsGv0EHYS@0D5L~rU2W|NmhdL}QSP~8pJ zyjp|p8^VzA?t?+WQUBTGNMgrEBba9=9Kw5m!^~|p`(#q*VyxUVB}&iDQp%C(#~V3^ zpi7aI>TbiPEj2zj$R}-)KHYjnECs7L$0zXWduz{PjI43#FCZ(B)Oy=5S=8yJcr{x} zEB0e^T#e_mQRwk{?d+VQw+Mm}4(IGMs$T`==9W&gnx;qoTwlRQDocLv+a2FL`R`9W z!7FOYLC+iJTW5R7GjU?97T63`KT$mnk0`ZL$hG4%!j_JM*u;~d4Z=QuW28v3wTv}s zzG;5lTx)>w?2aHq1mfZ3k2WqDxNg?o;l{Zo;gymQrIGS@&sY4s99w*aE;4^h>s~(g z9Vbib1hzc%&IDy*g{_vXxH#S&6`6|XHM-hrp|%O3;GHZp@dbvnE^?4srg|F~YdV)uU9GRXwlQ zHI6+LAFY+Zjh@`wUlcOU@mojfq&2Eg7$Nj`6bJFlUuQM$r9A6)1!S8XSlFO z-ckgD7mV(NUT@6>-?X$elXk|69mJ{qS{o7O+K44z97$FVb#;&|x?JY?52B<(L0U>D zuc%~uVPm-7`4$bzd&Vo}(z{b};FRVLG`&5@1s$xQ?5{k->UYO#`o055WJf2#=N#mK9r6oM!VWQeJH!ddBu|P?K^<~~ilgNLfzxIVf z%HvvP_I`-s-3T-$8qph)?-rtu8R=blG=K{Nj#la1QyBKqT`t{z36#&T0rT+vODBNT8zC;K^S`DyK84^OLc;xkrVA1 z{{M&LkDui8RK5PdO~P|4Qt9ExpHU7AeWNQk1f*oW%yBIWnoFzU+=7!L%eB!!K@)Ao z6GvXER^3b>Rt8;4;-JoRDxi_hF3b1s+`tT5=0w@EG;2!Njjn3!W*u|cI1=5ErzcLv z15$tD*`Nn=q5l><9qh4LOj|T2vmX&N!JGlbA{$YI{DN?A7dv)+;y?!y)(fq${3t<% zPwAvSoB9gPS1S!vVDJ-foLn}v;#lu2?;2RmdJF-iq&HO{hx}qpe?#dn$YtdEkjl|QZ zTz6%2+n1Z1Xzd>UKE@BdolZDw-DDQpc95*~hYB!GTOs3;apQn-@~j$Fni(nWF<*s{ z9q|BZ=J`L;uNGg>l@Tjm+t>5&{WM5rJ&B%)UenZn*eUbRaDw_WT$9WlZOg~kUb0fd z!y5|Igu?DuRpL5hUqs zKo#h%cTVJd=q9Z7{PIIr*Bo ztBy=jrCk`oxX3Lyyy(Iyk~suR7e~g{1uaxhN=5d3P2^^3{EJwF8(0$EmNHze{h4EB z+D||2+K7Zy+MWEzzo^jSR0@#rs8}DUv+aJb*rq_n*Lj!Gmr2L7()f101?3P>jetoM z4p|$%HRu=Qd5*g*q>NYh>H|cJF;fpirB+e|X9bXu2ieimz8iS}N%o6D(+tNU4Uuw>YbUPY&qMiA6 zVZY8nJ1A~rx}McGIL^m8l^oQXKsBLA8a17Izz}1v9ammzyF*!Qh_I28q+UYiZZh z3Tcr+spGfHYbqA;I9^g4jcr{|%f?nGdVgE};g+i8DfV_({CFwL@{fQl)2970+ZbPS zif*PaJIy@|9XBnha~iF9w&pOIF5KS6e@>6Dp9_6yrF)c(c=tZ?Vo0(h~UJz;0+A0xSy6%-_$gi0uu9xP_i*dFSSdKH?3CmozNU)RqH#bkJ zFhnTY#;<$@dSVtaI95HpT!hav&Ybh&puH&ewQgmmYuTd%g%RWGb<^nm5p!bn6s`yT zTBo&WAb$|mJl^!QVMFYaobxt}TH1eK@A&gFbgF#Ylh#_JyI zx&9VC!FI2F*z!eK_Yk=KCn2K(DN5UPyF{9dy#5>ZcCHV{cjz`w5e?AMg=cz4j zA3r$Oi(!F^zsxS!(ivS~w&(G2leuEM2Za=bHkc6+)i$u&8f0-aYD!`II$&T>Gk|aE zfTK2X2i9S+Q{K@Om-|&wM=vqoLeMd!J{*mnMsJKL<5i?w00HM z=cfmj)%ozO96hZsPNbW&P@g?b|Gm(qOMsdwU|B%u>bK8LP0AN%?@|#fCAr_uxl5QMh!S3!+Ct85sRrW1YOQ%fPSu$?`7rlzNO8X4Dx z#u=Oostn1bn;go&T(V*cfm#tCCAayrEa!Pp(8N7sZ_oaD?X6+Fo!%w8QkR$PPF0&Z z8t4D^TmuzQZXQ;#_ZM}DH1WYw*IO$c?~pH;isCw%S|c-sXT3gLqGY~#=L?9jWNoiF zH_z*#KwX;V;>-k9gn#g-}@^_8%zDl#q(28%QPc z?))Kco5q7Bl)`P?MhcW1JYoD+8Ws0rzkAhHHr*5XQM(~FM)K+QT(Z7 zh%~Rwi(!w@*LxTow>mf{ zO6hhkKM-QBU?PT~t^8pgSMup~B8~`UsB~K(+Dr&`y!;|b1>6ZC2oADe3cADo`jWq{ z2-ZgFE3_p5$$_8QOQpVj7;RZoP5!@;1JJHPaOHW4nSZN`|Mb6-W=IklYQS68hf4M` zEm_K;^Z9W{&DAOfB$pE|-2pc?p^wCF{qYf9mDDxrpXQ%;o*p?j8~*zO3M{@PRU;8@ zGzJZrv;^lRWS1NdSe_Rs$bPQ8NP|ioSO4n%6|<0#B4jWT<>71b!k0AJYJv}x&2-M zx4ywj_DZuso?)Pfk<~i$+syHjg|<^@I36=k@IJZpDnJ^Z`2+sWDe^KvT|5Ia>$Cnx z4Joh~f<;s=e(EuPvCC_aGWUGON`C481aMj?oTXaOYs!>~apc^0Y8l^M`Zgh665!mP z>*%ll&P9@02t1z~%a)y-29K`zRQ8Y@;&EDW48^C1sRyOL>7rudKl^>eedT+D6bS)I zZH*k3AN#+XN(lZRu8sYI^{V&RKjbF0OAUTTwz6Ih8%%{F)vd!@&#urM!LqZf(^;N& z8OVUNhN9+Nt3Fo)Mjn1u!~}z%6G|`X_b4sQUo8gAzJha>(}HQj-PehT5&m@wR~r z4U}#gd0Y3)jPM?g9LL09sN!YcV;R$*W_`5Nd*z%BonT_yBg)R62hy| zb43|0;_CxQ!ynBZYa%U%LGH~xz|LA(|+y67$OVn(ysii6=NL|FJuf{}KxscD12TX7U zIk(k(IQ#WW7*TNRfZYBD(PDrmo(^c)MqlajUqWDSVhq>>Cf07vm2apA1Md9Sk{D1& zuc0hJ($H?K@pk)C$FNMw>9iJsX(=j{~B!=YJ;6u z?;C^2+;`G#HG|6IIi1P8t1BWzo=4^GH3&wNL96jc!zyYQvExff4_0u0h1}>)KrVll z<3Ad-FQ2Y#Nq^Va8fSrH?+ z=NEdVro)H9;tE}8p7h%H&6L0!#mU^aEjQk^KE8yMH$vgF+wX#z==l1dEP=2pq>FR# zd>5pQGIIUGBIxX77Wpg{t zA!yF`&+bQGi6mDd&>Ks&e71$=d|T!JJM=3EPp-DA$g?Ydeknu?R3ZD@zTZck zJCP&Ps(}f1%RcpI9%i6`-QQM*I`MZ~Z3P{jfqyMI-mm3-b0MwSWiMnDWG+CQjCsV7 zJUdO3u1Qpe|9Vi8R~r_Y^HU|^uo|l`9sROrst0A=U}+wNmCH3}#e5c*8K++~xYB!5 z+bAh>N*b?wN+ZW}&{V!@D|2+FRu?+Xx!T{Ez3 zzPtBwJ9ZLgT}k>7H#n!hyE|6Uxor7ZPL76OrfUG>4Ta*#hjF>F=Y*N2&1A)dEuezn zC7Nr2fRRIqd^Uw~&NHJ2WocI`M%Nytg7z1x$m&b6#l$)dPFYsvTuvtL4gZ_57A2MZ zv6$<21Bo!P%gZf*`42t&7S?kYKe^L0SDAPJAc#;n-WfbQ%+rTu8y!B3g)y|@USiTP zQ3;HveO<~sS`1_tCnxHxSDNy>JrJFS32CFl;gz6^GgtaISG)MTAgYI{cDH4Mg>YnD z(u)lC`tmjh@Q?$i=TL1d>!~??&_&~&)&GIHqjVQk`&fVT6$wMJlad4d5_l5+w{@|h zI_;_1PR(gZFTAmyr-K3+|FtAeu%rzZC2Y=04l8<p!A7cE#atq(4z6xu}TLf)|coS)G2D|;hJ5QSf-0Z0JoLliMx`nw^J zGZui}hj+|pWR^KzcFqi+gEIc9BOx->K#`FMAi$&-^F*u2-jr$`H5x~^{KQNDUEGmT=1n=3F7esr69B! zq*OcwDX$D`NF(t1L$udS#1c}Eh6KrULjH|5O#m#W3L)M;)@@3^(5soB@u4WgXXa() z#LqOnO`49^lI?%RU5p^0Uq2++F+Ra6+8#Q7BXyZb2+Ra=Am?0@-Tr(n_p+`&|IcCf zp-%mF0y)r;l2==);R9-uRcR~7lc2B5w>6~lQC=xlwbuGV(>NIdv}FzD<;a!E@|v07kn|>z2M{Z@~X$61!YcnsheQ!?fh?X zTM5AT;S=pTFl(wWcD7%Gx_tGOsIOp(5I{o)SE*tSuB1*@)>B={G-Mb=z97N`MB9sk zlvg}~49^1l#>6{ST3g#fB})r=kH*G2Z&$HpJ!a%cpwJ7fChOheex3Ty+By{uQ02fqhAPih*` zZ#-FhsN#8bP#VMmu?bgu|0;1c`^tCVK@3h;kDf>Ortw6MP5$@o9O~2$SF`>9f4gmp zHDC3ofAefrTnq0?ii2+eag~=8+-5nDEwq-dsM`JkmLy!U z`uP{E_b!_{Wahs7m#7N~pj^6fBhy_E1op^3UfCF}Sl}p^|9|aW`#;p_9{<+v+3Y!F z6v@&M#ZuC8Fb6v`iEb_@G;)ciT`89sGK)ylx~~@9D3|3#I$_ajPZ!F(PO4cpYLQBY zX2ClU4FSJ@^8}nFuI^Z-3kFLF+7Bx`l)tiQ~ z6D5!yJkw7!NBhn1z7N$7`j~{j3pab-cz|;4S?Dp?rtlq*9t{I(i|ivP3{C{GI` z8Sd)gGH~8Z7&Q9zt<)Z_h&zUhL0}-IacxQ5Q$x|>$%1!G#`l}LNp8^Mc&?IW#+$4c zIt+15*L0LmD`qkdFE0^~8Qis4T3~{3FP;>t#qFvkr5q675(|EFpaQ<;Gvi4GG?BGpMa|r<6w- zj^s|1l5l1{aoqv7h=rlE0;#Q#t4)bV0*&h&WCFY$Hfl?VtF)RrMtz+j*}f>t&cX@S zzU{=E>n`kBo#hCNDo;w?OAwHe0J48ll#xlzKjKpi@#-HSfJYVIO@+ujg)B+772w&i z%_LWNuWX4FU=QB6iLu?_ldL^l;SQ1n6-X5O6|5Jy)?$n>mmfaV(O~6^kLE`j9+1uQ zZhq>CeM=A<3lY_u_-;io_njmAEc{JqP=mn;4<@*^^<2!c(6wH_$I8qhPjy83*8gF> zT@P!MYR=3Vr2BfcN%maFz*3gxj1>GmkNe*QnSteRabdEJk)0)j0&8qJ%@myTEPwC< z22gPYvkh7K>aKW(y#^MM<1c`psXKHB19 ze5)m@P645-MsgCSh(u}dn9s^E?BV+Dpm!aM>zm}QMZB}$`YEb!0uaE z==0>4m~HqY3L+&98B+}hp@qRqMAmw-`kgBCFZG&{*Ohv3B=N#iL#VDNla!(rw%3G+ zeizfzkm$Ux^gYw>;}B5Pf!LY7ZP6=3T70_9wERlQq_?vJOyLHvsAPFGR1m=XyP={r z`itd`&F|OnP4KS%HOP@Hg_IN^AG>>aa^?y=0bdv?$!M->sDT6hK{h9C1KO(A^h&bY zDacFVPHXZs?W0|qGwgcXFr1ITi9Tk9qd-cMc3e=*=J!E2-lj*b$bAEgT zOs;x4WL%Id7wK} zT7E0#^4TC?zPl~@c}GZ2Z?;@~6B2K>XxV7+1qmUY+sf*1;cT#o4Ytwp(;Fo9o<%s~ zx2u{R>v8{i?1X5Sls2Ua`&u^Eox>T-v_u~Cx5)RG#L@&)a(pW2e8!K>>1|8O_&l2w ze-DMi@AEwpC2SxMh0CFh@RU&bcH}BiubE=u!g%Bs>*|24M<4ZnuZW{Luo^+zvihsP z?j2I1O1$uifana@UrIa^ax!N>fB7JYIv;#D5M%L{qmAXOiNN@3c}YYFR;m#EcOl}C zhO~*sxXH;O^Yjzcra42KiJ~4^HWSVTJHhgrc9Bs#&2qz+banicmuZP?NiVeu{r5<3 z&cnLX__)Hf^nhL4_!;|16eF+ZyZmf?x#kDJ7EQb`^VX#M{F)~(!!>9(GLEjYsPzns zFolq&;!xzFNFR0qTX$wvKBWcb;O@dtjnQ379Bv=!eDvnkOt>mNJzGmN(X3q*Z1|as zIj;rv^5HG8_(xHT+C#@`T(z_VD42}85n~fC=cM@IL~;*tZn>yHuumk#2mi}-CRFqr zBfMC#U7eM0NnV0!#?UJGR2G+>>-V?Z!xE3waMg+~2mJ7+`^^QgWm(k&yGE0~L`Twz z3E)Hy5#)G%#(fu_ywaPhKy+^g_s?;|;w0^(V`ZG<<4>CF6zlR6%@T{ToO3)JF*)oF z?#bSoxWYKP<#5saAg0PH*5%@OjYwz60eAlHNl2S+1*)oXT1MO_i9^=-w_6CUE)?&u zm%`4O)fG3?`?C*;ntzHf*e0rRnH-5R#7@`B0KaKHAL(=o3yX_hL#HdZ8%$I_6xBqE zZd^^ktkUnnU5T~?)%ZKln-$d9*%40WolH!SAC{L&5YCO9%t!iOb8Gh%N%oqQS)I_+ zkgez4gIDVb=bs^fj7?1@T}c`9O6|0L`#slS1Wpw4^v9aZe{i{Zd}W2Y=$KoZ#NjH| zuayKWBlxw!60Ugm&tuQ0Mz_CUm=d4l`x Date: Thu, 24 Jul 2014 14:39:23 +0900 Subject: [PATCH 08/10] Fix #51 URLs rename to /daemon from /fluentd --- config/routes.rb | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/config/routes.rb b/config/routes.rb index c5580bd..cb44424 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -1,7 +1,8 @@ Rails.application.routes.draw do root "welcome#home" - resource :fluentd, controller: :fluentd do + # GH-51: URLs are changed from "/fluentd/xxx" to "/daemon/xxx", but already used xxx_fluentd_path renaming is so hard, thus path: "/daemon" is used for save trouble + resource :fluentd, controller: :fluentd, path: "/daemon" do get "log" get "raw_log" get "errors" From 23a30452e4ce3a867b473491fd98870d4e09a95f Mon Sep 17 00:00:00 2001 From: uu59 Date: Thu, 24 Jul 2014 15:23:50 +0900 Subject: [PATCH 09/10] Fix route name fluentd -> daemon by sed $ git grep --name-only -E "[a-z0-9A-Z_]*fluentd_[a-zA-Z0-9_]*path" app/ | xargs gsed -i -E 's#([a-z0-9A-Z_]*)fluentd([a-zA-Z0-9_]*path)#\1daemon\2#g' --- app/controllers/fluentd/agents_controller.rb | 6 +++--- .../fluentd/settings/in_syslog_controller.rb | 2 +- .../fluentd/settings/in_tail_controller.rb | 2 +- .../fluentd/settings/out_forward_controller.rb | 2 +- .../fluentd/settings/out_mongo_controller.rb | 2 +- .../fluentd/settings/out_s3_controller.rb | 2 +- .../fluentd/settings/out_td_controller.rb | 2 +- app/controllers/fluentd/settings_controller.rb | 4 ++-- app/controllers/fluentd_controller.rb | 4 ++-- app/controllers/welcome_controller.rb | 2 +- app/views/fluentd/edit.html.haml | 2 +- app/views/fluentd/errors.html.haml | 2 +- app/views/fluentd/log.html.haml | 2 +- app/views/fluentd/new.html.haml | 2 +- app/views/fluentd/settings/edit.html.haml | 2 +- app/views/fluentd/settings/in_syslog/_form.html.haml | 2 +- .../settings/in_tail/after_file_choose.html.haml | 6 +++--- .../fluentd/settings/in_tail/after_format.html.haml | 4 ++-- app/views/fluentd/settings/in_tail/confirm.html.haml | 4 ++-- app/views/fluentd/settings/in_tail/show.html.haml | 2 +- .../fluentd/settings/out_forward/_form.html.haml | 2 +- app/views/fluentd/settings/out_mongo/_form.html.haml | 2 +- app/views/fluentd/settings/out_s3/_form.html.haml | 2 +- app/views/fluentd/settings/out_td/_form.html.haml | 2 +- app/views/fluentd/settings/show.html.haml | 2 +- .../fluentd/settings/source_and_output.html.haml | 12 ++++++------ app/views/fluentd/show.html.haml | 10 +++++----- app/views/misc/information.html.haml | 2 +- app/views/shared/_fluentd_nav.html.haml | 12 ++++++------ app/views/shared/_global_nav.html.erb | 10 +++++----- app/views/shared/_initial_setup.html.haml | 4 ++-- app/views/shared/vue/_fluent_log.html.erb | 2 +- app/views/tutorials/chapter3.html.haml | 2 +- app/views/tutorials/index.html.haml | 4 ++-- config/routes.rb | 3 +-- spec/features/sessions_spec.rb | 4 ++-- 36 files changed, 65 insertions(+), 66 deletions(-) diff --git a/app/controllers/fluentd/agents_controller.rb b/app/controllers/fluentd/agents_controller.rb index 8d3e156..c00a66f 100644 --- a/app/controllers/fluentd/agents_controller.rb +++ b/app/controllers/fluentd/agents_controller.rb @@ -5,21 +5,21 @@ class Fluentd::AgentsController < ApplicationController unless @fluentd.agent.start flash[:error] = t("error.fluentd_start_failed") + @fluentd.agent.log_tail(1).first end - redirect_to fluentd_path(@fluentd), status: 303 # 303 is change HTTP Verb GET + redirect_to daemon_path(@fluentd), status: 303 # 303 is change HTTP Verb GET end def stop unless @fluentd.agent.stop flash[:error] = t("error.fluentd_stop_failed") end - redirect_to fluentd_path(@fluentd), status: 303 # 303 is change HTTP Verb GET + redirect_to daemon_path(@fluentd), status: 303 # 303 is change HTTP Verb GET end def restart unless @fluentd.agent.restart flash[:error] = t("error.fluentd_restart_failed") + @fluentd.agent.log_tail(1).first end - redirect_to fluentd_path(@fluentd), status: 303 # 303 is change HTTP Verb GET + redirect_to daemon_path(@fluentd), status: 303 # 303 is change HTTP Verb GET end def log_tail diff --git a/app/controllers/fluentd/settings/in_syslog_controller.rb b/app/controllers/fluentd/settings/in_syslog_controller.rb index e799b49..9f7035e 100644 --- a/app/controllers/fluentd/settings/in_syslog_controller.rb +++ b/app/controllers/fluentd/settings/in_syslog_controller.rb @@ -22,7 +22,7 @@ class Fluentd::Settings::InSyslogController < ApplicationController return render "show" end end - redirect_to fluentd_setting_path(@fluentd) + redirect_to daemon_setting_path(@fluentd) end private diff --git a/app/controllers/fluentd/settings/in_tail_controller.rb b/app/controllers/fluentd/settings/in_tail_controller.rb index e821500..c508dc5 100644 --- a/app/controllers/fluentd/settings/in_tail_controller.rb +++ b/app/controllers/fluentd/settings/in_tail_controller.rb @@ -40,7 +40,7 @@ class Fluentd::Settings::InTailController < ApplicationController @fluentd.agent.config_append @setting.to_conf @fluentd.agent.restart if @fluentd.agent.running? - redirect_to fluentd_setting_path(@fluentd) + redirect_to daemon_setting_path(@fluentd) end private diff --git a/app/controllers/fluentd/settings/out_forward_controller.rb b/app/controllers/fluentd/settings/out_forward_controller.rb index f9f6cb4..c4d7dcb 100644 --- a/app/controllers/fluentd/settings/out_forward_controller.rb +++ b/app/controllers/fluentd/settings/out_forward_controller.rb @@ -25,7 +25,7 @@ class Fluentd::Settings::OutForwardController < ApplicationController return render "show" end end - redirect_to fluentd_setting_path(@fluentd) + redirect_to daemon_setting_path(@fluentd) end private diff --git a/app/controllers/fluentd/settings/out_mongo_controller.rb b/app/controllers/fluentd/settings/out_mongo_controller.rb index d89d247..806bd36 100644 --- a/app/controllers/fluentd/settings/out_mongo_controller.rb +++ b/app/controllers/fluentd/settings/out_mongo_controller.rb @@ -24,7 +24,7 @@ class Fluentd::Settings::OutMongoController < ApplicationController return render "show" end end - redirect_to fluentd_setting_path(@fluentd) + redirect_to daemon_setting_path(@fluentd) end private diff --git a/app/controllers/fluentd/settings/out_s3_controller.rb b/app/controllers/fluentd/settings/out_s3_controller.rb index 61f7447..31cb8f3 100644 --- a/app/controllers/fluentd/settings/out_s3_controller.rb +++ b/app/controllers/fluentd/settings/out_s3_controller.rb @@ -24,7 +24,7 @@ class Fluentd::Settings::OutS3Controller < ApplicationController return render "show" end end - redirect_to fluentd_setting_path(@fluentd) + redirect_to daemon_setting_path(@fluentd) end private diff --git a/app/controllers/fluentd/settings/out_td_controller.rb b/app/controllers/fluentd/settings/out_td_controller.rb index 4c80a54..a78825b 100644 --- a/app/controllers/fluentd/settings/out_td_controller.rb +++ b/app/controllers/fluentd/settings/out_td_controller.rb @@ -24,7 +24,7 @@ class Fluentd::Settings::OutTdController < ApplicationController return render "show" end end - redirect_to fluentd_setting_path(@fluentd) + redirect_to daemon_setting_path(@fluentd) end private diff --git a/app/controllers/fluentd/settings_controller.rb b/app/controllers/fluentd/settings_controller.rb index 946f5f4..3f37028 100644 --- a/app/controllers/fluentd/settings_controller.rb +++ b/app/controllers/fluentd/settings_controller.rb @@ -13,7 +13,7 @@ class Fluentd::SettingsController < ApplicationController def update @fluentd.agent.config_write params[:config] @fluentd.agent.restart if @fluentd.agent.running? - redirect_to fluentd_setting_path(@fluentd) + redirect_to daemon_setting_path(@fluentd) end def in_tail_after_file_choose @@ -54,7 +54,7 @@ class Fluentd::SettingsController < ApplicationController @fluentd.agent.config_append @setting.to_conf @fluentd.agent.restart if @fluentd.agent.running? - redirect_to fluentd_setting_path(@fluentd) + redirect_to daemon_setting_path(@fluentd) end private diff --git a/app/controllers/fluentd_controller.rb b/app/controllers/fluentd_controller.rb index 00cb909..963482c 100644 --- a/app/controllers/fluentd_controller.rb +++ b/app/controllers/fluentd_controller.rb @@ -15,7 +15,7 @@ class FluentdController < ApplicationController unless @fluentd.save return render :new end - redirect_to fluentd_path + redirect_to daemon_path end def edit @@ -27,7 +27,7 @@ class FluentdController < ApplicationController unless @fluentd.save return render :edit end - redirect_to fluentd_path + redirect_to daemon_path end def destroy diff --git a/app/controllers/welcome_controller.rb b/app/controllers/welcome_controller.rb index 8c22ff6..01c1a43 100644 --- a/app/controllers/welcome_controller.rb +++ b/app/controllers/welcome_controller.rb @@ -1,5 +1,5 @@ class WelcomeController < ApplicationController def home - redirect_to fluentd_path + redirect_to daemon_path end end diff --git a/app/views/fluentd/edit.html.haml b/app/views/fluentd/edit.html.haml index 3a1facb..56d9513 100644 --- a/app/views/fluentd/edit.html.haml +++ b/app/views/fluentd/edit.html.haml @@ -1,3 +1,3 @@ - page_title t('.page_title') -= render partial: "form", locals: { btn: t(".update"), url: fluentd_path(@fluentd), method: :patch } += render partial: "form", locals: { btn: t(".update"), url: daemon_path(@fluentd), method: :patch } diff --git a/app/views/fluentd/errors.html.haml b/app/views/fluentd/errors.html.haml index 0eee409..9bebbbc 100644 --- a/app/views/fluentd/errors.html.haml +++ b/app/views/fluentd/errors.html.haml @@ -1,5 +1,5 @@ - page_title t('fluentd.common.recent_errors', days: @error_duration_days) do - - link_to raw_log_fluentd_path(@fluentd), class: "btn btn-primary pull-right" do + - link_to raw_log_daemon_path(@fluentd), class: "btn btn-primary pull-right" do = icon('fa-download') = t('fluentd.common.raw_log_link') diff --git a/app/views/fluentd/log.html.haml b/app/views/fluentd/log.html.haml index 0e29e17..bcb22b2 100644 --- a/app/views/fluentd/log.html.haml +++ b/app/views/fluentd/log.html.haml @@ -1,5 +1,5 @@ - page_title t('.page_title', label: @fluentd.label) do - - link_to raw_log_fluentd_path(@fluentd), class: "btn btn-primary pull-right" do + - link_to raw_log_daemon_path(@fluentd), class: "btn btn-primary pull-right" do = icon('fa-download') = t('fluentd.common.raw_log_link') diff --git a/app/views/fluentd/new.html.haml b/app/views/fluentd/new.html.haml index 466e3cb..861b7f1 100644 --- a/app/views/fluentd/new.html.haml +++ b/app/views/fluentd/new.html.haml @@ -1,3 +1,3 @@ - page_title t('.page_title') -= render partial: "form", locals: { btn: t(".create"), url: fluentd_path, method: :post } += render partial: "form", locals: { btn: t(".create"), url: daemon_path, method: :post } diff --git a/app/views/fluentd/settings/edit.html.haml b/app/views/fluentd/settings/edit.html.haml index 346c24a..fe1380f 100644 --- a/app/views/fluentd/settings/edit.html.haml +++ b/app/views/fluentd/settings/edit.html.haml @@ -1,6 +1,6 @@ - page_title t('.page_title', label: @fluentd.label) -= form_tag(fluentd_setting_path(@fluentd), method: :patch) do += form_tag(daemon_setting_path(@fluentd), method: :patch) do %div.form-group = text_area_tag "config", @config, class: "form-control", rows: 40 %p.text.text-danger= t('plugins.notice_restart_for_config_edit') diff --git a/app/views/fluentd/settings/in_syslog/_form.html.haml b/app/views/fluentd/settings/in_syslog/_form.html.haml index d786382..7b84c63 100644 --- a/app/views/fluentd/settings/in_syslog/_form.html.haml +++ b/app/views/fluentd/settings/in_syslog/_form.html.haml @@ -1,6 +1,6 @@ = render "shared/setting_errors" -= form_for(@setting, url: finish_fluentd_setting_in_syslog_path(@fluentd), html: {class: "ignore-rails-error-div"}) do |f| += form_for(@setting, url: finish_daemon_setting_in_syslog_path(@fluentd), html: {class: "ignore-rails-error-div"}) do |f| = field(f, :tag) = field(f, :bind) = field(f, :port) diff --git a/app/views/fluentd/settings/in_tail/after_file_choose.html.haml b/app/views/fluentd/settings/in_tail/after_file_choose.html.haml index feb2c4b..5c1281f 100644 --- a/app/views/fluentd/settings/in_tail/after_file_choose.html.haml +++ b/app/views/fluentd/settings/in_tail/after_file_choose.html.haml @@ -1,8 +1,8 @@ - page_title t(".page_title") -= link_to t('fluentd.settings.in_tail.restart_from_first'), fluentd_setting_in_tail_path(@fluentd) += link_to t('fluentd.settings.in_tail.restart_from_first'), daemon_setting_in_tail_path(@fluentd) -= form_for(@setting, as: "setting", url: after_format_fluentd_setting_in_tail_path(@fluentd)) do |f| += form_for(@setting, as: "setting", url: after_format_daemon_setting_in_tail_path(@fluentd)) do |f| - @setting.errors.full_messages.each do |e| %div.alert.alert-danger= e @@ -16,4 +16,4 @@ %p = f.submit t('terms.next'), class: "btn btn-lg btn-primary pull-right" - = link_to t('terms.prev'), fluentd_setting_in_tail_path(@fluentd), class: "btn btn-lg btn-default" + = link_to t('terms.prev'), daemon_setting_in_tail_path(@fluentd), class: "btn btn-lg btn-default" diff --git a/app/views/fluentd/settings/in_tail/after_format.html.haml b/app/views/fluentd/settings/in_tail/after_format.html.haml index 61f3ba2..6d518ad 100644 --- a/app/views/fluentd/settings/in_tail/after_format.html.haml +++ b/app/views/fluentd/settings/in_tail/after_format.html.haml @@ -1,8 +1,8 @@ - page_title t(".page_title") -= link_to t('fluentd.settings.in_tail.restart_from_first'), fluentd_setting_in_tail_path(@fluentds) += link_to t('fluentd.settings.in_tail.restart_from_first'), daemon_setting_in_tail_path(@fluentds) -= form_for(@setting, as: "setting", url: confirm_fluentd_setting_in_tail_path(@fluentd)) do |f| += form_for(@setting, as: "setting", url: confirm_daemon_setting_in_tail_path(@fluentd)) do |f| = render partial: "form", locals: { f: f } %p diff --git a/app/views/fluentd/settings/in_tail/confirm.html.haml b/app/views/fluentd/settings/in_tail/confirm.html.haml index d5e9a6f..45fdef3 100644 --- a/app/views/fluentd/settings/in_tail/confirm.html.haml +++ b/app/views/fluentd/settings/in_tail/confirm.html.haml @@ -1,8 +1,8 @@ - page_title t(".page_title") -= link_to t('fluentd.settings.in_tail.restart_from_first'), fluentd_setting_in_tail_path(@fluentd) += link_to t('fluentd.settings.in_tail.restart_from_first'), daemon_setting_in_tail_path(@fluentd) -= form_for(@setting, as: "setting", url: finish_fluentd_setting_in_tail_path(@fluentd)) do |f| += form_for(@setting, as: "setting", url: finish_daemon_setting_in_tail_path(@fluentd)) do |f| = render partial: "form", locals: { f: f } %pre= @setting.to_conf diff --git a/app/views/fluentd/settings/in_tail/show.html.haml b/app/views/fluentd/settings/in_tail/show.html.haml index e1cdfa9..2b399a2 100644 --- a/app/views/fluentd/settings/in_tail/show.html.haml +++ b/app/views/fluentd/settings/in_tail/show.html.haml @@ -1,4 +1,4 @@ - page_title t(".page_title") -= render partial: "shared/vue/treeview", locals: {name: "path", action: after_file_choose_fluentd_setting_in_tail_path(@fluentd), submit_button: t('terms.next')} += render partial: "shared/vue/treeview", locals: {name: "path", action: after_file_choose_daemon_setting_in_tail_path(@fluentd), submit_button: t('terms.next')} diff --git a/app/views/fluentd/settings/out_forward/_form.html.haml b/app/views/fluentd/settings/out_forward/_form.html.haml index 398f4ef..7cbce73 100644 --- a/app/views/fluentd/settings/out_forward/_form.html.haml +++ b/app/views/fluentd/settings/out_forward/_form.html.haml @@ -1,6 +1,6 @@ = render "shared/setting_errors" -= form_for(@setting, url: finish_fluentd_setting_out_forward_path(@fluentd), html: {class: "ignore-rails-error-div"}) do |f| += form_for(@setting, url: finish_daemon_setting_out_forward_path(@fluentd), html: {class: "ignore-rails-error-div"}) do |f| = field(f, :match) = field(f, :server) = field(f, :secondary) diff --git a/app/views/fluentd/settings/out_mongo/_form.html.haml b/app/views/fluentd/settings/out_mongo/_form.html.haml index 70b48dc..22c30f5 100644 --- a/app/views/fluentd/settings/out_mongo/_form.html.haml +++ b/app/views/fluentd/settings/out_mongo/_form.html.haml @@ -1,6 +1,6 @@ = render "shared/setting_errors" -= form_for(@setting, url: finish_fluentd_setting_out_mongo_path(@fluentd), html: {class: "ignore-rails-error-div"}) do |f| += form_for(@setting, url: finish_daemon_setting_out_mongo_path(@fluentd), html: {class: "ignore-rails-error-div"}) do |f| = field(f, :match) = field(f, :host) = field(f, :port) diff --git a/app/views/fluentd/settings/out_s3/_form.html.haml b/app/views/fluentd/settings/out_s3/_form.html.haml index 1678bb2..d1b025f 100644 --- a/app/views/fluentd/settings/out_s3/_form.html.haml +++ b/app/views/fluentd/settings/out_s3/_form.html.haml @@ -1,6 +1,6 @@ = render "shared/setting_errors" -= form_for(@setting, url: finish_fluentd_setting_out_s3_path(@fluentd), html: {class: "ignore-rails-error-div"}) do |f| += form_for(@setting, url: finish_daemon_setting_out_s3_path(@fluentd), html: {class: "ignore-rails-error-div"}) do |f| = field(f, :match) = field(f, :aws_key_id) = field(f, :aws_sec_key) diff --git a/app/views/fluentd/settings/out_td/_form.html.haml b/app/views/fluentd/settings/out_td/_form.html.haml index 062bdeb..c5df913 100644 --- a/app/views/fluentd/settings/out_td/_form.html.haml +++ b/app/views/fluentd/settings/out_td/_form.html.haml @@ -1,6 +1,6 @@ = render "shared/setting_errors" -= form_for(@setting, url: finish_fluentd_setting_out_td_path(@fluentd), html: {class: "ignore-rails-error-div"}) do |f| += form_for(@setting, url: finish_daemon_setting_out_td_path(@fluentd), html: {class: "ignore-rails-error-div"}) do |f| = field(f, :match) = field(f, :apikey) = field(f, :auto_create_table) diff --git a/app/views/fluentd/settings/show.html.haml b/app/views/fluentd/settings/show.html.haml index e15e9f7..3f7b45d 100644 --- a/app/views/fluentd/settings/show.html.haml +++ b/app/views/fluentd/settings/show.html.haml @@ -1,5 +1,5 @@ - page_title t('.page_title') do - - link_to edit_fluentd_setting_path(@fluentd), class: "btn btn-primary pull-right" do + - link_to edit_daemon_setting_path(@fluentd), class: "btn btn-primary pull-right" do = icon('fa-pencil') = t("terms.edit") diff --git a/app/views/fluentd/settings/source_and_output.html.haml b/app/views/fluentd/settings/source_and_output.html.haml index ecb8b38..3e79e32 100644 --- a/app/views/fluentd/settings/source_and_output.html.haml +++ b/app/views/fluentd/settings/source_and_output.html.haml @@ -9,11 +9,11 @@ %h4= t('.in') .panel-body %p - = link_to(fluentd_setting_in_tail_path(@fluentd)) do + = link_to(daemon_setting_in_tail_path(@fluentd)) do = icon('fa-file-text-o fa-lg') = t("fluentd.common.setup_in_tail") %p - = link_to(fluentd_setting_in_syslog_path(@fluentd)) do + = link_to(daemon_setting_in_syslog_path(@fluentd)) do = icon('fa-file-text-o fa-lg') = t("fluentd.common.setup_in_syslog") .col-lg-1.arrow-right @@ -28,18 +28,18 @@ %h4= t('.out') .panel-body %p - = link_to(fluentd_setting_out_td_path(@fluentd)) do + = link_to(daemon_setting_out_td_path(@fluentd)) do = icon('fa-file-text-o fa-lg') = t("fluentd.common.setup_out_td") %p - = link_to(fluentd_setting_out_s3_path(@fluentd)) do + = link_to(daemon_setting_out_s3_path(@fluentd)) do = icon('fa-file-text-o fa-lg') = t("fluentd.common.setup_out_s3") %p - = link_to(fluentd_setting_out_mongo_path(@fluentd)) do + = link_to(daemon_setting_out_mongo_path(@fluentd)) do = icon('fa-file-text-o fa-lg') = t("fluentd.common.setup_out_mongo") %p - = link_to(fluentd_setting_out_forward_path(@fluentd)) do + = link_to(daemon_setting_out_forward_path(@fluentd)) do = icon('fa-file-text-o fa-lg') = t("fluentd.common.setup_out_forward") diff --git a/app/views/fluentd/show.html.haml b/app/views/fluentd/show.html.haml index c003564..e5907b4 100644 --- a/app/views/fluentd/show.html.haml +++ b/app/views/fluentd/show.html.haml @@ -14,14 +14,14 @@ .panel-body - if flash[:error] %div.alert.alert-danger= flash[:error] - = link_to icon("fa-play") << t("fluentd.common.start"), start_fluentd_agent_path(@fluentd), method: :put, class: "btn #{@fluentd.agent.running? ? "disabled btn-default" : "btn-primary"}" - = link_to icon("fa-pause") << t("fluentd.common.stop"), stop_fluentd_agent_path(@fluentd), method: :put, class: "btn #{@fluentd.agent.running? ? "btn-danger" : "disabled btn-default"}" - = link_to icon("fa-refresh") << t("fluentd.common.restart"), restart_fluentd_agent_path(@fluentd), method: :put, class: "btn #{@fluentd.agent.running? ? "btn-warning" : "disabled btn-default"}" + = link_to icon("fa-play") << t("fluentd.common.start"), start_daemon_agent_path(@fluentd), method: :put, class: "btn #{@fluentd.agent.running? ? "disabled btn-default" : "btn-primary"}" + = link_to icon("fa-pause") << t("fluentd.common.stop"), stop_daemon_agent_path(@fluentd), method: :put, class: "btn #{@fluentd.agent.running? ? "btn-danger" : "disabled btn-default"}" + = link_to icon("fa-refresh") << t("fluentd.common.restart"), restart_daemon_agent_path(@fluentd), method: :put, class: "btn #{@fluentd.agent.running? ? "btn-warning" : "disabled btn-default"}" .col-lg-6 .panel.panel-default .panel-heading .pull-right - = link_to t('terms.edit'), edit_fluentd_path, class: "btn btn-default" + = link_to t('terms.edit'), edit_daemon_path, class: "btn btn-default" = link_to t('terms.destroy'), "#", class: "btn btn-danger", data: { toggle: "modal", target: "#setting-destroy-modal" } %h4= t('fluentd.common.fluentd_info') .modal.fade{id: "setting-destroy-modal"} @@ -35,7 +35,7 @@ .modal-body = raw t('fluentd.common.destroy_fluentd_setting_warning') .modal-footer - = form_tag(fluentd_path(@fluentd), method: :delete) do + = form_tag(daemon_path(@fluentd), method: :delete) do %button.btn.btn-default{"data-dismiss" => "modal"} Close = submit_tag t('terms.destroy'), class: "btn btn-danger" diff --git a/app/views/misc/information.html.haml b/app/views/misc/information.html.haml index 0246292..1597a3a 100644 --- a/app/views/misc/information.html.haml +++ b/app/views/misc/information.html.haml @@ -7,7 +7,7 @@ .row .col-lg-12 %p - = link_to misc_update_fluentd_ui_path, class: "btn btn-primary btn-lg", method: :post do + = link_to misc_update_daemon_ui_path, class: "btn btn-primary btn-lg", method: :post do = t('.update_fluentd_ui', version: FluentdUI.latest_version) = t('.update_fluentd_ui_caution') diff --git a/app/views/shared/_fluentd_nav.html.haml b/app/views/shared/_fluentd_nav.html.haml index ec4243c..9e838c0 100644 --- a/app/views/shared/_fluentd_nav.html.haml +++ b/app/views/shared/_fluentd_nav.html.haml @@ -4,9 +4,9 @@ - if flash[:error] %div.alert.alert-danger= flash[:error] -= link_to t("fluentd.common.detail"), fluentd_path(@fluentd) -= link_to t("fluentd.common.start"), start_fluentd_agent_path(@fluentd), method: :put -= link_to t("fluentd.common.stop"), stop_fluentd_agent_path(@fluentd), method: :put -= link_to t("fluentd.common.restart"), restart_fluentd_agent_path(@fluentd), method: :put -= link_to t("fluentd.common.log"), log_fluentd_agent_path(@fluentd) -= link_to t("fluentd.common.config_file"), fluentd_setting_path(@fluentd) += link_to t("fluentd.common.detail"), daemon_path(@fluentd) += link_to t("fluentd.common.start"), start_daemon_agent_path(@fluentd), method: :put += link_to t("fluentd.common.stop"), stop_daemon_agent_path(@fluentd), method: :put += link_to t("fluentd.common.restart"), restart_daemon_agent_path(@fluentd), method: :put += link_to t("fluentd.common.log"), log_daemon_agent_path(@fluentd) += link_to t("fluentd.common.config_file"), daemon_setting_path(@fluentd) diff --git a/app/views/shared/_global_nav.html.erb b/app/views/shared/_global_nav.html.erb index 78151f6..2958272 100644 --- a/app/views/shared/_global_nav.html.erb +++ b/app/views/shared/_global_nav.html.erb @@ -6,19 +6,19 @@ <% if fluentd_exists? %>

    <% end %> diff --git a/app/views/shared/_initial_setup.html.haml b/app/views/shared/_initial_setup.html.haml index 7d64e2e..da664fd 100644 --- a/app/views/shared/_initial_setup.html.haml +++ b/app/views/shared/_initial_setup.html.haml @@ -3,11 +3,11 @@ %div.row %div.col-lg-6 %div.well - %span= link_to icon("fa-cog") << t("terms.setup", target: "fluentd"), new_fluentd_path(variant: "fluentd_gem"), class: "btn btn-primary btn-lg" + %span= link_to icon("fa-cog") << t("terms.setup", target: "fluentd"), new_daemon_path(variant: "fluentd_gem"), class: "btn btn-primary btn-lg" %div.col-lg-6 %div.well %span - = link_to icon("fa-cog") << t("terms.setup", target: "td-agent"), new_fluentd_path(variant: "td-agent"), class: "btn btn-lg #{has_td_agent_system? ? "btn-primary" : "btn-default disabled"}" + = link_to icon("fa-cog") << t("terms.setup", target: "td-agent"), new_daemon_path(variant: "td-agent"), class: "btn btn-lg #{has_td_agent_system? ? "btn-primary" : "btn-default disabled"}" - unless has_td_agent_system? = link_to t('terms.install_it', target: "td-agent"), "http://docs.treasuredata.com/articles/td-agent" diff --git a/app/views/shared/vue/_fluent_log.html.erb b/app/views/shared/vue/_fluent_log.html.erb index e9a4580..95a8da1 100644 --- a/app/views/shared/vue/_fluent_log.html.erb +++ b/app/views/shared/vue/_fluent_log.html.erb @@ -1,6 +1,6 @@ <% auto_reload ||= true %> -
    "> +
    ">