mod_setenvif.html.fr   [plain text]


<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="fr" xml:lang="fr"><head><!--
        XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
              This file is generated from xml source: DO NOT EDIT
        XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
      -->
<title>mod_setenvif - Serveur Apache HTTP</title>
<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" /><link rel="stylesheet" type="text/css" href="../style/css/prettify.css" />
<script src="../style/scripts/prettify.min.js" type="text/javascript">
</script>

<link href="../images/favicon.ico" rel="shortcut icon" /></head>
<body>
<div id="page-header">
<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="http://wiki.apache.org/httpd/FAQ">FAQ</a> | <a href="../glossary.html">Glossaire</a> | <a href="../sitemap.html">Plan du site</a></p>
<p class="apache">Serveur Apache HTTP Version 2.4</p>
<img alt="" src="../images/feather.gif" /></div>
<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
<div id="path">
<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">Serveur HTTP</a> &gt; <a href="http://httpd.apache.org/docs/">Documentation</a> &gt; <a href="../">Version 2.4</a> &gt; <a href="./">Modules</a></div>
<div id="page-content">
<div id="preamble"><h1>Module Apache mod_setenvif</h1>
<div class="toplang">
<p><span>Langues Disponibles: </span><a href="../en/mod/mod_setenvif.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
<a href="../fr/mod/mod_setenvif.html" title="Français">&nbsp;fr&nbsp;</a> |
<a href="../ja/mod/mod_setenvif.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
<a href="../ko/mod/mod_setenvif.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a> |
<a href="../tr/mod/mod_setenvif.html" hreflang="tr" rel="alternate" title="Türkçe">&nbsp;tr&nbsp;</a></p>
</div>
<table class="module"><tr><th><a href="module-dict.html#Description">Description:</a></th><td>Permet de définir des variables d'environnement en fonction
de caractéristiques de la requête</td></tr>
<tr><th><a href="module-dict.html#Status">Statut:</a></th><td>Base</td></tr>
<tr><th><a href="module-dict.html#ModuleIdentifier">Identificateur de Module:</a></th><td>setenvif_module</td></tr>
<tr><th><a href="module-dict.html#SourceFile">Fichier Source:</a></th><td>mod_setenvif.c</td></tr></table>
<h3>Sommaire</h3>


    <p>Le module <code class="module"><a href="../mod/mod_setenvif.html">mod_setenvif</a></code> vous permet de définir
    des variables d'environnement internes en fonction du fait que telle ou telle
    caractéristique de la requête correspond ou non aux expressions
    rationnelles que vous spécifiez. Ces variables d'environnement
    peuvent être utilisées par d'autres parties du serveur pour prendre
    des décisions quant aux actions à entreprendre, et pour déterminer
    si les scripts CGI et les pages SSI doivent pouvoir y accéder.</p>

    <p>Les directives sont interprétées selon l'ordre dans lequel elles
    apparaîssent dans les fichiers de configuration. Ainsi, des
    séquences plus complexes peuvent être utilisées, comme dans cet
    exemple qui définit netscape si le navigateur est Mozilla et non
    MSIE.</p>

<pre class="prettyprint lang-config">BrowserMatch ^Mozilla netscape
BrowserMatch MSIE !netscape</pre>


   <p>Lorsque le serveur cherche un chemin via une <a class="glossarylink" href="../glossary.html#subrequest" title="voir glossaire">sous-requête</a> interne (par exemple la
   recherche d'un <code class="directive"><a href="../mod/mod_dir.html#directoryindex">DirectoryIndex</a></code>), ou lorsqu'il génère un
   listing du contenu d'un répertoire via le module
   <code class="module"><a href="../mod/mod_autoindex.html">mod_autoindex</a></code>, la sous-requête n'hérite pas des
   variables d'environnement spécifiques à la requête. En outre, à cause
   des phases de l'API auxquelles <code class="module"><a href="../mod/mod_setenvif.html">mod_setenvif</a></code> prend
   part, les directives <code class="directive"><a href="#setenvif">SetEnvIf</a></code> ne sont pas évaluées
   séparément dans la sous-requête.</p>

</div>
<div id="quickview"><h3 class="directives">Directives</h3>
<ul id="toc">
<li><img alt="" src="../images/down.gif" /> <a href="#browsermatch">BrowserMatch</a></li>
<li><img alt="" src="../images/down.gif" /> <a href="#browsermatchnocase">BrowserMatchNoCase</a></li>
<li><img alt="" src="../images/down.gif" /> <a href="#setenvif">SetEnvIf</a></li>
<li><img alt="" src="../images/down.gif" /> <a href="#setenvifexpr">SetEnvIfExpr</a></li>
<li><img alt="" src="../images/down.gif" /> <a href="#setenvifnocase">SetEnvIfNoCase</a></li>
</ul>
<h3>Voir aussi</h3>
<ul class="seealso">
<li><a href="../env.html">Les variables d'environnement et le
serveur HTTP Apache</a></li>
</ul><ul class="seealso"><li><a href="#comments_section">Commentaires</a></li></ul></div>

<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="BrowserMatch" id="BrowserMatch">BrowserMatch</a> <a name="browsermatch" id="browsermatch">Directive</a></h2>
<table class="directive">
<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Définit des variables d'environnement en fonction du
contenu de l'en-tête HTTP User-Agent</td></tr>
<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>BrowserMatch <em>regex [!]env-variable</em>[=<em>valeur</em>]
[[!]<em>env-variable</em>[=<em>valeur</em>]] ...</code></td></tr>
<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration du serveur, serveur virtuel, répertoire, .htaccess</td></tr>
<tr><th><a href="directive-dict.html#Override">AllowOverride:</a></th><td>FileInfo</td></tr>
<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Base</td></tr>
<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_setenvif</td></tr>
</table>
  <p>La directive <code class="directive">BrowserMatch</code> est un cas
  particulier de la directive <code class="directive"><a href="#setenvif">SetEnvIf</a></code>, qui définit des variables
  d'environnement en fonction du contenu de l'en-tête de requête HTTP
  <code>User-Agent</code>. Les deux lignes suivantes produisent le même
  effet :</p>
<pre class="prettyprint lang-config">BrowserMatchNoCase Robot is_a_robot
SetEnvIfNoCase User-Agent Robot is_a_robot</pre>


    <p>Quelques exemples supplémentaires :</p>
<pre class="prettyprint lang-config">BrowserMatch ^Mozilla forms jpeg=yes browser=netscape
BrowserMatch "^Mozilla/[2-3]" tables agif frames javascript
BrowserMatch MSIE !javascript</pre>


</div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="BrowserMatchNoCase" id="BrowserMatchNoCase">BrowserMatchNoCase</a> <a name="browsermatchnocase" id="browsermatchnocase">Directive</a></h2>
<table class="directive">
<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Définit des variables d'environnement en fonction du
contenu de l'en-tête HTTP User-Agent sans tenir compte de la
casse</td></tr>
<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>BrowserMatchNoCase  <em>regex [!]env-variable</em>[=<em>valeur</em>]
    [[!]<em>env-variable</em>[=<em>valeur</em>]] ...</code></td></tr>
<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration du serveur, serveur virtuel, répertoire, .htaccess</td></tr>
<tr><th><a href="directive-dict.html#Override">AllowOverride:</a></th><td>FileInfo</td></tr>
<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Base</td></tr>
<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_setenvif</td></tr>
</table>

    <p>La directive <code class="directive">BrowserMatchNoCase</code> est
    identique sur le plan sémantique à la directive <code class="directive"><a href="#browsermatch">BrowserMatch</a></code>. Elle permet
    cependant une comparaison insensible à la casse. Par exemple :</p>
<pre class="prettyprint lang-config">BrowserMatchNoCase mac platform=macintosh
BrowserMatchNoCase win platform=windows</pre>


    <p>Les directives <code class="directive">BrowserMatch</code> et
    <code class="directive">BrowserMatchNoCase</code> sont des cas particuliers
    des directives <code class="directive"><a href="#setenvif">SetEnvIf</a></code>
    et <code class="directive"><a href="#setenvifnocase">SetEnvIfNoCase</a></code>.
    Ainsi, les deux lignes suivantes produisent le même effet :</p>
<pre class="prettyprint lang-config">BrowserMatchNoCase Robot is_a_robot
SetEnvIfNoCase User-Agent Robot is_a_robot</pre>


</div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="SetEnvIf" id="SetEnvIf">SetEnvIf</a> <a name="setenvif" id="setenvif">Directive</a></h2>
<table class="directive">
<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Définit des variables d'environnement en fonction des
attributs de la requête</td></tr>
<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>SetEnvIf <em>attribut
    regex [!]env-variable</em>[=<em>valeur</em>]
    [[!]<em>env-variable</em>[=<em>valeur</em>]] ...</code></td></tr>
<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration du serveur, serveur virtuel, répertoire, .htaccess</td></tr>
<tr><th><a href="directive-dict.html#Override">AllowOverride:</a></th><td>FileInfo</td></tr>
<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Base</td></tr>
<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_setenvif</td></tr>
</table>
    <p>La directive <code class="directive">SetEnvIf</code> permet de définir
    des variables d'environnement en fonction des attributs de la
    requête. L'<em>attribut</em> spécifié comme premier argument peut
    se présenter sous l'une des quatre formes suivantes :</p>

<ol>
<li>Un champ d'en-tête de requête HTTP (voir la <a href="http://www.rfc-editor.org/rfc/rfc2616.txt">RFC2616</a> pour
    plus d'information à leur propos) ; par exemple : <code>Host</code>,
    <code>User-Agent</code>, <code>Referer</code>, ou
    <code>Accept-Language</code>. Il est possible d'utiliser une
    expression rationnelle pour spécifier un jeu d'en-têtes de
    requête.</li>

<li>Une des caractéristiques de la requête suivantes :
    <ul>
      <li><code>Remote_Host</code> - le nom d'hôte (s'il est disponible)
      du client qui effectue la requête</li>

      <li><code>Remote_Addr</code> - l'adresse IP du client qui effectue
      la requête</li>

      <li><code>Server_Addr</code> - l'adresse IP du serveur qui a reçu
      la requête (uniquement à partir des versions supérieures à
      2.0.43)</li>

      <li><code>Request_Method</code> - Le nom de la méthode HTTP
      utilisée (<code>GET</code>, <code>POST</code>, <em>et
      cetera...</em>)</li>

      <li><code>Request_Protocol</code> - le nom et la version du
      protocole utilisé pour la requête (par exemple "HTTP/0.9",
      "HTTP/1.1", <em>etc...</em>)</li>

      <li><code>Request_URI</code> - la ressource demandée dans la ligne
      de requête HTTP -- en général la partie de l'URL suivant le
      protocole et le nom du serveur, sans la chaîne d'arguments. Voir
      la directive <code class="directive"><a href="../mod/mod_rewrite.html#rewritecond">RewriteCond</a></code> du module
      <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code> pour plus d'informations sur la
      manière de mettre en correspondance votre chaîne d'arguments.</li>
    </ul>
</li>

<li>Le nom d'une variable d'environnement parmi la liste de celles qui
sont associées à la requête. Ceci permet à la directive
<code class="directive">SetEnvIf</code> d'effectuer des tests en fonction du
résultat de comparaisons précédentes. Seules les variables
d'environnement définies par des directives
<code>SetEnvIf[NoCase]</code> précédentes sont disponibles pour
effectuer des tests de cette manière. 'Précédentes' signifie qu'elles se
trouvent à un niveau plus global de la configuration (par exemple au
niveau du serveur principal), ou plus haut chronologiquement dans le
contexte de la directive. Les variables d'environnement ne seront prises
en compte que si aucune correspondance n'a été trouvée parmi les
caractéristiques de la requête, et si <em>attribut</em> n'a pas été
spécifié sous la forme d'une expression rationnelle.</li>

</ol>

<p>Le second argument (<em>regex</em>) est une <a class="glossarylink" href="../glossary.html#regex" title="voir glossaire">expression rationnelle</a>. Si  <em>regex</em>
correspond à l'<em>attribut</em>, les arguments suivants sont évalués.</p>

<p>Le reste des arguments constitue les noms des variables à définir,
ainsi que les valeurs optionnelles qui doivent leur être affectées. Ils
peuvent se présenter sous les formes suivantes :</p>

    <ol>
      <li><code><em>nom-variable</em></code>, or</li>

      <li><code>!<em>nom-variable</em></code>, or</li>

      <li><code><em>nom-variable</em>=<em>valeur</em></code></li>
    </ol>

    <p>Dans la première forme, la valeur sera définie à "1". Dans la
    seconde forme, la variable sera supprimée si elle a été définie au
    préalable, et dans la troisième forme, la variable sera définie à la
    valeur littérale spécifiée par <code><em>valeur</em></code>. Depuis
    la version 2.0.51, Apache httpd reconnaît les occurrences de variables
    <code>$1</code>..<code>$9</code> à l'intérieur de
    <code><em>valeur</em></code>, et les remplace par les
    sous-expressions entre parenthèses correspondantes de
    <var>regex</var>.</p>

<pre class="prettyprint lang-config">SetEnvIf Request_URI "\.gif$" object_is_image=gif
SetEnvIf Request_URI "\.jpg$" object_is_image=jpg
SetEnvIf Request_URI "\.xbm$" object_is_image=xbm
    
SetEnvIf Referer www\.mydomain\.example\.com intra_site_referral
    
SetEnvIf object_is_image xbm XBIT_PROCESSING=1
    
SetEnvIf ^TS  ^[a-z]  HAVE_TS</pre>


    <p>Les trois premières lignes définissent la variable
    d'environnement <code>objet_est_une_image</code> si l'objet de la
    requête est un fichier image, et la quatrième définit la variable
    <code>référant_intra_site</code> si la page référante se trouve
    quelque part dans le site web
    <code>www.mon-domaine.example.com</code>.</p>

    <p>La dernière ligne définit la variable d'environnement
    <code>HAVE_TS</code> si la requête contient un en-tête dont le nom
    commence par "TS" et dont la valeur commence par tout caractère du
    jeu [a-z].</p>

<h3>Voir aussi</h3>
<ul>
<li><a href="../env.html">Les variables d'environnement et le
serveur HTTP Apache</a> pour des exemples supplémentaires.
</li>
</ul>
</div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="SetEnvIfExpr" id="SetEnvIfExpr">SetEnvIfExpr</a> <a name="setenvifexpr" id="setenvifexpr">Directive</a></h2>
<table class="directive">
<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Définit des variables d'environnement en fonction d'une expression ap_expr</td></tr>
<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>SetEnvIfExpr <em>expr
    [!]env-variable</em>[=<em>valeur</em>]
    [[!]<em>env-variable</em>[=<em>valeur</em>]] ...</code></td></tr>
<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration du serveur, serveur virtuel, répertoire, .htaccess</td></tr>
<tr><th><a href="directive-dict.html#Override">AllowOverride:</a></th><td>FileInfo</td></tr>
<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Base</td></tr>
<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_setenvif</td></tr>
</table>
    <p>La directive <code class="directive">SetEnvIfExpr</code> permet de
    définir des variables d'environnement en fonction d'une expression
    <code class="directive"><a href="../mod/core.html#if">&lt;If&gt;</a></code> <code>ap_expr</code>. Cette
    expression est évaluée à l'exécution, et utilise les variables
    d'environnement <em>env-variable</em> de la même manière que la
    directive <code class="directive">SetEnvIf</code>.</p>

<pre class="prettyprint lang-config">SetEnvIfExpr "tolower(req('X-Sendfile')) == 'd:\images\very_big.iso')" iso_delivered</pre>


    <p>Dans cet exemple, la variable d'environnement
    <code>iso_delivered</code> est définie chaque fois que notre
    application tente de l'envoyer via <code>X-Sendfile</code>.</p>

    <p>Il pourrait être plus utile de définir une variable rfc1918 si
    l'adresse IP distante est une adresse privée au sens de la RFC 1918
    :</p>

<pre class="prettyprint lang-config">SetEnvIfExpr "-R '10.0.0.0/8' || -R '172.16.0.0/12' || -R '192.168.0.0/16'" rfc1918</pre>


<h3>Voir aussi</h3>
<ul>
<li><a href="../expr.html">Les expressions dans le serveur HTTP
Apache</a>, pour une référence complète et davantage d'exemples.</li>
<li>La directive <code class="directive"><a href="../mod/core.html#if">&lt;If&gt;</a></code> permet d'obtenir des résultats
similaires.</li>
<li><code class="module"><a href="../mod/mod_filter.html">mod_filter</a></code></li>
</ul>
</div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="SetEnvIfNoCase" id="SetEnvIfNoCase">SetEnvIfNoCase</a> <a name="setenvifnocase" id="setenvifnocase">Directive</a></h2>
<table class="directive">
<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Définit des variables d'environnement en fonction des
attributs de la requête sans tenir compte de la casse</td></tr>
<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>SetEnvIfNoCase <em>attribut regex
        [!]env-variable</em>[=<em>valeur</em>]
    [[!]<em>env-variable</em>[=<em>valeur</em>]] ...</code></td></tr>
<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration du serveur, serveur virtuel, répertoire, .htaccess</td></tr>
<tr><th><a href="directive-dict.html#Override">AllowOverride:</a></th><td>FileInfo</td></tr>
<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Base</td></tr>
<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_setenvif</td></tr>
</table>

    <p>La directive <code class="directive">SetEnvIfNoCase</code> est identique
    d'un point de vue sémantique à la directive <code class="directive"><a href="#setenvif">SetEnvIf</a></code>, et ne s'en distingue que
    par le fait que la comparaison des expressions rationnelles est
    effectuée sans tenir compte de la casse. Par exemple :</p>
<pre class="prettyprint lang-config">SetEnvIfNoCase Host Example\.Org site=apache</pre>


    <p>Cette ligne va définir la variable d'environnement
    <code>site</code> avec la valeur "<code>example</code>" si le champ
    d'en-tête de requête HTTP <code>Host:</code> est présent et contient
    <code>Example.Org</code>, <code>example.org</code>, ou une autre
    combinaison des mêmes caractères, sans tenir compte de la casse.</p>

</div>
</div>
<div class="bottomlang">
<p><span>Langues Disponibles: </span><a href="../en/mod/mod_setenvif.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
<a href="../fr/mod/mod_setenvif.html" title="Français">&nbsp;fr&nbsp;</a> |
<a href="../ja/mod/mod_setenvif.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
<a href="../ko/mod/mod_setenvif.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a> |
<a href="../tr/mod/mod_setenvif.html" hreflang="tr" rel="alternate" title="Türkçe">&nbsp;tr&nbsp;</a></p>
</div><div class="top"><a href="#page-header"><img src="../images/up.gif" alt="top" /></a></div><div class="section"><h2><a id="comments_section" name="comments_section">Commentaires</a></h2><div class="warning"><strong>Notice:</strong><br />This is not a Q&amp;A section. Comments placed here should be pointed towards suggestions on improving the documentation or server, and may be removed again by our moderators if they are either implemented or considered invalid/off-topic. Questions on how to manage the Apache HTTP Server should be directed at either our IRC channel, #httpd, on Freenode, or sent to our <a href="http://httpd.apache.org/lists.html">mailing lists</a>.</div>
<script type="text/javascript"><!--//--><![CDATA[//><!--
var comments_shortname = 'httpd';
var comments_identifier = 'http://httpd.apache.org/docs/2.4/mod/mod_setenvif.html';
(function(w, d) {
    if (w.location.hostname.toLowerCase() == "httpd.apache.org") {
        d.write('<div id="comments_thread"><\/div>');
        var s = d.createElement('script');
        s.type = 'text/javascript';
        s.async = true;
        s.src = 'https://comments.apache.org/show_comments.lua?site=' + comments_shortname + '&page=' + comments_identifier;
        (d.getElementsByTagName('head')[0] || d.getElementsByTagName('body')[0]).appendChild(s);
    }
    else { 
        d.write('<div id="comments_thread">Comments are disabled for this page at the moment.<\/div>');
    }
})(window, document);
//--><!]]></script></div><div id="footer">
<p class="apache">Copyright 2014 The Apache Software Foundation.<br />Autorisé sous <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="http://wiki.apache.org/httpd/FAQ">FAQ</a> | <a href="../glossary.html">Glossaire</a> | <a href="../sitemap.html">Plan du site</a></p></div><script type="text/javascript"><!--//--><![CDATA[//><!--
if (typeof(prettyPrint) !== 'undefined') {
    prettyPrint();
}
//--><!]]></script>
</body></html>