]> sipb.mit.edu Git - ikiwiki.git/commitdiff
Merge branch 'master' into sipb
authorQuentin Smith <quentin@mit.edu>
Sun, 25 Jan 2015 03:49:03 +0000 (22:49 -0500)
committerQuentin Smith <quentin@mit.edu>
Sun, 25 Jan 2015 03:49:03 +0000 (22:49 -0500)
Conflicts:
po/Makefile
templates/page.tmpl

1  2 
IkiWiki/CGI.pm
IkiWiki/Plugin/git.pm
IkiWiki/Plugin/mdwn.pm
IkiWiki/Wrapper.pm
templates/page.tmpl

diff --combined IkiWiki/CGI.pm
index 5ea1080342a5514e2114e4a78af3ba04b0ef26fb,61af830f859bcd4407cb845472a72d44eeed5c67..9e7cc06c7660a8251a00f99ffb738a34ff6c4e90
@@@ -58,12 -58,15 +58,15 @@@ sub cgitemplate ($$$;@) 
        
        my $template=template("page.tmpl");
  
-       my $topurl = defined $cgi ? $cgi->url : $config{url};
+       my $topurl = $config{url};
+       if (defined $cgi && ! $config{w3mmode} && ! $config{reverse_proxy}) {
+               $topurl = $cgi->url;
+       }
  
        my $page="";
        if (exists $params{page}) {
                $page=delete $params{page};
-               $params{forcebaseurl}=urlabs(urlto($page), $topurl);
+               $params{forcebaseurl}=urlto($page);
        }
        run_hooks(pagetemplate => sub {
                shift->(
        });
        templateactions($template, "");
  
+       my $baseurl = baseurl();
        $template->param(
                dynamic => 1,
                title => $title,
                wikiname => $config{wikiname},
                content => $content,
-               baseurl => urlabs(baseurl(), $topurl),
+               baseurl => $baseurl,
                html5 => $config{html5},
                %params,
        );
  sub redirect ($$) {
        my $q=shift;
        eval q{use URI};
-       my $url=URI->new(urlabs(shift, $q->url));
+       my $topurl;
+       if (defined $q && ! $config{w3mmode} && ! $config{reverse_proxy}) {
+               $topurl = $q->url;
+       }
+       my $url=URI->new(urlabs(shift, $topurl));
        if (! $config{w3mmode}) {
                print $q->redirect($url);
        }
@@@ -105,16 -116,29 +116,29 @@@ sub decode_cgi_utf8 ($) 
        if ($] < 5.01) {
                my $cgi = shift;
                foreach my $f ($cgi->param) {
-                       $cgi->param($f, map { decode_utf8 $_ } $cgi->param($f));
+                       $cgi->param($f, map { decode_utf8 $_ }
+                               @{$cgi->param_fetch($f)});
                }
        }
  }
  
+ sub safe_decode_utf8 ($) {
+     my $octets = shift;
+     # call decode_utf8 on >= 5.20 only if it's not already decoded,
+     # otherwise it balks, on < 5.20, always call it
+     if ($] < 5.02 || !Encode::is_utf8($octets)) {
+         return decode_utf8($octets);
+     }
+     else {
+         return $octets;
+     }
+ }
  sub decode_form_utf8 ($) {
        if ($] >= 5.01) {
                my $form = shift;
                foreach my $f ($form->field) {
-                       my @value=map { decode_utf8($_) } $form->field($f);
+                       my @value=map { safe_decode_utf8($_) } $form->field($f);
                        $form->field(name  => $f,
                                     value => \@value,
                                     force => 1,
@@@ -159,9 -183,7 +183,9 @@@ sub cgi_signin ($$;$) 
                template => {type => 'div'},
                stylesheet => 1,
        );
 -      my $buttons=["Login"];
 +      # MITLOGIN: These should be restored when logins are allowed again.
 +      #my $buttons=["Login"];
 +      my $buttons=[];
        
        $form->field(name => "do", type => "hidden", value => "signin",
                force => 1);
@@@ -260,16 -282,13 +284,16 @@@ sub cgi_prefs ($$) 
                force => 1);
        $form->field(name => "sid", type => "hidden", value => $session->id,
                force => 1);
 -      $form->field(name => "email", size => 50, fieldset => "preferences");
 +            #$form->field(name => "email", size => 50, fieldset => "preferences");
 +      $form->field(name => "realname", size => 50, fieldset => "preferences");
        
        my $user_name=$session->param("name");
  
        if (! $form->submitted) {
 -              $form->field(name => "email", force => 1,
 -                      value => userinfo_get($user_name, "email"));
 +            #$form->field(name => "email", force => 1,
 +            #value => userinfo_get($user_name, "email"));
 +              $form->field(name => "realname", force => 1,
 +                      value => userinfo_get($user_name, "realname"));
        }
        
        if ($form->submitted eq 'Logout') {
                        userinfo_set($user_name, 'email', $form->field('email')) ||
                                error("failed to set email");
                }
 -
 +              if (defined $form->field('realname')) {
 +                      userinfo_set($user_name, 'realname', $form->field('realname')) ||
 +                              error("failed to set realname");
 +                }
                $form->text(gettext("Preferences saved."));
        }
        
@@@ -359,7 -375,8 +383,8 @@@ sub cgi_getsession ($) 
                        { FileName => "$config{wikistatedir}/sessions.db" })
        };
        if (! $session || $@) {
-               error($@." ".CGI::Session->errstr());
+               my $error = $@;
+               error($error." ".CGI::Session->errstr());
        }
        
        umask($oldmask);
diff --combined IkiWiki/Plugin/git.pm
index 3291b927575361fda3534a2365b5c7ed5c979ea2,75b89e476bbb4bf1da262385a8e390994489f0e9..50ae43a940532854b209840817b33c7793d94b27
@@@ -4,7 -4,6 +4,7 @@@ package IkiWiki::Plugin::git
  use warnings;
  use strict;
  use IkiWiki;
 +use IkiWiki::UserInfo;
  use Encode;
  use URI::Escape q{uri_escape_utf8};
  use open qw{:utf8 :std};
@@@ -468,6 -467,11 +468,11 @@@ sub git_commit_info ($;$) 
  sub rcs_find_changes ($) {
        my $oldrev=shift;
  
+       # Note that git log will sometimes show files being added that
+       # don't exist. Particularly, git merge -s ours can result in a
+       # merge commit where some files were not really added.
+       # This is why the code below verifies that the files really
+       # exist.
        my @raw_lines = run_or_die('git', 'log',
                '--pretty=raw', '--raw', '--abbrev=40', '--always', '-c',
                '--no-renames', , '--reverse',
                foreach my $i (@{$ci->{details}}) {
                        my $file=$i->{file};
                        if ($i->{sha1_to} eq $nullsha) {
-                               delete $changed{$file};
-                               $deleted{$file}=1;
+                               if (! -e "$config{srcdir}/$file") {
+                                       delete $changed{$file};
+                                       $deleted{$file}=1;
+                               }
                        }
                        else {
-                               delete $deleted{$file};
-                               $changed{$file}=1;
+                               if (-e "$config{srcdir}/$file") {
+                                       delete $deleted{$file};
+                                       $changed{$file}=1;
+                               }
                        }
                }
        }
@@@ -572,8 -580,7 +581,8 @@@ sub rcs_commit_helper (@) 
                }
                if (defined $u) {
                        $u=encode_utf8($u);
 -                      $ENV{GIT_AUTHOR_NAME}=$u;
 +                      # MITLOGIN This algorithm could be improved
 +                      $ENV{GIT_AUTHOR_NAME}=IkiWiki::userinfo_get($u, "realname");
                }
                if (defined $params{session}->param("nickname")) {
                        $u=encode_utf8($params{session}->param("nickname"));
                        $u=~s/[^-_0-9[:alnum:]]+//g;
                }
                if (defined $u) {
 -                      $ENV{GIT_AUTHOR_EMAIL}="$u\@web";
 +                      $ENV{GIT_AUTHOR_EMAIL}="$u\@mit.edu";
                }
        }
  
        # So we should ignore its exit status (hence run_or_non).
        if (run_or_non('git', 'commit', '-m', $params{message}, '-q', @opts)) {
                if (length $config{gitorigin_branch}) {
-                       run_or_cry('git', 'push', $config{gitorigin_branch});
+                       run_or_cry('git', 'push', $config{gitorigin_branch}, $config{gitmaster_branch});
                }
        }
        
@@@ -662,7 -669,9 +671,9 @@@ sub rcs_recentchanges ($) 
                my @pages;
                foreach my $detail (@{ $ci->{'details'} }) {
                        my $file = $detail->{'file'};
-                       my $efile = uri_escape_utf8($file);
+                       my $efile = join('/',
+                               map { uri_escape_utf8($_) } split('/', $file)
+                       );
  
                        my $diffurl = defined $config{'diffurl'} ? $config{'diffurl'} : "";
                        $diffurl =~ s/\[\[file\]\]/$efile/go;
diff --combined IkiWiki/Plugin/mdwn.pm
index b7ed2c5081df90f447a2bcb3cf3187b10c263d71,014e78eea124604e249d35d42a6b9ccf6524c254..3b5d3c6d4fd63bdefd020759651acfe5d0cecaf6
@@@ -78,7 -78,7 +78,7 @@@ sub htmlize (@) 
                }
                if (! defined $markdown_sub) {
                        eval q{use Text::Markdown};
 -                      if (! $@) {
 +                      if (1) {#! $@) {  # Text::Markdown throws this but works.  Shrug.
                                if (Text::Markdown->can('markdown')) {
                                        $markdown_sub=\&Text::Markdown::markdown;
                                }
@@@ -92,8 -92,9 +92,9 @@@
                                        $markdown_sub=\&Markdown::Markdown;
                                }
                                else {
+                                       my $error = $@;
                                        do "/usr/bin/markdown" ||
-                                               error(sprintf(gettext("failed to load Markdown.pm perl module (%s) or /usr/bin/markdown (%s)"), $@, $!));
+                                               error(sprintf(gettext("failed to load Markdown.pm perl module (%s) or /usr/bin/markdown (%s)"), $error, $!));
                                        $markdown_sub=\&Markdown::Markdown;
                                }
                        }
diff --combined IkiWiki/Wrapper.pm
index e846f8dc16ac12885a9f75a3853fae1fcc726b36,4c99cdaa0b670080ac8548e8d95de91b7b74de07..f3972ac13011dd61ed193ed80c88f460863056c2
@@@ -49,9 -49,10 +49,10 @@@ sub gen_wrapper () 
        my @envsave;
        push @envsave, qw{REMOTE_ADDR QUERY_STRING REQUEST_METHOD REQUEST_URI
                       CONTENT_TYPE CONTENT_LENGTH GATEWAY_INTERFACE
 -                     HTTP_COOKIE REMOTE_USER HTTPS REDIRECT_STATUS
 +                     HTTP_COOKIE REMOTE_USER HTTPS SSL_CLIENT_S_DN_CN REDIRECT_STATUS
                       HTTP_HOST SERVER_PORT HTTPS HTTP_ACCEPT
                       REDIRECT_URL} if $config{cgi};
+       my $envsize=$#envsave;
        my $envsave="";
        foreach my $var (@envsave) {
                $envsave.=<<"EOF";
                addenv("$var", s);
  EOF
        }
+       if (ref $config{ENV} eq 'HASH') {
+               foreach my $key (keys %{$config{ENV}}) {
+                       my $val=$config{ENV}{$key};
+                       utf8::encode($val) if utf8::is_utf8($val);
+                       $val =~ s/([^A-Za-z0-9])/sprintf '""\\x%02x""', ord($1)/ge;
+                       $envsize += 1;
+                       $envsave.=<<"EOF";
+       addenv("$key", "$val");
+ EOF
+               }
+               delete $config{ENV};
+       }
        
        my @wrapper_hooks;
        run_hooks(genwrapper => sub { push @wrapper_hooks, shift->() });
@@@ -171,7 -184,7 +184,7 @@@ EO
  #include <sys/file.h>
  
  extern char **environ;
- char *newenviron[$#envsave+7];
+ char *newenviron[$envsize+7];
  int i=0;
  
  void addenv(char *var, char *val) {
@@@ -267,6 -280,7 +280,6 @@@ EO
                #translators: The parameter is a C filename.
                error(sprintf(gettext("failed to compile %s"), "$wrapper.c"));
        }
 -      unlink("$wrapper.c");
        if (defined $config{wrappergroup}) {
                my $gid=(getgrnam($config{wrappergroup}))[2];
                if (! defined $gid) {
diff --combined templates/page.tmpl
index 9ec65205862a2db28cf479b17e388a24a8e9dcec,9e8b330a4a25124eb799b52ad9b840b0c6105fd6..496bc0aad09fe5b96298468995d86f1c2cdb170c
@@@ -1,9 -1,5 +1,5 @@@
- <TMPL_IF HTML5><!DOCTYPE html>
- <html lang="en">
- <TMPL_ELSE><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
-  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+ <!DOCTYPE html>
 -<html xmlns="http://www.w3.org/1999/xhtml">
 +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
- </TMPL_IF>
  <head>
  <TMPL_IF DYNAMIC>
  <TMPL_IF FORCEBASEURL><base href="<TMPL_VAR FORCEBASEURL>" /><TMPL_ELSE>
  </TMPL_IF>
  <TMPL_IF HTML5><meta charset="utf-8" /><TMPL_ELSE><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /></TMPL_IF>
  <title><TMPL_VAR TITLE></title>
 -<TMPL_IF FAVICON>
 -<link rel="icon" href="<TMPL_VAR BASEURL><TMPL_VAR FAVICON>" type="image/x-icon" />
 -</TMPL_IF>
 -<link rel="stylesheet" href="<TMPL_VAR BASEURL>style.css" type="text/css" />
 -<TMPL_IF LOCAL_CSS>
 -<link rel="stylesheet" href="<TMPL_VAR BASEURL><TMPL_VAR LOCAL_CSS>" type="text/css" />
 -<TMPL_ELSE>
 -<link rel="stylesheet" href="<TMPL_VAR BASEURL>local.css" type="text/css" />
 -</TMPL_IF>
 -
 -<TMPL_UNLESS DYNAMIC>
+ <TMPL_IF RESPONSIVE_LAYOUT><meta name="viewport" content="width=device-width, initial-scale=1" /></TMPL_IF>
 +<meta http-equiv="Content-Style-Type" content="text/css" />
 +<meta name="robots" content="all" />
 +<meta name="author" content="SIPB" />
 +<meta name="description" content="MIT Student Information Processing Board" />        
 +<meta name="keywords" content="SIPB, MIT, hackers" />
 +<link rel="stylesheet" type="text/css" href="<TMPL_VAR BASEURL>style.css" />
  <TMPL_IF EDITURL>
  <link rel="alternate" type="application/x-wiki" title="Edit this page" href="<TMPL_VAR EDITURL>" />
  </TMPL_IF>
  <link rel="next" href="<TMPL_VAR NEXTURL>" title="<TMPL_VAR NEXTTITLE>" />
  </TMPL_IF>
  </TMPL_LOOP>
 -</TMPL_UNLESS>
  
  </head>
  <body>
  
 -<TMPL_IF HTML5><article class="page"><TMPL_ELSE><div class="page"></TMPL_IF>
 +<div id="content-block">
  
 -<TMPL_IF HTML5><section class="pageheader"><TMPL_ELSE><div class="pageheader"></TMPL_IF>
 -<TMPL_IF HTML5><header class="header"><TMPL_ELSE><div class="header"></TMPL_IF>
 -<span>
 -<span class="parentlinks">
 +<div id="logo">
 +<a href="<TMPL_VAR BASEURL>./"><img src="<TMPL_VAR BASEURL>images/grumpyfuzzball_half.png" alt="grumpy fuzzball" /></a>
 +<a href="<TMPL_VAR BASEURL>./"><img src="<TMPL_VAR BASEURL>images/SIPBlogo.png" alt="MIT Student Information Processing Board" id="sipb-logo" /></a>
 +<div id="hidden-title"><h1>SIPB: MIT Student Information Processing Board</h1></div>
 +</div>
 +
 +<ul id="navigation">
 +<li class="first-navbox">
 +<a href="<TMPL_VAR BASEURL>projects/"><span>Projects</span></a>
 +</li>
 +<li class="second-navbox">
 +<a href="<TMPL_VAR BASEURL>doc/"><span>Docs</span></a>
 +</li>
 +<li class="third-navbox">
 +<a href="<TMPL_VAR BASEURL>office/"><span>Office</span></a>
 +</li>
 +<li class="fourth-navbox">
 +<a href="<TMPL_VAR BASEURL>join/"><span>Join</span></a>
 +</li>
 +</ul>
 +
 +<h1><TMPL_VAR TITLE></h1>
 +
 +<TMPL_IF PARENTLINKS>
 +<div id="breadcrumbs">
 +<ul>
  <TMPL_LOOP PARENTLINKS>
 -<a href="<TMPL_VAR URL>"><TMPL_VAR PAGE></a>/ 
 +<li><a href="<TMPL_VAR URL>"><TMPL_VAR PAGE></a>&#187;</li>
  </TMPL_LOOP>
 -</span>
 -<span class="title">
 -<TMPL_VAR TITLE>
 -<TMPL_IF ISTRANSLATION>
 -&nbsp;(<TMPL_VAR PERCENTTRANSLATED>%)
 -</TMPL_IF>
 -</span>
 -</span>
 -<TMPL_UNLESS DYNAMIC>
 -<TMPL_IF SEARCHFORM>
 -<TMPL_VAR SEARCHFORM>
 +</ul>
 +<br style="clear:both;" />
 +</div>
  </TMPL_IF>
 -</TMPL_UNLESS>
 -<TMPL_IF HTML5></header><TMPL_ELSE></div></TMPL_IF>
 +
 +<div id="featured-block" class="<TMPL_UNLESS PARENTLINKS>is-top</TMPL_UNLESS>">
 +<TMPL_VAR CONTENT>
 +</div>
 +
 +<div id="prefooter"></div>
 +
 +</div>
 +
 +<div id="footer">
  
  <TMPL_IF HAVE_ACTIONS>
  <TMPL_IF HTML5><nav class="actions"><TMPL_ELSE><div class="actions"></TMPL_IF>
  <TMPL_IF HTML5></nav><TMPL_ELSE></div></TMPL_IF>
  </TMPL_IF>
  
 -<TMPL_IF OTHERLANGUAGES>
 -<TMPL_IF HTML5><nav id="otherlanguages"><TMPL_ELSE><div id="otherlanguages"></TMPL_IF>
 -<ul>
 -<TMPL_LOOP OTHERLANGUAGES>
 -<li>
 -<a href="<TMPL_VAR URL>"><TMPL_VAR LANGUAGE></a>
 -<TMPL_IF MASTER>
 -(master)
 -<TMPL_ELSE>
 -&nbsp;(<TMPL_VAR PERCENT>%)
 -</TMPL_IF>
 -</li>
 -</TMPL_LOOP>
 -</ul>
 -<TMPL_IF HTML5></nav><TMPL_ELSE></div></TMPL_IF>
 -</TMPL_IF>
 -
 -<TMPL_UNLESS DYNAMIC>
 -<TMPL_VAR TRAILS>
 -</TMPL_UNLESS>
 -
 -<TMPL_IF HTML5></section><TMPL_ELSE></div></TMPL_IF>
 -
 -<TMPL_UNLESS DYNAMIC>
 -<TMPL_IF SIDEBAR>
 -<TMPL_IF HTML5><aside class="sidebar"><TMPL_ELSE><div class="sidebar"></TMPL_IF>
 -<TMPL_VAR SIDEBAR>
 -<TMPL_IF HTML5></aside><TMPL_ELSE></div></TMPL_IF>
 -</TMPL_IF>
 -</TMPL_UNLESS>
 -
 -<div id="pagebody">
 -
 -<TMPL_IF HTML5><section<TMPL_ELSE><div</TMPL_IF> id="content" role="main">
 -<TMPL_VAR CONTENT>
 -<TMPL_IF HTML5></section><TMPL_ELSE></div></TMPL_IF>
 -
 -<TMPL_IF ENCLOSURE>
 -<TMPL_IF HTML5><section id="enclosure"><TMPL_ELSE><div id="enclosure"></TMPL_IF>
 -<a href="<TMPL_VAR ENCLOSURE>">Download</a>
 -<TMPL_IF HTML5></section><TMPL_ELSE></div></TMPL_IF>
 -</TMPL_IF>
 -
 -<TMPL_UNLESS DYNAMIC>
 -<TMPL_IF COMMENTS>
 -<TMPL_IF HTML5><section<TMPL_ELSE><div</TMPL_IF> id="comments" role="complementary">
 -<TMPL_VAR COMMENTS>
 -<TMPL_IF ADDCOMMENTURL>
 -<div class="addcomment">
 -<a href="<TMPL_VAR ADDCOMMENTURL>">Add a comment</a>
 -</div>
 -<TMPL_ELSE>
 -<div class="addcomment">Comments on this page are closed.</div>
 -</TMPL_IF>
 -<TMPL_IF HTML5></section><TMPL_ELSE></div></TMPL_IF>
 -</TMPL_IF>
 -</TMPL_UNLESS>
 -
 -</div>
 -
 -<TMPL_IF HTML5><footer<TMPL_ELSE><div</TMPL_IF> id="footer" class="pagefooter" role="contentinfo">
 -<TMPL_UNLESS DYNAMIC>
 -<TMPL_IF HTML5><nav id="pageinfo"><TMPL_ELSE><div id="pageinfo"></TMPL_IF>
 -
 -<TMPL_VAR TRAILS>
 -
 -<TMPL_IF TAGS>
 -<TMPL_IF HTML5><nav class="tags"><TMPL_ELSE><div class="tags"></TMPL_IF>
 -Tags:
 -<TMPL_LOOP TAGS>
 -<TMPL_VAR LINK>
 -</TMPL_LOOP>
 -<TMPL_IF HTML5></nav><TMPL_ELSE></div></TMPL_IF>
 -</TMPL_IF>
 -
 -<TMPL_IF BACKLINKS>
 -<TMPL_IF HTML5><nav id="backlinks"><TMPL_ELSE><div id="backlinks"></TMPL_IF>
 -Links:
 -<TMPL_LOOP BACKLINKS>
 -<a href="<TMPL_VAR URL>"><TMPL_VAR PAGE></a>
 -</TMPL_LOOP>
 -<TMPL_IF MORE_BACKLINKS>
 -<span class="popup">...
 -<span class="balloon">
 -<TMPL_LOOP MORE_BACKLINKS>
 -<a href="<TMPL_VAR URL>"><TMPL_VAR PAGE></a>
 -</TMPL_LOOP>
 -</span>
 -</span>
 -</TMPL_IF>
 -<TMPL_IF HTML5></nav><TMPL_ELSE></div></TMPL_IF>
 -</TMPL_IF>
 +<p>&copy; 2009 Student Information Processing Board</p>
 +<p>Unless otherwise specified, all content on this wiki is released under a dual license of the Creative Commons Attribution-Share Alike license, and the GNU Free Documentation License, with no Invariant Sections, no Front-Cover Texts, and no Back-Cover-Texts.<br />
 + This follows the SIPB Documentation Licensing Recommendation.</p>
  
 -<TMPL_IF COPYRIGHT>
 -<div class="pagecopyright">
 -<a name="pagecopyright"></a>
 -<TMPL_VAR COPYRIGHT>
  </div>
 -</TMPL_IF>
 -
 -<TMPL_IF LICENSE>
 -<div class="pagelicense">
 -<a name="pagelicense"></a>
 -License: <TMPL_VAR LICENSE>
 -</div>
 -</TMPL_IF>
 -
 -<div class="pagedate">
 -Last edited <TMPL_VAR MTIME>
 -<!-- Created <TMPL_VAR CTIME> -->
 -</div>
 -
 -<TMPL_IF HTML5></nav><TMPL_ELSE></div></TMPL_IF>
 -<TMPL_IF EXTRAFOOTER><TMPL_VAR EXTRAFOOTER></TMPL_IF>
 -</TMPL_UNLESS>
 -<!-- from <TMPL_VAR WIKINAME> -->
 -<TMPL_IF HTML5></footer><TMPL_ELSE></div></TMPL_IF>
  
 -<TMPL_IF HTML5></article><TMPL_ELSE></div></TMPL_IF>
 +<script type="text/javascript">
 +var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
 +document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
 +</script>
 +<script type="text/javascript">
 +try {
 +var pageTracker = _gat._getTracker("UA-15235584-1");
 +pageTracker._trackPageview();
 +} catch(err) {}</script>
  
  </body>
  </html>