<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
    <title>Ovid</title>
    <link rel="alternate" type="text/html" href="http://blogs.perl.org/users/ovid/" />
    <link rel="self" type="application/atom+xml" href="http://blogs.perl.org/users/ovid/atom.xml" />
    <id>tag:blogs.perl.org,2009-11-03:/users/ovid//11</id>
    <updated>2013-05-19T08:26:50Z</updated>
    <subtitle>A blog about the Perl programming language</subtitle>
    <generator uri="http://www.sixapart.com/movabletype/">Movable Type Pro 4.38</generator>

<entry>
    <title>Cleaning up the Test::Class::Moose base class</title>
    <link rel="alternate" type="text/html" href="http://blogs.perl.org/users/ovid/2013/05/cleaning-up-the-testclassmoose-base-class.html" />
    <id>tag:blogs.perl.org,2013:/users/ovid//11.4693</id>

    <published>2013-05-19T07:35:56Z</published>
    <updated>2013-05-19T08:26:50Z</updated>

    <summary>I&apos;m quite enjoying Test::Class::Moose. It&apos;s very easy to use and it gives you such fine-grained control over your test suite and powerful reporting capabilities that it&apos;s turning out to be far more powerful than I had expected. It&apos;s actually easy...</summary>
    <author>
        <name>Ovid</name>
        <uri>http://www.overseas-exile.com/</uri>
    </author>
    
    <category term="moose" label="moose" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="perl" label="perl" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="testclass" label="test::class" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en" xml:base="http://blogs.perl.org/users/ovid/">
        <![CDATA[<p>I'm quite enjoying <code>Test::Class::Moose</code>. It's very easy to use and it gives you such fine-grained control over your test suite and powerful reporting capabilities that it's turning out to be far more powerful than I had expected. It's actually easy enough to use for beginners, but power users will really appreciate it. There was, however, a major issue I had with it and it stems from a habit I picked up from <code>Test::Class</code>.</p>

<p>For those who are very familiar with using <code>Test::Class</code> (or if you've read my <a href="http://www.modernperlbooks.com/mt/2009/03/organizing-test-suites-with-testclass.html">Test::Class tutorial</a>), you may be used to seeing a base class that looks like this:</p>

<pre><code>package My::Test::Class;
use parent 'Test::Class';

INIT { Test::Class-&gt;runtests }

sub startup  : Tests(startup)  {}
sub setup    : Tests(setup)    {}
sub teardown : Tests(teardown) {}
sub shutdown : Tests(shutdown) {}

1;
</code></pre>

<p>The empty test control methods are there so that a subclass knows it can <em>always</em> safely do this:</p>

<pre><code>sub startup : Tests(startup) {
    my $test = shift;
    $test-&gt;next::method;
    # more code here
}
</code></pre>

<p>Those stub test methods are no longer needed with <a href="http://search.cpan.org/dist/Test-Class-Moose/">Test::Class::Moose</a>, but until today, that <code>INIT</code> block was an annoying code smell that had some unfortunate side-effects. Let's make that go away.</p>
]]>
        <![CDATA[<p><strong>The INIT Phase</strong></p>

<p>First of all, what does that <code>INIT</code> block do?</p>

<pre><code>INIT { Test::Class-&gt;runtests }
</code></pre>

<p>In <code>Test::Class</code>, that would simply run all loaded test classes at <code>INIT</code> time. However, that means you could do this:</p>

<pre><code>prove -lv t/lib/path/to/my/test/class.pm
</code></pre>

<p>And <em>voilà</em>, you test class could be executed just like it's a <code>*.t</code> program. That's because it would be loaded, it would inherit from your base class, the <code>INIT</code> block would fire and <a href="http://en.wikipedia.org/wiki/Rube_goldberg">Rube Goldberg</a> would be laughing in his grave.</p>

<p>Sadly, this leads to <a href="http://blogs.perl.org/users/ovid/2010/02/spot-the-testclass-bug.html">nasty bugs like this one I blogged about almost 3 years ago</a>. Basically, if you <code>use $some::module</code>, the code in that module is executed <em>before INIT fires</em> but the subroutines are not (aside from <code>import()</code>). However, if you load the code directly with, say <code>perl t/lib/path/to/my/test/class.pm</code>, the <code>INIT</code> block fires <em>before</em> the code in the module is executed. You can read <a href="http://perldoc.perl.org/perlmod.html">perldoc perlmod</a> for more information about <code>INIT</code> and friends.</p>

<p><strong>How does this impact Moose?</strong></p>

<p>At first glance, you might not think issues with <code>INIT</code> and friends would impact Moose, but there are a couple of subtle repercussions. For example, we know that subroutine attributes only fire at compile time. That's why <a href="http://search.cpan.org/~ether/Moose-2.0802/lib/Moose/Manual/FAQ.pod#Why_don't_subroutine_attributes_I_inherited_from_a_superclass_work?">the Moose manual explains how to use inherited subroutine attributes with Moose</a>. In short, you have to ensure that you're inheriting at compile-time, not at CHECK/INIT/UNITCHECK or runtime:</p>

<pre><code>BEGIN { extends 'Some::Class' }
</code></pre>

<p>Since Moose isn't part of the Perl language and much of its behavior fires at runtime, you can have some strange issues, such as when <a href="http://blogs.perl.org/users/ovid/2013/03/using-roles-with-testclassmoose.html">I wrote the following code</a>:</p>

<pre><code>package TestsFor::Person::Employee;
use Test::Class::Moose extends =&gt; 'TestsFor::Person';

sub extra_constructor_args {
    return ( employee_number =&gt; 666 );
}

BEGIN {
    after 'test_constructor' =&gt; sub {
        my $test = shift;
        is $test-&gt;test_person-&gt;employee_number, 666,
          '... and we should get the correct employee number';
    };
}

1;
</code></pre>

<p>That's really ugly and, in fact, I received an email from someone who called me on that, arguing that <a href="http://search.cpan.org/dist/Test-Routine/">Test::Routine</a> and <a href="http://search.cpan.org/dist/Test-Roo/">Test::Roo</a> were simpler in this case. I think he was right and I thought for a while about the best way to resolve this. You shouldn't have to think about timing issues like this when you're writing your test classes.</p>

<p><strong>A Cleaner Test::Class::Moose</strong></p>

<p>Today I've released <code>Test::Class::Moose</code> version 0.11 and it makes this case easier to handle. Your base class now can look like this:</p>

<pre><code>package My::Test::Class;
use Test::Class::Moose;
1;
</code></pre>

<p>In fact, you may not even need a base test class at all &mdash; just have your classes use <code>Test::Class::Moose</code> directly &mdash; but a base test class is handy enough that people put all sorts of interesting code in there.</p>

<p>So how do you do the <code>INIT</code> trick that lets you run an individual test class? I now recommend use of a driver <code>*.t</code> script for your test suite. Here's what one might look like:</p>

<pre><code>use Test::Class::Moose::Load 't/lib';
my $test_suite = Test::Class::Moose-&gt;new(
     show_timing  =&gt; 1,
     randomize    =&gt; 0,
     statistics   =&gt; 1,
     test_classes =&gt; $ENV{TEST_CLASS},
)-&gt;runtests;

my $report = $test_suite-&gt;test_report;
# the reporting object, of course, can be ignored if you
# don't need reporting on the test suite
</code></pre>

<p>Unlike <code>Test::Class</code>, <code>Test::Class::Moose</code> has a constructor that lets you control the test suite behavior prior to running the suite. There is a new attribute, <code>test_classes</code> which takes the name of a test class or an array reference of test class names. Only those test classes will be run. Yes, you could have written a <code>Test::Class::Moose</code> subclass to control this, but I wanted to make this built-in because running individual classes is a common use case. Now, instead of this:</p>

<pre><code>prove -lv t/lib/path/to/my/test/class.pm
</code></pre>

<p>You do this:</p>

<pre><code>TEST_CLASS=Class::I::Want::To::Run prove -lv t/test_class_tests.t
</code></pre>

<p>And things work just like the are supposed to. As a bonus, that nasty <code>BEGIN</code> block in my <code>TestsFor::Person::Employee</code> class goes away:</p>

<pre><code>package TestsFor::Person::Employee;
use Test::Class::Moose extends =&gt; 'TestsFor::Person';

sub extra_constructor_args {
    return ( employee_number =&gt; 666 );
}

after 'test_constructor' =&gt; sub {
    my $test = shift;
    is $test-&gt;test_person-&gt;employee_number, 666,
      '... and we should get the correct employee number';
};

1;
</code></pre>

<p>And your test classes now look like proper Moose code rather than worrying about <code>BEGIN</code> versus <code>INIT</code> phases.</p>

<p>I'll be giving a talk about <code>Test::Class::Moose</code> at <a href="http://www.yapcna.org/yn2013/talk/4596">YAPC::NA</a> and I've also proposed it for <a href="http://act.yapc.eu/ye2013/">YAPC::EU</a>. I hope to see you there!</p>
]]>
    </content>
</entry>

<entry>
    <title>Tags now available with Test::Class::Moose</title>
    <link rel="alternate" type="text/html" href="http://blogs.perl.org/users/ovid/2013/05/tags-now-available-with-testclassmoose.html" />
    <id>tag:blogs.perl.org,2013:/users/ovid//11.4651</id>

    <published>2013-05-06T19:09:03Z</published>
    <updated>2013-05-06T19:20:51Z</updated>

    <summary>Side note: Why did I miss that last Perl QA-Hackathon? I&apos;ve attended every one since they started ... except for the last one. I missed it because the damned French government can&apos;t get around to reissuing my damned visa, despite...</summary>
    <author>
        <name>Ovid</name>
        <uri>http://www.overseas-exile.com/</uri>
    </author>
    
    <category term="perl" label="perl" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="testclass" label="test::class" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="testing" label="testing" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en" xml:base="http://blogs.perl.org/users/ovid/">
        <![CDATA[<p><em>Side note: Why did I miss that last Perl QA-Hackathon? I've attended every one since they started ... except for the last one. I missed it because the damned French government can't get around to reissuing my damned visa, despite the fact that they're legally required to. I've also had to pass on some business opportunities and a trip Romania. /me is very unhappy with France right now.</em></p>

<p>So I've finally gotten around to updating <a href="https://github.com/Ovid/test-class-moose">Test::Class::Moose</a> to have tags. <a href="http://blogs.perl.org/users/ovid/2013/04/adding-tags-to-testclassmoose.html">You can read my previous post when I explain why they're useful</a>. You can go out to github and grab it now, or wait a bit for it to hit your favorite CPAN mirror.</p>

<p>The constructor is very straightforward. For the case I previously described when the network went down? Skip test methods with a network tag!</p>

<pre><code>Test::Class::Moose-&gt;new(
    exclude_tags =&gt; 'network', # scalar or arrayref of tags
)-&gt;runtests;
</code></pre>

<p>Or maybe you want to run your Big Data and API tests, but skip deprecated methods:</p>

<pre><code>Test::Class::Moose-&gt;new(
    include_tags =&gt; [qw/bigdata api/],
    exclude_tags =&gt; 'deprecated',
)-&gt;runtests;
</code></pre>

<p>This should solve a common issue where people want to attach metadata to their test suite but there's no clean support for it.</p>

<p>Unfortunately, this was implemented with <a href="http://search.cpan.org/dist/Sub-Attribute/">Sub::Attribute</a>. That's a fantastic module, but it's an optional dependency that some don't want. I had to use that module, though, because there's a little-known edge case where subroutine attributes won't fire if the module was loaded via "eval". I might try another swing at fixing this in the future (via require and a path in <code>Test::Class::Moose::Load</code>?), but for now, if you can't load <code>Sub::Attribute</code>, a warning will be issued and your tag filters will be ignored.</p>

<p>Patches welcome for improving this feature (there are many things which can be done here), but for now, this is the last major piece really needed to make this the <em>goto</em> module for many large test suites.</p>
]]>
        

    </content>
</entry>

<entry>
    <title>Fractal Diamond-Square Terrain Generation in Perl</title>
    <link rel="alternate" type="text/html" href="http://blogs.perl.org/users/ovid/2013/04/fractal-diamond-square-terrain-generation-in-perl.html" />
    <id>tag:blogs.perl.org,2013:/users/ovid//11.4615</id>

    <published>2013-04-25T13:49:29Z</published>
    <updated>2013-04-25T14:04:36Z</updated>

    <summary>The title is mostly for search engines for anyone who encounters this in the future. I have, for no particular reason, decided to implement the fractal diamond-square terrain generation algorithm in Perl. Sometimes it&apos;s nice to just play. $$$$$$$$$$$$$$$$$$$$$$$####################*********************!**!!!!!!!!!!!!! $$$$$$$$$$$$$$$$$$$$$$#####################****************************!!!!!!!!!...</summary>
    <author>
        <name>Ovid</name>
        <uri>http://www.overseas-exile.com/</uri>
    </author>
    
    <category term="perl" label="perl" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en" xml:base="http://blogs.perl.org/users/ovid/">
        <![CDATA[<p>The title is mostly for search engines for anyone who encounters this in the future.</p>

<p>I have, for no particular reason, decided to implement <a href="https://github.com/Ovid/Games-Terrain-DiamondSquare">the fractal diamond-square terrain generation algorithm in Perl</a>. Sometimes it's nice to just play.</p>

<pre><tt>
    $$$$$$$$$$$$$$$$$$$$$$$####################*********************!**!!!!!!!!!!!!!
    $$$$$$$$$$$$$$$$$$$$$$#####################****************************!!!!!!!!!
    $$$$$$$$$$$$$$$$$$$$$$###########################*#*##*#*####************!!!!!!!
    ####$####$#$#$$$$$$$$$##########################################**********!!!!!!
    ################$$$$$$$$##########################################**********!!!!
    #################$$$$$$$$$##########################################**********!!
    *###############$$$$$$$$$$$#########################$##$#$$$$########**********!
    ****#*############$$#$##$##########################$$$$$$$$$$$########**********
    ********#############################################$$$$$$$$#########**********
    *************#########################################$#$##$########************
    !*!*************###################################################*************
    !!!!!!*!**********####*##*#*#######################################*************
    !!!!!!!!!!!*****************############$##########################*************
    =!!!!!!!!!!!!***************###########$$$##########################**#*#*******
    ====!!!!!!!!!!!!***********############$$$$$#############################*******
    ;=======!!=!!!!!!!**********##**#######$##############################**********
    ;;;;;;========!!!!!!!***************###############################*************
    ;;;;;;;;========!!!!!!!!*!*!**********############*##############************###
    ;;;;;;;;;;;=====!!!!!!!!!!!!!!!********#*#**************######*************#####
    :;;;;;;;;;;======!!!!!!!!!!!!!!!***************************#*#*********#########
    :::;;;;;;;;;======!!!!!!!!!!!!!!!*************************************##########
    ::::::;;;;;;=======!!!!!!!!!!!!!!!*!*******************************#############
    ~:::::;;;;;;;;=========!!=!!!!!!!!!!!!!*!***************************############
    ~~::::::;;;;;;;;=;===========!=!=!!!!!!!!!!!!!!!*********************#*#########
    ~~~~:::::::;;;;;;;;=;===============!!!!!!!!!!!!!!!*********************########
    ~~~~~~:::::::;;;;;;;;;;;;;=;==========!!!!!!!!!!!!!*!*******************########
    -~~~~~~~::::::::::;;;;;;;;;;;;;==========!=!!!!!!!!!!!!*****************########
    ----~~~~~~~::::::::::;;;;;;;;;;;;=============!!!!!!!!!***************##########
    ------~~~~~~~~:~:::::::;;;;;;;;;;;;;============!!!!!!!!**************#######$$$
    ,--------~-~~~~~~~:::::::::::;;;;;;;;;==========!!!!!!!!!***********#########$$$
</tt></pre>]]>
        <![CDATA[<p>Note that it's not actually tied to a particular output format, so if you prefer HTML:</p>

    <style type="text/css">
      /*<![CDATA[*/
          #map { line-height: 100% }
          .c0  { background-color: #000000 }
          .c1  { background-color: #111111 }
          .c2  { background-color: #222222 }
          .c3  { background-color: #333333 }
          .c4  { background-color: #444444 }
          .c5  { background-color: #555555 }
          .c6  { background-color: #666666 }
          .c7  { background-color: #777777 }
          .c8  { background-color: #888888 }
          .c9  { background-color: #999999 }
          .c10 { background-color: #AAAAAA }
          .c11 { background-color: #BBBBBB }
          .c12 { background-color: #CCCCCC }
          .c13 { background-color: #DDDDDD }
          .c14 { background-color: #EEEEEE }
          .c15 { background-color: #FFFFFF }
      /*]]&gt;*/
    </style>
    <span id="map">

    <span class="c8">&nbsp;</span><span class="c8">&nbsp;</span><span class="c8">&nbsp;</span><span class="c8">&nbsp;</span><span class="c8">&nbsp;</span><span class="c8">&nbsp;</span><span class="c8">&nbsp;</span><span class="c8">&nbsp;</span><span class="c8">&nbsp;</span><span class="c8">&nbsp;</span><span class="c8">&nbsp;</span><span class="c8">&nbsp;</span><span class="c8">&nbsp;</span><span class="c8">&nbsp;</span><span class="c9">&nbsp;</span><span class="c9">&nbsp;</span><span class="c9">&nbsp;</span><span class="c9">&nbsp;</span><span class="c9">&nbsp;</span><span class="c9">&nbsp;</span><span class="c9">&nbsp;</span><span class="c9">&nbsp;</span><span class="c9">&nbsp;</span><span class="c9">&nbsp;</span><span class="c9">&nbsp;</span><span class="c9">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c11">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><span class="c12">&nbsp;</span><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><span class="c14">&nbsp;</span><span class="c14">&nbsp;</span><span class="c14">&nbsp;</span><span class="c14">&nbsp;</span><span class="c14">&nbsp;</span><span class="c14">&nbsp;</span><span class="c14">&nbsp;</span><span class="c14">&nbsp;</span><span class="c14">&nbsp;</span><span class="c14">&nbsp;</span><span class="c14">&nbsp;</span><span class="c14">&nbsp;</span><span class="c14">&nbsp;</span><span class="c15">&nbsp;</span><span class="c14">&nbsp;</span><span class="c14">&nbsp;</span><span class="c15">&nbsp;</span><span class="c15">&nbsp;</span><span class="c15">&nbsp;</span><span class="c15">&nbsp;</span><span class="c15">&nbsp;</span><br /><span class="c8">&nbsp;</span><span class="c8">&nbsp;</span><span class="c8">&nbsp;</span><span class="c8">&nbsp;</span><span class="c8">&nbsp;</span><span class="c8">&nbsp;</span><span class="c8">&nbsp;</span><span class="c8">&nbsp;</span><span class="c8">&nbsp;</span><span class="c8">&nbsp;</span><span class="c8">&nbsp;</span><span class="c8">&nbsp;</span><span class="c8">&nbsp;</span><span class="c9">&nbsp;</span><span class="c9">&nbsp;</span><span class="c9">&nbsp;</span><span class="c9">&nbsp;</span><span class="c9">&nbsp;</span><span class="c9">&nbsp;</span><span class="c9">&nbsp;</span><span class="c9">&nbsp;</span><span class="c9">&nbsp;</span><span class="c9">&nbsp;</span><span class="c9">&nbsp;</span><span class="c9">&nbsp;</span><span class="c9">&nbsp;</span><span class="c9">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><span class="c14">&nbsp;</span><span class="c13">&nbsp;</span><span class="c14">&nbsp;</span><span class="c14">&nbsp;</span><span class="c14">&nbsp;</span><span class="c14">&nbsp;</span><span class="c14">&nbsp;</span><span class="c14">&nbsp;</span><span class="c14">&nbsp;</span><span class="c14">&nbsp;</span><span class="c14">&nbsp;</span><span class="c14">&nbsp;</span><span class="c14">&nbsp;</span><span class="c14">&nbsp;</span><span class="c14">&nbsp;</span><span class="c15">&nbsp;</span><span class="c15">&nbsp;</span><br /><span class="c8">&nbsp;</span><span class="c8">&nbsp;</span><span class="c8">&nbsp;</span><span class="c8">&nbsp;</span><span class="c8">&nbsp;</span><span class="c8">&nbsp;</span><span class="c8">&nbsp;</span><span class="c8">&nbsp;</span><span class="c8">&nbsp;</span><span class="c8">&nbsp;</span><span class="c8">&nbsp;</span><span class="c8">&nbsp;</span><span class="c9">&nbsp;</span><span class="c9">&nbsp;</span><span class="c9">&nbsp;</span><span class="c9">&nbsp;</span><span class="c9">&nbsp;</span><span class="c9">&nbsp;</span><span class="c9">&nbsp;</span><span class="c9">&nbsp;</span><span class="c9">&nbsp;</span><span class="c9">&nbsp;</span><span class="c9">&nbsp;</span><span class="c9">&nbsp;</span><span class="c9">&nbsp;</span><span class="c9">&nbsp;</span><span class="c9">&nbsp;</span><span class="c9">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c12">&nbsp;</span><span class="c11">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><span class="c14">&nbsp;</span><span class="c14">&nbsp;</span><span class="c14">&nbsp;</span><span class="c14">&nbsp;</span><span class="c14">&nbsp;</span><span class="c14">&nbsp;</span><span class="c14">&nbsp;</span><span class="c14">&nbsp;</span><span class="c14">&nbsp;</span><span class="c14">&nbsp;</span><span class="c14">&nbsp;</span><span class="c14">&nbsp;</span><br /><span class="c8">&nbsp;</span><span class="c8">&nbsp;</span><span class="c8">&nbsp;</span><span class="c9">&nbsp;</span><span class="c8">&nbsp;</span><span class="c8">&nbsp;</span><span class="c8">&nbsp;</span><span class="c8">&nbsp;</span><span class="c8">&nbsp;</span><span class="c9">&nbsp;</span><span class="c9">&nbsp;</span><span class="c9">&nbsp;</span><span class="c9">&nbsp;</span><span class="c9">&nbsp;</span><span class="c9">&nbsp;</span><span class="c9">&nbsp;</span><span class="c9">&nbsp;</span><span class="c9">&nbsp;</span><span class="c9">&nbsp;</span><span class="c9">&nbsp;</span><span class="c9">&nbsp;</span><span class="c9">&nbsp;</span><span class="c9">&nbsp;</span><span class="c9">&nbsp;</span><span class="c9">&nbsp;</span><span class="c9">&nbsp;</span><span class="c9">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><span class="c14">&nbsp;</span><span class="c14">&nbsp;</span><span class="c14">&nbsp;</span><span class="c14">&nbsp;</span><span class="c14">&nbsp;</span><span class="c14">&nbsp;</span><span class="c14">&nbsp;</span><span class="c14">&nbsp;</span><span class="c14">&nbsp;</span><span class="c14">&nbsp;</span><br /><span class="c9">&nbsp;</span><span class="c9">&nbsp;</span><span class="c9">&nbsp;</span><span class="c9">&nbsp;</span><span class="c9">&nbsp;</span><span class="c9">&nbsp;</span><span class="c9">&nbsp;</span><span class="c9">&nbsp;</span><span class="c9">&nbsp;</span><span class="c9">&nbsp;</span><span class="c9">&nbsp;</span><span class="c9">&nbsp;</span><span class="c9">&nbsp;</span><span class="c9">&nbsp;</span><span class="c9">&nbsp;</span><span class="c9">&nbsp;</span><span class="c9">&nbsp;</span><span class="c9">&nbsp;</span><span class="c9">&nbsp;</span><span class="c9">&nbsp;</span><span class="c9">&nbsp;</span><span class="c9">&nbsp;</span><span class="c9">&nbsp;</span><span class="c9">&nbsp;</span><span class="c9">&nbsp;</span><span class="c9">&nbsp;</span><span class="c9">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><span class="c14">&nbsp;</span><span class="c14">&nbsp;</span><span class="c14">&nbsp;</span><span class="c14">&nbsp;</span><span class="c14">&nbsp;</span><span class="c14">&nbsp;</span><span class="c14">&nbsp;</span><span class="c14">&nbsp;</span><span class="c14">&nbsp;</span><br /><span class="c9">&nbsp;</span><span class="c9">&nbsp;</span><span class="c9">&nbsp;</span><span class="c9">&nbsp;</span><span class="c9">&nbsp;</span><span class="c9">&nbsp;</span><span class="c9">&nbsp;</span><span class="c9">&nbsp;</span><span class="c9">&nbsp;</span><span class="c9">&nbsp;</span><span class="c9">&nbsp;</span><span class="c9">&nbsp;</span><span class="c9">&nbsp;</span><span class="c9">&nbsp;</span><span class="c9">&nbsp;</span><span class="c9">&nbsp;</span><span class="c9">&nbsp;</span><span class="c9">&nbsp;</span><span class="c9">&nbsp;</span><span class="c9">&nbsp;</span><span class="c9">&nbsp;</span><span class="c9">&nbsp;</span><span class="c9">&nbsp;</span><span class="c9">&nbsp;</span><span class="c9">&nbsp;</span><span class="c9">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><span class="c14">&nbsp;</span><span class="c14">&nbsp;</span><span class="c14">&nbsp;</span><span class="c14">&nbsp;</span><span class="c14">&nbsp;</span><span class="c14">&nbsp;</span><br /><span class="c9">&nbsp;</span><span class="c9">&nbsp;</span><span class="c9">&nbsp;</span><span class="c9">&nbsp;</span><span class="c9">&nbsp;</span><span class="c9">&nbsp;</span><span class="c9">&nbsp;</span><span class="c9">&nbsp;</span><span class="c9">&nbsp;</span><span class="c9">&nbsp;</span><span class="c9">&nbsp;</span><span class="c9">&nbsp;</span><span class="c9">&nbsp;</span><span class="c9">&nbsp;</span><span class="c9">&nbsp;</span><span class="c9">&nbsp;</span><span class="c9">&nbsp;</span><span class="c9">&nbsp;</span><span class="c9">&nbsp;</span><span class="c9">&nbsp;</span><span class="c9">&nbsp;</span><span class="c9">&nbsp;</span><span class="c9">&nbsp;</span><span class="c9">&nbsp;</span><span class="c9">&nbsp;</span><span class="c9">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><span class="c14">&nbsp;</span><br /><span class="c9">&nbsp;</span><span class="c9">&nbsp;</span><span class="c9">&nbsp;</span><span class="c9">&nbsp;</span><span class="c9">&nbsp;</span><span class="c9">&nbsp;</span><span class="c9">&nbsp;</span><span class="c9">&nbsp;</span><span class="c9">&nbsp;</span><span class="c9">&nbsp;</span><span class="c9">&nbsp;</span><span class="c9">&nbsp;</span><span class="c9">&nbsp;</span><span class="c9">&nbsp;</span><span class="c9">&nbsp;</span><span class="c10">&nbsp;</span><span class="c9">&nbsp;</span><span class="c9">&nbsp;</span><span class="c9">&nbsp;</span><span class="c9">&nbsp;</span><span class="c9">&nbsp;</span><span class="c10">&nbsp;</span><span class="c9">&nbsp;</span><span class="c9">&nbsp;</span><span class="c9">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><span class="c12">&nbsp;</span><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><br /><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><br /><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><br /><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><br /><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c12">&nbsp;</span><span class="c11">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c13">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><br /><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c10">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c10">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c10">&nbsp;</span><span class="c11">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c11">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c11">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c10">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c10">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c12">&nbsp;</span><span class="c11">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><br /><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c12">&nbsp;</span><span class="c11">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c11">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c11">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><br /><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c12">&nbsp;</span><span class="c11">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><br /><span class="c12">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c12">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><br /><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c11">&nbsp;</span><span class="c12">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><br /><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c11">&nbsp;</span><span class="c12">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><br /><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><br /><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c11">&nbsp;</span><span class="c12">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><br /><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><span class="c12">&nbsp;</span><span class="c13">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c11">&nbsp;</span><br /><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><span class="c12">&nbsp;</span><span class="c13">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><br /><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><span class="c12">&nbsp;</span><span class="c13">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c11">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><br /><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><span class="c12">&nbsp;</span><span class="c13">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c11">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c11">&nbsp;</span><span class="c12">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><br /><span class="c14">&nbsp;</span><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><br /><span class="c14">&nbsp;</span><span class="c14">&nbsp;</span><span class="c14">&nbsp;</span><span class="c14">&nbsp;</span><span class="c14">&nbsp;</span><span class="c13">&nbsp;</span><span class="c14">&nbsp;</span><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><span class="c14">&nbsp;</span><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><span class="c12">&nbsp;</span><span class="c13">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><br /><span class="c14">&nbsp;</span><span class="c14">&nbsp;</span><span class="c14">&nbsp;</span><span class="c14">&nbsp;</span><span class="c14">&nbsp;</span><span class="c14">&nbsp;</span><span class="c14">&nbsp;</span><span class="c14">&nbsp;</span><span class="c14">&nbsp;</span><span class="c14">&nbsp;</span><span class="c14">&nbsp;</span><span class="c14">&nbsp;</span><span class="c14">&nbsp;</span><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><span class="c12">&nbsp;</span><span class="c13">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c11">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c9">&nbsp;</span><span class="c9">&nbsp;</span><span class="c9">&nbsp;</span><span class="c9">&nbsp;</span><br /><span class="c14">&nbsp;</span><span class="c14">&nbsp;</span><span class="c14">&nbsp;</span><span class="c14">&nbsp;</span><span class="c14">&nbsp;</span><span class="c14">&nbsp;</span><span class="c14">&nbsp;</span><span class="c14">&nbsp;</span><span class="c14">&nbsp;</span><span class="c14">&nbsp;</span><span class="c14">&nbsp;</span><span class="c14">&nbsp;</span><span class="c14">&nbsp;</span><span class="c14">&nbsp;</span><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c11">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c9">&nbsp;</span><span class="c9">&nbsp;</span><span class="c9">&nbsp;</span><span class="c9">&nbsp;</span><br /><span class="c15">&nbsp;</span><span class="c14">&nbsp;</span><span class="c14">&nbsp;</span><span class="c14">&nbsp;</span><span class="c14">&nbsp;</span><span class="c14">&nbsp;</span><span class="c14">&nbsp;</span><span class="c14">&nbsp;</span><span class="c14">&nbsp;</span><span class="c14">&nbsp;</span><span class="c14">&nbsp;</span><span class="c14">&nbsp;</span><span class="c14">&nbsp;</span><span class="c14">&nbsp;</span><span class="c14">&nbsp;</span><span class="c14">&nbsp;</span><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c9">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c9">&nbsp;</span><span class="c9">&nbsp;</span><span class="c9">&nbsp;</span><span class="c9">&nbsp;</span><span class="c9">&nbsp;</span><span class="c9">&nbsp;</span><span class="c9">&nbsp;</span><br /><span class="c15">&nbsp;</span><span class="c15">&nbsp;</span><span class="c15">&nbsp;</span><span class="c15">&nbsp;</span><span class="c14">&nbsp;</span><span class="c14">&nbsp;</span><span class="c14">&nbsp;</span><span class="c14">&nbsp;</span><span class="c14">&nbsp;</span><span class="c14">&nbsp;</span><span class="c14">&nbsp;</span><span class="c14">&nbsp;</span><span class="c14">&nbsp;</span><span class="c14">&nbsp;</span><span class="c14">&nbsp;</span><span class="c14">&nbsp;</span><span class="c14">&nbsp;</span><span class="c13">&nbsp;</span><span class="c14">&nbsp;</span><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><span class="c13">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c12">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c11">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c10">&nbsp;</span><span class="c9">&nbsp;</span><span class="c9">&nbsp;</span><span class="c9">&nbsp;</span><span class="c9">&nbsp;</span><span class="c9">&nbsp;</span><span class="c9">&nbsp;</span><span class="c9">&nbsp;</span><span class="c9">&nbsp;</span><span class="c9">&nbsp;</span><span class="c9">&nbsp;</span><span class="c9">&nbsp;</span><span class="c9">&nbsp;</span><span class="c9">&nbsp;</span><br />

</span>]]>
    </content>
</entry>

<entry>
    <title>Code Evolution Versus Intelligent Design</title>
    <link rel="alternate" type="text/html" href="http://blogs.perl.org/users/ovid/2013/04/code-evolution-versus-intelligent-design.html" />
    <id>tag:blogs.perl.org,2013:/users/ovid//11.4603</id>

    <published>2013-04-24T05:33:37Z</published>
    <updated>2013-04-24T08:58:29Z</updated>

    <summary>I didn&apos;t actually intend for this to be a series of posts, but hey, that&apos;s the consequence of going with the flow rather than rigidly planning everything out beforehand and it nicely mirrors the theme of: How to be agile...</summary>
    <author>
        <name>Ovid</name>
        <uri>http://www.overseas-exile.com/</uri>
    </author>
    
    <category term="testing" label="testing" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en" xml:base="http://blogs.perl.org/users/ovid/">
        <![CDATA[<p>I didn't actually intend for this to be a series of posts, but hey, that's the consequence of going with the flow rather than rigidly planning everything out beforehand and it nicely mirrors the theme of:</p>

<ul>
<li><a href="http://blogs.perl.org/users/ovid/2013/04/how-to-be-agile-without-testing.html">How to be agile without testing</a></li>
<li><a href="http://blogs.perl.org/users/ovid/2013/04/when-must-you-test-your-code.html">When must you test your code?</a></li>
</ul>

<p>If you have not read those, I strongly recommend that you do so before continuing on this post. Mostly the comments have been positive, but <a href="http://quietstars.com/">Adrian Howard</a> has offered some interesting counter-points and some good resources for further reading. I will <em>not</em> say that he's wrong, but there is a different way of looking at this situation.</p>
]]>
        <![CDATA[<p>First, the summary of what I am arguing for:</p>

<ul>
<li>Use continuous deployment</li>
<li>Monitor any behaviors that absolutely impact the bottom line</li>
<li>Write integration tests to catch all fatal errors</li>
<li>Write integration tests to validate conversion funnels</li>
<li>Write tests to prevent any "harmful" behavior</li>
</ul>

<p>So far that's pretty uncontroversial and, as Adrian points out, much of this is best practice in the agile community today, but this is where he and I diverge slightly.</p>

<p>First and foremost, I want to be clear that I am only outlining this approach as one of many possible approaches. Second, this is only for <em>customer-facing code</em> (specifically, for customers who's behavior can be "improved" by a different design, such as for e-commerce sites).</p>

<p>If you just follow what I outline above, you can have <em>plenty</em> of untested code. Oh noes! <em>Quelle horreur</em>! The sky is falling!</p>

<h1>Why Do We Test?</h1>

<p>At this point, if you want to test, be my guest. Test away! I am certainly not anti-testing by any stretch of the imagination. I largely argue for tests as a preventative measure, but Adrian (and many others) stresses different goals. <a href="http://blogs.perl.org/users/ovid/2013/04/how-to-be-agile-without-testing.html#comment-626868">Adrian wrote</a>:</p>

<ul>
<li>I write the vast majority of my code using TDD. Here I'm writing tests to help my design.</li>
<li>Sometimes I write story level tests / acceptance tests / customer tests. Here I'm writing tests to help me figure out when I've done something.</li>
</ul>

<p>Driving the design and knowing when you've finished something are certainly ways you can use tests and I've done both quite a bit, though tests do not have the be the only way of accomplishing these goals. However, if you want to use tests for that (and for non-customer facing code I applaud this approach), be my guest.</p>

<p>So why do I think that another approach is worthwhile? <a href="http://www.omg-facts.com/Science/Neurosurgeons-Call-Your-Temples-God-s-Li/55073">Because intelligent design often isn't very intelligent</a> (sorry Adrian). </p>

<p><a href="http://blogs.perl.org/users/ovid/2011/05/failing-your-way-to-success-with-ab-testing.html">One of the biggest issues with introducing A/B testing is ego</a>. I've seen this time and time again (and have been victim to it myself). Many people assume that they "know" what the optimal design is and <a href="http://stopdesign.com/archive/2009/03/20/goodbye-google.html">others refuse to work in an environment where customer behavior is seen as more valuable developer opinion</a>. Overcoming ego is <strong>hard</strong>. I mean it's almost NP-Complete hard. Watching your "expert" opinion turn out to be wrong over and over is a painful lesson, but certainly one that I feel everyone should be exposed to. Humble pie  isn't delicious while you're eating it, but it sure is filling.</p>

<p><em>Case in point: I used to manage the owner of one company by always putting glaring flaws in my interfaces because he always had to change something. He'd spot the flaw and I'd go back to my desk and commit the fix I already had for it. Somehow I'd always get rave reviews from him, even though he was always correcting my work. Egos make it harder to get things done.</em></p>

<h1>All Code Has Bugs</h1>

<p>So Adrian's using tests for, amongst other things, design drivers, but I'm actually happy to allow a grey area of a little bit of sloppiness in there. Why? Is it because I want my code to have bugs? Not exactly. All code has bugs. We know this, so rather than fight against the inevitable, can we get it to work in our favor?</p>

<p>Think for a moment about what would happen in biology if mutations stopped: evolution would end, species would no longer be able to adapt to their environment and there would likely be mass extinction. Mutation, however, allows us to sometimes have a positive result, even though <a href="http://www.skepticink.com/smilodonsretreat/2013/02/24/weaknesses-of-evolution-part-10-most-mutations-are-harmful/">most mutations are neutral in effect and a handful are negative</a>. This is why I argue that we need to at least test for immediate harm and conversion funnels: think of these tests as your immune system. Any behavior which harms your customer, or has a strong potential to harm your customer, or blocks your conversion funnels (er, "fitness function"), should be tested.</p>

<p>So what happens with the rest of the code? Every time there is a new release of the code, you can think of this as the child of the parent(s). This child is going to have a combination of intelligent design (new features) and evolution. The evolution might simply be <a href="http://en.wikipedia.org/wiki/Emergent_behavior">emergent behavior</a> of the new design or it may be what I referred to as an <em>unexpected behavior</em>. The latter is the "mutation" that I have been referring to, though unexpected behavior and emergent behavior can overlap.</p>

<p>Unexpected behaviors (mutations) seem to be, as I've personally experienced as a direct result of using this methodology, mostly neutral in terms of "fitness", though sometimes they're negative. But rather than talk in the abstract, let's get real and see how this works (though I'll be deliberately vague due to an NDA).</p>

<p>I was hacking on some code that returned a collection of "results" to users when I noticed that, under a particular condition, no results were returned even though results existed. Curious, I dug in a little bit and discovered that the discarded results appeared to be relevant. So I "fixed" this unexpected behavior by wrapping it in an A/B test and pushed it live. It took about two hours from start to finish to fix and push this code. A/B tests can easily take a while (days or even weeks) to run, but this one had a strong result in only a couple of days: the unexpected behavior of discarded results strongly outperformed the "correct" behavior. I could speculate all day long (and did!) as to why this was the case, but sometimes people act in mysterious ways.</p>

<p>Had this code been thoroughly tested up front, this very counter-intuitive positive mutation would never have occurred. By using testing to rigidly lock ourselves into a particular set of known behaviors, we lose the ability to sometimes allow our code to organically discover better ways of getting things done, though we gain some comfort that our code is doing more or less what we tell it to do. (Note: except for those cases where I argue that tests should be mandatory, I think many unexpected behaviors should be first investigated via A/B testing in addition to the possibility of a strict test.)</p>

<p>So if we accept the premise that most mutations are "neutral" (yes, that's a big "if"!) and we can hopefully catch most (if not all) negative mutations through vigilant monitoring, we have the potential to let our guard down a little bit and start pushing out features and not worrying too much that we've done things "perfectly". We already know that we're going to have unexpected behaviors so why not embrace them and let them work for us?</p>

<p>Again, this is not "anti-testing" at all. Do you feel more comfortable testing? Then do so! Absolutely do so! Have a tricky algorithm? Test it. Want to flesh out a design issue? Test it. Want a programmatic definition of "done"? Test it. Have mission critical code? Test it. Feel uncomfortable with unexpected behavior? Test it.</p>

<p>However, if you have a solid team, and well-thought out monitoring, and you're comfortable with trading some technical debt for a bit of flexibility, consider letting your code evolve. I was not comfortable with this at all when I first encountered it, but it's astonishing the leaps that evolution can make.</p>
]]>
    </content>
</entry>

<entry>
    <title>When Must You Test Your Code?</title>
    <link rel="alternate" type="text/html" href="http://blogs.perl.org/users/ovid/2013/04/when-must-you-test-your-code.html" />
    <id>tag:blogs.perl.org,2013:/users/ovid//11.4594</id>

    <published>2013-04-21T13:34:38Z</published>
    <updated>2013-04-24T05:46:15Z</updated>

    <summary>Recently I wrote about how to be agile without testing (if you haven&apos;t read that, you should do so before reading this). I was planning on a follow-up after some comments came in and so far the reaction was decidedly...</summary>
    <author>
        <name>Ovid</name>
        <uri>http://www.overseas-exile.com/</uri>
    </author>
    
    <category term="agile" label="agile" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="testing" label="testing" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="tests" label="tests" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en" xml:base="http://blogs.perl.org/users/ovid/">
        <![CDATA[<p>Recently I wrote about <a href="http://blogs.perl.org/users/ovid/2013/04/how-to-be-agile-without-testing.html">how to be agile without testing</a> (if you haven't read that, you should do so before reading this). I was planning on a follow-up after some comments came in and so far the reaction was decidedly mixed. I think that's a shame because not many people seemed to focus on the punchline:</p>

<blockquote>
  <p>And that's really the most interesting idea of this entire post: your customer's behavior is more important than your application's behavior. </p>
</blockquote>
]]>
        <![CDATA[<p>For open source, this is clearly not true. Business success is not the primary driver and if it's an open source project, you should run it however you feel like it. I mean, heck, when you look at <a href="http://search.cpan.org/~ovid/">my open source code</a>, you see that I'm heavily testing my code. I don't write that code for financial gain and I have different motivations.</p>

<p>However, if you're trying to build a business (and I'm focusing on that in this post), then it should be blindingly obvious that customers are more important than code, but that assertion leaves many people scratching their heads. Reddit, for example, was underwhelmed by the post, but one commenter (the only one on Reddit, honestly), reasoned through what I described and <a href="http://www.reddit.com/r/agile/comments/1c9aum/how_to_be_agile_without_testing/c9edvb5">hit the nail squarely on the head</a>:</p>

<blockquote>
  <p>And if you're relying on watching user behaviors to detect a noticeable but insignificant bug, there are many you're going to miss. And if you're relying on a production rollback to fix those bugs, you're going to let many of them through because it's less costly than a rollback. And eventually your program is going to be a big steaming mess that nobody likes, but that ill will can't be traced back to a particular "unexpected behavior" but rather to the confluence of all of them.</p>
</blockquote>

<p>I <strong>loved</strong> that comment because it divined a very real problem with the approach I described.</p>

<p>In my "no testing" experience, your code, while not always turning into a <a href="http://en.wikipedia.org/wiki/Big_ball_of_mud">big ball of mud</a>, at minimum turns into an unweildy pile of ones and zeroes that isn't very fun to work on. I've worked at many different companies and I've <em>never</em> seen a well-designed, easy-to-hack system that doesn't have tests. It simply never happens (in my experience). As a result, you get a system that's harder to extend, harder to refactor, has more bugs and, crucially for many companies, less attractive for developers to work on. I still remember one company in London that had acquired this reputation and while they paid a reasonable salary, no one wanted to work there (London.pm members might guess who this is, but I won't confirm it and and I hope you won't post that here).</p>

<p>So you can be agile without testing, but you are going to accumulate technical debt and you have to be willing to service that debt. But if you want to minimize your technical debt, when <strong>must</strong> you test? That's simple: harm.</p>

<p>When people argue about whether or not there is a universal moral standard, the only one the really agree on is "do no harm" (though there's little agreement about what constitutes harm). For me, from an ethical standpoint, I have to argue in favor of <em>do no harm</em> in regards to software testing. In fact, it's not just a passive "do no harm", it's an active "mitigate harm" that I think is the only ethical choice. If you're not going to write tests to verify that the thumbnail size is correct, that's your choice. If you're not going to write tests verifying that you don't double-charge a customer who accidentally double-clicks "Submit", then I have to say that you've taken an unethical decision. I might want to write a lot more tests, but the only tests I'm going to insist must be written are those which prevent actual harm, even though I might want a lot more tests written.</p>

<p>So those are the tests you <em>must</em> write. What about the tests you <em>should</em> write? If you don't follow the monitoring approach that I described, then I would argue that you should write tests for anything and everything and hope that your customers like what you do. Note that this is actually what many "agile" shops do, so in this regard, I'm not proposing anything radical. However, if you <em>do</em> follow the monitoring approach, I would argue that at the very least you should write integration tests catching fatal errors. A customer still might buy something if they only see one columns of products instead of two, but they won't buy anything if the application crashes (not writing tests for this area is exposing your company to harm, but at least it's a choice).</p>

<p>I would also argue that if you have actions that customers must take for the success of your business, write enough integration tests to verify that your customers can take said action. Have a Web site? Make sure you know your <a href="http://en.wikipedia.org/wiki/Conversion_funnel">conversion funnels</a> and that people can get through them. Have an iPhone app? Make sure that the in-game extras people can buy actually show up and can be purchased.</p>

<p>Note that this approach, again, focuses on customers and not developers. You must not bring harm to your customers and you must always provide a way for your customers to complete the actions you wish them to complete. It's also good if you have logging to verify the most common actions your users take so you can at least verify that those actions aren't fatal: the <a href="http://en.wikipedia.org/wiki/Pareto_rule">Pareto rule</a> is very much your friend here.</p>

<p>Over time, you'll wind up with enough integration tests that devs can still refactor with a modicum of safety and, if it's a large enough refactor, it's easy to add extra tests to verify that the behavior you're targeting is successful.</p>

<p>There is also a curious side-benefit to this: test coverage might be more useful. This sounds paradoxical, but remember, this approach focuses on whether or not your customers take the actions you need for your business to be successful &mdash; not whether or not your application does what you think it's supposed to do. As a result, your tests are more focused on the bulk of your business needs instead of that "Facebook Like" button and, if tests are managed correctly, your code coverage could show that there are large parts of your system that you're not actually using. Remember: for must of us, a unit test on a function will show that function as being tested, regardless of whether or not it's dead code. However, it's a lot harder to get coverage of dead code when you focus your tests on what your customers are actually doing.</p>

<p>To be fair, I generally don't test this way because very few companies have strong enough monitoring or deployment procedures for this to work. It's very much a "cutting edge" approach and even if you can get your systems evolved enough to allow this, my experience is that many developers are going to struggle with the idea that customer behavior is more important than application behavior.</p>

<p>Instead, I'll leave you with this quote from the Reddit thread I referred to:</p>

<blockquote>
  <p>I think your overall message is, "don't succumb to cargo-cult programming practices"--which is a great one! But the structure of your post sounds like you're suggesting doing user-monitoring in place of traditional testing, while you're really suggesting doing user-monitoring in addition to traditional testing, employed strategically.</p>
</blockquote>

<p>Clearly I need to hire that person to be my editor.</p>

<p><strong>TL;DR</strong></p>

<p>If you want to try a radically different agile strategy:</p>

<ul>
<li>Use continuous deployment</li>
<li>Monitor any behaviors that absolutely impact the bottom line</li>
<li>Write integration tests to catch all fatal errors</li>
<li>Write integration tests to validate conversion funnels</li>
<li>Write tests to prevent any "harmful" behavior</li>
</ul>

<p>Instead of repeating mantras, trying focusing on your customers instead of the code. I've seen this in action (minus some of the testing I recommend) and it works astonishingly well. Which would you rather have: code that does what you want or customers that do what you want? It's your call.</p>

<p>See also: <a href="http://blogs.perl.org/users/ovid/2013/04/code-evolution-versus-intelligent-design.html">Code evolution versus intelligent design</a>.</p>
]]>
    </content>
</entry>

<entry>
    <title>How to be agile without testing</title>
    <link rel="alternate" type="text/html" href="http://blogs.perl.org/users/ovid/2013/04/how-to-be-agile-without-testing.html" />
    <id>tag:blogs.perl.org,2013:/users/ovid//11.4556</id>

    <published>2013-04-12T16:25:38Z</published>
    <updated>2013-04-24T05:38:27Z</updated>

    <summary>What&apos;s a bug? Fair warning: if you&apos;re someone who has the shining light of the converted in your eyes and you&apos;ve discovered the One True Way of writing software, you might feel a bit challenged by this post. Your newest...</summary>
    <author>
        <name>Ovid</name>
        <uri>http://www.overseas-exile.com/</uri>
    </author>
    
    <category term="agile" label="agile" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="tests" label="tests" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en" xml:base="http://blogs.perl.org/users/ovid/">
        <![CDATA[<h1>What's a bug?</h1>

<p>Fair warning: if you're someone who has the shining light of the converted in
your eyes and you've discovered the One True Way of writing software, you
might feel a bit challenged by this post.</p>

<blockquote>
  <p>Your newest developer just pushed some code, but it has a bug. They screwed
up the CSS and one of the links is a bright, glaring red instead of the
muted blue that your company requires.  While you're sitting with her,
counseling her on the importance of testing, you get a call from marketing
congratulating you on the last release. Sales have jumped 50%.</p>

<p>You know that the only change is the link color.</p>
</blockquote>

<p>Was that code really a bug? Are you honestly going to roll it back?</p>

<p>More importantly, and this is the question that <em>many</em> people get wrong: what
are you going to learn from this?</p>
]]>
        <![CDATA[<h1>Why we write tests</h1>

<p>Why do we go agile? Because we believe we can improve the software process.
Because we believe we can share information better and, this is very important
to agile: get feedback early and often (hint: that theme is going to recur).
Another interesting thing about agile is that every agile methodology, without
exception, says that you need to adjust that methodology to meet you
particular needs. I've said this before and it bears repeating: <a href="http://blogs.perl.org/users/ovid/2013/04/random-thoughts-about-agile-software-development.html">you can't be agile unless you're, well, agile</a>. So some agile teams don't have fixed iterations. Others (most?) don't do pair programming. Code review is only done on the tricky bits or maybe for newer programmers. And guess what? These companies often do very well, despite doing things differently.</p>

<p>But none of them talk about getting rid of testing. They just don't.</p>

<p>And yet in our "red link" example above, testing might well have made it <em>harder</em> to discover a 50% increase in sales.</p>

<p>For most of us, we learned about testing years ago and it was good. Then we learned about TDD and realized we had found testing Nirvana. <a href="http://en.wikipedia.org/wiki/Framework_for_Integrated_Test">FIT testing</a> was a nifty idea that's heavily evangelized by those who offer FIT testing consulting services &mdash; and pretty much no one else. And now BDD leaves some breathless while others yawn. It's just the next craze, right?</p>

<p>But what is testing <em>for</em>? From a technical perspective, we might argue that it's to make sure the software does what we want it to do. But is that the most important thing? Remember that over a size of <em>mumble</em> lines of code, all software has bugs. All of it.</p>

<p>Instead, I think it's better to say that all software has unexpected behavior. We write tests because we hope the software will do what we want the software to do, but instead, isn't it better if the <em>customers</em> do what we want them to do?  You can build a better  mousetrap, but there's no guarantee they will come. And if there's anything to learn from Digg or other tech disasters it's this: customers are going to do what they damned well please, regardless of whether or not your software "works", the experts you've consulted or how many focus groups you've held.</p>

<p>So rather than introduce software testing as some proxy for customer behavior, let's think about the consumers of our software for a moment.</p>

<h1>A list of undesirable things</h1>

<p>Considering our "bright red link" example above, I ask again: is it a bug? In that example (<a href="http://visualwebsiteoptimizer.com/split-testing-blog/blue-link-vs-red-link/">which was not chosen at random</a>), it's easy to argue that it's a software bug, but that's only because the software exhibited unexpected behavior. In this case, it was a 50% increase in sales.</p>

<p>So now, instead of bugs &mdash; always bad! &mdash; we can think in terms of
"unexpected behavior", sometimes good, sometimes bad.</p>

<p>So how do you know which is which?</p>

<p>You make lists of undesirable things. 500 errors on your Web site are bad, but
are 302s? Tough to say. Maybe you want to keep RAM usage below a certain
level, or not see a significant drop in sales. And you probably want to make
sure that responses never take more than <code>$x</code> milliseconds.</p>

<p>Make a list of everything that's <em>unequivocally</em> undesirable (for example, a
Facebook "like" button going away doesn't count as unequivocally undesirable)
and add monitoring for all of those behaviors. Every time you change or add
technologies, go over your list of undesirable things again. Are they up to
date? Is there anything you need to change?</p>

<p>Some of those undesirable things are reversible (dropping sales) and the
alternative is good. So monitor those, too. Maybe you want to get notified
when a release improves response time by 10%.</p>

<p>And then?</p>

<p>Well, it's great, but it doesn't replace testing. Not by a long shot. You've
made your bi-weekly release, RAM consumption has skyrocketed, you're swapping
like mad and now you a 3,000 line diff to go through. Finding a memory leak
can be hard at the best of times and normal testing often misses them (but
checkout <a href="https://metacpan.org/module/Test::LeakTrace">Test::LeakTrace</a>), but
now you have a roll back a huge change and goes through 3,000 lines of code
to find your problem.</p>

<p>So you don't do that. Instead, you're switching to <a href="http://blog.assembla.com/assemblablog/tabid/12618/bid/90559/Avoiding-Premature-Integration-or-How-we-learned-to-stop-worrying-and-ship-software-every-day.aspx">continuous deployment</a>. With this model, you push code to production the moment it's ready. Of course, it's good if you actually push it to a box, watch it, push it to a cluster, watch it, and then push it to all servers. With your extensive monitoring, undesirable things usually show up pretty quickly and your memory leak is a 30 line diff instead of a 3,000 line diff.</p>

<p>Which one do you want to deal with?</p>

<p>(<em>Naturally, I used a memory leak as an example, but that's one of the things which often takes longer to show up, but I'm too lazy to change that example. Pretend I wrote "5% increase in 404s.</em>)</p>

<p>In my experience with this, customers are fairly forgiving about minor quirks
and most unexpected behaviors are things like "this image isn't showing up" or
"these search results are ordered incorrectly." Those tend to not be
catastrophic. In fact, many times this unexpected behavior goes unnoticed.
Most of the time the unexpected behaviors will turn out to be neutral or bad,
in terms of undesirable things, but sometimes they turn out to be the
<em>good</em> unexpected behavior. You'll never know if you don't try.  </p>

<p>As you may expect, this technique works very well with <a href="http://en.wikipedia.org/wiki/A/B_testing">A/B testing</a> and if you have the courage
to look for unexpected behaviors instead of bugs, A/B testing is the next
logical step.</p>

<p><strong>Note:</strong> None of the above precludes writing tests. None of it. I've seen the
"monitoring undesirable things" strategy work extremely well and I firmly
believe that it can work in conjunction with software testing. However, it's a
<em>different</em> way of testing software, one that's more reliant on customer
behavior than exacting specifications. So the title of this post is actually a bit of a lie; it's just a different want of looking at testing.</p>

<p>And that's really the most interesting idea of this entire post: your
customer's behavior is more important than your application's behavior. </p>

<p>See also: <a href="http://blogs.perl.org/users/ovid/2013/04/when-must-you-test-your-code.html">when must you test your code?</a>.</p>
]]>
    </content>
</entry>

<entry>
    <title>YAPC::NA Schedule is up</title>
    <link rel="alternate" type="text/html" href="http://blogs.perl.org/users/ovid/2013/04/yapcna-schedule-is-up.html" />
    <id>tag:blogs.perl.org,2013:/users/ovid//11.4514</id>

    <published>2013-04-10T08:18:26Z</published>
    <updated>2013-04-10T08:25:57Z</updated>

    <summary>The YAPC::NA schedule has now been posted. This will be my first YAPC in the US and it looks like it&apos;s going to be great. Curiously, my last YAPC was in Frankfurt, Germany about half an hour away from where...</summary>
    <author>
        <name>Ovid</name>
        <uri>http://www.overseas-exile.com/</uri>
    </author>
    
    <category term="yapc" label="yapc" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en" xml:base="http://blogs.perl.org/users/ovid/">
        <![CDATA[<p>The <a href="http://www.yapcna.org/yn2013/schedule">YAPC::NA schedule</a> has now been posted. This will be my first YAPC in the US and it looks like it's going to be great. Curiously, my last YAPC was in Frankfurt, Germany about half an hour away from where my father lives, and this YAPC is in Austin, a couple of hours from where my mother (and many other relatives) live. Thus, Perl is bringing me closer to my family :)</p>

<p>I have two talks accepted. The first is <a href="http://www.yapcna.org/yn2013/talk/4596">Testing with Test::Class::Moose</a>. That one's a bit of a risk because I'm presenting what is effectively alpha code. However, I've been doing testing long enough that I'm fairly comfortable with what's being put forward. Target audience: if you've ever wanted to use Test::Class + Moose, <a href="https://github.com/Ovid/test-class-moose">Test::Class::Moose</a> is the module for you. Plus, due to the reporting and extensibility, this module is probably a great choice for companies with larger test suites who want to better control and information over what's happening in their tests.</p>

<p>The second talk is <a href="http://www.yapcna.org/yn2013/talk/4597">Roles versus Inheritance</a>. That one gets a bit mind-bendingly complicated for some folks because inheritance, unlike roles, is sometimes hard to wrap your brain around. It's not a tutorial on roles because frankly, roles are generally ridiculously easy to use once you understand them. Instead, it's an explanation of roles and the problem they're trying to solve.</p>
]]>
        

    </content>
</entry>

<entry>
    <title>Random thoughts about agile software development</title>
    <link rel="alternate" type="text/html" href="http://blogs.perl.org/users/ovid/2013/04/random-thoughts-about-agile-software-development.html" />
    <id>tag:blogs.perl.org,2013:/users/ovid//11.4505</id>

    <published>2013-04-07T07:19:14Z</published>
    <updated>2013-04-07T12:50:39Z</updated>

    <summary>I&apos;m going freelance next month in a company that my wife and I are starting. Part of what I&apos;ve been doing is consulting on various issues companies have and part of that is this whole notion of &quot;agility&quot;. I fear...</summary>
    <author>
        <name>Ovid</name>
        <uri>http://www.overseas-exile.com/</uri>
    </author>
    
    <category term="agile" label="agile" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en" xml:base="http://blogs.perl.org/users/ovid/">
        <![CDATA[<p>I'm going freelance next month in a company that my wife and I are starting. Part of what I've been doing is consulting on various issues companies have and part of that is this whole notion of "agility". I fear that the term "agile" is becoming a meaningless buzzword because, while the core principles are sound, companies are just using the word to say "we have no process." It's a fine line between a process so lightweight that you don't even notice it and a process that doesn't exist and it's understandable that some companies will incorporate "agile" into their <a href="http://en.wikipedia.org/wiki/Buzzword_bingo">buzzword bingo</a> without understanding what it really means. This is sad because it not only dilutes the utility of agile, but it creates a perfect straw man for agile detractors.</p>
]]>
        <![CDATA[<p>So what is agile, really? You can watch my YAPC::EU Keynote speech entitled <a href="http://www.youtube.com/watch?v=qnUD8ed3-ok">Agile Companies Go P.O.P.</a> to get an idea of what agile really is, but in a nutshell, agile is a full-spectrum continuum that I describe as People, Organization, and Process (hence the P.O.P.). Most people seem to focus on process and forgets everything else. What's worse, "process" gets reduced down to XP, Scrum, Kanban, and so on. Then, instead of considering the merits of agility, people nitpick issues like pair programming, TDD, or whatever gets their goat about a particular system. They don't actually think about <em>agility</em>. This is frustrating for me.</p>

<p>To give you an example of what I mean by POP, consider the BBC. They're a great place to  work, I highly recommend them and I really enjoyed the years I worked there ... but they're not agile. Oh, they say they use a "modified scrum" and <a href="https://www.google.com/search?btnG=1&amp;pws=0&amp;q=bbc+agile+development">the BBC says they're agile</a> and in truth, many of their teams <em>are</em> agile, but the BBC itself is not. I can think of no better way of explaining this than to talk about my first week of working there.</p>

<p>A gentleman wielding a mug walked up to me and said "hello". I said "hello" back and asked who he was and he replied "I'm your boss."</p>

<p>This is not a great way to find out who your boss is, nor was it a particularly brilliant way for me to make a good first impression, but being the fool that I am, I doubled down. I replied, in a reply that to me is truly epic (if I may be ever so humble):</p>

<p>"I'm sorry, but this gentleman to my right is the team lead. That lady behind me is the project manager. That lady over <em>there</em> is the product owner and that gentleman sitting over there says that <em>he's</em> my boss."</p>

<p>The mug-wielder (a really great guy, actually) just laughed and said "I completely understand. We'll have coffee next week."</p>

<p>It was six months before I saw him again, but as it turns out, he was, briefly, my boss. It seems that, amongst other things, the BBC had adopted the horror of <a href="http://en.wikipedia.org/wiki/Matrix_management">Matrix management</a> and threw in a dose of Neo for good measure.</p>

<p>Just to really drive the point home: a couple of months after I was nestled firmly into the comforting arms of Auntie Beeb, there was an "all-hands" meeting and, amongst other things, it was announced that the BBC had finally given approval for teams to switch from CVS to SVN.</p>

<p>Yes, you read that right. That was the time when SVN was dying and everyone seemed to be switching to Git or Mercurial and the BBC had finally gotten on the SVN train. When asked why it took so long to get approval for the switch, the person making the announcement replied that he had understood that people would be more productive with SVN, but no one had ever made a <em>business case</em> for it.</p>

<p>Oh my. On one hand, for an organization as large as the BBC, you can understand a certain amount of caution. On the other hand, it felt like they were announcing that they've decided all workstations will henceforth be issued with mice. Or for a more compelling argument: Forge, the new "one size fits all" development platform. You'd have to have been there when it was announced to properly appreciate that mess, but I remember an email to the Forge mailing list where a PHP developer couldn't get "Hello world" running on Forge. The mind-numbingly complex answer caused much laughter and tears, and the subsequent justifications of the Rube Goldberg-inspired workflow were nothing short of astonishing.</p>

<p>Yes, the BBC uses Scrum. No, the BBC is not agile. Great place and I loved working there, but there are many there who don't "get" agile.</p>

<p>To round out this random collection of thoughts about agility, I mentioned that the BBC uses a "modified Scrum". Many companies use a "modified <code>$agile_method</code>" and that makes me nervous the way a car salesman makes me nervous when he explains that "<em>this car has brakes</em>".</p>

<p>Of course the damned car has brakes. It's a car. That's part of what a car is. If you have to explain it ...</p>

<p>Every agile methodology explains that it's a heuristic and you need to mold it to your business and culture. Of course, as soon as you do, some <a href="http://en.wikipedia.org/wiki/Rules_lawyer">rules lawyer</a> is going to tell you that "this isn't agile!"</p>

<p>Ignore them. Of <em>course</em> it's agile. Agile is about <em>agility</em>. Duh. If you can't adjust your processes to fit your needs, you're not agile. If you do adjust your processes to fit your needs, it's not a "modified Scrum", it's just "Scrum." People say "modified" like they're making an excuse when no excuse it necessary.</p>

<p>I'll write more about agility in the future, but I felt this was a good start to give you an idea of where I'm coming from. Oh yeah, and <a href="http://www.youtube.com/watch?v=qnUD8ed3-ok">don't forget to watch my P.O.P. presentation</a>.</p>

<p>And now I'm kicking myself because I didn't pitch the P.O.P. talk for YAPC::NA.</p>
]]>
    </content>
</entry>

<entry>
    <title>Adding &quot;tags&quot; to Test::Class::Moose</title>
    <link rel="alternate" type="text/html" href="http://blogs.perl.org/users/ovid/2013/04/adding-tags-to-testclassmoose.html" />
    <id>tag:blogs.perl.org,2013:/users/ovid//11.4500</id>

    <published>2013-04-05T14:51:15Z</published>
    <updated>2013-04-05T15:04:35Z</updated>

    <summary>I&apos;ve been thinking about the idea of adding optional &quot;tags&quot; to Test::Class::Moose, similar in concept to Mark Morgan&apos;s Test::Class::Filter::Tags. Here&apos;s an example of what that would look like: sub test_get_profile : Tags(redis network) { ... tests go here } What...</summary>
    <author>
        <name>Ovid</name>
        <uri>http://www.overseas-exile.com/</uri>
    </author>
    
    <category term="testclass" label="test::class" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="testing" label="testing" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="tests" label="tests" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en" xml:base="http://blogs.perl.org/users/ovid/">
        <![CDATA[<p>I've been thinking about the idea of adding optional "tags" to <a href="http://search.cpan.org/dist/Test-Class-Moose/">Test::Class::Moose</a>, similar in concept to Mark Morgan's <a href="http://search.cpan.org/dist/Test-Class-Filter-Tags/">Test::Class::Filter::Tags</a>. Here's an example of what that would look like:</p>

<pre><code>sub test_get_profile : Tags(redis network) {
    ... tests go here
}
</code></pre>

<p>What could you do with that? Well, the other day our network went down at work. My test suite blocked because all of the tests which required a network would hang. With the above, I could do this:</p>

<pre><code>Test::Class::Moose-&gt;new( exclude =&gt; 'network' )-&gt;runtests;
</code></pre>

<p>And have carried on with my work.</p>

<p>Or maybe you have tests that you <em>know</em> could run in parallel:</p>

<pre><code>sub test_some_unit_test : Tags(parallel) {
    ... tests go here
}
</code></pre>

<p>With that, if someone writes a forking version of Test::Class::Moose, you could automatically pick out all of the tests which can safely run in parallel and the tests which cannot would be run sequentially in another child.</p>

<p>Of course, if you parallelize the tests, it would be nice if you knew how long different test classes and methods ran: it would make it easier to write a scheduler. Oh, that's right, <a href="http://blogs.perl.org/users/ovid/2013/03/better-reporting-for-your-test-suite.html">Test::Class::Moose has reporting</a> (and a branch where I'm beefing up the reporting docs).</p>

<p>There's a lot of potential here. I'm currently working on improving the documentation, but I think the abstract should say "test suites for power users". With all of the features it has, it's shaping up into a pretty nifty tool.</p>

<p>If you like this idea, <a href="http://play-perl.org/quest/515ee748a10486342b00006e">I've added it to play.perl.org</a>.</p>
]]>
        

    </content>
</entry>

<entry>
    <title>Another strike against AUTOLOAD</title>
    <link rel="alternate" type="text/html" href="http://blogs.perl.org/users/ovid/2013/04/another-strike-against-autoload.html" />
    <id>tag:blogs.perl.org,2013:/users/ovid//11.4492</id>

    <published>2013-04-03T10:23:25Z</published>
    <updated>2013-04-03T09:53:44Z</updated>

    <summary>When you&apos;re using Redis, you can issue the select index command to use a different database (think &quot;namespace&quot;). By default Redis provides you with 16 different databases numbered 0 to 15 (you can configure it for more). All keys and...</summary>
    <author>
        <name>Ovid</name>
        <uri>http://www.overseas-exile.com/</uri>
    </author>
    
    <category term="debugging" label="debugging" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="oo" label="OO" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="perl" label="perl" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en" xml:base="http://blogs.perl.org/users/ovid/">
        <![CDATA[<p>When you're using Redis, you can issue the <a href="http://redis.io/commands/select">select <em>index</em></a> command to use a different database (think "namespace"). By default Redis provides you with 16 different databases numbered 0 to 15 (you can configure it for more). All keys and values will be separate from any other keys and values in other databases. So how do you know which database you're in? As it turns out, Redis doesn't offer a command for directly querying that information.</p>
]]>
        <![CDATA[<p>In our production code I needed to know which database that Redis was connected to. As it turns out, this is a bit tricky. You can get this information from Redis if you have: </p>

<ol>
<li>named your Redis connection</li>
<li>issued the <a href="http://redis.io/commands/client-list">client-list</a> command</li>
<li>found the connection with the correct name </li>
<li><p>and written a parser for this:</p>

<p>addr=127.0.0.1:36188 fd=5 name= age=9 idle=0 flags=N db=2 sub=0 psub=0 multi=-1 qbuf=0 qbuf-free=32768 obl=0 oll=0 omem=0 events=r cmd=client</p></li>
</ol>

<p>Oops. We forgot to name our connection, so we can't uniquely identify this one.</p>

<p>Instead, of doing things the "right" way, I decided that YAGNI applied. In a subclass of <a href="https://metacpan.org/module/Redis">Redis</a>, I was trying to write the following code because it <em>seemed</em> simpler:</p>

<pre><code>has 'database' =&gt; (
    is      =&gt; 'rw',
    isa     =&gt; 'Int',
    default =&gt; 0,
);

after 'select' =&gt; sub {
    my ( $self, $database ) = @_;
    $self-&gt;database($database);
};
</code></pre>

<p>That failed. Then I remembered that the excellent Redis module by Pedro Melo uses <code>AUTOLOAD</code> for the Redis command. I can't apply a method modifier to a method that does not yet exist.</p>

<p>I honestly can't fault him for this. It means that when a new version of Redis is released, the code just magically <em>works</em>.</p>

<p>So I tried this:</p>

<pre><code>sub select {
    my ( $self, $database ) = @_;
    $self-&gt;next::method($database);
    $self-&gt;database($database);
}
</code></pre>

<p>Nope. Same issue. I finally relied on <code>SUPER::select</code>. That worked fine, though it limits my choices due to the well-known SUPER bug (<code>SUPER::$method</code> calls the parent of the class the code is compiled into, not the parent of the invocant).</p>

<p>The following shows the issue:</p>

<pre><code>use Modern::Perl;                                                                                             
{
    package Parent;

    sub AUTOLOAD {
        our $AUTOLOAD;
        my $command = $AUTOLOAD;
        $command =~ s/.*://;
        return "command was $command";
    }
}
{
    package Child;
    our @ISA = 'Parent';

    sub new { bless {} =&gt; shift }
    sub foo { return shift-&gt;SUPER::foo }
    sub bar { return shift-&gt;next::method }
}
my $child = Child-&gt;new;
say $child-&gt;foo;
say $child-&gt;bar;
</code></pre>

<p>And the output:</p>

<pre><code>command was foo
No next::method 'bar' found for Child at ...
</code></pre>

<p>This was pretty easy for me to find and fix, but I can easily imagine for many who are new to Perl, this would have been completely mystifying.</p>
]]>
    </content>
</entry>

<entry>
    <title>What does this PHP print?</title>
    <link rel="alternate" type="text/html" href="http://blogs.perl.org/users/ovid/2013/03/what-does-this-php-print.html" />
    <id>tag:blogs.perl.org,2013:/users/ovid//11.4477</id>

    <published>2013-03-26T16:48:15Z</published>
    <updated>2013-03-26T16:51:00Z</updated>

    <summary><![CDATA[Via this blog entry which I'm sure some of you have seen before, the following PHP prints "horse". &lt;?php $arg = 'T'; $vehicle = ( ( $arg == 'B' ) ? 'bus' : ( $arg == 'A' ) ? 'airplane'...]]></summary>
    <author>
        <name>Ovid</name>
        <uri>http://www.overseas-exile.com/</uri>
    </author>
    
    
    <content type="html" xml:lang="en" xml:base="http://blogs.perl.org/users/ovid/">
        <![CDATA[<p>Via <a href="http://me.veekun.com/blog/2012/04/09/php-a-fractal-of-bad-design/">this blog entry</a> which I'm sure some of you have seen before, the following PHP prints "horse".</p>

<pre><code>&lt;?php
  $arg = 'T';                                                                                                                
  $vehicle = ( ( $arg == 'B' ) ? 'bus' :
               ( $arg == 'A' ) ? 'airplane' :
               ( $arg == 'T' ) ? 'train' :
               ( $arg == 'C' ) ? 'car' :
               ( $arg == 'H' ) ? 'horse' :
               'feet' );
  echo $vehicle;
?&gt;
</code></pre>

<p>No fun shooting fish (or a horse) in a barrel, but wow. Just wow.</p>
]]>
        

    </content>
</entry>

<entry>
    <title>Better reporting for your test suite</title>
    <link rel="alternate" type="text/html" href="http://blogs.perl.org/users/ovid/2013/03/better-reporting-for-your-test-suite.html" />
    <id>tag:blogs.perl.org,2013:/users/ovid//11.4453</id>

    <published>2013-03-22T09:16:13Z</published>
    <updated>2013-03-22T09:20:28Z</updated>

    <summary><![CDATA[It's very poorly documented, but Test::Class::Moose also has reporting built in. Here's how diag() all test classes from slowest to fastest, with time information: use Test::Most; use Test::Class::Moose::Load 't/lib'; # assumes your T:C:M tests are here my $test_suite = Test::Class::Moose-&gt;new;...]]></summary>
    <author>
        <name>Ovid</name>
        <uri>http://www.overseas-exile.com/</uri>
    </author>
    
    <category term="testclass" label="test::class" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="testing" label="testing" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="tests" label="tests" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en" xml:base="http://blogs.perl.org/users/ovid/">
        <![CDATA[<p>It's very poorly documented, but <a href="https://metacpan.org/module/Test::Class::Moose">Test::Class::Moose</a> also has reporting built in.</p>

<p>Here's how <code>diag()</code> all test classes from slowest to fastest, with time information:</p>

<pre><code>use Test::Most;
use Test::Class::Moose::Load 't/lib';    # assumes your T:C:M tests are here

my $test_suite = Test::Class::Moose-&gt;new;
$test_suite-&gt;runtests;

my $report = $test_suite-&gt;test_reporting;

# sort from slowest to fastest
my @classes =
  sort { $b-&gt;time-&gt;real &lt;=&gt; $a-&gt;time-&gt;real } $report-&gt;all_test_classes;
foreach my $class (@classes) {
    my $name = $class-&gt;name;
    my $duration = $class-&gt;time-&gt;duration; # a human-readable version
    diag "$name runtime: $duration";                                                                                                       
}
</code></pre>

<p>You can do that at a test method level, too. Plus, the time is broken down into system, user, and real time.</p>
]]>
        

    </content>
</entry>

<entry>
    <title>Using Roles with Test::Class::Moose</title>
    <link rel="alternate" type="text/html" href="http://blogs.perl.org/users/ovid/2013/03/using-roles-with-testclassmoose.html" />
    <id>tag:blogs.perl.org,2013:/users/ovid//11.4445</id>

    <published>2013-03-17T09:36:26Z</published>
    <updated>2013-03-17T19:54:55Z</updated>

    <summary>Note: this post assumes you have Test::Class::Moose version 0.06 or higher (on its way to the CPAN now). By now you may have heard of Test::Class::Moose. I wrote this to solve a need that many people have: they want the...</summary>
    <author>
        <name>Ovid</name>
        <uri>http://www.overseas-exile.com/</uri>
    </author>
    
    <category term="testclass" label="test::class" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="testing" label="testing" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="tests" label="tests" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en" xml:base="http://blogs.perl.org/users/ovid/">
        <![CDATA[<p><em>Note: this post assumes you have <code>Test::Class::Moose</code> version 0.06 or higher (on its way to the CPAN now).</em></p>

<p>By now you may have heard of <a href="https://metacpan.org/module/Test::Class::Moose">Test::Class::Moose</a>. I wrote this to solve a need that many people have: they want the awesomeness of <a href="https://metacpan.org/module/Test::Class">Test::Class</a>, but the modern OO facilities of <a href="https://metacpan.org/module/Moose">Moose</a>.</p>

<p><code>Test::Class::Moose</code> isn't for testing <code>Moose</code> classes, it's for testing <em>anything</em> you would have previously used <code>Test::Class</code> for, except that now you get Moosy (Moosee? Moosey?) goodness to go with it. I'll be attending <a href="http://www.yapcna.org/yn2013/">YAPC::NA 2013 in Austin</a> and I've pitched a <code>Test::Class::Moose</code> talk and, even if it doesn't get accepted, I figured I should at least write the slides. One of <em>my</em> most common uses cases (and and itch I always rescratch whenever I use <code>Test::Class</code>, <code>Test::Class::Most</code> or, now, <code>Test::Class::Moose</code>) caused one of my slides to have too much code.</p>

<p>So now it's fixed, released to the CPAN, and available for everyone to tell me it's "too magical" (a complaint I've heard in the past). Here's the problem and how I solved it.</p>
]]>
        <![CDATA[<p>Consider the following minimal class (some boilerplate omitted for brevity):</p>

<pre><code>package Person;
use Moose;

has [ 'first_name', 'last_name' ] =&gt; (
    is       =&gt; 'ro',
    isa      =&gt; 'Str',
    required =&gt; 1,
);

sub full_name {
    my $self = shift;
    return join ' ' =&gt; $self-&gt;first_name, $self-&gt;last_name;
}

1;
</code></pre>

<p>To use any of the <code>Test::Class*</code> modules, you start by writing a base class. Here's what ours looks like:</p>

<pre><code>package My::Test::Class;

use Test::Class::Moose;

INIT {
    Test::Class::Moose-&gt;new(
        show_timing =&gt; 0,
        randomize   =&gt; 0,
        statistics  =&gt; 1,
    )-&gt;runtests;
}

1;
</code></pre>

<p><em>Note: you don't need to know <code>Test::Class</code> for this example, but if you want to know more, see my (out of date) <a href="http://www.modernperlbooks.com/mt/2009/03/organizing-test-suites-with-testclass.html">Test::Class tutorial on Modern Perl Books</a>.</em></p>

<p>And our actual test class might look like this:</p>

<pre><code>package TestsFor::Person;
use Test::Class::Moose parent =&gt; 'My::Test::Class';
use Person;

sub test_constructor {
    my $test = shift;

    ok my $person = Person-&gt;new(
        first_name =&gt; 'Bob',
        last_name  =&gt; 'Dobbs',
    ), 'We should have a test person';

    isa_ok $person, 'Person', '... and the object it returns';
    is $person-&gt;full_name, 'Bob Dobbs',
      '... and it should return the correct full name';
}

1;
</code></pre>

<p>Running that with <code>prove -lv t/lib/TestsFor/Person.pm</code> generates the following output:</p>

<pre><code>1..2
#
# Running tests for My::Test::Class
#
    1..0 # SKIP Skipping 'My::Test::Class': no test methods found
ok 1 # skip Skipping 'My::Test::Class': no test methods found
#
# Running tests for TestsFor::Person
#
    1..1
    # TestsFor::Person-&gt;test_constructor()
        ok 1 - We should be able to create a Person object
        ok 2 - ... and the object it returns isa Person
        ok 3 - ... and it should return the correct full name
        1..3
    ok 1 - test_constructor
ok 2 - TestsFor::Person
# Test classes:    2
# Test methods:    1
# Total tests run: 3
ok
All tests successful.
Files=1, Tests=2,  3 wallclock secs ( 0.03 usr  0.01 sys +  0.46 cusr  0.05 csys =  0.55 CPU)
Result: PASS
</code></pre>

<p>So everything looks good so far, but that contains the very common anti-pattern I see in test class tests. Do you see the problem? It's very subtle and we'll see it in a moment.</p>

<p>Let's imagine that we have an employee subclass of person:</p>

<pre><code>package Person::Employee;

use Moose;
extends 'Person';

has 'employee_number' =&gt; (
    is       =&gt; 'ro',
    isa      =&gt; 'Str',
    required =&gt; 1,
);

1;
</code></pre>

<p>A stub test for that could look like this:</p>

<pre><code>package TestsFor::Person::Employee;

use Test::Class::Moose extends =&gt; 'TestsFor::Person';
use Person::Employee;

1;
</code></pre>

<p>That will actually run tests because we inherit our <code>test_constructor</code> method from <code>TestsFor::Person</code>. Let's see what that looks like:</p>

<pre><code>1..3
#
# Running tests for My::Test::Class
#
    1..0 # SKIP Skipping 'My::Test::Class': no test methods found
ok 1 # skip Skipping 'My::Test::Class': no test methods found
#
# Running tests for TestsFor::Person
#
    1..1
    # TestsFor::Person-&gt;test_constructor()
        ok 1 - We should have a test person
        ok 2 - ... and the object it returns isa Person
        ok 3 - ... and it should return the correct full name
        1..3
    ok 1 - test_constructor
ok 2 - TestsFor::Person
#
# Running tests for TestsFor::Person::Employee
#
    1..1
    # TestsFor::Person::Employee-&gt;test_constructor()
        ok 1 - We should have a test person
        ok 2 - ... and the object it returns isa Person
        ok 3 - ... and it should return the correct full name
        1..3
    ok 1 - test_constructor
ok 3 - TestsFor::Person::Employee
# Test classes:    3
# Test methods:    2
# Total tests run: 6
</code></pre>

<p>Notice how we've inherited the <code>test_constructor</code> test, but it's just a useless double test. We're not actually testing our new class because we hardcoded the <code>Person</code> class name in <code>TestsFor::Person</code>. In fact, I remember one time many years ago when my tests were passing but the package didn't even compile! It turns out that in my test class, I had forgotten to <code>use</code> the package I was testing and my inherited tests had the parent class name hard-coded. I decided to never make that mistake again. Now I have my test classes (usually) automatically load the classes they are going to test. </p>

<p>Annoyingly, automatically using the classes I test is the code I keep rewriting, so now I have created  <a href="https://metacpan.org/module/Test::Class::Moose::Role::AutoUse">Test::Class::Moose::Role::AutoUse</a>. This role strips the leading segment of the test class package name (<code>TestsFor::</code>, for our examples) and will <code>use</code> the resulting class name and make it available via the <code>class_name()</code> attribute.</p>

<p>Change the base class to look like this:</p>

<pre><code>package My::Test::Class;

use Test::Class::Moose;
with 'Test::Class::Moose::Role::AutoUse';

INIT {
    Test::Class::Moose-&gt;new(
        show_timing =&gt; 0,
        randomize   =&gt; 0,
        statistics  =&gt; 1,
    )-&gt;runtests;
}

1;
</code></pre>

<p>And the <code>TestsFor::Person</code> class now looks like this:</p>

<pre><code>package TestsFor::Person;
use Test::Class::Moose parent =&gt; 'My::Test::Class';

sub test_constructor {
    my $test = shift;

    my $class = $test-&gt;class_name;
    ok my $person = $class-&gt;new(
        first_name =&gt; 'Bob',
        last_name  =&gt; 'Dobbs',
      ),
      'We should have a test person';

    isa_ok $person, $class, '... and the object it returns';
    is $person-&gt;full_name, 'Bob Dobbs',
      '... and it should return the correct full name';
}

1;
</code></pre>

<p>Note that we no longer need to <code>use Person</code> and we no longer hard-code the class name.</p>

<p>The <code>TestsFor::Person</code> class tests pass, but <code>TestsFor::Person::Employee</code> now die a horrible death, telling us that that <code>employee_number</code> argument is required for the constructor., even though we've not had to change the code for that class.</p>

<p>In other words, you can no longer forget to <code>use</code> the class under test and, if you don't hard-code the class name, your test inheritance works properly. (Note that I don't often his this bug any more because I avoid inheritance, but I still like that I can automatically use the packages I am testing).</p>

<p>Rather than leave you hanging, here's one way of fixing this:</p>

<pre><code>package TestsFor::Person;
use Test::Class::Moose parent =&gt; 'My::Test::Class';

BEGIN { has 'test_person' =&gt; ( is =&gt; 'rw', isa =&gt; 'Person' ); }

sub extra_constructor_args {}

sub test_setup {
    my $test = shift;
    $test-&gt;test_person( $test-&gt;class_name-&gt;new({
        first_name =&gt; 'Bob',
        last_name  =&gt; 'Dobbs',
        $test-&gt;extra_constructor_args,
    }));
}

sub test_constructor {
    my $test = shift;

    ok my $person = $test-&gt;test_person, 'We should have a test person';

    isa_ok $person, $test-&gt;class_name, '... and the object it returns';
    is $person-&gt;full_name, 'Bob Dobbs',
      '... and it should return the correct full name';
}

1;
</code></pre>

<p>A few notes about that. First, the <code>test_person</code> attribute is, well, an attribute. Thus, <code>Test::Class::Moose</code> knows that it is not a test method, even though it begins with <code>test_</code> (all methods beginning with <code>test_</code> are automatically test methods). </p>

<p>Second, it's wrapped in a <code>BEGIN</code> block due to <a href="http://blogs.perl.org/users/ovid/2010/02/spot-the-testclass-bug.html">a subtle bug that crops a few times</a>. In this case, if Moose attributes (and as you'll see later, method modifiers) were built into Perl and fired at compile time, this bug would go away.</p>

<p>Finally, the <code>test_setup</code> method is a <a href="https://metacpan.org/module/Test::Class::Moose#TEST-CONTROL-METHODS">test control method</a> which is called before every test method. It ensures that you always have a fresh sample instance of the object you're testing.</p>

<p>Then our subclass looks like this:</p>

<pre><code>package TestsFor::Person::Employee;
use Test::Class::Moose extends =&gt; 'TestsFor::Person';

sub extra_constructor_args {
    return ( employee_number =&gt; 666 );
}

BEGIN {
    after 'test_constructor' =&gt; sub {
        my $test = shift;
        is $test-&gt;test_person-&gt;employee_number, 666,
          '... and we should get the correct employee number';
    };
}

1;
</code></pre>

<p>We have to wrap our method modifier in a <code>BEGIN</code> block due to the bug mentioned earlier. Aside from that, though, you'll note that we <em>extend</em> the parent constructor behavior to only test the new behavior. That helps us avoid duplicated test code. </p>

<p>And the test output:</p>

<pre><code>1..3
#
# Running tests for My::Test::Class
#
    1..0 # SKIP Skipping 'My::Test::Class': no test methods found
ok 1 # skip Skipping 'My::Test::Class': no test methods found
#
# Running tests for TestsFor::Person
#
    1..1
    # TestsFor::Person-&gt;test_constructor()
        ok 1 - We should have a test person
        ok 2 - ... and the object it returns isa Person
        ok 3 - ... and it should return the correct full name
        1..3
    ok 1 - test_constructor
ok 2 - TestsFor::Person
#
# Running tests for TestsFor::Person::Employee
#
    1..1
    # TestsFor::Person::Employee-&gt;test_constructor()
        ok 1 - We should have a test person
        ok 2 - ... and the object it returns isa Person::Employee
        ok 3 - ... and it should return the correct full name
        ok 4 - ... and we should get the correct employee number
        1..4
    ok 1 - test_constructor
ok 3 - TestsFor::Person::Employee
# Test classes:    3
# Test methods:    2
# Total tests run: 7
</code></pre>

<p>Not everyone likes <code>Test::Class</code> and not everyone likes <code>Moose</code>, but if you like both and you want to harness the power of both, it's all there for you. I'd like to find a cleaner way around the <code>BEGIN</code> block issue, but this is a decent start.</p>

<p>Also, if you don't like how the class names are determined with <code>Test::Class::Moose::Role::AutoUse</code>, you can override the <code>get_class_name_to_use</code> method.</p>
]]>
    </content>
</entry>

<entry>
    <title>Discoverable tests and creating testing standards</title>
    <link rel="alternate" type="text/html" href="http://blogs.perl.org/users/ovid/2013/03/discoverable-tests-and-creating-testing-standards.html" />
    <id>tag:blogs.perl.org,2013:/users/ovid//11.4435</id>

    <published>2013-03-15T10:57:03Z</published>
    <updated>2013-03-15T12:12:04Z</updated>

    <summary>I like writing code. I like writing tests. I don&apos;t like: Trying to figure out where the tests are Writing boilerplate Finding yet another package without tests That last one is particularly vexing when you discover that your code is...</summary>
    <author>
        <name>Ovid</name>
        <uri>http://www.overseas-exile.com/</uri>
    </author>
    
    <category term="perl" label="perl" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="testing" label="testing" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="tests" label="tests" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en" xml:base="http://blogs.perl.org/users/ovid/">
        <![CDATA[<p>I like writing code. I like writing tests. I don't like:</p>

<ul>
<li>Trying to figure out where the tests are</li>
<li>Writing boilerplate</li>
<li>Finding yet another package without tests</li>
</ul>

<p>That last one is particularly vexing when you discover that your code is failing because <em>another</em> package doesn't load, but it doesn't have tests. So I fixed that.</p>

<p>Some of what follows is a repeat of things written in previous posts, but it's important enough that it bears repeating.</p>
]]>
        <![CDATA[<p>A couple of months ago I suggested we create "discoverable" tests at work. In short, many of us face the problem of trying to figure out where the tests are in a new project. Worst case is this:</p>

<pre><code>$ ls t/*t | wc -l
312
</code></pre>

<p>And you're sitting there weeping because the nice, orderly code in your <code>lib/</code> directory is tested by a pile 'o junk. Other projects have subdirectories, but those subdirectories often group things by behavior, not package; your tests for <code>lib/Foo/Bar/Baz.pm</code> wind up in <code>t/common/exceptions/</code>, <code>t/common/standards/</code>, <code>t/database/</code>, <code>t/miscellaneous/crap/tests/</code>. Even if you memorize all of those subdirectories, you find yourself adding code that can, arguably, be in multiple subdirectories.</p>

<p>My recommendation was that our modules have <em>one</em> corresponding .t file. The agreement reached was that a module like <code>lib/Foo/Bar.pm</code> would go into <code>t/Foo/Bar.t</code>. I also have the following in my <code>.vimrc</code>:</p>

<pre><code>noremap ,gg :call GotoCorresponding(expand("%"))&lt;cr&gt;                                                                                     

function! GotoCorresponding(module)                                                                                                       
    let file = system("get_corresponding ".a:module)
    if !empty(file)
        let ignore = system("perl /home/cpoe/bin/make_test_stub ".a:module." ".file)
        execute "edit " . file
    else
        echoerr("Cannot find corresponding file for: ".a:module)
    endif
endfunction
</code></pre>

<p>The <code>get_corresponding</code> code merely returns  <code>lib/Foo/Bar.pm</code> for <code>t/Foo/Bar.t</code> (and vice versa). It's trivial to write. However, the <code>make_test_stub</code> is what I added today. It's a hack (as many good experiments are!), but it does the following:</p>

<ul>
<li>Exit if we're not about to enter a .t test.</li>
<li>Exit if the .t test exists</li>
<li>Write a subtest for every public function</li>
</ul>

<p>It looks like this:</p>

<pre><code>use strict;
use warnings;
use autodie ':all';
use Class::Inspector;
use Sub::Information;

my ( $package_file, $test_file ) = @ARGV;

my $package = $package_file;
$package =~ s{\.pm$}{} or exit;
$package =~ s{^lib/}{};
$package =~ s{/}{::}g;

exit if -e $test_file;

eval "use $package";
die $@ if $@;

open my $fh, '&gt;', $test_file;
print $fh &lt;&lt;"END";
use Test::Most;
use $package;

END

my $functions = Class::Inspector-&gt;function_refs($package);

my @functions;
foreach my $function (@$functions) {
    my $info = inspect($function);
    my $name = $info-&gt;name;
    next if $name =~ /^_/ or $name =~ /^[[:upper:]_]+$/;
    next if $info-&gt;package ne $package;
    push @functions =&gt; $name;
}

foreach my $function (@functions) {
    print $fh &lt;&lt;"END";
subtest "Verify $function" =&gt; sub {
    can_ok '$package', '$function';
};

END
}

print $fh "done_testing;\n";
</code></pre>

<p>So now, if I edit a file named <code>lib/Weborama/Collect/Component/Publisher.pm</code> and it has no tests, I hit <code>,gg</code> in vim and get this:</p>

<pre><code>use Test::Most;     
use Weborama::Collect::Component::Publisher;

subtest "Verify code" =&gt; sub {
    can_ok 'Weborama::Collect::Component::Publisher', 'code';
};

subtest "Verify halt" =&gt; sub {
    can_ok 'Weborama::Collect::Component::Publisher', 'halt';
};

subtest "Verify has_landing_url" =&gt; sub {
    can_ok 'Weborama::Collect::Component::Publisher', 'has_landing_url';
};

subtest "Verify headers" =&gt; sub {
    can_ok 'Weborama::Collect::Component::Publisher', 'headers';
};

subtest "Verify landing_url" =&gt; sub {
    can_ok 'Weborama::Collect::Component::Publisher', 'landing_url';
};

subtest "Verify new" =&gt; sub {
    can_ok 'Weborama::Collect::Component::Publisher', 'new';
};

subtest "Verify response" =&gt; sub {
    can_ok 'Weborama::Collect::Component::Publisher', 'response';
};

done_testing;
</code></pre>

<p>This has a few benefits:</p>

<ul>
<li>You start out with working code rather than an empty test file.</li>
<li>Even for modules that have no tests, you'll at least know that you can "use" the module.</li>
<li>Even if you don't update the stub test, you'll get a test failure if someone removes part of the public API.</li>
<li>It's harder to forget to test a particular public function.</li>
<li>Continuing to evolve standards for testing can make our test suites easier to manage. </li>
</ul>

<p>So I used this to quickly generate some stub tests for one of our projects and a few minutes later I had these <em>extra</em> tests in the test suite (I thought it prudent to obscure these test names):</p>

<pre><code>$ git st --porcelain|grep ^A|cut -d' ' -f3|xargs prove -l
t/xxxxxxxx/xxxxxxx/xxxxxxxxx/xxxxxxxxx.t.................... ok
t/xxxxxxxx/xxxxxxx/xxxxxxxxx/xxxxxxxxx/xxxx/xxxxxxxx.t...... ok
t/xxxxxxxx/xxxxxxx/xxxxxxxxx/xxxxxxxxx/xxxx/xxxxxxxxxxxx.t.. ok
t/xxxxxxxx/xxxxxxx/xxxxxxxxx/xxxx.t......................... ok
t/xxxxxxxx/xxxxxxx/xxxxxxxxxxxxxx.t......................... ok
t/xxxxxxxx/xxxxxxx/xxxxxxxxxxxxxx/xxxx.t.................... ok
t/xxxxxxxx/xxxxxxx/xxxxxxxxxxxxxx/xxxx/xxxxxxxxxx.t......... ok
t/xxxxxxxx/xxxxxxx/xxxxxxxxxxxxxx/xxxx/xxxxxxxxxxxxxx.t..... ok
t/xxxxxxxx/xxxxxxx/xxxxx/xxxxxxx/xxxxxxxxx.t................ ok
t/xxxxxxxx/xxxxxxx/xxxxx/xxxxxxx/xxxxxxxxx/xxxxxx.t......... ok
t/xxxxxxxx/xxxxxxx/xxxxx/xxxxxxx/xxxxxxxxx/xxxxxxxxxx.t..... ok
t/xxxxxxxx/xxxxxxx/xxxxx/xxxxxxx/xxxxxxxxx/xxxxxxxxxxx.t.... ok
t/xxxxxxxx/xxxxxxx/xxxxx/xxxxxxx/xxxxxxxxx/xxxxxxxx.t....... ok
t/xxxxxxxx/xxxxxxx/xxxxx/xxxxxxx/xxxx/xxxxxxxx.t............ ok
t/xxxxxxxx/xxxxxxx/xxxxx/xxxxxxxxx.t........................ ok
t/xxxxxxxx/xxxxxxx/xxxxx/xxxx.t............................. ok
All tests successful.
Files=16, Tests=53,  7 wallclock secs ( 0.06 usr  0.01 sys +  6.48 cusr  0.28 csys =  6.83 CPU)
Result: PASS
</code></pre>

<p>Naturally, not all tests can be shoe-horned into this one-size fits all methodology, but shortly after I recommended this at the BBC, devs noticed it was much easier to work with the test suite. At my current position, I'm finding that other projects have adopted this pattern and it makes switching between repositories and getting up to speed much easier.</p>

<p>This idea is just an experiment, but I'd love to hear feedback and suggestions.</p>

<p>If you liked this post, don't forget to check out my <a href="http://www.amazon.com/Beginning-Perl-Curtis-Poe/dp/1118013840/">Beginning Perl</a> book.</p>
]]>
    </content>
</entry>

<entry>
    <title>A follow up on three-value logic in Perl</title>
    <link rel="alternate" type="text/html" href="http://blogs.perl.org/users/ovid/2013/02/a-follow-up-on-three-value-logic-in-perl.html" />
    <id>tag:blogs.perl.org,2013:/users/ovid//11.4360</id>

    <published>2013-02-20T21:30:11Z</published>
    <updated>2013-02-20T22:19:04Z</updated>

    <summary>So far the initial response to my three-value logic in Perl post has been great. Due to that response, on Reddit, Perlmonks, here and my RT queue has led to: Made sorting a bit more useful Contemplating removing stringification Plenty...</summary>
    <author>
        <name>Ovid</name>
        <uri>http://www.overseas-exile.com/</uri>
    </author>
    
    <category term="perl" label="perl" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en" xml:base="http://blogs.perl.org/users/ovid/">
        <![CDATA[<p>So far the initial response to my <a href="http://blogs.perl.org/users/ovid/2013/02/three-value-logic-in-perl.html">three-value logic in Perl</a> post has been great. Due to that response, on Reddit, Perlmonks, here and my RT queue has led to:</p>

<ul>
<li>Made sorting a bit more useful</li>
<li>Contemplating removing stringification</li>
<li>Plenty of strengthening of the documentation (including making it explicitly clear that the <code>unknown</code> logic is akin to SQL's <code>NULL</code>)</li>
</ul>

<p>And then there's been some interesting rebuttals.</p>
]]>
        <![CDATA[<p>This is the snippet that I used to show that <code>undef</code> is broken while <code>unknown</code> offers a semantically correct guarantee:</p>

<pre><code>foreach my $employee (@employees) {
    if ( $employee-&gt;salary &lt; $threshold ) {
        increase_salary( $employee, 3_000 );
    }
}
</code></pre>

<p>One person seemed to think my example was wrong and offered what they referred to as a "sane" version:</p>

<pre><code>foreach my $employee (@employees) {
    if ($employee-&gt;is_salaried) {
        if ($employee-&gt;salary and $employee-&gt;salary &lt; $threshold) {
            increase_salary($employee,3000);
        }
    }
}
</code></pre>

<p>See the problem there? The <code>is_salaried</code> predicate determines if the person has a salary and the <code>$employee-&gt;salary</code> test determines if they have a salary set. This again shows the fragility of definedness because the dev forgot to check for it in the second if statement. It seems like it would be OK, but when you think about it, it's obvious that an undefined salary would be wrong, but what about a zero salary? That's less clear and thus, the above code is ambiguous (the problem is more stark if you're talking about prices and you're wondering about the difference between an item without a price and an item which is obviously free).</p>

<p>Another person posted this as a counter-example to my code:</p>

<pre><code>if ( $salary &lt; $threshold ) {
    increase_salary( $employee, 3_000);
}
else {
    decrease_salary( $employee, 3_000);
}
</code></pre>

<p>If <code>$salary</code> is undef, we take the first branch, but if it's <code>unknown</code>, we take the second branch. Ah ha! Gotcha! That's a bug!</p>

<p>Except that there's a very huge difference between the two. If you have an <code>undef</code> value, you probably call something like this:</p>

<pre><code>$employee-&gt;salary( $employee-&gt;salary + $difference );
</code></pre>

<p>What happens if the salary is undefined? When you try to manipulate an undefined value, it coerces into a zero, an empty string or a false value. For the example above, we would be adding <code>$difference</code> to zero and probably corrupting our data. In fact, if this was the code:</p>

<pre><code>$salary += $difference;
</code></pre>

<p>You wouldn't even get a warning about the potential data corruption and that's documented behavior! Surprise!</p>

<p>What happens if salary is <code>unknown</code>? You'd probably be ultimately calling something like this:</p>

<pre><code>$employee-&gt;salary( $employee-&gt;salary + $difference );
</code></pre>

<p>Except, as documented, that will <code>confess()</code>. You get a useful error message and a stack trace. This is because <code>unknown</code> values, unlike <code>undef</code> values, are specifically designed for comparison, not manipulation. If you forget to check if a value is <code>unknown</code>, it will <code>confess()</code> rather than allowing you to corrupt the data.</p>

<p>The only argument I heard which has some merit was: what if you take a bad branch? With an <code>unknown</code> value, you might silently take a different branch in your code and that branch may do something undesirable that <em>doesn't</em> impact the <code>unknown</code> value. I have to admit that this is a problem, but I counter that this is a problem even if you use <code>undef</code> values. The difference is that with an <code>undef</code> value, you can enable fatal warnings. Perhaps I should look at doing that for <code>unknown</code>? I'm unsure.</p>

<p>One thing I did that I may regret is that I overloaded stringification to print <code>[unknown]</code>. I now think that may be a mistake (imagine embedding it in JSON). I think I should remove that and only allow boolean comparisons.</p>

<p>Three-value logic, like any logic, is not perfect, but I do think it maps better to the real world and solves more problems than it causes, but a few replies of various forums is hardly a compelling case. So far this has been an interesting experiment.</p>

<p>Go to your favorite projects and see about replacing <code>undef</code> with <code>unknown</code> and see what happens. It might be interesting. As always, <a href="https://github.com/Ovid/unknown">you can download the latest version on github</a>.</p>

<p>It's also been pointed out that <code>salary()</code> should always be defined and that <code>increase_salary()</code> should also check for sanity. The latter is definitely correct, but <code>unknown</code> offers a useful fallback if devs forget. The former (salary is always defined) is desirable, but we can't always guarantee that we have this information because maybe:</p>

<ul>
<li>It's not applicable (volunteers don't have salaries)</li>
<li>It's not known (new employee whose salary is not yet implemented)</li>
<li>It's not available (the 'salary service' is down)</li>
<li>It's restricted (you don't have permissions)</li>
<li>It was fetched via an outer join (ooh! A common source of undef values!)</li>
<li>Something else I haven't thought of</li>
</ul>

<p>Do you really want to kill that six hour batch job after five hours because you're missing one salary? The smaller the system the easier it is to handle cases like that, but as you deal with extremely large-scale systems, it's often better to make them more intelligently handle the cases where you're missing data. That way, your code doesn't die and you can come back later and correct the missing data (if that's appropriate). Don't automatically assume that your "data must always be defined" belief is correct. Using words like "all" or "never" tends to be a code smell in reasoning.</p>
]]>
    </content>
</entry>

</feed>
