Content-Security-Policy: default-src 'none'
Content-Type: text/plain; charset=UTF-8
Content-Length: 12715
Content-Disposition: inline; filename="common.pm"
Last-Modified: Thu, 14 May 2026 20:36:13 GMT
Expires: Sun, 11 May 2036 20:36:13 GMT
ETag: "3eb223cd5b295abd5a5ee0816d057efeb9ce28bc"

package common; # $Id$

use MDK::Common;
use diagnostics;
use strict;
BEGIN { eval { require Locale::gettext } } #- allow common.pm to be used in drakxtools-backend without perl-Locale-gettext

use log;
use run_program;

use Exporter;
our @ISA = qw(Exporter);
our @EXPORT = qw($SECTORSIZE N P N_ check_for_xserver files_exist formatTime MB formatXiB get_parent_uid is_running makedev mandrake_release mandrake_release_info removeXiBSuffix require_root_capability setVirtual set_alternative set_l10n_sort set_permissions to_utf8  translate unmakedev);

# perl_checker: RE-EXPORT-ALL
push @EXPORT, @MDK::Common::EXPORT;


$::prefix ||= ""; # no warning

#-#####################################################################################
#- Globals
#-#####################################################################################
our $SECTORSIZE  = 512;

#-#####################################################################################
#- Functions
#-#####################################################################################

sub P {
    my ($s_singular, $s_plural, $nb, @para) = @_; 
    sprintf(translate($s_singular, $s_plural, $nb), @para);
}

sub N {
    my ($s, @para) = @_; 
    sprintf(translate($s), @para);
}
sub N_ { $_[0] }


sub makedev { ($_[0] << 8) | $_[1] }
sub unmakedev { $_[0] >> 8, $_[0] & 0xff }

sub translate_real {
    my ($s, $o_plural, $o_nb) = @_;
    $s or return '';
    my $s2;
    foreach (@::textdomains, 'libDrakX') {
     if ($o_plural) {
         $s2 = Locale::gettext::dngettext($_, $s, $o_plural, $o_nb);
     } else {
         $s2 = Locale::gettext::dgettext($_, $s);
     }
	# when utf8 pragma is in use, Locale::gettext() returns an utf8 string not tagged as such:
	c::set_tagged_utf8($s2) if !utf8::is_utf8($s2) && utf8::is_utf8($s);
	return $s2 if $s ne $s2 && $s2 ne $o_plural;
    }
    # didn't lookup anything or locale is "C":
    $s2;
}

sub remove_translate_context {
    my ($s) = @_;
    #- translation with context, kde-like 
    $s =~ s/^_:.*\n//;
    $s;
}

sub translate {
    my $s = translate_real(@_);
    $::one_message_has_been_translated ||= join(':', (caller(1))[1,2]); #- see mygtk2.pm
    remove_translate_context($s);
}

sub from_utf8 {
    my ($s) = @_;
    Locale::gettext::iconv($s, "utf-8", undef); #- undef = locale charmap = nl_langinfo(CODESET)
}
sub to_utf8 { 
    my ($s) = @_;
    my $str = Locale::gettext::iconv($s, undef, "utf-8"); #- undef = locale charmap = nl_langinfo(CODESET)
    c::set_tagged_utf8($str);
    $str;
}

#- This is needed because text printed by Gtk2 will always be encoded
#- in UTF-8;
#- we first check if LC_ALL is defined, because if it is, changing
#- only LC_COLLATE will have no effect.
sub set_l10n_sort() {
    my $collation_locale = $ENV{LC_ALL};
    if (!$collation_locale) {
        $collation_locale = c::setlocale(c::LC_COLLATE());
        $collation_locale =~ /UTF-8/ or c::setlocale(c::LC_COLLATE(), "$collation_locale.UTF-8");
    }
}


sub setVirtual {
    my ($vt_number) = @_;
    my $vt = '';
    sysopen(my $C, "/dev/console", 2) or die "failed to open /dev/console: $!";
    ioctl($C, c::VT_GETSTATE(), $vt) &&
      ioctl($C, c::VT_ACTIVATE(), $vt_number) &&
	ioctl($C, c::VT_WAITACTIVE(), $vt_number) or die "setVirtual failed";
    unpack "S", $vt;
}

sub nonblock {
    my ($F) = @_;
    fcntl($F, c::F_SETFL(), fcntl($F, c::F_GETFL(), 0) | c::O_NONBLOCK()) or die "can not fcntl F_SETFL: $!";
}

#- return a size in sector
#- ie MB(1) is 2048 sectors, which is 1MB
sub MB {
    my ($nb_MB) = @_;
    $nb_MB * 2048;
}

sub removeXiBSuffix {
    local $_ = shift;

    /(\d+)\s*kB?$/i and return $1 * 1024;
    /(\d+)\s*MB?$/i and return $1 * 1024 * 1024;
    /(\d+)\s*GB?$/i and return $1 * 1024 * 1024 * 1024;
    /(\d+)\s*TB?$/i and return $1 * 1024 * 1024 * 1024 * 1024;
    $_;
}
sub formatXiB {
    my ($newnb, $o_newbase) = @_;
    my $newbase = $o_newbase || 1;
    my $sign = $newnb < 0 ? -1 : 1;
    $newnb = abs(int($newnb));
    my ($nb, $base);
    my $decr = sub { 
	($nb, $base) = ($newnb, $newbase);
	$base >= 1024 ? ($newbase = $base / 1024) : ($newnb = $nb / 1024);
    };
    my $suffix;
    foreach (N("B"), N("KB"), N("MB"), N("GB"), N("TB")) {
	$decr->(); 
	if ($newnb < 1 && $newnb * $newbase < 1) {
	    $suffix = $_;
	    last;
	}
    }
    my $v = $nb * $base;
    my $s = $v < 10 && int(10 * $v - 10 * int($v));
    int($v * $sign) . ($s ? "." . abs($s) : '') . ($suffix || N("TB"));
}

sub formatTime {
    my ($s, $m, $h) = gmtime($_[0]);
    if ($h) {
	sprintf "%02d:%02d", $h, $m;
    } elsif ($m > 1) {
	N("%d minutes", $m);
    } elsif ($m == 1) {
	N("1 minute");
    } else {
	N("%d seconds", $s);
    }
}

sub expand_symlinks_with_absolute_symlinks_in_prefix {
    my ($prefix, $link) = @_;

    my ($first, @l) = split '/', $link;
    $first eq '' or die "expand_symlinks: $link is relative\n";
    my ($f, $l);
    foreach (@l) {
	$f .= "/$_";
	while ($l = readlink "$prefix$f") {
	    $f = $l =~ m!^/! ? $l : MDK::Common::File::concat_symlink($f, "../$l");
	}
    }
    "$prefix$f";
}

sub expand_symlinks_but_simple {
    my ($f) = @_;
    my $link = readlink($f);
    my $f2 = expand_symlinks($f);
    if ($link && $link !~ m|/|) {
	# put back the last simple symlink
	$f2 =~ s|\Q$link\E$|basename($f)|e;
    }
    $f2;
}

sub sync { &MDK::Common::System::sync }

BEGIN { undef *formatError }
sub formatError {
    my ($err) = @_;
    ref($err) eq 'SCALAR' and $err = $$err;
    log::l("error: $err");
    &MDK::Common::String::formatError($err);
}

sub group_by(&@) {
    my $f = shift;
    @_ or return;
    my $e = shift;
    my @l = my $last_l = [$e];
    foreach (@_) {
	if ($f->($e, $_)) {
	    push @$last_l, $_;
	} else {
	    push @l, $last_l = [$_];
	    $e = $_;
	}
    }
    @l;
}

# Group the list by n. Returns a reference of lists of length n
sub group_n_lm {
    my $n = shift;
    my @l;
    push @l, [ splice(@_, 0, $n) ] while @_;
    @l;
}

sub join_lines {
    my @l;
    my $s;
    foreach (@_) {
	if (/^\s/) {
	    $s .= $_;
	} else {
	    push @l, $s if $s;
	    $s = $_;
	}
    }
    @l, if_($s, $s);
}


sub read_alternative {
    my ($name) = @_;
    my $alt = readlink("$::prefix/etc/alternatives/$name");
    $alt && $::prefix . $alt;
}

sub set_alternative {
    my ($command, $executable) = @_;

    #- check the existance of $executable as an alternative for $command
    #- (is this needed???)
    run_program::rooted_get_stdout($::prefix, 'update-alternatives', '--display', $command) =~ /^\Q$executable /m or return;

    #- this does not handle relative symlink, but neither does update-alternatives ;p
    symlinkf $executable, "$::prefix/etc/alternatives/$command";
}

sub files_exist { and_(map { -f "$::prefix$_" } @_) }

sub open_file {
    my ($file) = @_;
    my $F;
    open($F, $file) ? $F : do { log::l("Can not open $file: $!"); undef };
}


sub secured_file {
    my ($f) = @_;
    c::is_secure_file($f) or die "can not ensure a safe $f";
    $f;
}

sub unwind_protect {
    my ($to_do, $cleanup) = @_;
    my @l = eval { $to_do->() };
    my $err = $@;
    $cleanup->();
    $err and die $err;
    wantarray() ? @l : $l[0];
}

sub with_private_tmp_file {
    my ($file, $content, $f) = @_;

    my $prev_umask = umask 077;

    unwind_protect(sub { 
	MDK::Common::File::secured_output($file, $content);
	$f->($file);
    }, sub {
	umask $prev_umask;
	unlink $file;
    });
}

sub chown_ {
    my ($b_recursive, $name, $group, @files) = @_;

    my ($uid, $gid) = (getpwnam($name) || $name, getgrnam($group) || $group);
      
    require POSIX;
    my $chown; $chown = sub {
	foreach (@_) {
	    POSIX::lchown($uid, $gid, $_) or die "chown of file $_ failed: $!\n";
	    ! -l $_ && -d $_ && $b_recursive and &$chown(glob_($_));
	}
    };
    $chown->(@files);
}


sub set_permissions {
    my ($file, $perms, $o_owner, $o_group) = @_;
    # We only need to set the permissions during installation to be able to
    # print test pages. After installation udev does the business automatically.
    return 1 unless $::isInstall;
    if ($o_owner || $o_group) {
	$o_owner ||= (lstat($file))[4];
	$o_group ||= (lstat($file))[5];
	chown_(0, $o_owner, $o_group, $file);
    }
    chmod(oct($perms), $file) or die "chmod of file $file failed: $!\n";
}

sub is_running {
    my ($name, $o_user) = @_;
    my $user = $o_user || $ENV{USER};
    foreach (`ps -o '%P %p %c' -u $user`) {
	my ($ppid, $pid, $n) = /^\s*(\d+)\s+(\d+)\s+(.*)/;
	return $pid if $ppid != 1 && $pid != $$ && $n eq $name;
    }
}

sub parse_release_file {
    my ($prefix, $f, $part) = @_;
    chomp(my $s = cat_("$prefix$f"));
    my $version = $s =~ s/\s+release\s+(\S+)// && $1;
    my $arch = $s =~ s/\s+for\s+(\S+)// && $1;
    log::l("find_root_parts found $part->{device}: $s for $arch" . ($f !~ m!/etc/! ? " in special release file $f" : ''));
    { release => $s, version => $version, 
      release_file => $f, part => $part, arch => $arch };
}

sub release_file {
    my ($o_dir) = @_;
    my @names = ('mandrakelinux-release', 'mandrake-release', 'conectiva-release', 'release', 'redhat-release', 'fedora-release', 'SuSE-release');
    find { -r "$o_dir$_" } (
	(map { "/root/drakx/$_.upgrading" } @names), 
	(map { "/etc/$_" } @names),
    );
}

sub mandrake_release_info() {
    parse_LDAP_namespace_structure(cat_('/etc/product.id'));
}

sub parse_LDAP_namespace_structure {
    my ($s) = @_;
    my %h = map { if_(/(.*?)=(.*)/, $1 => $2) } split(',', $s);
    \%h;
}

sub mandrake_release {
    my ($o_dir) = @_;
    my $f = release_file($o_dir);
    $f && chomp_(cat_("$o_dir$f"));
}

sub get_parent_uid() {
    cat_('/proc/' . getppid() . '/status') =~ /Uid:\s*(\d+)/ ? $1 : undef;
}

sub wrap_command_for_root {
    my ($name, @args) = @_;
    ([ 'consolehelper', $name ], @args);
}

sub require_root_capability() {
    return if $::testing || !$>; # we're already root

    my ($command, @args) = wrap_command_for_root($0, @ARGV);
    exec { $command->[0] } $command->[1], @args or die N("command %s missing", $command->[0]);

    # still not root ?
    die "you must be root to run this program" if $>;
}

sub check_for_xserver() {
    if (!defined $::xtest) {
	$::xtest = 0;         
	eval { 
	    require xf86misc::main; 
	    $::xtest = xf86misc::main::Xtest($ENV{DISPLAY});
	} if $ENV{DISPLAY};
    }
    return $::xtest;
}

#- special unpack
#- - returning an array refs for each element like "s10"
#- - handling things like s10* at the end of the format
sub unpack_with_refs {
    my ($format, $s) = @_;
    my $initial_format = $format;
    my @r;
    while ($format =~ s/\s*(\w(\d*))(\*?)\s*//) {
	my ($sub_format, $nb, $many) = ($1, $2, $3);
	$many && $format and internal_error("bad * in the middle of format in $initial_format");

	my $done = $many && !length($s);
	while (!$done) {
	    my @l = unpack("$sub_format a*", $s);
	    $s = pop @l;
	    push @r, $nb ? \@l : @l;
	    $done = !$many || !length($s);
	}
    }
    @r;
}

#- used in userdrake and mdkonline
sub md5file {
    require Digest::MD5;
    my @md5 = map {
        my $sum;
	if (open(my $FILE, $_)) {
            binmode($FILE);
            $sum = Digest::MD5->new->addfile($FILE)->hexdigest;
            close($FILE);
        }
        $sum;
    } @_;
    return wantarray() ? @md5 : $md5[0];
}

sub load_modules_from_base {
    my ($base) = @_;
    $base =~ s|::|/|g;
    my $base_file = $base . ".pm";
    require $base_file;
    my ($inc_path) = substr($INC{$base_file}, 0, -length($base_file));
    my @files = map { substr($_, length($inc_path)) } glob_($inc_path . $base . '/*.pm');
    require $_ foreach @files;
    #- return the matching modules list
    map { local $_ = $_; s|/|::|g; s|\.pm$||g; $_ } @files;
}

sub get_alternatives {
    my ($name) = @_;

    my $dir = $::prefix . '/var/lib/rpm/alternatives';
    my ($state, $main_link, @l) = chomp_(cat_("$dir/$name")) or return;
    my @slaves;
    while (@l && $l[0] ne '') {
	my ($name, $link) = splice(@l, 0, 2);
	push @slaves, { name => $name, link => $link };
    }
    shift @l; #- empty line
    my @alternatives;
    while (@l && $l[0] ne '') {
	my ($file, $weight, @slave_files) = splice(@l, 0, 2 + @slaves);
	
	push @alternatives, { file => $file, weight => $weight, slave_files => \@slave_files };
    }
    { name => $name, link => $main_link, state => $state, slaves => \@slaves, alternatives => \@alternatives };
}

sub symlinkf_update_alternatives {
    my ($name, $wanted_file) = @_;
    run_program::rooted($::prefix, 'update-alternatives', '--set', $name, $wanted_file);
}

sub update_gnomekderc_no_create {
    my ($file, $category, %subst_) = @_;
    if (-e $file) {
	update_gnomekderc($file, $category, %subst_);
    }
}

1;
n295' href='#n295'>295</a>
<a id='n296' href='#n296'>296</a>
<a id='n297' href='#n297'>297</a>
<a id='n298' href='#n298'>298</a>
<a id='n299' href='#n299'>299</a>
<a id='n300' href='#n300'>300</a>
<a id='n301' href='#n301'>301</a>
<a id='n302' href='#n302'>302</a>
<a id='n303' href='#n303'>303</a>
<a id='n304' href='#n304'>304</a>
<a id='n305' href='#n305'>305</a>
<a id='n306' href='#n306'>306</a>
<a id='n307' href='#n307'>307</a>
<a id='n308' href='#n308'>308</a>
<a id='n309' href='#n309'>309</a>
<a id='n310' href='#n310'>310</a>
<a id='n311' href='#n311'>311</a>
<a id='n312' href='#n312'>312</a>
<a id='n313' href='#n313'>313</a>
<a id='n314' href='#n314'>314</a>
<a id='n315' href='#n315'>315</a>
<a id='n316' href='#n316'>316</a>
<a id='n317' href='#n317'>317</a>
<a id='n318' href='#n318'>318</a>
<a id='n319' href='#n319'>319</a>
<a id='n320' href='#n320'>320</a>
<a id='n321' href='#n321'>321</a>
<a id='n322' href='#n322'>322</a>
<a id='n323' href='#n323'>323</a>
<a id='n324' href='#n324'>324</a>
<a id='n325' href='#n325'>325</a>
<a id='n326' href='#n326'>326</a>
<a id='n327' href='#n327'>327</a>
<a id='n328' href='#n328'>328</a>
<a id='n329' href='#n329'>329</a>
<a id='n330' href='#n330'>330</a>
<a id='n331' href='#n331'>331</a>
<a id='n332' href='#n332'>332</a>
<a id='n333' href='#n333'>333</a>
<a id='n334' href='#n334'>334</a>
<a id='n335' href='#n335'>335</a>
<a id='n336' href='#n336'>336</a>
<a id='n337' href='#n337'>337</a>
<a id='n338' href='#n338'>338</a>
<a id='n339' href='#n339'>339</a>
<a id='n340' href='#n340'>340</a>
<a id='n341' href='#n341'>341</a>
<a id='n342' href='#n342'>342</a>
<a id='n343' href='#n343'>343</a>
<a id='n344' href='#n344'>344</a>
<a id='n345' href='#n345'>345</a>
<a id='n346' href='#n346'>346</a>
<a id='n347' href='#n347'>347</a>
<a id='n348' href='#n348'>348</a>
<a id='n349' href='#n349'>349</a>
<a id='n350' href='#n350'>350</a>
<a id='n351' href='#n351'>351</a>
<a id='n352' href='#n352'>352</a>
<a id='n353' href='#n353'>353</a>
<a id='n354' href='#n354'>354</a>
<a id='n355' href='#n355'>355</a>
<a id='n356' href='#n356'>356</a>
<a id='n357' href='#n357'>357</a>
<a id='n358' href='#n358'>358</a>
<a id='n359' href='#n359'>359</a>
<a id='n360' href='#n360'>360</a>
<a id='n361' href='#n361'>361</a>
<a id='n362' href='#n362'>362</a>
<a id='n363' href='#n363'>363</a>
<a id='n364' href='#n364'>364</a>
<a id='n365' href='#n365'>365</a>
<a id='n366' href='#n366'>366</a>
<a id='n367' href='#n367'>367</a>
<a id='n368' href='#n368'>368</a>
<a id='n369' href='#n369'>369</a>
<a id='n370' href='#n370'>370</a>
<a id='n371' href='#n371'>371</a>
<a id='n372' href='#n372'>372</a>
<a id='n373' href='#n373'>373</a>
<a id='n374' href='#n374'>374</a>
<a id='n375' href='#n375'>375</a>
<a id='n376' href='#n376'>376</a>
<a id='n377' href='#n377'>377</a>
<a id='n378' href='#n378'>378</a>
<a id='n379' href='#n379'>379</a>
<a id='n380' href='#n380'>380</a>
<a id='n381' href='#n381'>381</a>
<a id='n382' href='#n382'>382</a>
<a id='n383' href='#n383'>383</a>
<a id='n384' href='#n384'>384</a>
<a id='n385' href='#n385'>385</a>
<a id='n386' href='#n386'>386</a>
<a id='n387' href='#n387'>387</a>
<a id='n388' href='#n388'>388</a>
<a id='n389' href='#n389'>389</a>
<a id='n390' href='#n390'>390</a>
<a id='n391' href='#n391'>391</a>
<a id='n392' href='#n392'>392</a>
<a id='n393' href='#n393'>393</a>
<a id='n394' href='#n394'>394</a>
<a id='n395' href='#n395'>395</a>
<a id='n396' href='#n396'>396</a>
<a id='n397' href='#n397'>397</a>
<a id='n398' href='#n398'>398</a>
<a id='n399' href='#n399'>399</a>
<a id='n400' href='#n400'>400</a>
<a id='n401' href='#n401'>401</a>
<a id='n402' href='#n402'>402</a>
<a id='n403' href='#n403'>403</a>
<a id='n404' href='#n404'>404</a>
<a id='n405' href='#n405'>405</a>
<a id='n406' href='#n406'>406</a>
<a id='n407' href='#n407'>407</a>
<a id='n408' href='#n408'>408</a>
<a id='n409' href='#n409'>409</a>
<a id='n410' href='#n410'>410</a>
<a id='n411' href='#n411'>411</a>
<a id='n412' href='#n412'>412</a>
<a id='n413' href='#n413'>413</a>
<a id='n414' href='#n414'>414</a>
<a id='n415' href='#n415'>415</a>
<a id='n416' href='#n416'>416</a>
<a id='n417' href='#n417'>417</a>
<a id='n418' href='#n418'>418</a>
<a id='n419' href='#n419'>419</a>
<a id='n420' href='#n420'>420</a>
<a id='n421' href='#n421'>421</a>
<a id='n422' href='#n422'>422</a>
<a id='n423' href='#n423'>423</a>
<a id='n424' href='#n424'>424</a>
<a id='n425' href='#n425'>425</a>
<a id='n426' href='#n426'>426</a>
<a id='n427' href='#n427'>427</a>
<a id='n428' href='#n428'>428</a>
<a id='n429' href='#n429'>429</a>
<a id='n430' href='#n430'>430</a>
<a id='n431' href='#n431'>431</a>
<a id='n432' href='#n432'>432</a>
<a id='n433' href='#n433'>433</a>
<a id='n434' href='#n434'>434</a>
<a id='n435' href='#n435'>435</a>
<a id='n436' href='#n436'>436</a>
<a id='n437' href='#n437'>437</a>
<a id='n438' href='#n438'>438</a>
<a id='n439' href='#n439'>439</a>
<a id='n440' href='#n440'>440</a>
<a id='n441' href='#n441'>441</a>
<a id='n442' href='#n442'>442</a>
<a id='n443' href='#n443'>443</a>
<a id='n444' href='#n444'>444</a>
<a id='n445' href='#n445'>445</a>
<a id='n446' href='#n446'>446</a>
<a id='n447' href='#n447'>447</a>
<a id='n448' href='#n448'>448</a>
<a id='n449' href='#n449'>449</a>
<a id='n450' href='#n450'>450</a>
<a id='n451' href='#n451'>451</a>
<a id='n452' href='#n452'>452</a>
<a id='n453' href='#n453'>453</a>
<a id='n454' href='#n454'>454</a>
<a id='n455' href='#n455'>455</a>
<a id='n456' href='#n456'>456</a>
<a id='n457' href='#n457'>457</a>
<a id='n458' href='#n458'>458</a>
<a id='n459' href='#n459'>459</a>
<a id='n460' href='#n460'>460</a>
<a id='n461' href='#n461'>461</a>
<a id='n462' href='#n462'>462</a>
<a id='n463' href='#n463'>463</a>
<a id='n464' href='#n464'>464</a>
<a id='n465' href='#n465'>465</a>
<a id='n466' href='#n466'>466</a>
<a id='n467' href='#n467'>467</a>
<a id='n468' href='#n468'>468</a>
<a id='n469' href='#n469'>469</a>
<a id='n470' href='#n470'>470</a>
<a id='n471' href='#n471'>471</a>
<a id='n472' href='#n472'>472</a>
<a id='n473' href='#n473'>473</a>
<a id='n474' href='#n474'>474</a>
<a id='n475' href='#n475'>475</a>
<a id='n476' href='#n476'>476</a>
<a id='n477' href='#n477'>477</a>
<a id='n478' href='#n478'>478</a>
<a id='n479' href='#n479'>479</a>
<a id='n480' href='#n480'>480</a>
<a id='n481' href='#n481'>481</a>
<a id='n482' href='#n482'>482</a>
<a id='n483' href='#n483'>483</a>
<a id='n484' href='#n484'>484</a>
<a id='n485' href='#n485'>485</a>
<a id='n486' href='#n486'>486</a>
<a id='n487' href='#n487'>487</a>
<a id='n488' href='#n488'>488</a>
<a id='n489' href='#n489'>489</a>
<a id='n490' href='#n490'>490</a>
<a id='n491' href='#n491'>491</a>
<a id='n492' href='#n492'>492</a>
<a id='n493' href='#n493'>493</a>
<a id='n494' href='#n494'>494</a>
<a id='n495' href='#n495'>495</a>
<a id='n496' href='#n496'>496</a>
<a id='n497' href='#n497'>497</a>
<a id='n498' href='#n498'>498</a>
<a id='n499' href='#n499'>499</a>
<a id='n500' href='#n500'>500</a>
<a id='n501' href='#n501'>501</a>
<a id='n502' href='#n502'>502</a>
<a id='n503' href='#n503'>503</a>
<a id='n504' href='#n504'>504</a>
<a id='n505' href='#n505'>505</a>
<a id='n506' href='#n506'>506</a>
<a id='n507' href='#n507'>507</a>
<a id='n508' href='#n508'>508</a>
<a id='n509' href='#n509'>509</a>
<a id='n510' href='#n510'>510</a>
<a id='n511' href='#n511'>511</a>
<a id='n512' href='#n512'>512</a>
<a id='n513' href='#n513'>513</a>
<a id='n514' href='#n514'>514</a>
<a id='n515' href='#n515'>515</a>
<a id='n516' href='#n516'>516</a>
<a id='n517' href='#n517'>517</a>
<a id='n518' href='#n518'>518</a>
<a id='n519' href='#n519'>519</a>
<a id='n520' href='#n520'>520</a>
<a id='n521' href='#n521'>521</a>
<a id='n522' href='#n522'>522</a>
<a id='n523' href='#n523'>523</a>
<a id='n524' href='#n524'>524</a>
<a id='n525' href='#n525'>525</a>
<a id='n526' href='#n526'>526</a>
<a id='n527' href='#n527'>527</a>
<a id='n528' href='#n528'>528</a>
<a id='n529' href='#n529'>529</a>
<a id='n530' href='#n530'>530</a>
<a id='n531' href='#n531'>531</a>
<a id='n532' href='#n532'>532</a>
<a id='n533' href='#n533'>533</a>
<a id='n534' href='#n534'>534</a>
<a id='n535' href='#n535'>535</a>
<a id='n536' href='#n536'>536</a>
<a id='n537' href='#n537'>537</a>
<a id='n538' href='#n538'>538</a>
<a id='n539' href='#n539'>539</a>
<a id='n540' href='#n540'>540</a>
<a id='n541' href='#n541'>541</a>
<a id='n542' href='#n542'>542</a>
<a id='n543' href='#n543'>543</a>
<a id='n544' href='#n544'>544</a>
<a id='n545' href='#n545'>545</a>
<a id='n546' href='#n546'>546</a>
<a id='n547' href='#n547'>547</a>
<a id='n548' href='#n548'>548</a>
<a id='n549' href='#n549'>549</a>
<a id='n550' href='#n550'>550</a>
<a id='n551' href='#n551'>551</a>
<a id='n552' href='#n552'>552</a>
<a id='n553' href='#n553'>553</a>
<a id='n554' href='#n554'>554</a>
<a id='n555' href='#n555'>555</a>
<a id='n556' href='#n556'>556</a>
<a id='n557' href='#n557'>557</a>
<a id='n558' href='#n558'>558</a>
<a id='n559' href='#n559'>559</a>
<a id='n560' href='#n560'>560</a>
<a id='n561' href='#n561'>561</a>
<a id='n562' href='#n562'>562</a>
<a id='n563' href='#n563'>563</a>
<a id='n564' href='#n564'>564</a>
<a id='n565' href='#n565'>565</a>
<a id='n566' href='#n566'>566</a>
<a id='n567' href='#n567'>567</a>
<a id='n568' href='#n568'>568</a>
<a id='n569' href='#n569'>569</a>
<a id='n570' href='#n570'>570</a>
<a id='n571' href='#n571'>571</a>
<a id='n572' href='#n572'>572</a>
<a id='n573' href='#n573'>573</a>
<a id='n574' href='#n574'>574</a>
<a id='n575' href='#n575'>575</a>
<a id='n576' href='#n576'>576</a>
<a id='n577' href='#n577'>577</a>
<a id='n578' href='#n578'>578</a>
<a id='n579' href='#n579'>579</a>
<a id='n580' href='#n580'>580</a>
<a id='n581' href='#n581'>581</a>
<a id='n582' href='#n582'>582</a>
<a id='n583' href='#n583'>583</a>
<a id='n584' href='#n584'>584</a>
<a id='n585' href='#n585'>585</a>
<a id='n586' href='#n586'>586</a>
<a id='n587' href='#n587'>587</a>
<a id='n588' href='#n588'>588</a>
<a id='n589' href='#n589'>589</a>
<a id='n590' href='#n590'>590</a>
<a id='n591' href='#n591'>591</a>
<a id='n592' href='#n592'>592</a>
<a id='n593' href='#n593'>593</a>
<a id='n594' href='#n594'>594</a>
<a id='n595' href='#n595'>595</a>
<a id='n596' href='#n596'>596</a>
<a id='n597' href='#n597'>597</a>
<a id='n598' href='#n598'>598</a>
<a id='n599' href='#n599'>599</a>
<a id='n600' href='#n600'>600</a>
<a id='n601' href='#n601'>601</a>
<a id='n602' href='#n602'>602</a>
<a id='n603' href='#n603'>603</a>
<a id='n604' href='#n604'>604</a>
<a id='n605' href='#n605'>605</a>
<a id='n606' href='#n606'>606</a>
<a id='n607' href='#n607'>607</a>
<a id='n608' href='#n608'>608</a>
<a id='n609' href='#n609'>609</a>
<a id='n610' href='#n610'>610</a>
<a id='n611' href='#n611'>611</a>
<a id='n612' href='#n612'>612</a>
<a id='n613' href='#n613'>613</a>
<a id='n614' href='#n614'>614</a>
<a id='n615' href='#n615'>615</a>
<a id='n616' href='#n616'>616</a>
<a id='n617' href='#n617'>617</a>
<a id='n618' href='#n618'>618</a>
<a id='n619' href='#n619'>619</a>
<a id='n620' href='#n620'>620</a>
<a id='n621' href='#n621'>621</a>
<a id='n622' href='#n622'>622</a>
<a id='n623' href='#n623'>623</a>
<a id='n624' href='#n624'>624</a>
<a id='n625' href='#n625'>625</a>
<a id='n626' href='#n626'>626</a>
<a id='n627' href='#n627'>627</a>
<a id='n628' href='#n628'>628</a>
<a id='n629' href='#n629'>629</a>
<a id='n630' href='#n630'>630</a>
<a id='n631' href='#n631'>631</a>
<a id='n632' href='#n632'>632</a>
<a id='n633' href='#n633'>633</a>
<a id='n634' href='#n634'>634</a>
<a id='n635' href='#n635'>635</a>
<a id='n636' href='#n636'>636</a>
<a id='n637' href='#n637'>637</a>
<a id='n638' href='#n638'>638</a>
<a id='n639' href='#n639'>639</a>
<a id='n640' href='#n640'>640</a>
<a id='n641' href='#n641'>641</a>
<a id='n642' href='#n642'>642</a>
<a id='n643' href='#n643'>643</a>
<a id='n644' href='#n644'>644</a>
<a id='n645' href='#n645'>645</a>
<a id='n646' href='#n646'>646</a>
<a id='n647' href='#n647'>647</a>
<a id='n648' href='#n648'>648</a>
<a id='n649' href='#n649'>649</a>
<a id='n650' href='#n650'>650</a>
<a id='n651' href='#n651'>651</a>
<a id='n652' href='#n652'>652</a>
<a id='n653' href='#n653'>653</a>
<a id='n654' href='#n654'>654</a>
<a id='n655' href='#n655'>655</a>
<a id='n656' href='#n656'>656</a>
<a id='n657' href='#n657'>657</a>
<a id='n658' href='#n658'>658</a>
<a id='n659' href='#n659'>659</a>
<a id='n660' href='#n660'>660</a>
<a id='n661' href='#n661'>661</a>
<a id='n662' href='#n662'>662</a>
<a id='n663' href='#n663'>663</a>
<a id='n664' href='#n664'>664</a>
<a id='n665' href='#n665'>665</a>
<a id='n666' href='#n666'>666</a>
<a id='n667' href='#n667'>667</a>
<a id='n668' href='#n668'>668</a>
<a id='n669' href='#n669'>669</a>
<a id='n670' href='#n670'>670</a>
<a id='n671' href='#n671'>671</a>
<a id='n672' href='#n672'>672</a>
<a id='n673' href='#n673'>673</a>
<a id='n674' href='#n674'>674</a>
<a id='n675' href='#n675'>675</a>
<a id='n676' href='#n676'>676</a>
<a id='n677' href='#n677'>677</a>
<a id='n678' href='#n678'>678</a>
<a id='n679' href='#n679'>679</a>
<a id='n680' href='#n680'>680</a>
<a id='n681' href='#n681'>681</a>
<a id='n682' href='#n682'>682</a>
<a id='n683' href='#n683'>683</a>
<a id='n684' href='#n684'>684</a>
<a id='n685' href='#n685'>685</a>
<a id='n686' href='#n686'>686</a>
<a id='n687' href='#n687'>687</a>
<a id='n688' href='#n688'>688</a>
<a id='n689' href='#n689'>689</a>
<a id='n690' href='#n690'>690</a>
<a id='n691' href='#n691'>691</a>
<a id='n692' href='#n692'>692</a>
<a id='n693' href='#n693'>693</a>
<a id='n694' href='#n694'>694</a>
<a id='n695' href='#n695'>695</a>
<a id='n696' href='#n696'>696</a>
<a id='n697' href='#n697'>697</a>
<a id='n698' href='#n698'>698</a>
<a id='n699' href='#n699'>699</a>
<a id='n700' href='#n700'>700</a>
<a id='n701' href='#n701'>701</a>
<a id='n702' href='#n702'>702</a>
<a id='n703' href='#n703'>703</a>
<a id='n704' href='#n704'>704</a>
<a id='n705' href='#n705'>705</a>
<a id='n706' href='#n706'>706</a>
<a id='n707' href='#n707'>707</a>
<a id='n708' href='#n708'>708</a>
<a id='n709' href='#n709'>709</a>
<a id='n710' href='#n710'>710</a>
<a id='n711' href='#n711'>711</a>
<a id='n712' href='#n712'>712</a>
<a id='n713' href='#n713'>713</a>
<a id='n714' href='#n714'>714</a>
<a id='n715' href='#n715'>715</a>
<a id='n716' href='#n716'>716</a>
<a id='n717' href='#n717'>717</a>
<a id='n718' href='#n718'>718</a>
<a id='n719' href='#n719'>719</a>
<a id='n720' href='#n720'>720</a>
<a id='n721' href='#n721'>721</a>
<a id='n722' href='#n722'>722</a>
<a id='n723' href='#n723'>723</a>
<a id='n724' href='#n724'>724</a>
<a id='n725' href='#n725'>725</a>
<a id='n726' href='#n726'>726</a>
<a id='n727' href='#n727'>727</a>
<a id='n728' href='#n728'>728</a>
<a id='n729' href='#n729'>729</a>
<a id='n730' href='#n730'>730</a>
<a id='n731' href='#n731'>731</a>
<a id='n732' href='#n732'>732</a>
<a id='n733' href='#n733'>733</a>
<a id='n734' href='#n734'>734</a>
<a id='n735' href='#n735'>735</a>
<a id='n736' href='#n736'>736</a>
<a id='n737' href='#n737'>737</a>
<a id='n738' href='#n738'>738</a>
<a id='n739' href='#n739'>739</a>
<a id='n740' href='#n740'>740</a>
<a id='n741' href='#n741'>741</a>
<a id='n742' href='#n742'>742</a>
<a id='n743' href='#n743'>743</a>
<a id='n744' href='#n744'>744</a>
<a id='n745' href='#n745'>745</a>
<a id='n746' href='#n746'>746</a>
<a id='n747' href='#n747'>747</a>
<a id='n748' href='#n748'>748</a>
<a id='n749' href='#n749'>749</a>
<a id='n750' href='#n750'>750</a>
<a id='n751' href='#n751'>751</a>
<a id='n752' href='#n752'>752</a>
<a id='n753' href='#n753'>753</a>
<a id='n754' href='#n754'>754</a>
<a id='n755' href='#n755'>755</a>
<a id='n756' href='#n756'>756</a>
<a id='n757' href='#n757'>757</a>
<a id='n758' href='#n758'>758</a>
<a id='n759' href='#n759'>759</a>
<a id='n760' href='#n760'>760</a>
<a id='n761' href='#n761'>761</a>
<a id='n762' href='#n762'>762</a>
<a id='n763' href='#n763'>763</a>
<a id='n764' href='#n764'>764</a>
<a id='n765' href='#n765'>765</a>
<a id='n766' href='#n766'>766</a>
<a id='n767' href='#n767'>767</a>
<a id='n768' href='#n768'>768</a>
<a id='n769' href='#n769'>769</a>
<a id='n770' href='#n770'>770</a>
<a id='n771' href='#n771'>771</a>
<a id='n772' href='#n772'>772</a>
<a id='n773' href='#n773'>773</a>
<a id='n774' href='#n774'>774</a>
<a id='n775' href='#n775'>775</a>
<a id='n776' href='#n776'>776</a>
<a id='n777' href='#n777'>777</a>
<a id='n778' href='#n778'>778</a>
<a id='n779' href='#n779'>779</a>
<a id='n780' href='#n780'>780</a>
<a id='n781' href='#n781'>781</a>
<a id='n782' href='#n782'>782</a>
<a id='n783' href='#n783'>783</a>
<a id='n784' href='#n784'>784</a>
<a id='n785' href='#n785'>785</a>
<a id='n786' href='#n786'>786</a>
<a id='n787' href='#n787'>787</a>
<a id='n788' href='#n788'>788</a>
<a id='n789' href='#n789'>789</a>
<a id='n790' href='#n790'>790</a>
<a id='n791' href='#n791'>791</a>
<a id='n792' href='#n792'>792</a>
<a id='n793' href='#n793'>793</a>
<a id='n794' href='#n794'>794</a>
<a id='n795' href='#n795'>795</a>
<a id='n796' href='#n796'>796</a>
<a id='n797' href='#n797'>797</a>
<a id='n798' href='#n798'>798</a>
<a id='n799' href='#n799'>799</a>
<a id='n800' href='#n800'>800</a>
<a id='n801' href='#n801'>801</a>
<a id='n802' href='#n802'>802</a>
<a id='n803' href='#n803'>803</a>
<a id='n804' href='#n804'>804</a>
<a id='n805' href='#n805'>805</a>
<a id='n806' href='#n806'>806</a>
<a id='n807' href='#n807'>807</a>
<a id='n808' href='#n808'>808</a>
<a id='n809' href='#n809'>809</a>
<a id='n810' href='#n810'>810</a>
<a id='n811' href='#n811'>811</a>
<a id='n812' href='#n812'>812</a>
<a id='n813' href='#n813'>813</a>
<a id='n814' href='#n814'>814</a>
<a id='n815' href='#n815'>815</a>
<a id='n816' href='#n816'>816</a>
<a id='n817' href='#n817'>817</a>
<a id='n818' href='#n818'>818</a>
<a id='n819' href='#n819'>819</a>
<a id='n820' href='#n820'>820</a>
<a id='n821' href='#n821'>821</a>
<a id='n822' href='#n822'>822</a>
<a id='n823' href='#n823'>823</a>
<a id='n824' href='#n824'>824</a>
<a id='n825' href='#n825'>825</a>
<a id='n826' href='#n826'>826</a>
<a id='n827' href='#n827'>827</a>
<a id='n828' href='#n828'>828</a>
<a id='n829' href='#n829'>829</a>
<a id='n830' href='#n830'>830</a>
<a id='n831' href='#n831'>831</a>
<a id='n832' href='#n832'>832</a>
<a id='n833' href='#n833'>833</a>
<a id='n834' href='#n834'>834</a>
<a id='n835' href='#n835'>835</a>
<a id='n836' href='#n836'>836</a>
<a id='n837' href='#n837'>837</a>
<a id='n838' href='#n838'>838</a>
<a id='n839' href='#n839'>839</a>
<a id='n840' href='#n840'>840</a>
<a id='n841' href='#n841'>841</a>
<a id='n842' href='#n842'>842</a>
<a id='n843' href='#n843'>843</a>
<a id='n844' href='#n844'>844</a>
<a id='n845' href='#n845'>845</a>
<a id='n846' href='#n846'>846</a>
<a id='n847' href='#n847'>847</a>
<a id='n848' href='#n848'>848</a>
<a id='n849' href='#n849'>849</a>
<a id='n850' href='#n850'>850</a>
<a id='n851' href='#n851'>851</a>
<a id='n852' href='#n852'>852</a>
<a id='n853' href='#n853'>853</a>
<a id='n854' href='#n854'>854</a>
<a id='n855' href='#n855'>855</a>
<a id='n856' href='#n856'>856</a>
<a id='n857' href='#n857'>857</a>
<a id='n858' href='#n858'>858</a>
<a id='n859' href='#n859'>859</a>
<a id='n860' href='#n860'>860</a>
<a id='n861' href='#n861'>861</a>
<a id='n862' href='#n862'>862</a>
<a id='n863' href='#n863'>863</a>
<a id='n864' href='#n864'>864</a>
<a id='n865' href='#n865'>865</a>
<a id='n866' href='#n866'>866</a>
<a id='n867' href='#n867'>867</a>
<a id='n868' href='#n868'>868</a>
<a id='n869' href='#n869'>869</a>
<a id='n870' href='#n870'>870</a>
<a id='n871' href='#n871'>871</a>
<a id='n872' href='#n872'>872</a>
<a id='n873' href='#n873'>873</a>
<a id='n874' href='#n874'>874</a>
<a id='n875' href='#n875'>875</a>
<a id='n876' href='#n876'>876</a>
<a id='n877' href='#n877'>877</a>
<a id='n878' href='#n878'>878</a>
<a id='n879' href='#n879'>879</a>
<a id='n880' href='#n880'>880</a>
<a id='n881' href='#n881'>881</a>
<a id='n882' href='#n882'>882</a>
<a id='n883' href='#n883'>883</a>
<a id='n884' href='#n884'>884</a>
<a id='n885' href='#n885'>885</a>
<a id='n886' href='#n886'>886</a>
<a id='n887' href='#n887'>887</a>
<a id='n888' href='#n888'>888</a>
<a id='n889' href='#n889'>889</a>
<a id='n890' href='#n890'>890</a>
<a id='n891' href='#n891'>891</a>
<a id='n892' href='#n892'>892</a>
<a id='n893' href='#n893'>893</a>
<a id='n894' href='#n894'>894</a>
<a id='n895' href='#n895'>895</a>
<a id='n896' href='#n896'>896</a>
<a id='n897' href='#n897'>897</a>
<a id='n898' href='#n898'>898</a>
<a id='n899' href='#n899'>899</a>
<a id='n900' href='#n900'>900</a>
<a id='n901' href='#n901'>901</a>
<a id='n902' href='#n902'>902</a>
<a id='n903' href='#n903'>903</a>
<a id='n904' href='#n904'>904</a>
<a id='n905' href='#n905'>905</a>
<a id='n906' href='#n906'>906</a>
<a id='n907' href='#n907'>907</a>
<a id='n908' href='#n908'>908</a>
<a id='n909' href='#n909'>909</a>
<a id='n910' href='#n910'>910</a>
<a id='n911' href='#n911'>911</a>
<a id='n912' href='#n912'>912</a>
<a id='n913' href='#n913'>913</a>
<a id='n914' href='#n914'>914</a>
<a id='n915' href='#n915'>915</a>
<a id='n916' href='#n916'>916</a>
<a id='n917' href='#n917'>917</a>
<a id='n918' href='#n918'>918</a>
<a id='n919' href='#n919'>919</a>
<a id='n920' href='#n920'>920</a>
<a id='n921' href='#n921'>921</a>
<a id='n922' href='#n922'>922</a>
<a id='n923' href='#n923'>923</a>
<a id='n924' href='#n924'>924</a>
<a id='n925' href='#n925'>925</a>
<a id='n926' href='#n926'>926</a>
<a id='n927' href='#n927'>927</a>
<a id='n928' href='#n928'>928</a>
<a id='n929' href='#n929'>929</a>
<a id='n930' href='#n930'>930</a>
<a id='n931' href='#n931'>931</a>
<a id='n932' href='#n932'>932</a>
<a id='n933' href='#n933'>933</a>
<a id='n934' href='#n934'>934</a>
<a id='n935' href='#n935'>935</a>
<a id='n936' href='#n936'>936</a>
<a id='n937' href='#n937'>937</a>
<a id='n938' href='#n938'>938</a>
<a id='n939' href='#n939'>939</a>
<a id='n940' href='#n940'>940</a>
<a id='n941' href='#n941'>941</a>
<a id='n942' href='#n942'>942</a>
<a id='n943' href='#n943'>943</a>
<a id='n944' href='#n944'>944</a>
<a id='n945' href='#n945'>945</a>
<a id='n946' href='#n946'>946</a>
<a id='n947' href='#n947'>947</a>
<a id='n948' href='#n948'>948</a>
<a id='n949' href='#n949'>949</a>
<a id='n950' href='#n950'>950</a>
<a id='n951' href='#n951'>951</a>
<a id='n952' href='#n952'>952</a>
<a id='n953' href='#n953'>953</a>
<a id='n954' href='#n954'>954</a>
<a id='n955' href='#n955'>955</a>
<a id='n956' href='#n956'>956</a>
<a id='n957' href='#n957'>957</a>
<a id='n958' href='#n958'>958</a>
<a id='n959' href='#n959'>959</a>
<a id='n960' href='#n960'>960</a>
<a id='n961' href='#n961'>961</a>
<a id='n962' href='#n962'>962</a>
<a id='n963' href='#n963'>963</a>
<a id='n964' href='#n964'>964</a>
<a id='n965' href='#n965'>965</a>
<a id='n966' href='#n966'>966</a>
<a id='n967' href='#n967'>967</a>
<a id='n968' href='#n968'>968</a>
<a id='n969' href='#n969'>969</a>
<a id='n970' href='#n970'>970</a>
<a id='n971' href='#n971'>971</a>
<a id='n972' href='#n972'>972</a>
<a id='n973' href='#n973'>973</a>
<a id='n974' href='#n974'>974</a>
<a id='n975' href='#n975'>975</a>
<a id='n976' href='#n976'>976</a>
<a id='n977' href='#n977'>977</a>
<a id='n978' href='#n978'>978</a>
<a id='n979' href='#n979'>979</a>
<a id='n980' href='#n980'>980</a>
<a id='n981' href='#n981'>981</a>
<a id='n982' href='#n982'>982</a>
<a id='n983' href='#n983'>983</a>
<a id='n984' href='#n984'>984</a>
<a id='n985' href='#n985'>985</a>
<a id='n986' href='#n986'>986</a>
<a id='n987' href='#n987'>987</a>
<a id='n988' href='#n988'>988</a>
<a id='n989' href='#n989'>989</a>
<a id='n990' href='#n990'>990</a>
<a id='n991' href='#n991'>991</a>
<a id='n992' href='#n992'>992</a>
<a id='n993' href='#n993'>993</a>
<a id='n994' href='#n994'>994</a>
<a id='n995' href='#n995'>995</a>
<a id='n996' href='#n996'>996</a>
<a id='n997' href='#n997'>997</a>
<a id='n998' href='#n998'>998</a>
<a id='n999' href='#n999'>999</a>
<a id='n1000' href='#n1000'>1000</a>
<a id='n1001' href='#n1001'>1001</a>
<a id='n1002' href='#n1002'>1002</a>
<a id='n1003' href='#n1003'>1003</a>
<a id='n1004' href='#n1004'>1004</a>
<a id='n1005' href='#n1005'>1005</a>
<a id='n1006' href='#n1006'>1006</a>
<a id='n1007' href='#n1007'>1007</a>
<a id='n1008' href='#n1008'>1008</a>
<a id='n1009' href='#n1009'>1009</a>
<a id='n1010' href='#n1010'>1010</a>
<a id='n1011' href='#n1011'>1011</a>
<a id='n1012' href='#n1012'>1012</a>
<a id='n1013' href='#n1013'>1013</a>
<a id='n1014' href='#n1014'>1014</a>
<a id='n1015' href='#n1015'>1015</a>
<a id='n1016' href='#n1016'>1016</a>
<a id='n1017' href='#n1017'>1017</a>
<a id='n1018' href='#n1018'>1018</a>
<a id='n1019' href='#n1019'>1019</a>
<a id='n1020' href='#n1020'>1020</a>
<a id='n1021' href='#n1021'>1021</a>
<a id='n1022' href='#n1022'>1022</a>
<a id='n1023' href='#n1023'>1023</a>
<a id='n1024' href='#n1024'>1024</a>
<a id='n1025' href='#n1025'>1025</a>
<a id='n1026' href='#n1026'>1026</a>
<a id='n1027' href='#n1027'>1027</a>
<a id='n1028' href='#n1028'>1028</a>
<a id='n1029' href='#n1029'>1029</a>
<a id='n1030' href='#n1030'>1030</a>
<a id='n1031' href='#n1031'>1031</a>
<a id='n1032' href='#n1032'>1032</a>
<a id='n1033' href='#n1033'>1033</a>
<a id='n1034' href='#n1034'>1034</a>
<a id='n1035' href='#n1035'>1035</a>
<a id='n1036' href='#n1036'>1036</a>
<a id='n1037' href='#n1037'>1037</a>
<a id='n1038' href='#n1038'>1038</a>
<a id='n1039' href='#n1039'>1039</a>
<a id='n1040' href='#n1040'>1040</a>
<a id='n1041' href='#n1041'>1041</a>
<a id='n1042' href='#n1042'>1042</a>
<a id='n1043' href='#n1043'>1043</a>
<a id='n1044' href='#n1044'>1044</a>
<a id='n1045' href='#n1045'>1045</a>
<a id='n1046' href='#n1046'>1046</a>
<a id='n1047' href='#n1047'>1047</a>
<a id='n1048' href='#n1048'>1048</a>
<a id='n1049' href='#n1049'>1049</a>
<a id='n1050' href='#n1050'>1050</a>
<a id='n1051' href='#n1051'>1051</a>
<a id='n1052' href='#n1052'>1052</a>
<a id='n1053' href='#n1053'>1053</a>
<a id='n1054' href='#n1054'>1054</a>
<a id='n1055' href='#n1055'>1055</a>
<a id='n1056' href='#n1056'>1056</a>
<a id='n1057' href='#n1057'>1057</a>
<a id='n1058' href='#n1058'>1058</a>
<a id='n1059' href='#n1059'>1059</a>
<a id='n1060' href='#n1060'>1060</a>
<a id='n1061' href='#n1061'>1061</a>
<a id='n1062' href='#n1062'>1062</a>
<a id='n1063' href='#n1063'>1063</a>
<a id='n1064' href='#n1064'>1064</a>
<a id='n1065' href='#n1065'>1065</a>
<a id='n1066' href='#n1066'>1066</a>
<a id='n1067' href='#n1067'>1067</a>
<a id='n1068' href='#n1068'>1068</a>
<a id='n1069' href='#n1069'>1069</a>
<a id='n1070' href='#n1070'>1070</a>
<a id='n1071' href='#n1071'>1071</a>
<a id='n1072' href='#n1072'>1072</a>
<a id='n1073' href='#n1073'>1073</a>
<a id='n1074' href='#n1074'>1074</a>
<a id='n1075' href='#n1075'>1075</a>
<a id='n1076' href='#n1076'>1076</a>
<a id='n1077' href='#n1077'>1077</a>
<a id='n1078' href='#n1078'>1078</a>
<a id='n1079' href='#n1079'>1079</a>
<a id='n1080' href='#n1080'>1080</a>
<a id='n1081' href='#n1081'>1081</a>
<a id='n1082' href='#n1082'>1082</a>
<a id='n1083' href='#n1083'>1083</a>
<a id='n1084' href='#n1084'>1084</a>
<a id='n1085' href='#n1085'>1085</a>
<a id='n1086' href='#n1086'>1086</a>
<a id='n1087' href='#n1087'>1087</a>
<a id='n1088' href='#n1088'>1088</a>
<a id='n1089' href='#n1089'>1089</a>
<a id='n1090' href='#n1090'>1090</a>
<a id='n1091' href='#n1091'>1091</a>
<a id='n1092' href='#n1092'>1092</a>
<a id='n1093' href='#n1093'>1093</a>
<a id='n1094' href='#n1094'>1094</a>
<a id='n1095' href='#n1095'>1095</a>
<a id='n1096' href='#n1096'>1096</a>
<a id='n1097' href='#n1097'>1097</a>
<a id='n1098' href='#n1098'>1098</a>
<a id='n1099' href='#n1099'>1099</a>
<a id='n1100' href='#n1100'>1100</a>
<a id='n1101' href='#n1101'>1101</a>
<a id='n1102' href='#n1102'>1102</a>
<a id='n1103' href='#n1103'>1103</a>
<a id='n1104' href='#n1104'>1104</a>
<a id='n1105' href='#n1105'>1105</a>
<a id='n1106' href='#n1106'>1106</a>
<a id='n1107' href='#n1107'>1107</a>
<a id='n1108' href='#n1108'>1108</a>
<a id='n1109' href='#n1109'>1109</a>
<a id='n1110' href='#n1110'>1110</a>
<a id='n1111' href='#n1111'>1111</a>
<a id='n1112' href='#n1112'>1112</a>
<a id='n1113' href='#n1113'>1113</a>
<a id='n1114' href='#n1114'>1114</a>
<a id='n1115' href='#n1115'>1115</a>
<a id='n1116' href='#n1116'>1116</a>
<a id='n1117' href='#n1117'>1117</a>
<a id='n1118' href='#n1118'>1118</a>
<a id='n1119' href='#n1119'>1119</a>
<a id='n1120' href='#n1120'>1120</a>
<a id='n1121' href='#n1121'>1121</a>
<a id='n1122' href='#n1122'>1122</a>
<a id='n1123' href='#n1123'>1123</a>
<a id='n1124' href='#n1124'>1124</a>
<a id='n1125' href='#n1125'>1125</a>
<a id='n1126' href='#n1126'>1126</a>
<a id='n1127' href='#n1127'>1127</a>
<a id='n1128' href='#n1128'>1128</a>
<a id='n1129' href='#n1129'>1129</a>
<a id='n1130' href='#n1130'>1130</a>
<a id='n1131' href='#n1131'>1131</a>
<a id='n1132' href='#n1132'>1132</a>
<a id='n1133' href='#n1133'>1133</a>
<a id='n1134' href='#n1134'>1134</a>
<a id='n1135' href='#n1135'>1135</a>
<a id='n1136' href='#n1136'>1136</a>
<a id='n1137' href='#n1137'>1137</a>
<a id='n1138' href='#n1138'>1138</a>
<a id='n1139' href='#n1139'>1139</a>
<a id='n1140' href='#n1140'>1140</a>
<a id='n1141' href='#n1141'>1141</a>
<a id='n1142' href='#n1142'>1142</a>
<a id='n1143' href='#n1143'>1143</a>
<a id='n1144' href='#n1144'>1144</a>
<a id='n1145' href='#n1145'>1145</a>
<a id='n1146' href='#n1146'>1146</a>
<a id='n1147' href='#n1147'>1147</a>
<a id='n1148' href='#n1148'>1148</a>
<a id='n1149' href='#n1149'>1149</a>
<a id='n1150' href='#n1150'>1150</a>
<a id='n1151' href='#n1151'>1151</a>
<a id='n1152' href='#n1152'>1152</a>
<a id='n1153' href='#n1153'>1153</a>
<a id='n1154' href='#n1154'>1154</a>
<a id='n1155' href='#n1155'>1155</a>
<a id='n1156' href='#n1156'>1156</a>
<a id='n1157' href='#n1157'>1157</a>
<a id='n1158' href='#n1158'>1158</a>
<a id='n1159' href='#n1159'>1159</a>
<a id='n1160' href='#n1160'>1160</a>
<a id='n1161' href='#n1161'>1161</a>
<a id='n1162' href='#n1162'>1162</a>
<a id='n1163' href='#n1163'>1163</a>
<a id='n1164' href='#n1164'>1164</a>
<a id='n1165' href='#n1165'>1165</a>
<a id='n1166' href='#n1166'>1166</a>
<a id='n1167' href='#n1167'>1167</a>
<a id='n1168' href='#n1168'>1168</a>
<a id='n1169' href='#n1169'>1169</a>
<a id='n1170' href='#n1170'>1170</a>
<a id='n1171' href='#n1171'>1171</a>
<a id='n1172' href='#n1172'>1172</a>
<a id='n1173' href='#n1173'>1173</a>
<a id='n1174' href='#n1174'>1174</a>
<a id='n1175' href='#n1175'>1175</a>
<a id='n1176' href='#n1176'>1176</a>
<a id='n1177' href='#n1177'>1177</a>
<a id='n1178' href='#n1178'>1178</a>
<a id='n1179' href='#n1179'>1179</a>
<a id='n1180' href='#n1180'>1180</a>
<a id='n1181' href='#n1181'>1181</a>
<a id='n1182' href='#n1182'>1182</a>
<a id='n1183' href='#n1183'>1183</a>
<a id='n1184' href='#n1184'>1184</a>
<a id='n1185' href='#n1185'>1185</a>
<a id='n1186' href='#n1186'>1186</a>
<a id='n1187' href='#n1187'>1187</a>
<a id='n1188' href='#n1188'>1188</a>
<a id='n1189' href='#n1189'>1189</a>
<a id='n1190' href='#n1190'>1190</a>
<a id='n1191' href='#n1191'>1191</a>
<a id='n1192' href='#n1192'>1192</a>
<a id='n1193' href='#n1193'>1193</a>
<a id='n1194' href='#n1194'>1194</a>
<a id='n1195' href='#n1195'>1195</a>
<a id='n1196' href='#n1196'>1196</a>
<a id='n1197' href='#n1197'>1197</a>
<a id='n1198' href='#n1198'>1198</a>
<a id='n1199' href='#n1199'>1199</a>
<a id='n1200' href='#n1200'>1200</a>
<a id='n1201' href='#n1201'>1201</a>
<a id='n1202' href='#n1202'>1202</a>
<a id='n1203' href='#n1203'>1203</a>
<a id='n1204' href='#n1204'>1204</a>
<a id='n1205' href='#n1205'>1205</a>
<a id='n1206' href='#n1206'>1206</a>
<a id='n1207' href='#n1207'>1207</a>
<a id='n1208' href='#n1208'>1208</a>
<a id='n1209' href='#n1209'>1209</a>
<a id='n1210' href='#n1210'>1210</a>
<a id='n1211' href='#n1211'>1211</a>
<a id='n1212' href='#n1212'>1212</a>
<a id='n1213' href='#n1213'>1213</a>
<a id='n1214' href='#n1214'>1214</a>
<a id='n1215' href='#n1215'>1215</a>
<a id='n1216' href='#n1216'>1216</a>
<a id='n1217' href='#n1217'>1217</a>
<a id='n1218' href='#n1218'>1218</a>
<a id='n1219' href='#n1219'>1219</a>
<a id='n1220' href='#n1220'>1220</a>
<a id='n1221' href='#n1221'>1221</a>
<a id='n1222' href='#n1222'>1222</a>
<a id='n1223' href='#n1223'>1223</a>
<a id='n1224' href='#n1224'>1224</a>
<a id='n1225' href='#n1225'>1225</a>
<a id='n1226' href='#n1226'>1226</a>
<a id='n1227' href='#n1227'>1227</a>
<a id='n1228' href='#n1228'>1228</a>
<a id='n1229' href='#n1229'>1229</a>
<a id='n1230' href='#n1230'>1230</a>
<a id='n1231' href='#n1231'>1231</a>
<a id='n1232' href='#n1232'>1232</a>
<a id='n1233' href='#n1233'>1233</a>
<a id='n1234' href='#n1234'>1234</a>
<a id='n1235' href='#n1235'>1235</a>
<a id='n1236' href='#n1236'>1236</a>
<a id='n1237' href='#n1237'>1237</a>
<a id='n1238' href='#n1238'>1238</a>
<a id='n1239' href='#n1239'>1239</a>
<a id='n1240' href='#n1240'>1240</a>
<a id='n1241' href='#n1241'>1241</a>
<a id='n1242' href='#n1242'>1242</a>
<a id='n1243' href='#n1243'>1243</a>
<a id='n1244' href='#n1244'>1244</a>
<a id='n1245' href='#n1245'>1245</a>
<a id='n1246' href='#n1246'>1246</a>
<a id='n1247' href='#n1247'>1247</a>
<a id='n1248' href='#n1248'>1248</a>
<a id='n1249' href='#n1249'>1249</a>
<a id='n1250' href='#n1250'>1250</a>
<a id='n1251' href='#n1251'>1251</a>
<a id='n1252' href='#n1252'>1252</a>
<a id='n1253' href='#n1253'>1253</a>
<a id='n1254' href='#n1254'>1254</a>
<a id='n1255' href='#n1255'>1255</a>
<a id='n1256' href='#n1256'>1256</a>
<a id='n1257' href='#n1257'>1257</a>
<a id='n1258' href='#n1258'>1258</a>
<a id='n1259' href='#n1259'>1259</a>
<a id='n1260' href='#n1260'>1260</a>
<a id='n1261' href='#n1261'>1261</a>
<a id='n1262' href='#n1262'>1262</a>
<a id='n1263' href='#n1263'>1263</a>
<a id='n1264' href='#n1264'>1264</a>
<a id='n1265' href='#n1265'>1265</a>
<a id='n1266' href='#n1266'>1266</a>
<a id='n1267' href='#n1267'>1267</a>
<a id='n1268' href='#n1268'>1268</a>
<a id='n1269' href='#n1269'>1269</a>
<a id='n1270' href='#n1270'>1270</a>
<a id='n1271' href='#n1271'>1271</a>
<a id='n1272' href='#n1272'>1272</a>
<a id='n1273' href='#n1273'>1273</a>
<a id='n1274' href='#n1274'>1274</a>
<a id='n1275' href='#n1275'>1275</a>
<a id='n1276' href='#n1276'>1276</a>
<a id='n1277' href='#n1277'>1277</a>
<a id='n1278' href='#n1278'>1278</a>
<a id='n1279' href='#n1279'>1279</a>
<a id='n1280' href='#n1280'>1280</a>
<a id='n1281' href='#n1281'>1281</a>
<a id='n1282' href='#n1282'>1282</a>
<a id='n1283' href='#n1283'>1283</a>
<a id='n1284' href='#n1284'>1284</a>
<a id='n1285' href='#n1285'>1285</a>
<a id='n1286' href='#n1286'>1286</a>
<a id='n1287' href='#n1287'>1287</a>
<a id='n1288' href='#n1288'>1288</a>
<a id='n1289' href='#n1289'>1289</a>
<a id='n1290' href='#n1290'>1290</a>
<a id='n1291' href='#n1291'>1291</a>
<a id='n1292' href='#n1292'>1292</a>
<a id='n1293' href='#n1293'>1293</a>
<a id='n1294' href='#n1294'>1294</a>
<a id='n1295' href='#n1295'>1295</a>
<a id='n1296' href='#n1296'>1296</a>
<a id='n1297' href='#n1297'>1297</a>
<a id='n1298' href='#n1298'>1298</a>
<a id='n1299' href='#n1299'>1299</a>
<a id='n1300' href='#n1300'>1300</a>
<a id='n1301' href='#n1301'>1301</a>
<a id='n1302' href='#n1302'>1302</a>
<a id='n1303' href='#n1303'>1303</a>
<a id='n1304' href='#n1304'>1304</a>
<a id='n1305' href='#n1305'>1305</a>
<a id='n1306' href='#n1306'>1306</a>
<a id='n1307' href='#n1307'>1307</a>
<a id='n1308' href='#n1308'>1308</a>
<a id='n1309' href='#n1309'>1309</a>
<a id='n1310' href='#n1310'>1310</a>
<a id='n1311' href='#n1311'>1311</a>
<a id='n1312' href='#n1312'>1312</a>
<a id='n1313' href='#n1313'>1313</a>
<a id='n1314' href='#n1314'>1314</a>
<a id='n1315' href='#n1315'>1315</a>
<a id='n1316' href='#n1316'>1316</a>
<a id='n1317' href='#n1317'>1317</a>
<a id='n1318' href='#n1318'>1318</a>
<a id='n1319' href='#n1319'>1319</a>
<a id='n1320' href='#n1320'>1320</a>
<a id='n1321' href='#n1321'>1321</a>
<a id='n1322' href='#n1322'>1322</a>
<a id='n1323' href='#n1323'>1323</a>
<a id='n1324' href='#n1324'>1324</a>
<a id='n1325' href='#n1325'>1325</a>
<a id='n1326' href='#n1326'>1326</a>
<a id='n1327' href='#n1327'>1327</a>
<a id='n1328' href='#n1328'>1328</a>
<a id='n1329' href='#n1329'>1329</a>
<a id='n1330' href='#n1330'>1330</a>
<a id='n1331' href='#n1331'>1331</a>
<a id='n1332' href='#n1332'>1332</a>
<a id='n1333' href='#n1333'>1333</a>
<a id='n1334' href='#n1334'>1334</a>
<a id='n1335' href='#n1335'>1335</a>
<a id='n1336' href='#n1336'>1336</a>
<a id='n1337' href='#n1337'>1337</a>
<a id='n1338' href='#n1338'>1338</a>
<a id='n1339' href='#n1339'>1339</a>
<a id='n1340' href='#n1340'>1340</a>
<a id='n1341' href='#n1341'>1341</a>
<a id='n1342' href='#n1342'>1342</a>
<a id='n1343' href='#n1343'>1343</a>
<a id='n1344' href='#n1344'>1344</a>
<a id='n1345' href='#n1345'>1345</a>
<a id='n1346' href='#n1346'>1346</a>
<a id='n1347' href='#n1347'>1347</a>
<a id='n1348' href='#n1348'>1348</a>
<a id='n1349' href='#n1349'>1349</a>
<a id='n1350' href='#n1350'>1350</a>
<a id='n1351' href='#n1351'>1351</a>
<a id='n1352' href='#n1352'>1352</a>
<a id='n1353' href='#n1353'>1353</a>
<a id='n1354' href='#n1354'>1354</a>
<a id='n1355' href='#n1355'>1355</a>
<a id='n1356' href='#n1356'>1356</a>
<a id='n1357' href='#n1357'>1357</a>
<a id='n1358' href='#n1358'>1358</a>
<a id='n1359' href='#n1359'>1359</a>
<a id='n1360' href='#n1360'>1360</a>
<a id='n1361' href='#n1361'>1361</a>
<a id='n1362' href='#n1362'>1362</a>
<a id='n1363' href='#n1363'>1363</a>
<a id='n1364' href='#n1364'>1364</a>
<a id='n1365' href='#n1365'>1365</a>
<a id='n1366' href='#n1366'>1366</a>
<a id='n1367' href='#n1367'>1367</a>
<a id='n1368' href='#n1368'>1368</a>
<a id='n1369' href='#n1369'>1369</a>
<a id='n1370' href='#n1370'>1370</a>
<a id='n1371' href='#n1371'>1371</a>
<a id='n1372' href='#n1372'>1372</a>
<a id='n1373' href='#n1373'>1373</a>
<a id='n1374' href='#n1374'>1374</a>
<a id='n1375' href='#n1375'>1375</a>
<a id='n1376' href='#n1376'>1376</a>
<a id='n1377' href='#n1377'>1377</a>
<a id='n1378' href='#n1378'>1378</a>
<a id='n1379' href='#n1379'>1379</a>
<a id='n1380' href='#n1380'>1380</a>
<a id='n1381' href='#n1381'>1381</a>
<a id='n1382' href='#n1382'>1382</a>
<a id='n1383' href='#n1383'>1383</a>
<a id='n1384' href='#n1384'>1384</a>
<a id='n1385' href='#n1385'>1385</a>
<a id='n1386' href='#n1386'>1386</a>
<a id='n1387' href='#n1387'>1387</a>
<a id='n1388' href='#n1388'>1388</a>
<a id='n1389' href='#n1389'>1389</a>
<a id='n1390' href='#n1390'>1390</a>
<a id='n1391' href='#n1391'>1391</a>
<a id='n1392' href='#n1392'>1392</a>
<a id='n1393' href='#n1393'>1393</a>
<a id='n1394' href='#n1394'>1394</a>
<a id='n1395' href='#n1395'>1395</a>
<a id='n1396' href='#n1396'>1396</a>
<a id='n1397' href='#n1397'>1397</a>
<a id='n1398' href='#n1398'>1398</a>
<a id='n1399' href='#n1399'>1399</a>
<a id='n1400' href='#n1400'>1400</a>
<a id='n1401' href='#n1401'>1401</a>
<a id='n1402' href='#n1402'>1402</a>
<a id='n1403' href='#n1403'>1403</a>
<a id='n1404' href='#n1404'>1404</a>
<a id='n1405' href='#n1405'>1405</a>
<a id='n1406' href='#n1406'>1406</a>
<a id='n1407' href='#n1407'>1407</a>
<a id='n1408' href='#n1408'>1408</a>
<a id='n1409' href='#n1409'>1409</a>
<a id='n1410' href='#n1410'>1410</a>
<a id='n1411' href='#n1411'>1411</a>
<a id='n1412' href='#n1412'>1412</a>
<a id='n1413' href='#n1413'>1413</a>
<a id='n1414' href='#n1414'>1414</a>
<a id='n1415' href='#n1415'>1415</a>
<a id='n1416' href='#n1416'>1416</a>
<a id='n1417' href='#n1417'>1417</a>
<a id='n1418' href='#n1418'>1418</a>
<a id='n1419' href='#n1419'>1419</a>
<a id='n1420' href='#n1420'>1420</a>
<a id='n1421' href='#n1421'>1421</a>
<a id='n1422' href='#n1422'>1422</a>
<a id='n1423' href='#n1423'>1423</a>
<a id='n1424' href='#n1424'>1424</a>
<a id='n1425' href='#n1425'>1425</a>
<a id='n1426' href='#n1426'>1426</a>
<a id='n1427' href='#n1427'>1427</a>
<a id='n1428' href='#n1428'>1428</a>
<a id='n1429' href='#n1429'>1429</a>
<a id='n1430' href='#n1430'>1430</a>
<a id='n1431' href='#n1431'>1431</a>
<a id='n1432' href='#n1432'>1432</a>
<a id='n1433' href='#n1433'>1433</a>
<a id='n1434' href='#n1434'>1434</a>
<a id='n1435' href='#n1435'>1435</a>
<a id='n1436' href='#n1436'>1436</a>
<a id='n1437' href='#n1437'>1437</a>
<a id='n1438' href='#n1438'>1438</a>
<a id='n1439' href='#n1439'>1439</a>
<a id='n1440' href='#n1440'>1440</a>
<a id='n1441' href='#n1441'>1441</a>
<a id='n1442' href='#n1442'>1442</a>
<a id='n1443' href='#n1443'>1443</a>
<a id='n1444' href='#n1444'>1444</a>
<a id='n1445' href='#n1445'>1445</a>
<a id='n1446' href='#n1446'>1446</a>
<a id='n1447' href='#n1447'>1447</a>
<a id='n1448' href='#n1448'>1448</a>
<a id='n1449' href='#n1449'>1449</a>
<a id='n1450' href='#n1450'>1450</a>
<a id='n1451' href='#n1451'>1451</a>
<a id='n1452' href='#n1452'>1452</a>
<a id='n1453' href='#n1453'>1453</a>
<a id='n1454' href='#n1454'>1454</a>
<a id='n1455' href='#n1455'>1455</a>
<a id='n1456' href='#n1456'>1456</a>
<a id='n1457' href='#n1457'>1457</a>
<a id='n1458' href='#n1458'>1458</a>
<a id='n1459' href='#n1459'>1459</a>
<a id='n1460' href='#n1460'>1460</a>
<a id='n1461' href='#n1461'>1461</a>
<a id='n1462' href='#n1462'>1462</a>
<a id='n1463' href='#n1463'>1463</a>
<a id='n1464' href='#n1464'>1464</a>
<a id='n1465' href='#n1465'>1465</a>
<a id='n1466' href='#n1466'>1466</a>
<a id='n1467' href='#n1467'>1467</a>
<a id='n1468' href='#n1468'>1468</a>
<a id='n1469' href='#n1469'>1469</a>
<a id='n1470' href='#n1470'>1470</a>
<a id='n1471' href='#n1471'>1471</a>
<a id='n1472' href='#n1472'>1472</a>
<a id='n1473' href='#n1473'>1473</a>
<a id='n1474' href='#n1474'>1474</a>
<a id='n1475' href='#n1475'>1475</a>
<a id='n1476' href='#n1476'>1476</a>
<a id='n1477' href='#n1477'>1477</a>
<a id='n1478' href='#n1478'>1478</a>
<a id='n1479' href='#n1479'>1479</a>
<a id='n1480' href='#n1480'>1480</a>
<a id='n1481' href='#n1481'>1481</a>
<a id='n1482' href='#n1482'>1482</a>
<a id='n1483' href='#n1483'>1483</a>
<a id='n1484' href='#n1484'>1484</a>
<a id='n1485' href='#n1485'>1485</a>
<a id='n1486' href='#n1486'>1486</a>
<a id='n1487' href='#n1487'>1487</a>
<a id='n1488' href='#n1488'>1488</a>
<a id='n1489' href='#n1489'>1489</a>
<a id='n1490' href='#n1490'>1490</a>
<a id='n1491' href='#n1491'>1491</a>
<a id='n1492' href='#n1492'>1492</a>
<a id='n1493' href='#n1493'>1493</a>
<a id='n1494' href='#n1494'>1494</a>
<a id='n1495' href='#n1495'>1495</a>
<a id='n1496' href='#n1496'>1496</a>
<a id='n1497' href='#n1497'>1497</a>
<a id='n1498' href='#n1498'>1498</a>
<a id='n1499' href='#n1499'>1499</a>
<a id='n1500' href='#n1500'>1500</a>
<a id='n1501' href='#n1501'>1501</a>
<a id='n1502' href='#n1502'>1502</a>
<a id='n1503' href='#n1503'>1503</a>
<a id='n1504' href='#n1504'>1504</a>
<a id='n1505' href='#n1505'>1505</a>
<a id='n1506' href='#n1506'>1506</a>
<a id='n1507' href='#n1507'>1507</a>
<a id='n1508' href='#n1508'>1508</a>
<a id='n1509' href='#n1509'>1509</a>
<a id='n1510' href='#n1510'>1510</a>
<a id='n1511' href='#n1511'>1511</a>
<a id='n1512' href='#n1512'>1512</a>
<a id='n1513' href='#n1513'>1513</a>
<a id='n1514' href='#n1514'>1514</a>
<a id='n1515' href='#n1515'>1515</a>
<a id='n1516' href='#n1516'>1516</a>
<a id='n1517' href='#n1517'>1517</a>
<a id='n1518' href='#n1518'>1518</a>
<a id='n1519' href='#n1519'>1519</a>
<a id='n1520' href='#n1520'>1520</a>
<a id='n1521' href='#n1521'>1521</a>
<a id='n1522' href='#n1522'>1522</a>
<a id='n1523' href='#n1523'>1523</a>
<a id='n1524' href='#n1524'>1524</a>
<a id='n1525' href='#n1525'>1525</a>
<a id='n1526' href='#n1526'>1526</a>
<a id='n1527' href='#n1527'>1527</a>
<a id='n1528' href='#n1528'>1528</a>
<a id='n1529' href='#n1529'>1529</a>
<a id='n1530' href='#n1530'>1530</a>
<a id='n1531' href='#n1531'>1531</a>
<a id='n1532' href='#n1532'>1532</a>
<a id='n1533' href='#n1533'>1533</a>
<a id='n1534' href='#n1534'>1534</a>
<a id='n1535' href='#n1535'>1535</a>
<a id='n1536' href='#n1536'>1536</a>
<a id='n1537' href='#n1537'>1537</a>
<a id='n1538' href='#n1538'>1538</a>
<a id='n1539' href='#n1539'>1539</a>
<a id='n1540' href='#n1540'>1540</a>
<a id='n1541' href='#n1541'>1541</a>
<a id='n1542' href='#n1542'>1542</a>
<a id='n1543' href='#n1543'>1543</a>
<a id='n1544' href='#n1544'>1544</a>
<a id='n1545' href='#n1545'>1545</a>
<a id='n1546' href='#n1546'>1546</a>
<a id='n1547' href='#n1547'>1547</a>
<a id='n1548' href='#n1548'>1548</a>
<a id='n1549' href='#n1549'>1549</a>
<a id='n1550' href='#n1550'>1550</a>
<a id='n1551' href='#n1551'>1551</a>
<a id='n1552' href='#n1552'>1552</a>
<a id='n1553' href='#n1553'>1553</a>
<a id='n1554' href='#n1554'>1554</a>
<a id='n1555' href='#n1555'>1555</a>
<a id='n1556' href='#n1556'>1556</a>
<a id='n1557' href='#n1557'>1557</a>
<a id='n1558' href='#n1558'>1558</a>
<a id='n1559' href='#n1559'>1559</a>
<a id='n1560' href='#n1560'>1560</a>
<a id='n1561' href='#n1561'>1561</a>
<a id='n1562' href='#n1562'>1562</a>
<a id='n1563' href='#n1563'>1563</a>
<a id='n1564' href='#n1564'>1564</a>
<a id='n1565' href='#n1565'>1565</a>
<a id='n1566' href='#n1566'>1566</a>
<a id='n1567' href='#n1567'>1567</a>
<a id='n1568' href='#n1568'>1568</a>
<a id='n1569' href='#n1569'>1569</a>
<a id='n1570' href='#n1570'>1570</a>
<a id='n1571' href='#n1571'>1571</a>
<a id='n1572' href='#n1572'>1572</a>
<a id='n1573' href='#n1573'>1573</a>
<a id='n1574' href='#n1574'>1574</a>
<a id='n1575' href='#n1575'>1575</a>
<a id='n1576' href='#n1576'>1576</a>
<a id='n1577' href='#n1577'>1577</a>
<a id='n1578' href='#n1578'>1578</a>
<a id='n1579' href='#n1579'>1579</a>
<a id='n1580' href='#n1580'>1580</a>
<a id='n1581' href='#n1581'>1581</a>
<a id='n1582' href='#n1582'>1582</a>
<a id='n1583' href='#n1583'>1583</a>
<a id='n1584' href='#n1584'>1584</a>
<a id='n1585' href='#n1585'>1585</a>
<a id='n1586' href='#n1586'>1586</a>
<a id='n1587' href='#n1587'>1587</a>
<a id='n1588' href='#n1588'>1588</a>
<a id='n1589' href='#n1589'>1589</a>
<a id='n1590' href='#n1590'>1590</a>
<a id='n1591' href='#n1591'>1591</a>
<a id='n1592' href='#n1592'>1592</a>
<a id='n1593' href='#n1593'>1593</a>
<a id='n1594' href='#n1594'>1594</a>
<a id='n1595' href='#n1595'>1595</a>
<a id='n1596' href='#n1596'>1596</a>
<a id='n1597' href='#n1597'>1597</a>
<a id='n1598' href='#n1598'>1598</a>
<a id='n1599' href='#n1599'>1599</a>
<a id='n1600' href='#n1600'>1600</a>
<a id='n1601' href='#n1601'>1601</a>
<a id='n1602' href='#n1602'>1602</a>
<a id='n1603' href='#n1603'>1603</a>
<a id='n1604' href='#n1604'>1604</a>
<a id='n1605' href='#n1605'>1605</a>
<a id='n1606' href='#n1606'>1606</a>
<a id='n1607' href='#n1607'>1607</a>
<a id='n1608' href='#n1608'>1608</a>
<a id='n1609' href='#n1609'>1609</a>
<a id='n1610' href='#n1610'>1610</a>
<a id='n1611' href='#n1611'>1611</a>
<a id='n1612' href='#n1612'>1612</a>
<a id='n1613' href='#n1613'>1613</a>
<a id='n1614' href='#n1614'>1614</a>
<a id='n1615' href='#n1615'>1615</a>
<a id='n1616' href='#n1616'>1616</a>
<a id='n1617' href='#n1617'>1617</a>
<a id='n1618' href='#n1618'>1618</a>
<a id='n1619' href='#n1619'>1619</a>
<a id='n1620' href='#n1620'>1620</a>
<a id='n1621' href='#n1621'>1621</a>
<a id='n1622' href='#n1622'>1622</a>
<a id='n1623' href='#n1623'>1623</a>
<a id='n1624' href='#n1624'>1624</a>
<a id='n1625' href='#n1625'>1625</a>
<a id='n1626' href='#n1626'>1626</a>
<a id='n1627' href='#n1627'>1627</a>
<a id='n1628' href='#n1628'>1628</a>
<a id='n1629' href='#n1629'>1629</a>
<a id='n1630' href='#n1630'>1630</a>
<a id='n1631' href='#n1631'>1631</a>
<a id='n1632' href='#n1632'>1632</a>
<a id='n1633' href='#n1633'>1633</a>
<a id='n1634' href='#n1634'>1634</a>
<a id='n1635' href='#n1635'>1635</a>
<a id='n1636' href='#n1636'>1636</a>
<a id='n1637' href='#n1637'>1637</a>
<a id='n1638' href='#n1638'>1638</a>
<a id='n1639' href='#n1639'>1639</a>
<a id='n1640' href='#n1640'>1640</a>
<a id='n1641' href='#n1641'>1641</a>
<a id='n1642' href='#n1642'>1642</a>
<a id='n1643' href='#n1643'>1643</a>
<a id='n1644' href='#n1644'>1644</a>
<a id='n1645' href='#n1645'>1645</a>
<a id='n1646' href='#n1646'>1646</a>
<a id='n1647' href='#n1647'>1647</a>
<a id='n1648' href='#n1648'>1648</a>
<a id='n1649' href='#n1649'>1649</a>
<a id='n1650' href='#n1650'>1650</a>
<a id='n1651' href='#n1651'>1651</a>
<a id='n1652' href='#n1652'>1652</a>
<a id='n1653' href='#n1653'>1653</a>
<a id='n1654' href='#n1654'>1654</a>
<a id='n1655' href='#n1655'>1655</a>
<a id='n1656' href='#n1656'>1656</a>
<a id='n1657' href='#n1657'>1657</a>
<a id='n1658' href='#n1658'>1658</a>
<a id='n1659' href='#n1659'>1659</a>
<a id='n1660' href='#n1660'>1660</a>
<a id='n1661' href='#n1661'>1661</a>
<a id='n1662' href='#n1662'>1662</a>
<a id='n1663' href='#n1663'>1663</a>
<a id='n1664' href='#n1664'>1664</a>
<a id='n1665' href='#n1665'>1665</a>
<a id='n1666' href='#n1666'>1666</a>
<a id='n1667' href='#n1667'>1667</a>
<a id='n1668' href='#n1668'>1668</a>
<a id='n1669' href='#n1669'>1669</a>
<a id='n1670' href='#n1670'>1670</a>
<a id='n1671' href='#n1671'>1671</a>
<a id='n1672' href='#n1672'>1672</a>
<a id='n1673' href='#n1673'>1673</a>
<a id='n1674' href='#n1674'>1674</a>
<a id='n1675' href='#n1675'>1675</a>
<a id='n1676' href='#n1676'>1676</a>
<a id='n1677' href='#n1677'>1677</a>
<a id='n1678' href='#n1678'>1678</a>
<a id='n1679' href='#n1679'>1679</a>
<a id='n1680' href='#n1680'>1680</a>
<a id='n1681' href='#n1681'>1681</a>
<a id='n1682' href='#n1682'>1682</a>
<a id='n1683' href='#n1683'>1683</a>
<a id='n1684' href='#n1684'>1684</a>
<a id='n1685' href='#n1685'>1685</a>
<a id='n1686' href='#n1686'>1686</a>
<a id='n1687' href='#n1687'>1687</a>
<a id='n1688' href='#n1688'>1688</a>
<a id='n1689' href='#n1689'>1689</a>
<a id='n1690' href='#n1690'>1690</a>
<a id='n1691' href='#n1691'>1691</a>
<a id='n1692' href='#n1692'>1692</a>
<a id='n1693' href='#n1693'>1693</a>
<a id='n1694' href='#n1694'>1694</a>
<a id='n1695' href='#n1695'>1695</a>
<a id='n1696' href='#n1696'>1696</a>
<a id='n1697' href='#n1697'>1697</a>
<a id='n1698' href='#n1698'>1698</a>
<a id='n1699' href='#n1699'>1699</a>
<a id='n1700' href='#n1700'>1700</a>
<a id='n1701' href='#n1701'>1701</a>
<a id='n1702' href='#n1702'>1702</a>
<a id='n1703' href='#n1703'>1703</a>
<a id='n1704' href='#n1704'>1704</a>
<a id='n1705' href='#n1705'>1705</a>
<a id='n1706' href='#n1706'>1706</a>
<a id='n1707' href='#n1707'>1707</a>
<a id='n1708' href='#n1708'>1708</a>
<a id='n1709' href='#n1709'>1709</a>
<a id='n1710' href='#n1710'>1710</a>
<a id='n1711' href='#n1711'>1711</a>
<a id='n1712' href='#n1712'>1712</a>
<a id='n1713' href='#n1713'>1713</a>
<a id='n1714' href='#n1714'>1714</a>
<a id='n1715' href='#n1715'>1715</a>
<a id='n1716' href='#n1716'>1716</a>
<a id='n1717' href='#n1717'>1717</a>
<a id='n1718' href='#n1718'>1718</a>
<a id='n1719' href='#n1719'>1719</a>
<a id='n1720' href='#n1720'>1720</a>
<a id='n1721' href='#n1721'>1721</a>
<a id='n1722' href='#n1722'>1722</a>
<a id='n1723' href='#n1723'>1723</a>
<a id='n1724' href='#n1724'>1724</a>
<a id='n1725' href='#n1725'>1725</a>
<a id='n1726' href='#n1726'>1726</a>
<a id='n1727' href='#n1727'>1727</a>
<a id='n1728' href='#n1728'>1728</a>
<a id='n1729' href='#n1729'>1729</a>
<a id='n1730' href='#n1730'>1730</a>
<a id='n1731' href='#n1731'>1731</a>
<a id='n1732' href='#n1732'>1732</a>
<a id='n1733' href='#n1733'>1733</a>
<a id='n1734' href='#n1734'>1734</a>
<a id='n1735' href='#n1735'>1735</a>
<a id='n1736' href='#n1736'>1736</a>
<a id='n1737' href='#n1737'>1737</a>
<a id='n1738' href='#n1738'>1738</a>
<a id='n1739' href='#n1739'>1739</a>
<a id='n1740' href='#n1740'>1740</a>
<a id='n1741' href='#n1741'>1741</a>
<a id='n1742' href='#n1742'>1742</a>
<a id='n1743' href='#n1743'>1743</a>
<a id='n1744' href='#n1744'>1744</a>
<a id='n1745' href='#n1745'>1745</a>
<a id='n1746' href='#n1746'>1746</a>
<a id='n1747' href='#n1747'>1747</a>
<a id='n1748' href='#n1748'>1748</a>
<a id='n1749' href='#n1749'>1749</a>
<a id='n1750' href='#n1750'>1750</a>
<a id='n1751' href='#n1751'>1751</a>
<a id='n1752' href='#n1752'>1752</a>
<a id='n1753' href='#n1753'>1753</a>
<a id='n1754' href='#n1754'>1754</a>
<a id='n1755' href='#n1755'>1755</a>
<a id='n1756' href='#n1756'>1756</a>
<a id='n1757' href='#n1757'>1757</a>
<a id='n1758' href='#n1758'>1758</a>
<a id='n1759' href='#n1759'>1759</a>
<a id='n1760' href='#n1760'>1760</a>
<a id='n1761' href='#n1761'>1761</a>
<a id='n1762' href='#n1762'>1762</a>
<a id='n1763' href='#n1763'>1763</a>
<a id='n1764' href='#n1764'>1764</a>
<a id='n1765' href='#n1765'>1765</a>
<a id='n1766' href='#n1766'>1766</a>
<a id='n1767' href='#n1767'>1767</a>
<a id='n1768' href='#n1768'>1768</a>
<a id='n1769' href='#n1769'>1769</a>
<a id='n1770' href='#n1770'>1770</a>
<a id='n1771' href='#n1771'>1771</a>
<a id='n1772' href='#n1772'>1772</a>
<a id='n1773' href='#n1773'>1773</a>
<a id='n1774' href='#n1774'>1774</a>
<a id='n1775' href='#n1775'>1775</a>
<a id='n1776' href='#n1776'>1776</a>
<a id='n1777' href='#n1777'>1777</a>
<a id='n1778' href='#n1778'>1778</a>
<a id='n1779' href='#n1779'>1779</a>
<a id='n1780' href='#n1780'>1780</a>
<a id='n1781' href='#n1781'>1781</a>
<a id='n1782' href='#n1782'>1782</a>
<a id='n1783' href='#n1783'>1783</a>
<a id='n1784' href='#n1784'>1784</a>
<a id='n1785' href='#n1785'>1785</a>
<a id='n1786' href='#n1786'>1786</a>
<a id='n1787' href='#n1787'>1787</a>
<a id='n1788' href='#n1788'>1788</a>
<a id='n1789' href='#n1789'>1789</a>
<a id='n1790' href='#n1790'>1790</a>
<a id='n1791' href='#n1791'>1791</a>
<a id='n1792' href='#n1792'>1792</a>
<a id='n1793' href='#n1793'>1793</a>
<a id='n1794' href='#n1794'>1794</a>
<a id='n1795' href='#n1795'>1795</a>
<a id='n1796' href='#n1796'>1796</a>
<a id='n1797' href='#n1797'>1797</a>
<a id='n1798' href='#n1798'>1798</a>
<a id='n1799' href='#n1799'>1799</a>
<a id='n1800' href='#n1800'>1800</a>
<a id='n1801' href='#n1801'>1801</a>
<a id='n1802' href='#n1802'>1802</a>
<a id='n1803' href='#n1803'>1803</a>
<a id='n1804' href='#n1804'>1804</a>
<a id='n1805' href='#n1805'>1805</a>
<a id='n1806' href='#n1806'>1806</a>
<a id='n1807' href='#n1807'>1807</a>
<a id='n1808' href='#n1808'>1808</a>
<a id='n1809' href='#n1809'>1809</a>
<a id='n1810' href='#n1810'>1810</a>
<a id='n1811' href='#n1811'>1811</a>
<a id='n1812' href='#n1812'>1812</a>
<a id='n1813' href='#n1813'>1813</a>
<a id='n1814' href='#n1814'>1814</a>
<a id='n1815' href='#n1815'>1815</a>
<a id='n1816' href='#n1816'>1816</a>
<a id='n1817' href='#n1817'>1817</a>
<a id='n1818' href='#n1818'>1818</a>
<a id='n1819' href='#n1819'>1819</a>
<a id='n1820' href='#n1820'>1820</a>
<a id='n1821' href='#n1821'>1821</a>
<a id='n1822' href='#n1822'>1822</a>
<a id='n1823' href='#n1823'>1823</a>
<a id='n1824' href='#n1824'>1824</a>
<a id='n1825' href='#n1825'>1825</a>
<a id='n1826' href='#n1826'>1826</a>
<a id='n1827' href='#n1827'>1827</a>
<a id='n1828' href='#n1828'>1828</a>
<a id='n1829' href='#n1829'>1829</a>
<a id='n1830' href='#n1830'>1830</a>
<a id='n1831' href='#n1831'>1831</a>
<a id='n1832' href='#n1832'>1832</a>
<a id='n1833' href='#n1833'>1833</a>
<a id='n1834' href='#n1834'>1834</a>
<a id='n1835' href='#n1835'>1835</a>
<a id='n1836' href='#n1836'>1836</a>
<a id='n1837' href='#n1837'>1837</a>
<a id='n1838' href='#n1838'>1838</a>
<a id='n1839' href='#n1839'>1839</a>
<a id='n1840' href='#n1840'>1840</a>
<a id='n1841' href='#n1841'>1841</a>
<a id='n1842' href='#n1842'>1842</a>
<a id='n1843' href='#n1843'>1843</a>
<a id='n1844' href='#n1844'>1844</a>
<a id='n1845' href='#n1845'>1845</a>
<a id='n1846' href='#n1846'>1846</a>
<a id='n1847' href='#n1847'>1847</a>
<a id='n1848' href='#n1848'>1848</a>
<a id='n1849' href='#n1849'>1849</a>
<a id='n1850' href='#n1850'>1850</a>
<a id='n1851' href='#n1851'>1851</a>
<a id='n1852' href='#n1852'>1852</a>
<a id='n1853' href='#n1853'>1853</a>
<a id='n1854' href='#n1854'>1854</a>
<a id='n1855' href='#n1855'>1855</a>
<a id='n1856' href='#n1856'>1856</a>
<a id='n1857' href='#n1857'>1857</a>
<a id='n1858' href='#n1858'>1858</a>
<a id='n1859' href='#n1859'>1859</a>
<a id='n1860' href='#n1860'>1860</a>
<a id='n1861' href='#n1861'>1861</a>
<a id='n1862' href='#n1862'>1862</a>
<a id='n1863' href='#n1863'>1863</a>
<a id='n1864' href='#n1864'>1864</a>
<a id='n1865' href='#n1865'>1865</a>
<a id='n1866' href='#n1866'>1866</a>
<a id='n1867' href='#n1867'>1867</a>
<a id='n1868' href='#n1868'>1868</a>
<a id='n1869' href='#n1869'>1869</a>
<a id='n1870' href='#n1870'>1870</a>
<a id='n1871' href='#n1871'>1871</a>
<a id='n1872' href='#n1872'>1872</a>
<a id='n1873' href='#n1873'>1873</a>
<a id='n1874' href='#n1874'>1874</a>
<a id='n1875' href='#n1875'>1875</a>
<a id='n1876' href='#n1876'>1876</a>
<a id='n1877' href='#n1877'>1877</a>
<a id='n1878' href='#n1878'>1878</a>
<a id='n1879' href='#n1879'>1879</a>
<a id='n1880' href='#n1880'>1880</a>
<a id='n1881' href='#n1881'>1881</a>
<a id='n1882' href='#n1882'>1882</a>
<a id='n1883' href='#n1883'>1883</a>
<a id='n1884' href='#n1884'>1884</a>
<a id='n1885' href='#n1885'>1885</a>
<a id='n1886' href='#n1886'>1886</a>
<a id='n1887' href='#n1887'>1887</a>
<a id='n1888' href='#n1888'>1888</a>
<a id='n1889' href='#n1889'>1889</a>
<a id='n1890' href='#n1890'>1890</a>
<a id='n1891' href='#n1891'>1891</a>
<a id='n1892' href='#n1892'>1892</a>
<a id='n1893' href='#n1893'>1893</a>
<a id='n1894' href='#n1894'>1894</a>
<a id='n1895' href='#n1895'>1895</a>
<a id='n1896' href='#n1896'>1896</a>
<a id='n1897' href='#n1897'>1897</a>
<a id='n1898' href='#n1898'>1898</a>
<a id='n1899' href='#n1899'>1899</a>
<a id='n1900' href='#n1900'>1900</a>
<a id='n1901' href='#n1901'>1901</a>
<a id='n1902' href='#n1902'>1902</a>
<a id='n1903' href='#n1903'>1903</a>
<a id='n1904' href='#n1904'>1904</a>
<a id='n1905' href='#n1905'>1905</a>
<a id='n1906' href='#n1906'>1906</a>
<a id='n1907' href='#n1907'>1907</a>
<a id='n1908' href='#n1908'>1908</a>
<a id='n1909' href='#n1909'>1909</a>
<a id='n1910' href='#n1910'>1910</a>
<a id='n1911' href='#n1911'>1911</a>
<a id='n1912' href='#n1912'>1912</a>
<a id='n1913' href='#n1913'>1913</a>
<a id='n1914' href='#n1914'>1914</a>
<a id='n1915' href='#n1915'>1915</a>
<a id='n1916' href='#n1916'>1916</a>
<a id='n1917' href='#n1917'>1917</a>
<a id='n1918' href='#n1918'>1918</a>
<a id='n1919' href='#n1919'>1919</a>
<a id='n1920' href='#n1920'>1920</a>
<a id='n1921' href='#n1921'>1921</a>
<a id='n1922' href='#n1922'>1922</a>
<a id='n1923' href='#n1923'>1923</a>
<a id='n1924' href='#n1924'>1924</a>
<a id='n1925' href='#n1925'>1925</a>
<a id='n1926' href='#n1926'>1926</a>
<a id='n1927' href='#n1927'>1927</a>
<a id='n1928' href='#n1928'>1928</a>
<a id='n1929' href='#n1929'>1929</a>
<a id='n1930' href='#n1930'>1930</a>
<a id='n1931' href='#n1931'>1931</a>
<a id='n1932' href='#n1932'>1932</a>
<a id='n1933' href='#n1933'>1933</a>
<a id='n1934' href='#n1934'>1934</a>
<a id='n1935' href='#n1935'>1935</a>
<a id='n1936' href='#n1936'>1936</a>
<a id='n1937' href='#n1937'>1937</a>
<a id='n1938' href='#n1938'>1938</a>
<a id='n1939' href='#n1939'>1939</a>
<a id='n1940' href='#n1940'>1940</a>
<a id='n1941' href='#n1941'>1941</a>
<a id='n1942' href='#n1942'>1942</a>
<a id='n1943' href='#n1943'>1943</a>
<a id='n1944' href='#n1944'>1944</a>
<a id='n1945' href='#n1945'>1945</a>
<a id='n1946' href='#n1946'>1946</a>
<a id='n1947' href='#n1947'>1947</a>
<a id='n1948' href='#n1948'>1948</a>
<a id='n1949' href='#n1949'>1949</a>
<a id='n1950' href='#n1950'>1950</a>
<a id='n1951' href='#n1951'>1951</a>
<a id='n1952' href='#n1952'>1952</a>
<a id='n1953' href='#n1953'>1953</a>
<a id='n1954' href='#n1954'>1954</a>
<a id='n1955' href='#n1955'>1955</a>
<a id='n1956' href='#n1956'>1956</a>
<a id='n1957' href='#n1957'>1957</a>
<a id='n1958' href='#n1958'>1958</a>
<a id='n1959' href='#n1959'>1959</a>
<a id='n1960' href='#n1960'>1960</a>
<a id='n1961' href='#n1961'>1961</a>
<a id='n1962' href='#n1962'>1962</a>
<a id='n1963' href='#n1963'>1963</a>
<a id='n1964' href='#n1964'>1964</a>
<a id='n1965' href='#n1965'>1965</a>
<a id='n1966' href='#n1966'>1966</a>
<a id='n1967' href='#n1967'>1967</a>
<a id='n1968' href='#n1968'>1968</a>
<a id='n1969' href='#n1969'>1969</a>
<a id='n1970' href='#n1970'>1970</a>
<a id='n1971' href='#n1971'>1971</a>
<a id='n1972' href='#n1972'>1972</a>
<a id='n1973' href='#n1973'>1973</a>
<a id='n1974' href='#n1974'>1974</a>
<a id='n1975' href='#n1975'>1975</a>
<a id='n1976' href='#n1976'>1976</a>
<a id='n1977' href='#n1977'>1977</a>
<a id='n1978' href='#n1978'>1978</a>
<a id='n1979' href='#n1979'>1979</a>
<a id='n1980' href='#n1980'>1980</a>
<a id='n1981' href='#n1981'>1981</a>
<a id='n1982' href='#n1982'>1982</a>
<a id='n1983' href='#n1983'>1983</a>
<a id='n1984' href='#n1984'>1984</a>
<a id='n1985' href='#n1985'>1985</a>
<a id='n1986' href='#n1986'>1986</a>
<a id='n1987' href='#n1987'>1987</a>
<a id='n1988' href='#n1988'>1988</a>
<a id='n1989' href='#n1989'>1989</a>
<a id='n1990' href='#n1990'>1990</a>
<a id='n1991' href='#n1991'>1991</a>
<a id='n1992' href='#n1992'>1992</a>
<a id='n1993' href='#n1993'>1993</a>
<a id='n1994' href='#n1994'>1994</a>
<a id='n1995' href='#n1995'>1995</a>
<a id='n1996' href='#n1996'>1996</a>
<a id='n1997' href='#n1997'>1997</a>
<a id='n1998' href='#n1998'>1998</a>
<a id='n1999' href='#n1999'>1999</a>
<a id='n2000' href='#n2000'>2000</a>
<a id='n2001' href='#n2001'>2001</a>
<a id='n2002' href='#n2002'>2002</a>
<a id='n2003' href='#n2003'>2003</a>
<a id='n2004' href='#n2004'>2004</a>
<a id='n2005' href='#n2005'>2005</a>
<a id='n2006' href='#n2006'>2006</a>
<a id='n2007' href='#n2007'>2007</a>
<a id='n2008' href='#n2008'>2008</a>
<a id='n2009' href='#n2009'>2009</a>
<a id='n2010' href='#n2010'>2010</a>
<a id='n2011' href='#n2011'>2011</a>
<a id='n2012' href='#n2012'>2012</a>
<a id='n2013' href='#n2013'>2013</a>
<a id='n2014' href='#n2014'>2014</a>
<a id='n2015' href='#n2015'>2015</a>
<a id='n2016' href='#n2016'>2016</a>
<a id='n2017' href='#n2017'>2017</a>
<a id='n2018' href='#n2018'>2018</a>
<a id='n2019' href='#n2019'>2019</a>
<a id='n2020' href='#n2020'>2020</a>
<a id='n2021' href='#n2021'>2021</a>
<a id='n2022' href='#n2022'>2022</a>
<a id='n2023' href='#n2023'>2023</a>
<a id='n2024' href='#n2024'>2024</a>
<a id='n2025' href='#n2025'>2025</a>
<a id='n2026' href='#n2026'>2026</a>
<a id='n2027' href='#n2027'>2027</a>
<a id='n2028' href='#n2028'>2028</a>
<a id='n2029' href='#n2029'>2029</a>
<a id='n2030' href='#n2030'>2030</a>
<a id='n2031' href='#n2031'>2031</a>
<a id='n2032' href='#n2032'>2032</a>
<a id='n2033' href='#n2033'>2033</a>
<a id='n2034' href='#n2034'>2034</a>
<a id='n2035' href='#n2035'>2035</a>
<a id='n2036' href='#n2036'>2036</a>
<a id='n2037' href='#n2037'>2037</a>
<a id='n2038' href='#n2038'>2038</a>
<a id='n2039' href='#n2039'>2039</a>
<a id='n2040' href='#n2040'>2040</a>
<a id='n2041' href='#n2041'>2041</a>
<a id='n2042' href='#n2042'>2042</a>
<a id='n2043' href='#n2043'>2043</a>
<a id='n2044' href='#n2044'>2044</a>
<a id='n2045' href='#n2045'>2045</a>
<a id='n2046' href='#n2046'>2046</a>
<a id='n2047' href='#n2047'>2047</a>
<a id='n2048' href='#n2048'>2048</a>
<a id='n2049' href='#n2049'>2049</a>
<a id='n2050' href='#n2050'>2050</a>
<a id='n2051' href='#n2051'>2051</a>
<a id='n2052' href='#n2052'>2052</a>
<a id='n2053' href='#n2053'>2053</a>
<a id='n2054' href='#n2054'>2054</a>
<a id='n2055' href='#n2055'>2055</a>
<a id='n2056' href='#n2056'>2056</a>
<a id='n2057' href='#n2057'>2057</a>
<a id='n2058' href='#n2058'>2058</a>
<a id='n2059' href='#n2059'>2059</a>
<a id='n2060' href='#n2060'>2060</a>
<a id='n2061' href='#n2061'>2061</a>
<a id='n2062' href='#n2062'>2062</a>
<a id='n2063' href='#n2063'>2063</a>
<a id='n2064' href='#n2064'>2064</a>
<a id='n2065' href='#n2065'>2065</a>
<a id='n2066' href='#n2066'>2066</a>
<a id='n2067' href='#n2067'>2067</a>
<a id='n2068' href='#n2068'>2068</a>
<a id='n2069' href='#n2069'>2069</a>
<a id='n2070' href='#n2070'>2070</a>
<a id='n2071' href='#n2071'>2071</a>
<a id='n2072' href='#n2072'>2072</a>
<a id='n2073' href='#n2073'>2073</a>
<a id='n2074' href='#n2074'>2074</a>
<a id='n2075' href='#n2075'>2075</a>
<a id='n2076' href='#n2076'>2076</a>
<a id='n2077' href='#n2077'>2077</a>
<a id='n2078' href='#n2078'>2078</a>
<a id='n2079' href='#n2079'>2079</a>
<a id='n2080' href='#n2080'>2080</a>
<a id='n2081' href='#n2081'>2081</a>
<a id='n2082' href='#n2082'>2082</a>
<a id='n2083' href='#n2083'>2083</a>
<a id='n2084' href='#n2084'>2084</a>
<a id='n2085' href='#n2085'>2085</a>
<a id='n2086' href='#n2086'>2086</a>
<a id='n2087' href='#n2087'>2087</a>
<a id='n2088' href='#n2088'>2088</a>
<a id='n2089' href='#n2089'>2089</a>
<a id='n2090' href='#n2090'>2090</a>
<a id='n2091' href='#n2091'>2091</a>
<a id='n2092' href='#n2092'>2092</a>
<a id='n2093' href='#n2093'>2093</a>
<a id='n2094' href='#n2094'>2094</a>
<a id='n2095' href='#n2095'>2095</a>
<a id='n2096' href='#n2096'>2096</a>
<a id='n2097' href='#n2097'>2097</a>
<a id='n2098' href='#n2098'>2098</a>
<a id='n2099' href='#n2099'>2099</a>
<a id='n2100' href='#n2100'>2100</a>
<a id='n2101' href='#n2101'>2101</a>
<a id='n2102' href='#n2102'>2102</a>
<a id='n2103' href='#n2103'>2103</a>
<a id='n2104' href='#n2104'>2104</a>
<a id='n2105' href='#n2105'>2105</a>
<a id='n2106' href='#n2106'>2106</a>
<a id='n2107' href='#n2107'>2107</a>
<a id='n2108' href='#n2108'>2108</a>
<a id='n2109' href='#n2109'>2109</a>
<a id='n2110' href='#n2110'>2110</a>
<a id='n2111' href='#n2111'>2111</a>
<a id='n2112' href='#n2112'>2112</a>
<a id='n2113' href='#n2113'>2113</a>
<a id='n2114' href='#n2114'>2114</a>
<a id='n2115' href='#n2115'>2115</a>
<a id='n2116' href='#n2116'>2116</a>
<a id='n2117' href='#n2117'>2117</a>
<a id='n2118' href='#n2118'>2118</a>
<a id='n2119' href='#n2119'>2119</a>
<a id='n2120' href='#n2120'>2120</a>
<a id='n2121' href='#n2121'>2121</a>
<a id='n2122' href='#n2122'>2122</a>
<a id='n2123' href='#n2123'>2123</a>
<a id='n2124' href='#n2124'>2124</a>
<a id='n2125' href='#n2125'>2125</a>
<a id='n2126' href='#n2126'>2126</a>
<a id='n2127' href='#n2127'>2127</a>
<a id='n2128' href='#n2128'>2128</a>
<a id='n2129' href='#n2129'>2129</a>
<a id='n2130' href='#n2130'>2130</a>
<a id='n2131' href='#n2131'>2131</a>
<a id='n2132' href='#n2132'>2132</a>
<a id='n2133' href='#n2133'>2133</a>
<a id='n2134' href='#n2134'>2134</a>
<a id='n2135' href='#n2135'>2135</a>
<a id='n2136' href='#n2136'>2136</a>
<a id='n2137' href='#n2137'>2137</a>
<a id='n2138' href='#n2138'>2138</a>
<a id='n2139' href='#n2139'>2139</a>
<a id='n2140' href='#n2140'>2140</a>
<a id='n2141' href='#n2141'>2141</a>
<a id='n2142' href='#n2142'>2142</a>
<a id='n2143' href='#n2143'>2143</a>
<a id='n2144' href='#n2144'>2144</a>
<a id='n2145' href='#n2145'>2145</a>
<a id='n2146' href='#n2146'>2146</a>
<a id='n2147' href='#n2147'>2147</a>
<a id='n2148' href='#n2148'>2148</a>
<a id='n2149' href='#n2149'>2149</a>
<a id='n2150' href='#n2150'>2150</a>
<a id='n2151' href='#n2151'>2151</a>
<a id='n2152' href='#n2152'>2152</a>
<a id='n2153' href='#n2153'>2153</a>
<a id='n2154' href='#n2154'>2154</a>
<a id='n2155' href='#n2155'>2155</a>
<a id='n2156' href='#n2156'>2156</a>
<a id='n2157' href='#n2157'>2157</a>
<a id='n2158' href='#n2158'>2158</a>
<a id='n2159' href='#n2159'>2159</a>
<a id='n2160' href='#n2160'>2160</a>
<a id='n2161' href='#n2161'>2161</a>
<a id='n2162' href='#n2162'>2162</a>
<a id='n2163' href='#n2163'>2163</a>
<a id='n2164' href='#n2164'>2164</a>
<a id='n2165' href='#n2165'>2165</a>
<a id='n2166' href='#n2166'>2166</a>
<a id='n2167' href='#n2167'>2167</a>
<a id='n2168' href='#n2168'>2168</a>
<a id='n2169' href='#n2169'>2169</a>
<a id='n2170' href='#n2170'>2170</a>
<a id='n2171' href='#n2171'>2171</a>
<a id='n2172' href='#n2172'>2172</a>
<a id='n2173' href='#n2173'>2173</a>
<a id='n2174' href='#n2174'>2174</a>
<a id='n2175' href='#n2175'>2175</a>
<a id='n2176' href='#n2176'>2176</a>
<a id='n2177' href='#n2177'>2177</a>
<a id='n2178' href='#n2178'>2178</a>
<a id='n2179' href='#n2179'>2179</a>
<a id='n2180' href='#n2180'>2180</a>
<a id='n2181' href='#n2181'>2181</a>
<a id='n2182' href='#n2182'>2182</a>
<a id='n2183' href='#n2183'>2183</a>
<a id='n2184' href='#n2184'>2184</a>
<a id='n2185' href='#n2185'>2185</a>
<a id='n2186' href='#n2186'>2186</a>
<a id='n2187' href='#n2187'>2187</a>
<a id='n2188' href='#n2188'>2188</a>
<a id='n2189' href='#n2189'>2189</a>
<a id='n2190' href='#n2190'>2190</a>
<a id='n2191' href='#n2191'>2191</a>
<a id='n2192' href='#n2192'>2192</a>
<a id='n2193' href='#n2193'>2193</a>
<a id='n2194' href='#n2194'>2194</a>
<a id='n2195' href='#n2195'>2195</a>
<a id='n2196' href='#n2196'>2196</a>
<a id='n2197' href='#n2197'>2197</a>
<a id='n2198' href='#n2198'>2198</a>
<a id='n2199' href='#n2199'>2199</a>
<a id='n2200' href='#n2200'>2200</a>
<a id='n2201' href='#n2201'>2201</a>
<a id='n2202' href='#n2202'>2202</a>
<a id='n2203' href='#n2203'>2203</a>
<a id='n2204' href='#n2204'>2204</a>
<a id='n2205' href='#n2205'>2205</a>
<a id='n2206' href='#n2206'>2206</a>
<a id='n2207' href='#n2207'>2207</a>
<a id='n2208' href='#n2208'>2208</a>
<a id='n2209' href='#n2209'>2209</a>
<a id='n2210' href='#n2210'>2210</a>
<a id='n2211' href='#n2211'>2211</a>
<a id='n2212' href='#n2212'>2212</a>
<a id='n2213' href='#n2213'>2213</a>
<a id='n2214' href='#n2214'>2214</a>
<a id='n2215' href='#n2215'>2215</a>
<a id='n2216' href='#n2216'>2216</a>
<a id='n2217' href='#n2217'>2217</a>
<a id='n2218' href='#n2218'>2218</a>
<a id='n2219' href='#n2219'>2219</a>
<a id='n2220' href='#n2220'>2220</a>
<a id='n2221' href='#n2221'>2221</a>
<a id='n2222' href='#n2222'>2222</a>
<a id='n2223' href='#n2223'>2223</a>
<a id='n2224' href='#n2224'>2224</a>
<a id='n2225' href='#n2225'>2225</a>
<a id='n2226' href='#n2226'>2226</a>
<a id='n2227' href='#n2227'>2227</a>
<a id='n2228' href='#n2228'>2228</a>
<a id='n2229' href='#n2229'>2229</a>
<a id='n2230' href='#n2230'>2230</a>
<a id='n2231' href='#n2231'>2231</a>
<a id='n2232' href='#n2232'>2232</a>
<a id='n2233' href='#n2233'>2233</a>
<a id='n2234' href='#n2234'>2234</a>
<a id='n2235' href='#n2235'>2235</a>
<a id='n2236' href='#n2236'>2236</a>
<a id='n2237' href='#n2237'>2237</a>
<a id='n2238' href='#n2238'>2238</a>
<a id='n2239' href='#n2239'>2239</a>
<a id='n2240' href='#n2240'>2240</a>
<a id='n2241' href='#n2241'>2241</a>
<a id='n2242' href='#n2242'>2242</a>
<a id='n2243' href='#n2243'>2243</a>
<a id='n2244' href='#n2244'>2244</a>
<a id='n2245' href='#n2245'>2245</a>
<a id='n2246' href='#n2246'>2246</a>
<a id='n2247' href='#n2247'>2247</a>
<a id='n2248' href='#n2248'>2248</a>
<a id='n2249' href='#n2249'>2249</a>
<a id='n2250' href='#n2250'>2250</a>
<a id='n2251' href='#n2251'>2251</a>
<a id='n2252' href='#n2252'>2252</a>
<a id='n2253' href='#n2253'>2253</a>
<a id='n2254' href='#n2254'>2254</a>
<a id='n2255' href='#n2255'>2255</a>
<a id='n2256' href='#n2256'>2256</a>
<a id='n2257' href='#n2257'>2257</a>
<a id='n2258' href='#n2258'>2258</a>
<a id='n2259' href='#n2259'>2259</a>
<a id='n2260' href='#n2260'>2260</a>
<a id='n2261' href='#n2261'>2261</a>
<a id='n2262' href='#n2262'>2262</a>
<a id='n2263' href='#n2263'>2263</a>
<a id='n2264' href='#n2264'>2264</a>
<a id='n2265' href='#n2265'>2265</a>
<a id='n2266' href='#n2266'>2266</a>
<a id='n2267' href='#n2267'>2267</a>
<a id='n2268' href='#n2268'>2268</a>
<a id='n2269' href='#n2269'>2269</a>
<a id='n2270' href='#n2270'>2270</a>
<a id='n2271' href='#n2271'>2271</a>
<a id='n2272' href='#n2272'>2272</a>
<a id='n2273' href='#n2273'>2273</a>
<a id='n2274' href='#n2274'>2274</a>
<a id='n2275' href='#n2275'>2275</a>
<a id='n2276' href='#n2276'>2276</a>
<a id='n2277' href='#n2277'>2277</a>
<a id='n2278' href='#n2278'>2278</a>
<a id='n2279' href='#n2279'>2279</a>
<a id='n2280' href='#n2280'>2280</a>
<a id='n2281' href='#n2281'>2281</a>
<a id='n2282' href='#n2282'>2282</a>
<a id='n2283' href='#n2283'>2283</a>
<a id='n2284' href='#n2284'>2284</a>
<a id='n2285' href='#n2285'>2285</a>
<a id='n2286' href='#n2286'>2286</a>
<a id='n2287' href='#n2287'>2287</a>
<a id='n2288' href='#n2288'>2288</a>
<a id='n2289' href='#n2289'>2289</a>
<a id='n2290' href='#n2290'>2290</a>
<a id='n2291' href='#n2291'>2291</a>
<a id='n2292' href='#n2292'>2292</a>
<a id='n2293' href='#n2293'>2293</a>
<a id='n2294' href='#n2294'>2294</a>
<a id='n2295' href='#n2295'>2295</a>
<a id='n2296' href='#n2296'>2296</a>
<a id='n2297' href='#n2297'>2297</a>
<a id='n2298' href='#n2298'>2298</a>
<a id='n2299' href='#n2299'>2299</a>
<a id='n2300' href='#n2300'>2300</a>
<a id='n2301' href='#n2301'>2301</a>
<a id='n2302' href='#n2302'>2302</a>
<a id='n2303' href='#n2303'>2303</a>
<a id='n2304' href='#n2304'>2304</a>
<a id='n2305' href='#n2305'>2305</a>
<a id='n2306' href='#n2306'>2306</a>
<a id='n2307' href='#n2307'>2307</a>
<a id='n2308' href='#n2308'>2308</a>
<a id='n2309' href='#n2309'>2309</a>
<a id='n2310' href='#n2310'>2310</a>
<a id='n2311' href='#n2311'>2311</a>
<a id='n2312' href='#n2312'>2312</a>
<a id='n2313' href='#n2313'>2313</a>
<a id='n2314' href='#n2314'>2314</a>
<a id='n2315' href='#n2315'>2315</a>
<a id='n2316' href='#n2316'>2316</a>
<a id='n2317' href='#n2317'>2317</a>
<a id='n2318' href='#n2318'>2318</a>
<a id='n2319' href='#n2319'>2319</a>
<a id='n2320' href='#n2320'>2320</a>
<a id='n2321' href='#n2321'>2321</a>
<a id='n2322' href='#n2322'>2322</a>
<a id='n2323' href='#n2323'>2323</a>
<a id='n2324' href='#n2324'>2324</a>
<a id='n2325' href='#n2325'>2325</a>
<a id='n2326' href='#n2326'>2326</a>
<a id='n2327' href='#n2327'>2327</a>
<a id='n2328' href='#n2328'>2328</a>
<a id='n2329' href='#n2329'>2329</a>
<a id='n2330' href='#n2330'>2330</a>
<a id='n2331' href='#n2331'>2331</a>
<a id='n2332' href='#n2332'>2332</a>
<a id='n2333' href='#n2333'>2333</a>
<a id='n2334' href='#n2334'>2334</a>
<a id='n2335' href='#n2335'>2335</a>
<a id='n2336' href='#n2336'>2336</a>
<a id='n2337' href='#n2337'>2337</a>
<a id='n2338' href='#n2338'>2338</a>
<a id='n2339' href='#n2339'>2339</a>
<a id='n2340' href='#n2340'>2340</a>
<a id='n2341' href='#n2341'>2341</a>
<a id='n2342' href='#n2342'>2342</a>
<a id='n2343' href='#n2343'>2343</a>
<a id='n2344' href='#n2344'>2344</a>
<a id='n2345' href='#n2345'>2345</a>
<a id='n2346' href='#n2346'>2346</a>
<a id='n2347' href='#n2347'>2347</a>
<a id='n2348' href='#n2348'>2348</a>
<a id='n2349' href='#n2349'>2349</a>
<a id='n2350' href='#n2350'>2350</a>
<a id='n2351' href='#n2351'>2351</a>
<a id='n2352' href='#n2352'>2352</a>
<a id='n2353' href='#n2353'>2353</a>
<a id='n2354' href='#n2354'>2354</a>
<a id='n2355' href='#n2355'>2355</a>
<a id='n2356' href='#n2356'>2356</a>
<a id='n2357' href='#n2357'>2357</a>
<a id='n2358' href='#n2358'>2358</a>
<a id='n2359' href='#n2359'>2359</a>
<a id='n2360' href='#n2360'>2360</a>
<a id='n2361' href='#n2361'>2361</a>
<a id='n2362' href='#n2362'>2362</a>
<a id='n2363' href='#n2363'>2363</a>
<a id='n2364' href='#n2364'>2364</a>
<a id='n2365' href='#n2365'>2365</a>
<a id='n2366' href='#n2366'>2366</a>
<a id='n2367' href='#n2367'>2367</a>
<a id='n2368' href='#n2368'>2368</a>
<a id='n2369' href='#n2369'>2369</a>
<a id='n2370' href='#n2370'>2370</a>
<a id='n2371' href='#n2371'>2371</a>
<a id='n2372' href='#n2372'>2372</a>
<a id='n2373' href='#n2373'>2373</a>
<a id='n2374' href='#n2374'>2374</a>
<a id='n2375' href='#n2375'>2375</a>
<a id='n2376' href='#n2376'>2376</a>
<a id='n2377' href='#n2377'>2377</a>
<a id='n2378' href='#n2378'>2378</a>
<a id='n2379' href='#n2379'>2379</a>
<a id='n2380' href='#n2380'>2380</a>
<a id='n2381' href='#n2381'>2381</a>
<a id='n2382' href='#n2382'>2382</a>
<a id='n2383' href='#n2383'>2383</a>
<a id='n2384' href='#n2384'>2384</a>
<a id='n2385' href='#n2385'>2385</a>
<a id='n2386' href='#n2386'>2386</a>
<a id='n2387' href='#n2387'>2387</a>
<a id='n2388' href='#n2388'>2388</a>
<a id='n2389' href='#n2389'>2389</a>
<a id='n2390' href='#n2390'>2390</a>
<a id='n2391' href='#n2391'>2391</a>
<a id='n2392' href='#n2392'>2392</a>
<a id='n2393' href='#n2393'>2393</a>
<a id='n2394' href='#n2394'>2394</a>
<a id='n2395' href='#n2395'>2395</a>
<a id='n2396' href='#n2396'>2396</a>
<a id='n2397' href='#n2397'>2397</a>
<a id='n2398' href='#n2398'>2398</a>
<a id='n2399' href='#n2399'>2399</a>
<a id='n2400' href='#n2400'>2400</a>
<a id='n2401' href='#n2401'>2401</a>
<a id='n2402' href='#n2402'>2402</a>
<a id='n2403' href='#n2403'>2403</a>
<a id='n2404' href='#n2404'>2404</a>
<a id='n2405' href='#n2405'>2405</a>
<a id='n2406' href='#n2406'>2406</a>
<a id='n2407' href='#n2407'>2407</a>
<a id='n2408' href='#n2408'>2408</a>
<a id='n2409' href='#n2409'>2409</a>
<a id='n2410' href='#n2410'>2410</a>
<a id='n2411' href='#n2411'>2411</a>
<a id='n2412' href='#n2412'>2412</a>
<a id='n2413' href='#n2413'>2413</a>
<a id='n2414' href='#n2414'>2414</a>
<a id='n2415' href='#n2415'>2415</a>
<a id='n2416' href='#n2416'>2416</a>
<a id='n2417' href='#n2417'>2417</a>
<a id='n2418' href='#n2418'>2418</a>
<a id='n2419' href='#n2419'>2419</a>
<a id='n2420' href='#n2420'>2420</a>
<a id='n2421' href='#n2421'>2421</a>
<a id='n2422' href='#n2422'>2422</a>
<a id='n2423' href='#n2423'>2423</a>
<a id='n2424' href='#n2424'>2424</a>
<a id='n2425' href='#n2425'>2425</a>
<a id='n2426' href='#n2426'>2426</a>
<a id='n2427' href='#n2427'>2427</a>
<a id='n2428' href='#n2428'>2428</a>
<a id='n2429' href='#n2429'>2429</a>
<a id='n2430' href='#n2430'>2430</a>
<a id='n2431' href='#n2431'>2431</a>
<a id='n2432' href='#n2432'>2432</a>
<a id='n2433' href='#n2433'>2433</a>
<a id='n2434' href='#n2434'>2434</a>
<a id='n2435' href='#n2435'>2435</a>
<a id='n2436' href='#n2436'>2436</a>
<a id='n2437' href='#n2437'>2437</a>
<a id='n2438' href='#n2438'>2438</a>
<a id='n2439' href='#n2439'>2439</a>
<a id='n2440' href='#n2440'>2440</a>
<a id='n2441' href='#n2441'>2441</a>
<a id='n2442' href='#n2442'>2442</a>
<a id='n2443' href='#n2443'>2443</a>
<a id='n2444' href='#n2444'>2444</a>
<a id='n2445' href='#n2445'>2445</a>
<a id='n2446' href='#n2446'>2446</a>
<a id='n2447' href='#n2447'>2447</a>
<a id='n2448' href='#n2448'>2448</a>
<a id='n2449' href='#n2449'>2449</a>
<a id='n2450' href='#n2450'>2450</a>
<a id='n2451' href='#n2451'>2451</a>
<a id='n2452' href='#n2452'>2452</a>
<a id='n2453' href='#n2453'>2453</a>
<a id='n2454' href='#n2454'>2454</a>
<a id='n2455' href='#n2455'>2455</a>
<a id='n2456' href='#n2456'>2456</a>
<a id='n2457' href='#n2457'>2457</a>
<a id='n2458' href='#n2458'>2458</a>
<a id='n2459' href='#n2459'>2459</a>
<a id='n2460' href='#n2460'>2460</a>
<a id='n2461' href='#n2461'>2461</a>
<a id='n2462' href='#n2462'>2462</a>
<a id='n2463' href='#n2463'>2463</a>
<a id='n2464' href='#n2464'>2464</a>
<a id='n2465' href='#n2465'>2465</a>
<a id='n2466' href='#n2466'>2466</a>
<a id='n2467' href='#n2467'>2467</a>
<a id='n2468' href='#n2468'>2468</a>
<a id='n2469' href='#n2469'>2469</a>
<a id='n2470' href='#n2470'>2470</a>
<a id='n2471' href='#n2471'>2471</a>
<a id='n2472' href='#n2472'>2472</a>
<a id='n2473' href='#n2473'>2473</a>
<a id='n2474' href='#n2474'>2474</a>
<a id='n2475' href='#n2475'>2475</a>
<a id='n2476' href='#n2476'>2476</a>
<a id='n2477' href='#n2477'>2477</a>
<a id='n2478' href='#n2478'>2478</a>
<a id='n2479' href='#n2479'>2479</a>
<a id='n2480' href='#n2480'>2480</a>
<a id='n2481' href='#n2481'>2481</a>
<a id='n2482' href='#n2482'>2482</a>
<a id='n2483' href='#n2483'>2483</a>
<a id='n2484' href='#n2484'>2484</a>
<a id='n2485' href='#n2485'>2485</a>
<a id='n2486' href='#n2486'>2486</a>
<a id='n2487' href='#n2487'>2487</a>
<a id='n2488' href='#n2488'>2488</a>
<a id='n2489' href='#n2489'>2489</a>
<a id='n2490' href='#n2490'>2490</a>
<a id='n2491' href='#n2491'>2491</a>
<a id='n2492' href='#n2492'>2492</a>
<a id='n2493' href='#n2493'>2493</a>
<a id='n2494' href='#n2494'>2494</a>
<a id='n2495' href='#n2495'>2495</a>
<a id='n2496' href='#n2496'>2496</a>
<a id='n2497' href='#n2497'>2497</a>
<a id='n2498' href='#n2498'>2498</a>
<a id='n2499' href='#n2499'>2499</a>
<a id='n2500' href='#n2500'>2500</a>
<a id='n2501' href='#n2501'>2501</a>
<a id='n2502' href='#n2502'>2502</a>
<a id='n2503' href='#n2503'>2503</a>
<a id='n2504' href='#n2504'>2504</a>
<a id='n2505' href='#n2505'>2505</a>
<a id='n2506' href='#n2506'>2506</a>
<a id='n2507' href='#n2507'>2507</a>
<a id='n2508' href='#n2508'>2508</a>
<a id='n2509' href='#n2509'>2509</a>
<a id='n2510' href='#n2510'>2510</a>
<a id='n2511' href='#n2511'>2511</a>
<a id='n2512' href='#n2512'>2512</a>
<a id='n2513' href='#n2513'>2513</a>
<a id='n2514' href='#n2514'>2514</a>
<a id='n2515' href='#n2515'>2515</a>
<a id='n2516' href='#n2516'>2516</a>
<a id='n2517' href='#n2517'>2517</a>
<a id='n2518' href='#n2518'>2518</a>
<a id='n2519' href='#n2519'>2519</a>
<a id='n2520' href='#n2520'>2520</a>
<a id='n2521' href='#n2521'>2521</a>
<a id='n2522' href='#n2522'>2522</a>
<a id='n2523' href='#n2523'>2523</a>
<a id='n2524' href='#n2524'>2524</a>
<a id='n2525' href='#n2525'>2525</a>
<a id='n2526' href='#n2526'>2526</a>
<a id='n2527' href='#n2527'>2527</a>
<a id='n2528' href='#n2528'>2528</a>
<a id='n2529' href='#n2529'>2529</a>
<a id='n2530' href='#n2530'>2530</a>
<a id='n2531' href='#n2531'>2531</a>
<a id='n2532' href='#n2532'>2532</a>
<a id='n2533' href='#n2533'>2533</a>
<a id='n2534' href='#n2534'>2534</a>
<a id='n2535' href='#n2535'>2535</a>
<a id='n2536' href='#n2536'>2536</a>
<a id='n2537' href='#n2537'>2537</a>
<a id='n2538' href='#n2538'>2538</a>
<a id='n2539' href='#n2539'>2539</a>
<a id='n2540' href='#n2540'>2540</a>
<a id='n2541' href='#n2541'>2541</a>
<a id='n2542' href='#n2542'>2542</a>
<a id='n2543' href='#n2543'>2543</a>
<a id='n2544' href='#n2544'>2544</a>
<a id='n2545' href='#n2545'>2545</a>
<a id='n2546' href='#n2546'>2546</a>
<a id='n2547' href='#n2547'>2547</a>
<a id='n2548' href='#n2548'>2548</a>
<a id='n2549' href='#n2549'>2549</a>
<a id='n2550' href='#n2550'>2550</a>
<a id='n2551' href='#n2551'>2551</a>
<a id='n2552' href='#n2552'>2552</a>
<a id='n2553' href='#n2553'>2553</a>
<a id='n2554' href='#n2554'>2554</a>
<a id='n2555' href='#n2555'>2555</a>
<a id='n2556' href='#n2556'>2556</a>
<a id='n2557' href='#n2557'>2557</a>
<a id='n2558' href='#n2558'>2558</a>
<a id='n2559' href='#n2559'>2559</a>
<a id='n2560' href='#n2560'>2560</a>
<a id='n2561' href='#n2561'>2561</a>
<a id='n2562' href='#n2562'>2562</a>
<a id='n2563' href='#n2563'>2563</a>
<a id='n2564' href='#n2564'>2564</a>
<a id='n2565' href='#n2565'>2565</a>
<a id='n2566' href='#n2566'>2566</a>
<a id='n2567' href='#n2567'>2567</a>
<a id='n2568' href='#n2568'>2568</a>
<a id='n2569' href='#n2569'>2569</a>
<a id='n2570' href='#n2570'>2570</a>
<a id='n2571' href='#n2571'>2571</a>
<a id='n2572' href='#n2572'>2572</a>
<a id='n2573' href='#n2573'>2573</a>
<a id='n2574' href='#n2574'>2574</a>
<a id='n2575' href='#n2575'>2575</a>
<a id='n2576' href='#n2576'>2576</a>
</pre></td>
<td class='lines'><pre><code><span class="hl kwa">&lt;!DOCTYPE</span> html<span class="hl kwa">&gt;</span>
<span class="hl kwa">&lt;html</span> <span class="hl kwb">dir</span>=<span class="hl str">&quot;ltr&quot;</span> <span class="hl kwb">lang</span>=<span class="hl str">&quot;en&quot;</span><span class="hl kwa">&gt;</span>
<span class="hl kwa">&lt;head&gt;</span>
<span class="hl kwa">&lt;meta</span> <span class="hl kwb">charset</span>=<span class="hl str">&quot;utf-8&quot;</span><span class="hl kwa">&gt;</span>
<span class="hl kwa">&lt;meta</span> <span class="hl kwb">http-equiv</span>=<span class="hl str">&quot;X-UA-Compatible&quot;</span> <span class="hl kwb">content</span>=<span class="hl str">&quot;IE=edge&quot;</span><span class="hl kwa">&gt;</span>
<span class="hl kwa">&lt;meta</span> <span class="hl kwb">name</span>=<span class="hl str">&quot;keywords&quot;</span> <span class="hl kwb">content</span>=<span class="hl str">&quot;&quot;</span> <span class="hl kwa">/&gt;</span>
<span class="hl kwa">&lt;meta</span> <span class="hl kwb">name</span>=<span class="hl str">&quot;description&quot;</span> <span class="hl kwb">content</span>=<span class="hl str">&quot;Rhea coding guidelines document&quot;</span> <span class="hl kwa">/&gt;</span>
<span class="hl kwa">&lt;title&gt;</span>phpBB3 <span class="hl kwd">&amp;bull;</span> Coding Guidelines<span class="hl kwa">&lt;/title&gt;</span>

<span class="hl kwa">&lt;link</span> <span class="hl kwb">href</span>=<span class="hl str">&quot;assets/css/stylesheet.css&quot;</span> <span class="hl kwb">rel</span>=<span class="hl str">&quot;stylesheet&quot;</span> <span class="hl kwb">type</span>=<span class="hl str">&quot;text/css&quot;</span> <span class="hl kwb">media</span>=<span class="hl str">&quot;screen&quot;</span> <span class="hl kwa">/&gt;</span>

<span class="hl kwa">&lt;/head&gt;</span>

<span class="hl kwa">&lt;body</span> <span class="hl kwb">id</span>=<span class="hl str">&quot;phpbb&quot;</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;section-docs&quot;</span><span class="hl kwa">&gt;</span>

<span class="hl kwa">&lt;div</span> <span class="hl kwb">id</span>=<span class="hl str">&quot;wrap&quot;</span><span class="hl kwa">&gt;</span>
	<span class="hl kwa">&lt;a</span> <span class="hl kwb">id</span>=<span class="hl str">&quot;top&quot;</span> <span class="hl kwb">name</span>=<span class="hl str">&quot;top&quot;</span> <span class="hl kwb">accesskey</span>=<span class="hl str">&quot;t&quot;</span><span class="hl kwa">&gt;&lt;/a&gt;</span>
	<span class="hl kwa">&lt;div</span> <span class="hl kwb">id</span>=<span class="hl str">&quot;page-header&quot;</span><span class="hl kwa">&gt;</span>
		<span class="hl kwa">&lt;div</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;headerbar&quot;</span><span class="hl kwa">&gt;</span>
			<span class="hl kwa">&lt;div</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;inner&quot;</span><span class="hl kwa">&gt;</span>

			<span class="hl kwa">&lt;div</span> <span class="hl kwb">id</span>=<span class="hl str">&quot;doc-description&quot;</span><span class="hl kwa">&gt;</span>
				<span class="hl kwa">&lt;a</span> <span class="hl kwb">href</span>=<span class="hl str">&quot;../index.php&quot;</span> <span class="hl kwb">id</span>=<span class="hl str">&quot;logo&quot;</span><span class="hl kwa">&gt;&lt;img</span> <span class="hl kwb">src</span>=<span class="hl str">&quot;assets/images/site_logo.gif&quot;</span> <span class="hl kwb">alt</span>=<span class="hl str">&quot;&quot;</span> <span class="hl kwa">/&gt;&lt;/a&gt;</span>
				<span class="hl kwa">&lt;h1&gt;</span>Coding Guidelines<span class="hl kwa">&lt;/h1&gt;</span>
				<span class="hl kwa">&lt;p&gt;</span>Rhea coding guidelines document<span class="hl kwa">&lt;/p&gt;</span>
				<span class="hl kwa">&lt;p</span> <span class="hl kwb">style</span>=<span class="hl str">&quot;display: none;&quot;</span><span class="hl kwa">&gt;&lt;a</span> <span class="hl kwb">href</span>=<span class="hl str">&quot;#start_here&quot;</span><span class="hl kwa">&gt;</span>Skip<span class="hl kwa">&lt;/a&gt;&lt;/p&gt;</span>
			<span class="hl kwa">&lt;/div&gt;</span>

			<span class="hl kwa">&lt;/div&gt;</span>
		<span class="hl kwa">&lt;/div&gt;</span>
	<span class="hl kwa">&lt;/div&gt;</span>

	<span class="hl kwa">&lt;a</span> <span class="hl kwb">name</span>=<span class="hl str">&quot;start_here&quot;</span><span class="hl kwa">&gt;&lt;/a&gt;</span>

	<span class="hl kwa">&lt;div</span> <span class="hl kwb">id</span>=<span class="hl str">&quot;page-body&quot;</span><span class="hl kwa">&gt;</span>

<span class="hl com">&lt;!-- BEGIN DOCUMENT --&gt;</span>

<span class="hl kwa">&lt;p</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;paragraph main-description&quot;</span><span class="hl kwa">&gt;</span>
	These are the phpBB Coding Guidelines for Rhea, all attempts should be made to follow them as closely as possible.
<span class="hl kwa">&lt;/p&gt;</span>

<span class="hl kwa">&lt;h1&gt;</span>Coding Guidelines<span class="hl kwa">&lt;/h1&gt;</span>

	<span class="hl kwa">&lt;div</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;paragraph menu&quot;</span><span class="hl kwa">&gt;</span>
		<span class="hl kwa">&lt;div</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;inner&quot;</span><span class="hl kwa">&gt;</span>

		<span class="hl kwa">&lt;div</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;content&quot;</span><span class="hl kwa">&gt;</span>

<span class="hl kwa">&lt;ol&gt;</span>
	<span class="hl kwa">&lt;li&gt;&lt;a</span> <span class="hl kwb">href</span>=<span class="hl str">&quot;#defaults&quot;</span><span class="hl kwa">&gt;</span>Defaults<span class="hl kwa">&lt;/a&gt;</span>
	<span class="hl kwa">&lt;ol</span> <span class="hl kwb">style</span>=<span class="hl str">&quot;list-style-type: lower-roman;&quot;</span><span class="hl kwa">&gt;</span>
		<span class="hl kwa">&lt;li&gt;&lt;a</span> <span class="hl kwb">href</span>=<span class="hl str">&quot;#editorsettings&quot;</span><span class="hl kwa">&gt;</span>Editor Settings<span class="hl kwa">&lt;/a&gt;&lt;/li&gt;</span>
		<span class="hl kwa">&lt;li&gt;&lt;a</span> <span class="hl kwb">href</span>=<span class="hl str">&quot;#fileheader&quot;</span><span class="hl kwa">&gt;</span>File Header<span class="hl kwa">&lt;/a&gt;&lt;/li&gt;</span>
		<span class="hl kwa">&lt;li&gt;&lt;a</span> <span class="hl kwb">href</span>=<span class="hl str">&quot;#locations&quot;</span><span class="hl kwa">&gt;</span>File Locations<span class="hl kwa">&lt;/a&gt;&lt;/li&gt;</span>
		<span class="hl kwa">&lt;li&gt;&lt;a</span> <span class="hl kwb">href</span>=<span class="hl str">&quot;#constants&quot;</span><span class="hl kwa">&gt;</span>Special Constants<span class="hl kwa">&lt;/a&gt;&lt;/li&gt;</span>
	<span class="hl kwa">&lt;/ol&gt;</span>
	<span class="hl kwa">&lt;/li&gt;</span>
	<span class="hl kwa">&lt;li&gt;&lt;a</span> <span class="hl kwb">href</span>=<span class="hl str">&quot;#code&quot;</span><span class="hl kwa">&gt;</span>Code Layout/Guidelines<span class="hl kwa">&lt;/a&gt;</span>
	<span class="hl kwa">&lt;ol</span> <span class="hl kwb">style</span>=<span class="hl str">&quot;list-style-type: lower-roman;&quot;</span><span class="hl kwa">&gt;</span>
		<span class="hl kwa">&lt;li&gt;&lt;a</span> <span class="hl kwb">href</span>=<span class="hl str">&quot;#namingvars&quot;</span><span class="hl kwa">&gt;</span>Variable/Function/Class Naming<span class="hl kwa">&lt;/a&gt;&lt;/li&gt;</span>
		<span class="hl kwa">&lt;li&gt;&lt;a</span> <span class="hl kwb">href</span>=<span class="hl str">&quot;#codelayout&quot;</span><span class="hl kwa">&gt;</span>Code Layout<span class="hl kwa">&lt;/a&gt;&lt;/li&gt;</span>
		<span class="hl kwa">&lt;li&gt;&lt;a</span> <span class="hl kwb">href</span>=<span class="hl str">&quot;#sql&quot;</span><span class="hl kwa">&gt;</span>SQL/SQL Layout<span class="hl kwa">&lt;/a&gt;&lt;/li&gt;</span>
		<span class="hl kwa">&lt;li&gt;&lt;a</span> <span class="hl kwb">href</span>=<span class="hl str">&quot;#optimizing&quot;</span><span class="hl kwa">&gt;</span>Optimizations<span class="hl kwa">&lt;/a&gt;&lt;/li&gt;</span>
		<span class="hl kwa">&lt;li&gt;&lt;a</span> <span class="hl kwb">href</span>=<span class="hl str">&quot;#general&quot;</span><span class="hl kwa">&gt;</span>General Guidelines<span class="hl kwa">&lt;/a&gt;&lt;/li&gt;</span>
		<span class="hl kwa">&lt;li&gt;&lt;a</span> <span class="hl kwb">href</span>=<span class="hl str">&quot;#phprestrictions&quot;</span><span class="hl kwa">&gt;</span>Restrictions on the Use of PHP<span class="hl kwa">&lt;/a&gt;&lt;/li&gt;</span>
	<span class="hl kwa">&lt;/ol&gt;</span>
	<span class="hl kwa">&lt;/li&gt;</span>
	<span class="hl kwa">&lt;li&gt;&lt;a</span> <span class="hl kwb">href</span>=<span class="hl str">&quot;#styling&quot;</span><span class="hl kwa">&gt;</span>Styling<span class="hl kwa">&lt;/a&gt;</span>
	<span class="hl kwa">&lt;ol</span> <span class="hl kwb">style</span>=<span class="hl str">&quot;list-style-type: lower-roman;&quot;</span><span class="hl kwa">&gt;</span>
		<span class="hl kwa">&lt;li&gt;&lt;a</span> <span class="hl kwb">href</span>=<span class="hl str">&quot;#cfgfiles&quot;</span><span class="hl kwa">&gt;</span>Style Config Files<span class="hl kwa">&lt;/a&gt;&lt;/li&gt;</span>
		<span class="hl kwa">&lt;li&gt;&lt;a</span> <span class="hl kwb">href</span>=<span class="hl str">&quot;#genstyling&quot;</span><span class="hl kwa">&gt;</span>General Styling Rules<span class="hl kwa">&lt;/a&gt;&lt;/li&gt;</span>
	<span class="hl kwa">&lt;/ol&gt;&lt;/li&gt;</span>
	<span class="hl kwa">&lt;li&gt;&lt;a</span> <span class="hl kwb">href</span>=<span class="hl str">&quot;#templating&quot;</span><span class="hl kwa">&gt;</span>Templating<span class="hl kwa">&lt;/a&gt;</span>
	<span class="hl kwa">&lt;ol</span> <span class="hl kwb">style</span>=<span class="hl str">&quot;list-style-type: lower-roman;&quot;</span><span class="hl kwa">&gt;</span>
		<span class="hl kwa">&lt;li&gt;&lt;a</span> <span class="hl kwb">href</span>=<span class="hl str">&quot;#templates&quot;</span><span class="hl kwa">&gt;</span>General Templating<span class="hl kwa">&lt;/a&gt;&lt;/li&gt;</span>
		<span class="hl kwa">&lt;li&gt;&lt;a</span> <span class="hl kwb">href</span>=<span class="hl str">&quot;#stylestree&quot;</span><span class="hl kwa">&gt;</span>Styles Tree<span class="hl kwa">&lt;/a&gt;&lt;/li&gt;</span>
		<span class="hl kwa">&lt;li&gt;&lt;a</span> <span class="hl kwb">href</span>=<span class="hl str">&quot;#template-events&quot;</span><span class="hl kwa">&gt;</span>Template Events<span class="hl kwa">&lt;/a&gt;&lt;/li&gt;</span>
	<span class="hl kwa">&lt;/ol&gt;&lt;/li&gt;</span>
	<span class="hl kwa">&lt;li&gt;&lt;a</span> <span class="hl kwb">href</span>=<span class="hl str">&quot;#charsets&quot;</span><span class="hl kwa">&gt;</span>Character Sets and Encodings<span class="hl kwa">&lt;/a&gt;&lt;/li&gt;</span>
	<span class="hl kwa">&lt;li&gt;&lt;a</span> <span class="hl kwb">href</span>=<span class="hl str">&quot;#translation&quot;</span><span class="hl kwa">&gt;</span>Translation (<span class="hl kwa">&lt;abbr</span> <span class="hl kwb">title</span>=<span class="hl str">&quot;Internationalisation&quot;</span><span class="hl kwa">&gt;</span>i18n<span class="hl kwa">&lt;/abbr&gt;</span>/<span class="hl kwa">&lt;abbr</span> <span class="hl kwb">title</span>=<span class="hl str">&quot;Localisation&quot;</span><span class="hl kwa">&gt;</span>L10n<span class="hl kwa">&lt;/abbr&gt;</span>) Guidelines<span class="hl kwa">&lt;/a&gt;</span>
	<span class="hl kwa">&lt;ol</span> <span class="hl kwb">style</span>=<span class="hl str">&quot;list-style-type: lower-roman;&quot;</span><span class="hl kwa">&gt;</span>
		<span class="hl kwa">&lt;li&gt;&lt;a</span> <span class="hl kwb">href</span>=<span class="hl str">&quot;#standardisation&quot;</span><span class="hl kwa">&gt;</span>Standardisation<span class="hl kwa">&lt;/a&gt;&lt;/li&gt;</span>
		<span class="hl kwa">&lt;li&gt;&lt;a</span> <span class="hl kwb">href</span>=<span class="hl str">&quot;#otherconsiderations&quot;</span><span class="hl kwa">&gt;</span>Other considerations<span class="hl kwa">&lt;/a&gt;&lt;/li&gt;</span>
		<span class="hl kwa">&lt;li&gt;&lt;a</span> <span class="hl kwb">href</span>=<span class="hl str">&quot;#placeholders&quot;</span><span class="hl kwa">&gt;</span>Working with placeholders<span class="hl kwa">&lt;/a&gt;&lt;/li&gt;</span>
		<span class="hl kwa">&lt;li&gt;&lt;a</span> <span class="hl kwb">href</span>=<span class="hl str">&quot;#usingplurals&quot;</span><span class="hl kwa">&gt;</span>Using plurals<span class="hl kwa">&lt;/a&gt;&lt;/li&gt;</span>
		<span class="hl kwa">&lt;li&gt;&lt;a</span> <span class="hl kwb">href</span>=<span class="hl str">&quot;#writingstyle&quot;</span><span class="hl kwa">&gt;</span>Writing Style<span class="hl kwa">&lt;/a&gt;&lt;/li&gt;</span>
	<span class="hl kwa">&lt;/ol&gt;</span>
	<span class="hl kwa">&lt;/li&gt;</span>
	<span class="hl kwa">&lt;li&gt;&lt;a</span> <span class="hl kwb">href</span>=<span class="hl str">&quot;#disclaimer&quot;</span><span class="hl kwa">&gt;</span>Copyright and disclaimer<span class="hl kwa">&lt;/a&gt;&lt;/li&gt;</span>
<span class="hl kwa">&lt;/ol&gt;</span>

		<span class="hl kwa">&lt;/div&gt;</span>

		<span class="hl kwa">&lt;/div&gt;</span>
	<span class="hl kwa">&lt;/div&gt;</span>

	<span class="hl kwa">&lt;hr /&gt;</span>

<span class="hl kwa">&lt;a</span> <span class="hl kwb">name</span>=<span class="hl str">&quot;defaults&quot;</span><span class="hl kwa">&gt;&lt;/a&gt;&lt;h2&gt;</span><span class="hl num">1</span>. Defaults<span class="hl kwa">&lt;/h2&gt;</span>

	<span class="hl kwa">&lt;div</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;paragraph&quot;</span><span class="hl kwa">&gt;</span>
		<span class="hl kwa">&lt;div</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;inner&quot;</span><span class="hl kwa">&gt;</span>

		<span class="hl kwa">&lt;div</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;content&quot;</span><span class="hl kwa">&gt;</span>

<span class="hl kwa">&lt;a</span> <span class="hl kwb">name</span>=<span class="hl str">&quot;editorsettings&quot;</span><span class="hl kwa">&gt;&lt;/a&gt;&lt;h3&gt;</span><span class="hl num">1</span>.i. Editor Settings<span class="hl kwa">&lt;/h3&gt;</span>

	<span class="hl kwa">&lt;h4&gt;</span>Tabs vs Spaces:<span class="hl kwa">&lt;/h4&gt;</span>
	<span class="hl kwa">&lt;p&gt;</span>In order to make this as simple as possible, we will be using tabs, not spaces. We enforce <span class="hl num">4</span> (four) spaces for one tab - therefore you need to set your tab width within your editor to <span class="hl num">4</span> spaces. Make sure that when you <span class="hl kwa">&lt;strong&gt;</span>save<span class="hl kwa">&lt;/strong&gt;</span> the file, it&apos;s saving tabs and not spaces. This way, we can each have the code be displayed the way we like it, without breaking the layout of the actual files.<span class="hl kwa">&lt;/p&gt;</span>
	<span class="hl kwa">&lt;p&gt;</span>Tabs in front of lines are no problem, but having them within the text can be a problem if you do not set it to the amount of spaces every one of us uses. Here is a short example of how it should look like:<span class="hl kwa">&lt;/p&gt;</span>

	<span class="hl kwa">&lt;div</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;codebox&quot;</span><span class="hl kwa">&gt;&lt;pre&gt;</span>
{TAB}$mode{TAB}{TAB}= $request-<span class="hl kwa">&gt;</span>variable(&apos;mode&apos;, &apos;&apos;);
{TAB}$search_id{TAB}= $request-<span class="hl kwa">&gt;</span>variable(&apos;search_id&apos;, &apos;&apos;);<span class="hl kwa">&lt;/pre&gt;</span>
	<span class="hl kwa">&lt;/div&gt;</span>

	<span class="hl kwa">&lt;p&gt;</span>If entered with tabs (replace the {TAB}) both equal signs need to be on the same column.<span class="hl kwa">&lt;/p&gt;</span>

	<span class="hl kwa">&lt;h3&gt;</span>Linefeeds:<span class="hl kwa">&lt;/h3&gt;</span>
	<span class="hl kwa">&lt;p&gt;</span>Ensure that your editor is saving files in the UNIX (LF) line ending format. This means that lines are terminated with a newline, not with Windows Line endings (CR/LF combo) as they are on Win32 or Classic Mac (CR) Line endings. Any decent editor should be able to do this, but it might not always be the default setting. Know your editor. If you want advice for an editor for your Operating System, just ask one of the developers. Some of them do their editing on Win32.<span class="hl kwa">&lt;/p&gt;</span>

	<span class="hl kwa">&lt;a</span> <span class="hl kwb">name</span>=<span class="hl str">&quot;fileheader&quot;</span><span class="hl kwa">&gt;&lt;/a&gt;&lt;h3&gt;</span><span class="hl num">1</span>.ii. File Layout<span class="hl kwa">&lt;/h3&gt;</span>

	<span class="hl kwa">&lt;h4&gt;</span>Standard header for new files:<span class="hl kwa">&lt;/h4&gt;</span>
	<span class="hl kwa">&lt;p&gt;</span>This template of the header must be included at the start of all phpBB files: <span class="hl kwa">&lt;/p&gt;</span>

	<span class="hl kwa">&lt;div</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;codebox&quot;</span><span class="hl kwa">&gt;&lt;pre&gt;</span>
/**
*
* This file is part of the phpBB Forum Software package.
*
* &#64;copyright (c) phpBB Limited <span class="hl kwd">&amp;lt;</span>https://www.phpbb.com<span class="hl kwd">&amp;gt;</span>
* &#64;license GNU General Public License, version <span class="hl num">2</span> (GPL-<span class="hl num">2.0</span>)
*
* For full copyright and license information, please see
* the docs/CREDITS.txt file.
*
*/<span class="hl kwa">&lt;/pre&gt;</span>
	<span class="hl kwa">&lt;/div&gt;</span>

	<span class="hl kwa">&lt;p&gt;</span>Please see the <span class="hl kwa">&lt;a</span> <span class="hl kwb">href</span>=<span class="hl str">&quot;#locations&quot;</span><span class="hl kwa">&gt;</span>File Locations section<span class="hl kwa">&lt;/a&gt;</span> for the correct package name.<span class="hl kwa">&lt;/p&gt;</span>

	<span class="hl kwa">&lt;h4&gt;</span>PHP closing tags<span class="hl kwa">&lt;/h4&gt;</span>

	<span class="hl kwa">&lt;p&gt;</span>A file containg only PHP code should not end with the optional PHP closing tag <span class="hl kwa">&lt;strong&gt;</span>?<span class="hl kwd">&amp;gt;</span><span class="hl kwa">&lt;/strong&gt;</span> to avoid issues with whitespace following it.<span class="hl kwa">&lt;/p&gt;</span>

	<span class="hl kwa">&lt;h4&gt;</span>Newline at end of file<span class="hl kwa">&lt;/h4&gt;</span>

	<span class="hl kwa">&lt;p&gt;</span>All files should end in a newline so the last line does not appear as modified in diffs, when a line is appended to the file.<span class="hl kwa">&lt;/p&gt;</span>

	<span class="hl kwa">&lt;h4&gt;</span>Files containing inline code:<span class="hl kwa">&lt;/h4&gt;</span>

	<span class="hl kwa">&lt;p&gt;</span>For those files you have to put an empty comment directly after the header to prevent the documentor assigning the header to the first code element found.<span class="hl kwa">&lt;/p&gt;</span>

	<span class="hl kwa">&lt;div</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;codebox&quot;</span><span class="hl kwa">&gt;&lt;pre&gt;</span>
/**
* {HEADER}
*/

/**
*/
{CODE}<span class="hl kwa">&lt;/pre&gt;</span>
	<span class="hl kwa">&lt;/div&gt;</span>

	<span class="hl kwa">&lt;h4&gt;</span>Files containing only functions:<span class="hl kwa">&lt;/h4&gt;</span>

	<span class="hl kwa">&lt;p&gt;</span>Do not forget to comment the functions (especially the first function following the header). Each function should have at least a comment of what this function does. For more complex functions it is recommended to document the parameters too.<span class="hl kwa">&lt;/p&gt;</span>

	<span class="hl kwa">&lt;h4&gt;</span>Files containing only classes:<span class="hl kwa">&lt;/h4&gt;</span>

	<span class="hl kwa">&lt;p&gt;</span>Do not forget to comment the class. Classes need a separate &#64;package definition, it is the same as the header package name. Apart from this special case the above statement for files containing only functions needs to be applied to classes and it&apos;s methods too.<span class="hl kwa">&lt;/p&gt;</span>

	<span class="hl kwa">&lt;h4&gt;</span>Code following the header but only functions/classes file:<span class="hl kwa">&lt;/h4&gt;</span>

	<span class="hl kwa">&lt;p&gt;</span>If this case is true, the best method to avoid documentation confusions is adding an ignore command, for example:<span class="hl kwa">&lt;/p&gt;</span>

	<span class="hl kwa">&lt;div</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;codebox&quot;</span><span class="hl kwa">&gt;&lt;pre&gt;</span>
/**
* {HEADER}
*/

/**
* &#64;ignore
*/
Small code snipped, mostly one or two defines or an if statement

/**
* {DOCUMENTATION}
*/
class ...<span class="hl kwa">&lt;/pre&gt;</span>
	<span class="hl kwa">&lt;/div&gt;</span>

	<span class="hl kwa">&lt;a</span> <span class="hl kwb">name</span>=<span class="hl str">&quot;locations&quot;</span><span class="hl kwa">&gt;&lt;/a&gt;&lt;h3&gt;</span><span class="hl num">1</span>.iii. File Locations<span class="hl kwa">&lt;/h3&gt;</span>

	<span class="hl kwa">&lt;p&gt;</span>Functions used by more than one page should be placed in functions.php, functions specific to one page should be placed on that page (at the bottom) or within the relevant sections functions file. Some files in <span class="hl kwa">&lt;code&gt;</span>/includes<span class="hl kwa">&lt;/code&gt;</span> are holding functions responsible for special sections, for example uploading files, displaying <span class="hl kwd">&amp;quot;</span>things<span class="hl kwd">&amp;quot;</span>, user related functions and so forth.<span class="hl kwa">&lt;/p&gt;</span>

	<span class="hl kwa">&lt;p&gt;</span>The following packages are defined, and related new features/functions should be placed within the mentioned files/locations, as well as specifying the correct package name. The package names are bold within this list:<span class="hl kwa">&lt;/p&gt;</span>

	<span class="hl kwa">&lt;ul&gt;</span>
		<span class="hl kwa">&lt;li&gt;&lt;strong&gt;</span>phpBB3<span class="hl kwa">&lt;/strong&gt;&lt;br /&gt;</span>Core files and all files not assigned to a separate package<span class="hl kwa">&lt;/li&gt;</span>
		<span class="hl kwa">&lt;li&gt;&lt;strong&gt;</span>acm<span class="hl kwa">&lt;/strong&gt;&lt;br /&gt;&lt;code&gt;</span>/phpbb/cache<span class="hl kwa">&lt;/code&gt;&lt;br /&gt;</span>Cache System<span class="hl kwa">&lt;/li&gt;</span>
		<span class="hl kwa">&lt;li&gt;&lt;strong&gt;</span>acp<span class="hl kwa">&lt;/strong&gt;&lt;br /&gt;&lt;code&gt;</span>/adm<span class="hl kwa">&lt;/code&gt;</span>, <span class="hl kwa">&lt;code&gt;</span>/includes/acp<span class="hl kwa">&lt;/code&gt;</span>, <span class="hl kwa">&lt;code&gt;</span>/includes/functions_admin.php<span class="hl kwa">&lt;/code&gt;&lt;br /&gt;</span>Administration Control Panel<span class="hl kwa">&lt;/li&gt;</span>
		<span class="hl kwa">&lt;li&gt;&lt;strong&gt;</span>dbal<span class="hl kwa">&lt;/strong&gt;&lt;br /&gt;&lt;code&gt;</span>/phpbb/db<span class="hl kwa">&lt;/code&gt;</span>, <span class="hl kwa">&lt;code&gt;</span>/includes/db<span class="hl kwa">&lt;/code&gt;&lt;br /&gt;</span>Database Abstraction Layer.
			<span class="hl kwa">&lt;ul&gt;</span>
				<span class="hl kwa">&lt;li&gt;&lt;code&gt;</span>/phpbb/db/driver/<span class="hl kwa">&lt;/code&gt;&lt;br /&gt;</span>Database Abstraction Layer classes<span class="hl kwa">&lt;/li&gt;</span>
				<span class="hl kwa">&lt;li&gt;&lt;code&gt;</span>/phpbb/db/migration/<span class="hl kwa">&lt;/code&gt;&lt;br /&gt;</span>Migrations are used for updating the database from one release to another<span class="hl kwa">&lt;/li&gt;</span>
			<span class="hl kwa">&lt;/ul&gt;</span>
		<span class="hl kwa">&lt;/li&gt;</span>
		<span class="hl kwa">&lt;li&gt;&lt;strong&gt;</span>diff<span class="hl kwa">&lt;/strong&gt;&lt;br /&gt;&lt;code&gt;</span>/includes/diff<span class="hl kwa">&lt;/code&gt;&lt;br /&gt;</span>Diff Engine<span class="hl kwa">&lt;/li&gt;</span>
		<span class="hl kwa">&lt;li&gt;&lt;strong&gt;</span>docs<span class="hl kwa">&lt;/strong&gt;&lt;br /&gt;&lt;code&gt;</span>/docs<span class="hl kwa">&lt;/code&gt;&lt;br /&gt;</span>phpBB Documentation<span class="hl kwa">&lt;/li&gt;</span>
		<span class="hl kwa">&lt;li&gt;&lt;strong&gt;</span>images<span class="hl kwa">&lt;/strong&gt;&lt;br /&gt;&lt;code&gt;</span>/images<span class="hl kwa">&lt;/code&gt;&lt;br /&gt;</span>All global images not connected to styles<span class="hl kwa">&lt;/li&gt;</span>
		<span class="hl kwa">&lt;li&gt;&lt;strong&gt;</span>install<span class="hl kwa">&lt;/strong&gt;&lt;br /&gt;&lt;code&gt;</span>/install<span class="hl kwa">&lt;/code&gt;&lt;br /&gt;</span>Installation System<span class="hl kwa">&lt;/li&gt;</span>
		<span class="hl kwa">&lt;li&gt;&lt;strong&gt;</span>language<span class="hl kwa">&lt;/strong&gt;&lt;br /&gt;&lt;code&gt;</span>/language<span class="hl kwa">&lt;/code&gt;&lt;br /&gt;</span>All language files<span class="hl kwa">&lt;/li&gt;</span>
		<span class="hl kwa">&lt;li&gt;&lt;strong&gt;</span>login<span class="hl kwa">&lt;/strong&gt;&lt;br /&gt;&lt;code&gt;</span>/phpbb/auth<span class="hl kwa">&lt;/code&gt;&lt;br /&gt;</span>Login Authentication Plugins<span class="hl kwa">&lt;/li&gt;</span>
		<span class="hl kwa">&lt;li&gt;&lt;strong&gt;</span>VC<span class="hl kwa">&lt;/strong&gt;&lt;br /&gt;&lt;code&gt;</span>/includes/captcha<span class="hl kwa">&lt;/code&gt;&lt;br /&gt;</span>CAPTCHA<span class="hl kwa">&lt;/li&gt;</span>
		<span class="hl kwa">&lt;li&gt;&lt;strong&gt;</span>mcp<span class="hl kwa">&lt;/strong&gt;&lt;br /&gt;&lt;code&gt;</span>mcp.php<span class="hl kwa">&lt;/code&gt;</span>, <span class="hl kwa">&lt;code&gt;</span>/includes/mcp<span class="hl kwa">&lt;/code&gt;</span>, <span class="hl kwa">&lt;code&gt;</span>report.php<span class="hl kwa">&lt;/code&gt;&lt;br /&gt;</span>Moderator Control Panel<span class="hl kwa">&lt;/li&gt;</span>
		<span class="hl kwa">&lt;li&gt;&lt;strong&gt;</span>ucp<span class="hl kwa">&lt;/strong&gt;&lt;br /&gt;&lt;code&gt;</span>ucp.php<span class="hl kwa">&lt;/code&gt;</span>, <span class="hl kwa">&lt;code&gt;</span>/includes/ucp<span class="hl kwa">&lt;/code&gt;&lt;br /&gt;</span>User Control Panel<span class="hl kwa">&lt;/li&gt;</span>
		<span class="hl kwa">&lt;li&gt;&lt;strong&gt;</span>utf<span class="hl kwa">&lt;/strong&gt;&lt;br /&gt;&lt;code&gt;</span>/includes/utf<span class="hl kwa">&lt;/code&gt;&lt;br /&gt;</span>UTF8-related functions/classes<span class="hl kwa">&lt;/li&gt;</span>
		<span class="hl kwa">&lt;li&gt;&lt;strong&gt;</span>search<span class="hl kwa">&lt;/strong&gt;&lt;br /&gt;&lt;code&gt;</span>/phpbb/search<span class="hl kwa">&lt;/code&gt;</span>, <span class="hl kwa">&lt;code&gt;</span>search.php<span class="hl kwa">&lt;/code&gt;&lt;br /&gt;</span>Search System<span class="hl kwa">&lt;/li&gt;</span>
		<span class="hl kwa">&lt;li&gt;&lt;strong&gt;</span>styles<span class="hl kwa">&lt;/strong&gt;&lt;br /&gt;&lt;code&gt;</span>/styles<span class="hl kwa">&lt;/code&gt;&lt;br /&gt;</span>phpBB Styles/Templates/Themes<span class="hl kwa">&lt;/li&gt;</span>
	<span class="hl kwa">&lt;/ul&gt;</span>

	<span class="hl kwa">&lt;a</span> <span class="hl kwb">name</span>=<span class="hl str">&quot;constants&quot;</span><span class="hl kwa">&gt;&lt;/a&gt;&lt;h3&gt;</span><span class="hl num">1</span>.iv. Special Constants<span class="hl kwa">&lt;/h3&gt;</span>

	<span class="hl kwa">&lt;p&gt;</span>There are some special constants application developers are able to utilize to bend some of phpBB&apos;s internal functionality to suit their needs.<span class="hl kwa">&lt;/p&gt;</span>

	<span class="hl kwa">&lt;div</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;codebox&quot;</span><span class="hl kwa">&gt;&lt;pre&gt;</span>
PHPBB_MSG_HANDLER          (overwrite message handler)
PHPBB_DB_NEW_LINK          (overwrite new_link parameter for sql_connect)
PHPBB_ROOT_PATH            (overwrite $phpbb_root_path)
PHPBB_ADMIN_PATH           (overwrite $phpbb_admin_path)
PHPBB_USE_BOARD_URL_PATH   (use generate_board_url() for image paths instead of $phpbb_root_path)
PHPBB_DISABLE_ACP_EDITOR   (disable ACP style editor for templates)
PHPBB_DISABLE_CONFIG_CHECK (disable ACP config.php writeable check)

PHPBB_ACM_MEMCACHE_PORT     (overwrite memcached port, default is <span class="hl num">11211</span>)
PHPBB_ACM_MEMCACHE_COMPRESS (overwrite memcached compress setting, default is disabled)
PHPBB_ACM_MEMCACHE_HOST     (overwrite memcached host name, default is localhost)

PHPBB_ACM_REDIS_HOST        (overwrite redis host name, default is localhost)
PHPBB_ACM_REDIS_PORT        (overwrite redis port, default is <span class="hl num">6379</span>)
PHPBB_ACM_REDIS_PASSWORD    (overwrite redis password, default is empty)
PHPBB_ACM_REDIS_DB          (overwrite redis default database)

PHPBB_QA                   (Set board to QA-Mode, which means the updater also checks for RC-releases)
<span class="hl kwa">&lt;/pre&gt;&lt;/div&gt;</span>

<span class="hl kwa">&lt;h4&gt;</span>PHPBB_USE_BOARD_URL_PATH<span class="hl kwa">&lt;/h4&gt;</span>

<span class="hl kwa">&lt;p&gt;</span>If the <span class="hl kwa">&lt;code&gt;</span>PHPBB_USE_BOARD_URL_PATH<span class="hl kwa">&lt;/code&gt;</span> constant is set to true, phpBB uses generate_board_url() (this will return the boards url with the script path included) on all instances where web-accessible images are loaded. The exact locations are:<span class="hl kwa">&lt;/p&gt;</span>

<span class="hl kwa">&lt;ul&gt;</span>
	<span class="hl kwa">&lt;li&gt;</span>/phpbb/user.php - \phpbb\user::img()<span class="hl kwa">&lt;/li&gt;</span>
	<span class="hl kwa">&lt;li&gt;</span>/includes/functions_content.php - smiley_text()<span class="hl kwa">&lt;/li&gt;</span>
<span class="hl kwa">&lt;/ul&gt;</span>

<span class="hl kwa">&lt;p&gt;</span>Path locations for the following template variables are affected by this too:<span class="hl kwa">&lt;/p&gt;</span>

<span class="hl kwa">&lt;ul&gt;</span>
	<span class="hl kwa">&lt;li&gt;</span>{T_ASSETS_PATH} - assets (non-style specific, static resources)<span class="hl kwa">&lt;/li&gt;</span>
	<span class="hl kwa">&lt;li&gt;</span>{T_THEME_PATH} - styles/xxx/theme<span class="hl kwa">&lt;/li&gt;</span>
	<span class="hl kwa">&lt;li&gt;</span>{T_TEMPLATE_PATH} - styles/xxx/template<span class="hl kwa">&lt;/li&gt;</span>
	<span class="hl kwa">&lt;li&gt;</span>{T_SUPER_TEMPLATE_PATH} - styles/xxx/template<span class="hl kwa">&lt;/li&gt;</span>
	<span class="hl kwa">&lt;li&gt;</span>{T_IMAGES_PATH} - images/<span class="hl kwa">&lt;/li&gt;</span>
	<span class="hl kwa">&lt;li&gt;</span>{T_SMILIES_PATH} - $config[&apos;smilies_path&apos;]/<span class="hl kwa">&lt;/li&gt;</span>
	<span class="hl kwa">&lt;li&gt;</span>{T_AVATAR_PATH} - $config[&apos;avatar_path&apos;]/<span class="hl kwa">&lt;/li&gt;</span>
	<span class="hl kwa">&lt;li&gt;</span>{T_AVATAR_GALLERY_PATH} - $config[&apos;avatar_gallery_path&apos;]/<span class="hl kwa">&lt;/li&gt;</span>
	<span class="hl kwa">&lt;li&gt;</span>{T_ICONS_PATH} - $config[&apos;icons_path&apos;]/<span class="hl kwa">&lt;/li&gt;</span>
	<span class="hl kwa">&lt;li&gt;</span>{T_RANKS_PATH} - $config[&apos;ranks_path&apos;]/<span class="hl kwa">&lt;/li&gt;</span>
	<span class="hl kwa">&lt;li&gt;</span>{T_UPLOAD_PATH} - $config[&apos;upload_path&apos;]/<span class="hl kwa">&lt;/li&gt;</span>
	<span class="hl kwa">&lt;li&gt;</span>{T_STYLESHEET_LINK} - styles/xxx/theme/stylesheet.css<span class="hl kwa">&lt;/li&gt;</span>
	<span class="hl kwa">&lt;li&gt;</span>New template variable {BOARD_URL} for the board url + script path.<span class="hl kwa">&lt;/li&gt;</span>
<span class="hl kwa">&lt;/ul&gt;</span>

		<span class="hl kwa">&lt;/div&gt;</span>

		<span class="hl kwa">&lt;div</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;back2top&quot;</span><span class="hl kwa">&gt;&lt;a</span> <span class="hl kwb">href</span>=<span class="hl str">&quot;#wrap&quot;</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;top&quot;</span><span class="hl kwa">&gt;</span>Back to Top<span class="hl kwa">&lt;/a&gt;&lt;/div&gt;</span>

		<span class="hl kwa">&lt;/div&gt;</span>
	<span class="hl kwa">&lt;/div&gt;</span>

	<span class="hl kwa">&lt;hr /&gt;</span>

<span class="hl kwa">&lt;a</span> <span class="hl kwb">name</span>=<span class="hl str">&quot;code&quot;</span><span class="hl kwa">&gt;&lt;/a&gt;&lt;h2&gt;</span><span class="hl num">2</span>. Code Layout/Guidelines<span class="hl kwa">&lt;/h2&gt;</span>

	<span class="hl kwa">&lt;div</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;paragraph&quot;</span><span class="hl kwa">&gt;</span>
		<span class="hl kwa">&lt;div</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;inner&quot;</span><span class="hl kwa">&gt;</span>

		<span class="hl kwa">&lt;div</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;content&quot;</span><span class="hl kwa">&gt;</span>

	<span class="hl kwa">&lt;p&gt;</span>Please note that these guidelines apply to all php, html, javascript and css files.<span class="hl kwa">&lt;/p&gt;</span>

	<span class="hl kwa">&lt;a</span> <span class="hl kwb">name</span>=<span class="hl str">&quot;namingvars&quot;</span><span class="hl kwa">&gt;&lt;/a&gt;&lt;h3&gt;</span><span class="hl num">2</span>.i. Variable/Function/Class Naming<span class="hl kwa">&lt;/h3&gt;</span>

	<span class="hl kwa">&lt;p&gt;</span>We will not be using any form of hungarian notation in our naming conventions. Many of us believe that hungarian naming is one of the primary code obfuscation techniques currently in use.<span class="hl kwa">&lt;/p&gt;</span>

	<span class="hl kwa">&lt;h4&gt;</span>Variable Names:<span class="hl kwa">&lt;/h4&gt;</span>
	<span class="hl kwa">&lt;p&gt;</span>In PHP, variable names should be in all lowercase, with words separated by an underscore, example:<span class="hl kwa">&lt;/p&gt;</span>

	<span class="hl kwa">&lt;div</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;indent&quot;</span><span class="hl kwa">&gt;</span>
		<span class="hl kwa">&lt;p&gt;&lt;code&gt;</span>$current_user<span class="hl kwa">&lt;/code&gt;</span> is right, but <span class="hl kwa">&lt;code&gt;</span>$currentuser<span class="hl kwa">&lt;/code&gt;</span> and <span class="hl kwa">&lt;code&gt;</span> $currentUser<span class="hl kwa">&lt;/code&gt;</span> are not.<span class="hl kwa">&lt;/p&gt;</span>
	<span class="hl kwa">&lt;/div&gt;</span>

	<span class="hl kwa">&lt;p&gt;</span>In JavaScript, variable names should use camel case:<span class="hl kwa">&lt;/p&gt;</span>

	<span class="hl kwa">&lt;div</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;indent&quot;</span><span class="hl kwa">&gt;</span>
		<span class="hl kwa">&lt;p&gt;&lt;code&gt;</span>currentUser<span class="hl kwa">&lt;/code&gt;</span> is right, but <span class="hl kwa">&lt;code&gt;</span>currentuser<span class="hl kwa">&lt;/code&gt;</span> and <span class="hl kwa">&lt;code&gt;</span>current_user<span class="hl kwa">&lt;/code&gt;</span> are not.<span class="hl kwa">&lt;/p&gt;</span>
	<span class="hl kwa">&lt;/div&gt;</span>

	<span class="hl kwa">&lt;p&gt;</span>Names should be descriptive, but concise. We don&apos;t want huge sentences as our variable names, but typing an extra couple of characters is always better than wondering what exactly a certain variable is for. <span class="hl kwa">&lt;/p&gt;</span>

	<span class="hl kwa">&lt;h4&gt;</span>Loop Indices:<span class="hl kwa">&lt;/h4&gt;</span>
	<span class="hl kwa">&lt;p&gt;</span>The <span class="hl kwa">&lt;em&gt;</span>only<span class="hl kwa">&lt;/em&gt;</span> situation where a one-character variable name is allowed is when it&apos;s the index for some looping construct. In this case, the index of the outer loop should always be $i. If there&apos;s a loop inside that loop, its index should be $j, followed by $k, and so on. If the loop is being indexed by some already-existing variable with a meaningful name, this guideline does not apply, example:<span class="hl kwa">&lt;/p&gt;</span>

	<span class="hl kwa">&lt;div</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;codebox&quot;</span><span class="hl kwa">&gt;&lt;pre&gt;</span>
for ($i = <span class="hl num">0</span>; $i <span class="hl kwd">&amp;lt;</span> $outer_size; $i++)
{
   for ($j = <span class="hl num">0</span>; $j <span class="hl kwd">&amp;lt;</span> $inner_size; $j++)
   {
      foo($i, $j);
   }
}<span class="hl kwa">&lt;/pre&gt;</span>
	<span class="hl kwa">&lt;/div&gt;</span>

	<span class="hl kwa">&lt;h4&gt;</span>Function Names:<span class="hl kwa">&lt;/h4&gt;</span>
	<span class="hl kwa">&lt;p&gt;</span>Functions should also be named descriptively. We&apos;re not programming in C here, we don&apos;t want to write functions called things like <span class="hl str">&quot;stristr()&quot;</span>. Again, all lower-case names with words separated by a single underscore character in PHP, and camel caps in JavaScript. Function names should be prefixed with <span class="hl str">&quot;phpbb_&quot;</span> and preferably have a verb in them somewhere. Good function names are <span class="hl kwa">&lt;code&gt;</span>phpbb_print_login_status()<span class="hl kwa">&lt;/code&gt;</span>, <span class="hl kwa">&lt;code&gt;</span>phpbb_get_user_data()<span class="hl kwa">&lt;/code&gt;</span>, etc. Constructor functions in JavaScript should begin with a capital letter.<span class="hl kwa">&lt;/p&gt;</span>

	<span class="hl kwa">&lt;h4&gt;</span>Function Arguments:<span class="hl kwa">&lt;/h4&gt;</span>
	<span class="hl kwa">&lt;p&gt;</span>Arguments are subject to the same guidelines as variable names. We don&apos;t want a bunch of functions like: <span class="hl kwa">&lt;code&gt;</span>do_stuff($a, $b, $c)<span class="hl kwa">&lt;/code&gt;</span>. In most cases, we&apos;d like to be able to tell how to use a function by just looking at its declaration. <span class="hl kwa">&lt;/p&gt;</span>

	<span class="hl kwa">&lt;h4&gt;</span>Class Names:<span class="hl kwa">&lt;/h4&gt;</span>

	<span class="hl kwa">&lt;p&gt;</span>Apart from following the rules for function names, all classes should meet the following conditions:<span class="hl kwa">&lt;/p&gt;</span>
	<span class="hl kwa">&lt;ul&gt;</span>
		<span class="hl kwa">&lt;li&gt;</span>Every class must be defined in a separate file.<span class="hl kwa">&lt;/li&gt;</span>
		<span class="hl kwa">&lt;li&gt;</span>The classes have to be located in a subdirectory of <span class="hl kwa">&lt;code&gt;</span>phpbb/<span class="hl kwa">&lt;/code&gt;</span>.<span class="hl kwa">&lt;/li&gt;</span>
		<span class="hl kwa">&lt;li&gt;</span>Classnames must be namespaced with <span class="hl kwa">&lt;code&gt;</span>\phpbb\<span class="hl kwa">&lt;/code&gt;</span> to avoid name clashes.<span class="hl kwa">&lt;/li&gt;</span>
		<span class="hl kwa">&lt;li&gt;</span>Class names/namespaces have to reflect the location of the file they are defined in. The namespace must be the directory in which the file is located. So the directory names must not contain any underscores, but the filename may.<span class="hl kwa">&lt;/li&gt;</span>
		<span class="hl kwa">&lt;li&gt;</span>Directories should typically be a singular noun (e.g. <span class="hl kwa">&lt;code&gt;</span>dir<span class="hl kwa">&lt;/code&gt;</span> in the example below, not <span class="hl kwa">&lt;code&gt;</span>dirs<span class="hl kwa">&lt;/code&gt;</span>.<span class="hl kwa">&lt;/li&gt;</span>
	<span class="hl kwa">&lt;/ul&gt;</span>

	<span class="hl kwa">&lt;p&gt;</span>So given the following example directory structure you would result in the below listed lookups<span class="hl kwa">&lt;/p&gt;</span>
	<span class="hl kwa">&lt;div</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;codebox&quot;</span><span class="hl kwa">&gt;&lt;pre&gt;</span>
phpbb/
  class_name.php
  dir/
    class_name.php
      subdir/
        class_name.php<span class="hl kwa">&lt;/pre&gt;</span>
	<span class="hl kwa">&lt;/div&gt;</span>

	<span class="hl kwa">&lt;div</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;codebox&quot;</span><span class="hl kwa">&gt;&lt;pre&gt;</span>
\phpbb\class_name            - phpbb/class_name.php
\phpbb\dir\class_name        - phpbb/dir/class_name.php
\phpbb\dir\subdir\class_name - phpbb/dir/subdir/class_name.php<span class="hl kwa">&lt;/pre&gt;</span>
	<span class="hl kwa">&lt;/div&gt;</span>


	<span class="hl kwa">&lt;h4&gt;</span>Summary:<span class="hl kwa">&lt;/h4&gt;</span>
	<span class="hl kwa">&lt;p&gt;</span>The basic philosophy here is to not hurt code clarity for the sake of laziness. This has to be balanced by a little bit of common sense, though; <span class="hl kwa">&lt;code&gt;</span>phpbb_print_login_status_for_a_given_user()<span class="hl kwa">&lt;/code&gt;</span> goes too far, for example -- that function would be better named <span class="hl kwa">&lt;code&gt;</span>phpbb_print_user_login_status()<span class="hl kwa">&lt;/code&gt;</span>, or just <span class="hl kwa">&lt;code&gt;</span>phpbb_print_login_status()<span class="hl kwa">&lt;/code&gt;</span>.<span class="hl kwa">&lt;/p&gt;</span>

	<span class="hl kwa">&lt;h4&gt;</span>Special Namings: <span class="hl kwa">&lt;/h4&gt;</span>
	<span class="hl kwa">&lt;p&gt;</span>For all emoticons use the term <span class="hl kwa">&lt;code&gt;</span>smiley<span class="hl kwa">&lt;/code&gt;</span> in singular and <span class="hl kwa">&lt;code&gt;</span>smilies<span class="hl kwa">&lt;/code&gt;</span> in plural. For emails we use the term <span class="hl kwa">&lt;code&gt;</span>email<span class="hl kwa">&lt;/code&gt;</span> (without dash between “e” and “m”).<span class="hl kwa">&lt;/p&gt;</span>

	<span class="hl kwa">&lt;a</span> <span class="hl kwb">name</span>=<span class="hl str">&quot;codelayout&quot;</span><span class="hl kwa">&gt;&lt;/a&gt;&lt;h3&gt;</span><span class="hl num">2</span>.ii. Code Layout<span class="hl kwa">&lt;/h3&gt;</span>

	<span class="hl kwa">&lt;h4&gt;</span>Always include the braces:<span class="hl kwa">&lt;/h4&gt;</span>
	<span class="hl kwa">&lt;p&gt;</span>This is another case of being too lazy to type <span class="hl num">2</span> extra characters causing problems with code clarity. Even if the body of some construct is only one line long, do <span class="hl kwa">&lt;em&gt;</span>not<span class="hl kwa">&lt;/em&gt;</span> drop the braces. Just don&apos;t, examples:<span class="hl kwa">&lt;/p&gt;</span>

	<span class="hl kwa">&lt;p</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;bad&quot;</span><span class="hl kwa">&gt;</span>// These are all wrong. <span class="hl kwa">&lt;/p&gt;</span>

	<span class="hl kwa">&lt;div</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;codebox&quot;</span><span class="hl kwa">&gt;&lt;pre&gt;</span>
if (condition) do_stuff();

if (condition)
	do_stuff();

while (condition)
	do_stuff();

for ($i = <span class="hl num">0</span>; $i <span class="hl kwd">&amp;lt;</span> size; $i++)
	do_stuff($i);<span class="hl kwa">&lt;/pre&gt;</span>
	<span class="hl kwa">&lt;/div&gt;</span>

	<span class="hl kwa">&lt;p</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;good&quot;</span><span class="hl kwa">&gt;</span>// These are all right. <span class="hl kwa">&lt;/p&gt;</span>
	<span class="hl kwa">&lt;div</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;codebox&quot;</span><span class="hl kwa">&gt;&lt;pre&gt;</span>
if (condition)
{
	do_stuff();
}

while (condition)
{
	do_stuff();
}

for ($i = <span class="hl num">0</span>; $i <span class="hl kwd">&amp;lt;</span> size; $i++)
{
	do_stuff();
}<span class="hl kwa">&lt;/pre&gt;</span>
	<span class="hl kwa">&lt;/div&gt;</span>

	<span class="hl kwa">&lt;h4&gt;</span>Where to put the braces:<span class="hl kwa">&lt;/h4&gt;</span>
	<span class="hl kwa">&lt;p&gt;</span>In PHP code, braces always go on their own line. The closing brace should also always be at the same column as the corresponding opening brace, examples:<span class="hl kwa">&lt;/p&gt;</span>

	<span class="hl kwa">&lt;div</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;codebox&quot;</span><span class="hl kwa">&gt;&lt;pre&gt;</span>
if (condition)
{
	while (condition2)
	{
		...
	}
}
else
{
	...
}

for ($i = <span class="hl num">0</span>; $i <span class="hl kwd">&amp;lt;</span> $size; $i++)
{
	...
}

while (condition)
{
	...
}

function do_stuff()
{
	...
}<span class="hl kwa">&lt;/pre&gt;</span>
	<span class="hl kwa">&lt;/div&gt;</span>

	<span class="hl kwa">&lt;p&gt;</span>In JavaScript code, braces always go on the same line:<span class="hl kwa">&lt;/p&gt;</span>

	<span class="hl kwa">&lt;div</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;codebox&quot;</span><span class="hl kwa">&gt;&lt;pre&gt;</span>
if (condition) {
	while (condition2) {
		...
	}
} else {
	...
}

for (var i = <span class="hl num">0</span>; i <span class="hl kwd">&amp;lt;</span> size; i++) {
	...
}

while (condition) {
	...
}

function do_stuff() {
	...
}<span class="hl kwa">&lt;/pre&gt;</span>
	<span class="hl kwa">&lt;/div&gt;</span>

	<span class="hl kwa">&lt;h4&gt;</span>Use spaces between tokens:<span class="hl kwa">&lt;/h4&gt;</span>
	<span class="hl kwa">&lt;p&gt;</span>This is another simple, easy step that helps keep code readable without much effort. Whenever you write an assignment, expression, etc.. Always leave <span class="hl kwa">&lt;em&gt;</span>one<span class="hl kwa">&lt;/em&gt;</span> space between the tokens. Basically, write code as if it was English. Put spaces between variable names and operators. Don&apos;t put spaces just after an opening bracket or before a closing bracket. Don&apos;t put spaces just before a comma or a semicolon. This is best shown with a few examples, examples:<span class="hl kwa">&lt;/p&gt;</span>

	<span class="hl kwa">&lt;p&gt;</span>// Each pair shows the wrong way followed by the right way. <span class="hl kwa">&lt;/p&gt;</span>

	<span class="hl kwa">&lt;div</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;codebox&quot;</span><span class="hl kwa">&gt;&lt;pre&gt;</span>
$i=<span class="hl num">0</span>;
$i = <span class="hl num">0</span>;

if($i<span class="hl kwd">&amp;lt;</span><span class="hl num">7</span>) ...
if ($i <span class="hl kwd">&amp;lt;</span> <span class="hl num">7</span>) ...

if ( ($i <span class="hl kwd">&amp;lt;</span> <span class="hl num">7</span>)<span class="hl kwd">&amp;amp;&amp;amp;</span>($j <span class="hl kwd">&amp;gt;</span> <span class="hl num">8</span>) ) ...
if ($i <span class="hl kwd">&amp;lt;</span> <span class="hl num">7</span> <span class="hl kwd">&amp;amp;&amp;amp;</span> $j <span class="hl kwd">&amp;gt;</span> <span class="hl num">8</span>) ...

do_stuff( $i, &apos;foo&apos;, $b );
do_stuff($i, &apos;foo&apos;, $b);

for($i=<span class="hl num">0</span>; $i<span class="hl kwd">&amp;lt;</span>$size; $i++) ...
for ($i = <span class="hl num">0</span>; $i <span class="hl kwd">&amp;lt;</span> $size; $i++) ...

$i=($j <span class="hl kwd">&amp;lt;</span> $size)?<span class="hl num">0</span>:<span class="hl num">1</span>;
$i = ($j <span class="hl kwd">&amp;lt;</span> $size) ? <span class="hl num">0</span> : <span class="hl num">1</span>;<span class="hl kwa">&lt;/pre&gt;</span>
	<span class="hl kwa">&lt;/div&gt;</span>

	<span class="hl kwa">&lt;h4&gt;</span>Operator precedence:<span class="hl kwa">&lt;/h4&gt;</span>
	<span class="hl kwa">&lt;p&gt;</span>Do you know the exact precedence of all the operators in PHP? Neither do I. Don&apos;t guess. Always make it obvious by using brackets to force the precedence of an equation so you know what it does. Remember to not over-use this, as it may harden the readability. Basically, do not enclose single expressions. Examples:<span class="hl kwa">&lt;/p&gt;</span>

	<span class="hl kwa">&lt;p</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;bad&quot;</span><span class="hl kwa">&gt;</span>// what&apos;s the result? who knows. <span class="hl kwa">&lt;/p&gt;</span>
	<span class="hl kwa">&lt;div</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;codebox&quot;</span><span class="hl kwa">&gt;</span>
		<span class="hl kwa">&lt;pre&gt;</span>$bool = ($i <span class="hl kwd">&amp;lt;</span> <span class="hl num">7</span> <span class="hl kwd">&amp;amp;&amp;amp;</span> $j <span class="hl kwd">&amp;gt;</span> <span class="hl num">8</span> || $k == <span class="hl num">4</span>);<span class="hl kwa">&lt;/pre&gt;</span>
	<span class="hl kwa">&lt;/div&gt;</span>

	<span class="hl kwa">&lt;p</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;bad&quot;</span><span class="hl kwa">&gt;</span>// now you can be certain what I&apos;m doing here.<span class="hl kwa">&lt;/p&gt;</span>
	<span class="hl kwa">&lt;div</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;codebox&quot;</span><span class="hl kwa">&gt;</span>
		<span class="hl kwa">&lt;pre&gt;</span>$bool = (($i <span class="hl kwd">&amp;lt;</span> <span class="hl num">7</span>) <span class="hl kwd">&amp;amp;&amp;amp;</span> (($j <span class="hl kwd">&amp;lt;</span> <span class="hl num">8</span>) || ($k == <span class="hl num">4</span>)));<span class="hl kwa">&lt;/pre&gt;</span>
	<span class="hl kwa">&lt;/div&gt;</span>

	<span class="hl kwa">&lt;p</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;good&quot;</span><span class="hl kwa">&gt;</span>// But this one is even better, because it is easier on the eye but the intention is preserved<span class="hl kwa">&lt;/p&gt;</span>
	<span class="hl kwa">&lt;div</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;codebox&quot;</span><span class="hl kwa">&gt;</span>
		<span class="hl kwa">&lt;pre&gt;</span>$bool = ($i <span class="hl kwd">&amp;lt;</span> <span class="hl num">7</span> <span class="hl kwd">&amp;amp;&amp;amp;</span> ($j <span class="hl kwd">&amp;lt;</span> <span class="hl num">8</span> || $k == <span class="hl num">4</span>));<span class="hl kwa">&lt;/pre&gt;</span>
	<span class="hl kwa">&lt;/div&gt;</span>

	<span class="hl kwa">&lt;h4&gt;</span>Quoting strings:<span class="hl kwa">&lt;/h4&gt;</span>
	<span class="hl kwa">&lt;p&gt;</span>There are two different ways to quote strings in PHP - either with single quotes or with double quotes. The main difference is that the parser does variable interpolation in double-quoted strings, but not in single quoted strings. Because of this, you should <span class="hl kwa">&lt;em&gt;</span>always<span class="hl kwa">&lt;/em&gt;</span> use single quotes <span class="hl kwa">&lt;em&gt;</span>unless<span class="hl kwa">&lt;/em&gt;</span> you specifically need variable interpolation to be done on that string. This way, we can save the parser the trouble of parsing a bunch of strings where no interpolation needs to be done.<span class="hl kwa">&lt;/p&gt;</span>
	<span class="hl kwa">&lt;p&gt;</span>Also, if you are using a string variable as part of a function call, you do not need to enclose that variable in quotes. Again, this will just make unnecessary work for the parser. Note, however, that nearly all of the escape sequences that exist for double-quoted strings will not work with single-quoted strings. Be careful, and feel free to break this guideline if it&apos;s making your code easier to read, examples:<span class="hl kwa">&lt;/p&gt;</span>

	<span class="hl kwa">&lt;p</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;bad&quot;</span><span class="hl kwa">&gt;</span>// wrong <span class="hl kwa">&lt;/p&gt;</span>
	<span class="hl kwa">&lt;div</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;codebox&quot;</span><span class="hl kwa">&gt;&lt;pre&gt;</span>
$str = <span class="hl str">&quot;This is a really long string with no variables for the parser to find.&quot;</span>;

do_stuff(<span class="hl str">&quot;$str&quot;</span>);<span class="hl kwa">&lt;/pre&gt;</span>
	<span class="hl kwa">&lt;/div&gt;</span>

	<span class="hl kwa">&lt;p</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;good&quot;</span><span class="hl kwa">&gt;</span>// right<span class="hl kwa">&lt;/p&gt;</span>
	<span class="hl kwa">&lt;div</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;codebox&quot;</span><span class="hl kwa">&gt;&lt;pre&gt;</span>
$str = &apos;This is a really long string with no variables for the parser to find.&apos;;

do_stuff($str);<span class="hl kwa">&lt;/pre&gt;</span>
	<span class="hl kwa">&lt;/div&gt;</span>

	<span class="hl kwa">&lt;p</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;bad&quot;</span><span class="hl kwa">&gt;</span>// Sometimes single quotes are just not right<span class="hl kwa">&lt;/p&gt;</span>
	<span class="hl kwa">&lt;div</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;codebox&quot;</span><span class="hl kwa">&gt;&lt;pre&gt;</span>
$post_url = $phpbb_root_path . &apos;posting.&apos; . $phpEx . &apos;?mode=&apos; . $mode . &apos;<span class="hl kwd">&amp;amp;</span>amp;start=&apos; . $start;<span class="hl kwa">&lt;/pre&gt;</span>
	<span class="hl kwa">&lt;/div&gt;</span>

	<span class="hl kwa">&lt;p</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;good&quot;</span><span class="hl kwa">&gt;</span>// Double quotes are sometimes needed to not overcrowd the line with concatenations.<span class="hl kwa">&lt;/p&gt;</span>
	<span class="hl kwa">&lt;div</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;codebox&quot;</span><span class="hl kwa">&gt;&lt;pre&gt;</span>
$post_url = <span class="hl str">&quot;{$phpbb_root_path}posting.$phpEx?mode=$mode&amp;amp;amp;start=$start&quot;</span>;<span class="hl kwa">&lt;/pre&gt;</span>
	<span class="hl kwa">&lt;/div&gt;</span>

	<span class="hl kwa">&lt;p&gt;</span>In SQL statements mixing single and double quotes is partly allowed (following the guidelines listed here about SQL formatting), else one should try to only use one method - mostly single quotes.<span class="hl kwa">&lt;/p&gt;</span>

	<span class="hl kwa">&lt;h4&gt;</span>Commas after every array element:<span class="hl kwa">&lt;/h4&gt;</span>
	<span class="hl kwa">&lt;p&gt;</span>If an array is defined with each element on its own line, you still have to modify the previous line to add a comma when appending a new element. PHP allows for trailing (useless) commas in array definitions. These should always be used so each element including the comma can be appended with a single line. In JavaScript, do not use the trailing comma, as it causes browsers to throw errors.<span class="hl kwa">&lt;/p&gt;</span>

	<span class="hl kwa">&lt;p</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;bad&quot;</span><span class="hl kwa">&gt;</span>// wrong<span class="hl kwa">&lt;/p&gt;</span>
	<span class="hl kwa">&lt;div</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;codebox&quot;</span><span class="hl kwa">&gt;&lt;pre&gt;</span>
$foo = array(
	&apos;bar&apos; =<span class="hl kwa">&gt;</span> <span class="hl num">42</span>,
	&apos;boo&apos; =<span class="hl kwa">&gt;</span> <span class="hl num">23</span>
);<span class="hl kwa">&lt;/pre&gt;</span>
	<span class="hl kwa">&lt;/div&gt;</span>

	<span class="hl kwa">&lt;p</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;good&quot;</span><span class="hl kwa">&gt;</span>// right <span class="hl kwa">&lt;/p&gt;</span>
	<span class="hl kwa">&lt;div</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;codebox&quot;</span><span class="hl kwa">&gt;&lt;pre&gt;</span>
$foo = array(
	&apos;bar&apos; =<span class="hl kwa">&gt;</span> <span class="hl num">42</span>,
	&apos;boo&apos; =<span class="hl kwa">&gt;</span> <span class="hl num">23</span>,
);<span class="hl kwa">&lt;/pre&gt;</span>
	<span class="hl kwa">&lt;/div&gt;</span>


	<span class="hl kwa">&lt;h4&gt;</span>Associative array keys:<span class="hl kwa">&lt;/h4&gt;</span>
	<span class="hl kwa">&lt;p&gt;</span>In PHP, it&apos;s legal to use a literal string as a key to an associative array without quoting that string. We don&apos;t want to do this -- the string should always be quoted to avoid confusion. Note that this is only when we&apos;re using a literal, not when we&apos;re using a variable, examples:<span class="hl kwa">&lt;/p&gt;</span>

	<span class="hl kwa">&lt;p</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;bad&quot;</span><span class="hl kwa">&gt;</span>// wrong<span class="hl kwa">&lt;/p&gt;</span>
	<span class="hl kwa">&lt;div</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;codebox&quot;</span><span class="hl kwa">&gt;</span>
		<span class="hl kwa">&lt;pre&gt;</span>$foo = $assoc_array[blah];<span class="hl kwa">&lt;/pre&gt;</span>
	<span class="hl kwa">&lt;/div&gt;</span>

	<span class="hl kwa">&lt;p</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;good&quot;</span><span class="hl kwa">&gt;</span>// right <span class="hl kwa">&lt;/p&gt;</span>
	<span class="hl kwa">&lt;div</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;codebox&quot;</span><span class="hl kwa">&gt;</span>
		<span class="hl kwa">&lt;pre&gt;</span>$foo = $assoc_array[&apos;blah&apos;];<span class="hl kwa">&lt;/pre&gt;</span>
	<span class="hl kwa">&lt;/div&gt;</span>

	<span class="hl kwa">&lt;p</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;bad&quot;</span><span class="hl kwa">&gt;</span>// wrong<span class="hl kwa">&lt;/p&gt;</span>
	<span class="hl kwa">&lt;div</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;codebox&quot;</span><span class="hl kwa">&gt;</span>
		<span class="hl kwa">&lt;pre&gt;</span>$foo = $assoc_array[<span class="hl str">&quot;$var&quot;</span>];<span class="hl kwa">&lt;/pre&gt;</span>
	<span class="hl kwa">&lt;/div&gt;</span>

	<span class="hl kwa">&lt;p</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;good&quot;</span><span class="hl kwa">&gt;</span>// right <span class="hl kwa">&lt;/p&gt;</span>
	<span class="hl kwa">&lt;div</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;codebox&quot;</span><span class="hl kwa">&gt;</span>
		<span class="hl kwa">&lt;pre&gt;</span>$foo = $assoc_array[$var];<span class="hl kwa">&lt;/pre&gt;</span>
	<span class="hl kwa">&lt;/div&gt;</span>

	<span class="hl kwa">&lt;h4&gt;</span>Comments:<span class="hl kwa">&lt;/h4&gt;</span>
	<span class="hl kwa">&lt;p&gt;</span>Each complex function should be preceded by a comment that tells a programmer everything they need to know to use that function. The meaning of every parameter, the expected input, and the output are required as a minimal comment. The function&apos;s behaviour in error conditions (and what those error conditions are) should also be present - but mostly included within the comment about the output.<span class="hl kwa">&lt;br /&gt;&lt;br /&gt;</span>Especially important to document are any assumptions the code makes, or preconditions for its proper operation. Any one of the developers should be able to look at any part of the application and figure out what&apos;s going on in a reasonable amount of time.<span class="hl kwa">&lt;br /&gt;&lt;br /&gt;</span>Avoid using <span class="hl kwa">&lt;code&gt;</span>/* */<span class="hl kwa">&lt;/code&gt;</span> comment blocks for one-line comments, <span class="hl kwa">&lt;code&gt;</span>//<span class="hl kwa">&lt;/code&gt;</span> should be used for one/two-liners.<span class="hl kwa">&lt;/p&gt;</span>

	<span class="hl kwa">&lt;h4&gt;</span>Magic numbers:<span class="hl kwa">&lt;/h4&gt;</span>
	<span class="hl kwa">&lt;p&gt;</span>Don&apos;t use them. Use named constants for any literal value other than obvious special cases. Basically, it&apos;s ok to check if an array has <span class="hl num">0</span> elements by using the literal <span class="hl num">0</span>. It&apos;s not ok to assign some special meaning to a number and then use it everywhere as a literal. This hurts readability AND maintainability. The constants <span class="hl kwa">&lt;code&gt;</span>true<span class="hl kwa">&lt;/code&gt;</span> and <span class="hl kwa">&lt;code&gt;</span>false<span class="hl kwa">&lt;/code&gt;</span> should be used in place of the literals <span class="hl num">1</span> and <span class="hl num">0</span> -- even though they have the same values (but not type!), it&apos;s more obvious what the actual logic is when you use the named constants. Typecast variables where it is needed, do not rely on the correct variable type (PHP is currently very loose on typecasting which can lead to security problems if a developer does not keep a very close eye on it).<span class="hl kwa">&lt;/p&gt;</span>

	<span class="hl kwa">&lt;h4&gt;</span>Shortcut operators:<span class="hl kwa">&lt;/h4&gt;</span>
	<span class="hl kwa">&lt;p&gt;</span>The only shortcut operators that cause readability problems are the shortcut increment <span class="hl kwa">&lt;code&gt;</span>$i++<span class="hl kwa">&lt;/code&gt;</span> and decrement <span class="hl kwa">&lt;code&gt;</span>$j--<span class="hl kwa">&lt;/code&gt;</span> operators. These operators should not be used as part of an expression. They can, however, be used on their own line. Using them in expressions is just not worth the headaches when debugging, examples:<span class="hl kwa">&lt;/p&gt;</span>

	<span class="hl kwa">&lt;p</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;bad&quot;</span><span class="hl kwa">&gt;</span>// wrong <span class="hl kwa">&lt;/p&gt;</span>
	<span class="hl kwa">&lt;div</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;codebox&quot;</span><span class="hl kwa">&gt;&lt;pre&gt;</span>
$array[++$i] = $j;
$array[$i++] = $k;<span class="hl kwa">&lt;/pre&gt;</span>
	<span class="hl kwa">&lt;/div&gt;</span>

	<span class="hl kwa">&lt;p</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;good&quot;</span><span class="hl kwa">&gt;</span>// right <span class="hl kwa">&lt;/p&gt;</span>
	<span class="hl kwa">&lt;div</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;codebox&quot;</span><span class="hl kwa">&gt;&lt;pre&gt;</span>
$i++;
$array[$i] = $j;

$array[$i] = $k;
$i++;<span class="hl kwa">&lt;/pre&gt;</span>
	<span class="hl kwa">&lt;/div&gt;</span>

	<span class="hl kwa">&lt;h4&gt;</span>Inline conditionals:<span class="hl kwa">&lt;/h4&gt;</span>
	<span class="hl kwa">&lt;p&gt;</span>Inline conditionals should only be used to do very simple things. Preferably, they will only be used to do assignments, and not for function calls or anything complex at all. They can be harmful to readability if used incorrectly, so don&apos;t fall in love with saving typing by using them, examples:<span class="hl kwa">&lt;/p&gt;</span>

	<span class="hl kwa">&lt;p</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;bad&quot;</span><span class="hl kwa">&gt;</span>// Bad place to use them<span class="hl kwa">&lt;/p&gt;</span>
	<span class="hl kwa">&lt;div</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;codebox&quot;</span><span class="hl kwa">&gt;&lt;pre&gt;</span>
($i <span class="hl kwd">&amp;lt;</span> $size <span class="hl kwd">&amp;amp;&amp;amp;</span> $j <span class="hl kwd">&amp;gt;</span> $size) ? do_stuff($foo) : do_stuff($bar);<span class="hl kwa">&lt;/pre&gt;</span>
	<span class="hl kwa">&lt;/div&gt;</span>

	<span class="hl kwa">&lt;p</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;good&quot;</span><span class="hl kwa">&gt;</span>// OK place to use them <span class="hl kwa">&lt;/p&gt;</span>
	<span class="hl kwa">&lt;div</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;codebox&quot;</span><span class="hl kwa">&gt;&lt;pre&gt;</span>
$min = ($i <span class="hl kwd">&amp;lt;</span> $j) ? $i : $j;<span class="hl kwa">&lt;/pre&gt;</span>
	<span class="hl kwa">&lt;/div&gt;</span>

	<span class="hl kwa">&lt;h4&gt;</span>Don&apos;t use uninitialized variables.<span class="hl kwa">&lt;/h4&gt;</span>
	<span class="hl kwa">&lt;p&gt;</span>For phpBB3, we intend to use a higher level of run-time error reporting. This will mean that the use of an uninitialized variable will be reported as a warning. These warnings can be avoided by using the built-in isset() function to check whether a variable has been set - but preferably the variable is always existing. For checking if an array has a key set this can come in handy though, examples:<span class="hl kwa">&lt;/p&gt;</span>

	<span class="hl kwa">&lt;p</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;bad&quot;</span><span class="hl kwa">&gt;</span>// Wrong <span class="hl kwa">&lt;/p&gt;</span>
	<span class="hl kwa">&lt;div</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;codebox&quot;</span><span class="hl kwa">&gt;</span>
		<span class="hl kwa">&lt;pre&gt;</span>if ($forum) ...<span class="hl kwa">&lt;/pre&gt;</span>
	<span class="hl kwa">&lt;/div&gt;</span>

	<span class="hl kwa">&lt;p</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;good&quot;</span><span class="hl kwa">&gt;</span>// Right <span class="hl kwa">&lt;/p&gt;</span>
	<span class="hl kwa">&lt;div</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;codebox&quot;</span><span class="hl kwa">&gt;</span>
		<span class="hl kwa">&lt;pre&gt;</span>if (isset($forum)) ...<span class="hl kwa">&lt;/pre&gt;&lt;/div&gt;</span>

	<span class="hl kwa">&lt;p</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;good&quot;</span><span class="hl kwa">&gt;</span>// Also possible<span class="hl kwa">&lt;/p&gt;</span>
	<span class="hl kwa">&lt;div</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;codebox&quot;</span><span class="hl kwa">&gt;</span>
		<span class="hl kwa">&lt;pre&gt;</span>if (isset($forum) <span class="hl kwd">&amp;amp;&amp;amp;</span> $forum == <span class="hl num">5</span>)<span class="hl kwa">&lt;/pre&gt;</span>
	<span class="hl kwa">&lt;/div&gt;</span>

	<span class="hl kwa">&lt;p&gt;</span>The <span class="hl kwa">&lt;code&gt;</span>empty()<span class="hl kwa">&lt;/code&gt;</span> function is useful if you want to check if a variable is not set or being empty (an empty string, <span class="hl num">0</span> as an integer or string, NULL, false, an empty array or a variable declared, but without a value in a class). Therefore empty should be used in favor of <span class="hl kwa">&lt;code&gt;</span>isset($array) <span class="hl kwd">&amp;amp;&amp;amp;</span> sizeof($array) <span class="hl kwd">&amp;gt;</span> <span class="hl num">0</span><span class="hl kwa">&lt;/code&gt;</span> - this can be written in a shorter way as <span class="hl kwa">&lt;code&gt;</span>!empty($array)<span class="hl kwa">&lt;/code&gt;</span>.<span class="hl kwa">&lt;/p&gt;</span>

	<span class="hl kwa">&lt;h4&gt;</span>Switch statements:<span class="hl kwa">&lt;/h4&gt;</span>
	<span class="hl kwa">&lt;p&gt;</span>Switch/case code blocks can get a bit long sometimes. To have some level of notice and being in-line with the opening/closing brace requirement (where they are on the same line for better readability), this also applies to switch/case code blocks and the breaks. An example:<span class="hl kwa">&lt;/p&gt;</span>

	<span class="hl kwa">&lt;p</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;bad&quot;</span><span class="hl kwa">&gt;</span>// Wrong <span class="hl kwa">&lt;/p&gt;</span>
	<span class="hl kwa">&lt;div</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;codebox&quot;</span><span class="hl kwa">&gt;&lt;pre&gt;</span>
switch ($mode)
{
	case &apos;mode1&apos;:
		// I am doing something here
		break;
	case &apos;mode2&apos;:
		// I am doing something completely different here
		break;
}<span class="hl kwa">&lt;/pre&gt;</span>
	<span class="hl kwa">&lt;/div&gt;</span>

	<span class="hl kwa">&lt;p</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;good&quot;</span><span class="hl kwa">&gt;</span>// Good <span class="hl kwa">&lt;/p&gt;</span>
	<span class="hl kwa">&lt;div</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;codebox&quot;</span><span class="hl kwa">&gt;&lt;pre&gt;</span>
switch ($mode)
{
	case &apos;mode1&apos;:
		// I am doing something here
	break;

	case &apos;mode2&apos;:
		// I am doing something completely different here
	break;

	default:
		// Always assume that a case was not caught
	break;
}<span class="hl kwa">&lt;/pre&gt;</span>
	<span class="hl kwa">&lt;/div&gt;</span>

	<span class="hl kwa">&lt;p</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;good&quot;</span><span class="hl kwa">&gt;</span>// Also good, if you have more code between the case and the break <span class="hl kwa">&lt;/p&gt;</span>
	<span class="hl kwa">&lt;div</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;codebox&quot;</span><span class="hl kwa">&gt;&lt;pre&gt;</span>
switch ($mode)
{
	case &apos;mode1&apos;:

		// I am doing something here

	break;

	case &apos;mode2&apos;:

		// I am doing something completely different here

	break;

	default:

		// Always assume that a case was not caught

	break;
}<span class="hl kwa">&lt;/pre&gt;</span>
	<span class="hl kwa">&lt;/div&gt;</span>

	<span class="hl kwa">&lt;p&gt;</span>Even if the break for the default case is not needed, it is sometimes better to include it just for readability and completeness.<span class="hl kwa">&lt;/p&gt;</span>

	<span class="hl kwa">&lt;p&gt;</span>If no break is intended, please add a comment instead. An example:<span class="hl kwa">&lt;/p&gt;</span>

	<span class="hl kwa">&lt;p</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;good&quot;</span><span class="hl kwa">&gt;</span>// Example with no break <span class="hl kwa">&lt;/p&gt;</span>
	<span class="hl kwa">&lt;div</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;codebox&quot;</span><span class="hl kwa">&gt;&lt;pre&gt;</span>
switch ($mode)
{
	case &apos;mode1&apos;:

		// I am doing something here

	// no break here

	case &apos;mode2&apos;:

		// I am doing something completely different here

	break;

	default:

		// Always assume that a case was not caught

	break;
}<span class="hl kwa">&lt;/pre&gt;</span>
	<span class="hl kwa">&lt;/div&gt;</span>

	<span class="hl kwa">&lt;h4&gt;</span>Class Members<span class="hl kwa">&lt;/h4&gt;</span>
	<span class="hl kwa">&lt;p&gt;</span>Use the explicit visibility qualifiers <span class="hl kwa">&lt;code&gt;</span>public<span class="hl kwa">&lt;/code&gt;</span>, <span class="hl kwa">&lt;code&gt;</span>private<span class="hl kwa">&lt;/code&gt;</span> and <span class="hl kwa">&lt;code&gt;</span>protected<span class="hl kwa">&lt;/code&gt;</span> for all properties instead of <span class="hl kwa">&lt;code&gt;</span>var<span class="hl kwa">&lt;/code&gt;</span>.

	<span class="hl kwa">&lt;p&gt;</span>Place the <span class="hl kwa">&lt;code&gt;</span>static<span class="hl kwa">&lt;/code&gt;</span> qualifier before the visibility qualifiers.<span class="hl kwa">&lt;/p&gt;</span>

	<span class="hl kwa">&lt;p</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;bad&quot;</span><span class="hl kwa">&gt;</span>//Wrong <span class="hl kwa">&lt;/p&gt;</span>
	<span class="hl kwa">&lt;div</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;codebox&quot;</span><span class="hl kwa">&gt;&lt;pre&gt;</span>
var $x;
private static function f()<span class="hl kwa">&lt;/pre&gt;</span>
	<span class="hl kwa">&lt;/div&gt;</span>

	<span class="hl kwa">&lt;p</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;good&quot;</span><span class="hl kwa">&gt;</span>// Right <span class="hl kwa">&lt;/p&gt;</span>
	<span class="hl kwa">&lt;div</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;codebox&quot;</span><span class="hl kwa">&gt;&lt;pre&gt;</span>
public $x;
static private function f()<span class="hl kwa">&lt;/pre&gt;</span>
	<span class="hl kwa">&lt;/div&gt;</span>

	<span class="hl kwa">&lt;h4&gt;</span>Constants<span class="hl kwa">&lt;/h4&gt;</span>
	<span class="hl kwa">&lt;p&gt;</span>Prefer class constants over global constants created with <span class="hl kwa">&lt;code&gt;</span>define()<span class="hl kwa">&lt;/code&gt;</span>.<span class="hl kwa">&lt;/p&gt;</span>

	<span class="hl kwa">&lt;a</span> <span class="hl kwb">name</span>=<span class="hl str">&quot;sql&quot;</span><span class="hl kwa">&gt;&lt;/a&gt;&lt;h3&gt;</span><span class="hl num">2</span>.iii. SQL/SQL Layout<span class="hl kwa">&lt;/h3&gt;</span>

	<span class="hl kwa">&lt;h4&gt;</span>Common SQL Guidelines: <span class="hl kwa">&lt;/h4&gt;</span>
	<span class="hl kwa">&lt;p&gt;</span>All SQL should be cross-DB compatible, if DB specific SQL is used alternatives must be provided which work on all supported DB&apos;s (MySQL3/<span class="hl num">4</span>/<span class="hl num">5</span>, MSSQL (<span class="hl num">7.0</span> and <span class="hl num">2000</span>), PostgreSQL (<span class="hl num">8.3</span>+), SQLite, Oracle8, ODBC (generalised if possible)).<span class="hl kwa">&lt;/p&gt;</span>
	<span class="hl kwa">&lt;p&gt;</span>All SQL commands should utilise the DataBase Abstraction Layer (DBAL)<span class="hl kwa">&lt;/p&gt;</span>

	<span class="hl kwa">&lt;h4&gt;</span>SQL code layout:<span class="hl kwa">&lt;/h4&gt;</span>
	<span class="hl kwa">&lt;p&gt;</span>SQL Statements are often unreadable without some formatting, since they tend to be big at times. Though the formatting of sql statements adds a lot to the readability of code. SQL statements should be formatted in the following way, basically writing keywords: <span class="hl kwa">&lt;/p&gt;</span>

	<span class="hl kwa">&lt;div</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;codebox&quot;</span><span class="hl kwa">&gt;&lt;pre&gt;</span>
$sql = &apos;SELECT *
<span class="hl kwd">&amp;lt;</span>-one tab-<span class="hl kwd">&amp;gt;</span>FROM &apos; . SOME_TABLE . &apos;
<span class="hl kwd">&amp;lt;</span>-one tab-<span class="hl kwd">&amp;gt;</span>WHERE a = <span class="hl num">1</span>
<span class="hl kwd">&amp;lt;</span>-two tabs-<span class="hl kwd">&amp;gt;</span>AND (b = <span class="hl num">2</span>
<span class="hl kwd">&amp;lt;</span>-three tabs-<span class="hl kwd">&amp;gt;</span>OR b = <span class="hl num">3</span>)
<span class="hl kwd">&amp;lt;</span>-one tab-<span class="hl kwd">&amp;gt;</span>ORDER BY b&apos;;<span class="hl kwa">&lt;/pre&gt;</span>
	<span class="hl kwa">&lt;/div&gt;</span>

	<span class="hl kwa">&lt;p&gt;</span>Here the example with the tabs applied:<span class="hl kwa">&lt;/p&gt;</span>

	<span class="hl kwa">&lt;div</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;codebox&quot;</span><span class="hl kwa">&gt;&lt;pre&gt;</span>
$sql = &apos;SELECT *
	FROM &apos; . SOME_TABLE . &apos;
	WHERE a = <span class="hl num">1</span>
		AND (b = <span class="hl num">2</span>
			OR b = <span class="hl num">3</span>)
	ORDER BY b&apos;;<span class="hl kwa">&lt;/pre&gt;</span>
	<span class="hl kwa">&lt;/div&gt;</span>

	<span class="hl kwa">&lt;h4&gt;</span>SQL Quotes: <span class="hl kwa">&lt;/h4&gt;</span>
	<span class="hl kwa">&lt;p&gt;</span>Use double quotes where applicable. (The variables in these examples are typecasted to integers beforehand.) Examples: <span class="hl kwa">&lt;/p&gt;</span>

	<span class="hl kwa">&lt;p</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;bad&quot;</span><span class="hl kwa">&gt;</span>// These are wrong.<span class="hl kwa">&lt;/p&gt;</span>
	<span class="hl kwa">&lt;div</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;codebox&quot;</span><span class="hl kwa">&gt;&lt;pre&gt;</span>
<span class="hl str">&quot;UPDATE &quot;</span> . SOME_TABLE . <span class="hl str">&quot; SET something = something_else WHERE a = $b&quot;</span>;

&apos;UPDATE &apos; . SOME_TABLE . &apos; SET something = &apos; . $user_id . &apos; WHERE a = &apos; . $something;<span class="hl kwa">&lt;/pre&gt;</span>
	<span class="hl kwa">&lt;/div&gt;</span>

	<span class="hl kwa">&lt;p</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;good&quot;</span><span class="hl kwa">&gt;</span>// These are right. <span class="hl kwa">&lt;/p&gt;</span>

	<span class="hl kwa">&lt;div</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;codebox&quot;</span><span class="hl kwa">&gt;&lt;pre&gt;</span>
&apos;UPDATE &apos; . SOME_TABLE . <span class="hl str">&quot; SET something = something_else WHERE a = $b&quot;</span>;

&apos;UPDATE &apos; . SOME_TABLE . <span class="hl str">&quot; SET something = $user_id WHERE a = $something&quot;</span>;<span class="hl kwa">&lt;/pre&gt;</span>
	<span class="hl kwa">&lt;/div&gt;</span>

	<span class="hl kwa">&lt;p&gt;</span>In other words use single quotes where no variable substitution is required or where the variable involved shouldn&apos;t appear within double quotes. Otherwise use double quotes.<span class="hl kwa">&lt;/p&gt;</span>

	<span class="hl kwa">&lt;h4&gt;</span>Avoid DB specific SQL: <span class="hl kwa">&lt;/h4&gt;</span>
	<span class="hl kwa">&lt;p&gt;</span>The <span class="hl kwd">&amp;quot;</span>not equals operator<span class="hl kwd">&amp;quot;</span>, as defined by the SQL:<span class="hl num">2003</span> standard, is <span class="hl kwd">&amp;quot;&amp;lt;&amp;gt;&amp;quot;</span><span class="hl kwa">&lt;/p&gt;</span>

	<span class="hl kwa">&lt;p</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;bad&quot;</span><span class="hl kwa">&gt;</span>// This is wrong.<span class="hl kwa">&lt;/p&gt;</span>
	<span class="hl kwa">&lt;div</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;codebox&quot;</span><span class="hl kwa">&gt;&lt;pre&gt;</span>
$sql = &apos;SELECT *
	FROM &apos; . SOME_TABLE . &apos;
	WHERE a != <span class="hl num">2</span>&apos;;<span class="hl kwa">&lt;/pre&gt;</span>
	<span class="hl kwa">&lt;/div&gt;</span>

	<span class="hl kwa">&lt;p</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;good&quot;</span><span class="hl kwa">&gt;</span>// This is right. <span class="hl kwa">&lt;/p&gt;</span>
	<span class="hl kwa">&lt;div</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;codebox&quot;</span><span class="hl kwa">&gt;&lt;pre&gt;</span>
$sql = &apos;SELECT *
	FROM &apos; . SOME_TABLE . &apos;
	WHERE a <span class="hl kwd">&amp;lt;&amp;gt;</span> <span class="hl num">2</span>&apos;;<span class="hl kwa">&lt;/pre&gt;</span>
	<span class="hl kwa">&lt;/div&gt;</span>

	<span class="hl kwa">&lt;h4&gt;</span>Common DBAL methods: <span class="hl kwa">&lt;/h4&gt;</span>

	<span class="hl kwa">&lt;h4&gt;</span>sql_escape():<span class="hl kwa">&lt;/h4&gt;</span>

	<span class="hl kwa">&lt;p&gt;</span>Always use <span class="hl kwa">&lt;code&gt;</span>$db-<span class="hl kwd">&amp;gt;</span>sql_escape()<span class="hl kwa">&lt;/code&gt;</span> if you need to check for a string within an SQL statement (even if you are sure the variable cannot contain single quotes - never trust your input), for example:<span class="hl kwa">&lt;/p&gt;</span>

	<span class="hl kwa">&lt;div</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;codebox&quot;</span><span class="hl kwa">&gt;&lt;pre&gt;</span>
$sql = &apos;SELECT *
	FROM &apos; . SOME_TABLE . <span class="hl str">&quot;</span>
<span class="hl str">	WHERE username = &apos;&quot;</span> . $db-<span class="hl kwd">&amp;gt;</span>sql_escape($username) . <span class="hl str">&quot;&apos;&quot;</span>;<span class="hl kwa">&lt;/pre&gt;</span>
	<span class="hl kwa">&lt;/div&gt;</span>

	<span class="hl kwa">&lt;h4&gt;</span>sql_query_limit():<span class="hl kwa">&lt;/h4&gt;</span>

	<span class="hl kwa">&lt;p&gt;</span>We do not add limit statements to the sql query, but instead use <span class="hl kwa">&lt;code&gt;</span>$db-<span class="hl kwd">&amp;gt;</span>sql_query_limit()<span class="hl kwa">&lt;/code&gt;</span>. You basically pass the query, the total number of lines to retrieve and the offset.<span class="hl kwa">&lt;/p&gt;</span>

	<span class="hl kwa">&lt;p&gt;&lt;strong&gt;</span>Note: <span class="hl kwa">&lt;/strong&gt;</span> Since Oracle handles limits differently and because of how we implemented this handling you need to take special care if you use <span class="hl kwa">&lt;code&gt;</span>sql_query_limit<span class="hl kwa">&lt;/code&gt;</span> with an sql query retrieving data from more than one table.<span class="hl kwa">&lt;/p&gt;</span>

	<span class="hl kwa">&lt;p&gt;</span>Make sure when using something like <span class="hl str">&quot;SELECT x.*, y.jars&quot;</span> that there is not a column named jars in x; make sure that there is no overlap between an implicit column and the explicit columns.<span class="hl kwa">&lt;/p&gt;</span>

	<span class="hl kwa">&lt;h4&gt;</span>sql_build_array():<span class="hl kwa">&lt;/h4&gt;</span>

	<span class="hl kwa">&lt;p&gt;</span>If you need to UPDATE or INSERT data, make use of the <span class="hl kwa">&lt;code&gt;</span>$db-<span class="hl kwd">&amp;gt;</span>sql_build_array()<span class="hl kwa">&lt;/code&gt;</span> function. This function already escapes strings and checks other types, so there is no need to do this here. The data to be inserted should go into an array - <span class="hl kwa">&lt;code&gt;</span>$sql_ary<span class="hl kwa">&lt;/code&gt;</span> - or directly within the statement if one or two variables needs to be inserted/updated. An example of an insert statement would be:<span class="hl kwa">&lt;/p&gt;</span>

	<span class="hl kwa">&lt;div</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;codebox&quot;</span><span class="hl kwa">&gt;&lt;pre&gt;</span>
$sql_ary = array(
	&apos;somedata&apos;		=<span class="hl kwd">&amp;gt;</span> $my_string,
	&apos;otherdata&apos;		=<span class="hl kwd">&amp;gt;</span> $an_int,
	&apos;moredata&apos;		=<span class="hl kwd">&amp;gt;</span> $another_int,
);

$db-<span class="hl kwd">&amp;gt;</span>sql_query(&apos;INSERT INTO &apos; . SOME_TABLE . &apos; &apos; . $db-<span class="hl kwd">&amp;gt;</span>sql_build_array(&apos;INSERT&apos;, $sql_ary));<span class="hl kwa">&lt;/pre&gt;</span>
	<span class="hl kwa">&lt;/div&gt;</span>

	<span class="hl kwa">&lt;p&gt;</span>To complete the example, this is how an update statement would look like:<span class="hl kwa">&lt;/p&gt;</span>

	<span class="hl kwa">&lt;div</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;codebox&quot;</span><span class="hl kwa">&gt;&lt;pre&gt;</span>
$sql_ary = array(
	&apos;somedata&apos;		=<span class="hl kwd">&amp;gt;</span> $my_string,
	&apos;otherdata&apos;		=<span class="hl kwd">&amp;gt;</span> $an_int,
	&apos;moredata&apos;		=<span class="hl kwd">&amp;gt;</span> $another_int,
);

$sql = &apos;UPDATE &apos; . SOME_TABLE . &apos;
	SET &apos; . $db-<span class="hl kwd">&amp;gt;</span>sql_build_array(&apos;UPDATE&apos;, $sql_ary) . &apos;
	WHERE user_id = &apos; . (int) $user_id;
$db-<span class="hl kwd">&amp;gt;</span>sql_query($sql);<span class="hl kwa">&lt;/pre&gt;</span>
	<span class="hl kwa">&lt;/div&gt;</span>

	<span class="hl kwa">&lt;p&gt;</span>The <span class="hl kwa">&lt;code&gt;</span>$db-<span class="hl kwd">&amp;gt;</span>sql_build_array()<span class="hl kwa">&lt;/code&gt;</span> function supports the following modes: <span class="hl kwa">&lt;code&gt;</span>INSERT<span class="hl kwa">&lt;/code&gt;</span> (example above), <span class="hl kwa">&lt;code&gt;</span>INSERT_SELECT<span class="hl kwa">&lt;/code&gt;</span> (building query for <span class="hl kwa">&lt;code&gt;</span>INSERT INTO table (...) SELECT value, column ...<span class="hl kwa">&lt;/code&gt;</span> statements), <span class="hl kwa">&lt;code&gt;</span>UPDATE<span class="hl kwa">&lt;/code&gt;</span> (example above) and <span class="hl kwa">&lt;code&gt;</span>SELECT<span class="hl kwa">&lt;/code&gt;</span> (for building WHERE statement [AND logic]).<span class="hl kwa">&lt;/p&gt;</span>

	<span class="hl kwa">&lt;h4&gt;</span>sql_multi_insert():<span class="hl kwa">&lt;/h4&gt;</span>

	<span class="hl kwa">&lt;p&gt;</span>If you want to insert multiple statements at once, please use the separate <span class="hl kwa">&lt;code&gt;</span>sql_multi_insert()<span class="hl kwa">&lt;/code&gt;</span> method. An example:<span class="hl kwa">&lt;/p&gt;</span>

	<span class="hl kwa">&lt;div</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;codebox&quot;</span><span class="hl kwa">&gt;&lt;pre&gt;</span>
$sql_ary = array();

$sql_ary[] = array(
	&apos;somedata&apos;		=<span class="hl kwd">&amp;gt;</span> $my_string_1,
	&apos;otherdata&apos;		=<span class="hl kwd">&amp;gt;</span> $an_int_1,
	&apos;moredata&apos;		=<span class="hl kwd">&amp;gt;</span> $another_int_1,
);

$sql_ary[] = array(
	&apos;somedata&apos;		=<span class="hl kwd">&amp;gt;</span> $my_string_2,
	&apos;otherdata&apos;		=<span class="hl kwd">&amp;gt;</span> $an_int_2,
	&apos;moredata&apos;		=<span class="hl kwd">&amp;gt;</span> $another_int_2,
);

$db-<span class="hl kwa">&gt;</span>sql_multi_insert(SOME_TABLE, $sql_ary);<span class="hl kwa">&lt;/pre&gt;</span>
	<span class="hl kwa">&lt;/div&gt;</span>

	<span class="hl kwa">&lt;h4&gt;</span>sql_in_set():<span class="hl kwa">&lt;/h4&gt;</span>

	<span class="hl kwa">&lt;p&gt;</span>The <span class="hl kwa">&lt;code&gt;</span>$db-<span class="hl kwd">&amp;gt;</span>sql_in_set()<span class="hl kwa">&lt;/code&gt;</span> function should be used for building <span class="hl kwa">&lt;code&gt;</span>IN ()<span class="hl kwa">&lt;/code&gt;</span> and <span class="hl kwa">&lt;code&gt;</span>NOT IN ()<span class="hl kwa">&lt;/code&gt;</span> constructs. Since (specifically) MySQL tend to be faster if for one value to be compared the <span class="hl kwa">&lt;code&gt;</span>=<span class="hl kwa">&lt;/code&gt;</span> and <span class="hl kwa">&lt;code&gt;</span><span class="hl kwd">&amp;lt;&amp;gt;</span><span class="hl kwa">&lt;/code&gt;</span> operator is used, we let the DBAL decide what to do. A typical example of doing a positive match against a number of values would be:<span class="hl kwa">&lt;/p&gt;</span>

	<span class="hl kwa">&lt;div</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;codebox&quot;</span><span class="hl kwa">&gt;&lt;pre&gt;</span>
$sql = &apos;SELECT *
	FROM &apos; . FORUMS_TABLE . &apos;
	WHERE &apos; . $db-<span class="hl kwd">&amp;gt;</span>sql_in_set(&apos;forum_id&apos;, $forum_ids);
$db-<span class="hl kwd">&amp;gt;</span>sql_query($sql);<span class="hl kwa">&lt;/pre&gt;</span>
	<span class="hl kwa">&lt;/div&gt;</span>

	<span class="hl kwa">&lt;p&gt;</span>Based on the number of values in $forum_ids, the query can look differently.<span class="hl kwa">&lt;/p&gt;</span>

	<span class="hl kwa">&lt;p</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;good&quot;</span><span class="hl kwa">&gt;</span>// SQL Statement if $forum_ids = array(<span class="hl num">1</span>, <span class="hl num">2</span>, <span class="hl num">3</span>);<span class="hl kwa">&lt;/p&gt;</span>

	<span class="hl kwa">&lt;div</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;codebox&quot;</span><span class="hl kwa">&gt;&lt;pre&gt;</span>
SELECT FROM phpbb_forums WHERE forum_id IN (<span class="hl num">1</span>, <span class="hl num">2</span>, <span class="hl num">3</span>)<span class="hl kwa">&lt;/pre&gt;</span>
	<span class="hl kwa">&lt;/div&gt;</span>

	<span class="hl kwa">&lt;p</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;good&quot;</span><span class="hl kwa">&gt;</span>// SQL Statement if $forum_ids = array(<span class="hl num">1</span>) or $forum_ids = <span class="hl num">1</span><span class="hl kwa">&lt;/p&gt;</span>

	<span class="hl kwa">&lt;div</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;codebox&quot;</span><span class="hl kwa">&gt;&lt;pre&gt;</span>
SELECT FROM phpbb_forums WHERE forum_id = <span class="hl num">1</span><span class="hl kwa">&lt;/pre&gt;</span>
	<span class="hl kwa">&lt;/div&gt;</span>

	<span class="hl kwa">&lt;p&gt;</span>Of course the same is possible for doing a negative match against a number of values:<span class="hl kwa">&lt;/p&gt;</span>

	<span class="hl kwa">&lt;div</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;codebox&quot;</span><span class="hl kwa">&gt;&lt;pre&gt;</span>
$sql = &apos;SELECT *
	FROM &apos; . FORUMS_TABLE . &apos;
	WHERE &apos; . $db-<span class="hl kwd">&amp;gt;</span>sql_in_set(&apos;forum_id&apos;, $forum_ids, <span class="hl kwa">&lt;strong&gt;</span>true<span class="hl kwa">&lt;/strong&gt;</span>);
$db-<span class="hl kwd">&amp;gt;</span>sql_query($sql);<span class="hl kwa">&lt;/pre&gt;</span>
	<span class="hl kwa">&lt;/div&gt;</span>

	<span class="hl kwa">&lt;p&gt;</span>Based on the number of values in $forum_ids, the query can look differently here too.<span class="hl kwa">&lt;/p&gt;</span>

	<span class="hl kwa">&lt;p</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;good&quot;</span><span class="hl kwa">&gt;</span>// SQL Statement if $forum_ids = array(<span class="hl num">1</span>, <span class="hl num">2</span>, <span class="hl num">3</span>);<span class="hl kwa">&lt;/p&gt;</span>

	<span class="hl kwa">&lt;div</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;codebox&quot;</span><span class="hl kwa">&gt;&lt;pre&gt;</span>
SELECT FROM phpbb_forums WHERE forum_id <span class="hl kwa">&lt;strong&gt;</span>NOT<span class="hl kwa">&lt;/strong&gt;</span> IN (<span class="hl num">1</span>, <span class="hl num">2</span>, <span class="hl num">3</span>)<span class="hl kwa">&lt;/pre&gt;</span>
	<span class="hl kwa">&lt;/div&gt;</span>

	<span class="hl kwa">&lt;p</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;good&quot;</span><span class="hl kwa">&gt;</span>// SQL Statement if $forum_ids = array(<span class="hl num">1</span>) or $forum_ids = <span class="hl num">1</span><span class="hl kwa">&lt;/p&gt;</span>

	<span class="hl kwa">&lt;div</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;codebox&quot;</span><span class="hl kwa">&gt;&lt;pre&gt;</span>
SELECT FROM phpbb_forums WHERE forum_id <span class="hl kwa">&lt;strong&gt;</span><span class="hl kwd">&amp;lt;&amp;gt;</span><span class="hl kwa">&lt;/strong&gt;</span> <span class="hl num">1</span><span class="hl kwa">&lt;/pre&gt;</span>
	<span class="hl kwa">&lt;/div&gt;</span>

	<span class="hl kwa">&lt;p&gt;</span>If the given array is empty, an error will be produced.<span class="hl kwa">&lt;/p&gt;</span>

	<span class="hl kwa">&lt;h4&gt;</span>sql_build_query():<span class="hl kwa">&lt;/h4&gt;</span>

	<span class="hl kwa">&lt;p&gt;</span>The <span class="hl kwa">&lt;code&gt;</span>$db-<span class="hl kwd">&amp;gt;</span>sql_build_query()<span class="hl kwa">&lt;/code&gt;</span> function is responsible for building sql statements for SELECT and SELECT DISTINCT queries if you need to JOIN on more than one table or retrieve data from more than one table while doing a JOIN. This needs to be used to make sure the resulting statement is working on all supported db&apos;s. Instead of explaining every possible combination, I will give a short example:<span class="hl kwa">&lt;/p&gt;</span>

	<span class="hl kwa">&lt;div</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;codebox&quot;</span><span class="hl kwa">&gt;&lt;pre&gt;</span>
$sql_array = array(
	&apos;SELECT&apos;	=<span class="hl kwd">&amp;gt;</span> &apos;f.*, ft.mark_time&apos;,

	&apos;FROM&apos;		=<span class="hl kwd">&amp;gt;</span> array(
		FORUMS_WATCH_TABLE	=<span class="hl kwd">&amp;gt;</span> &apos;fw&apos;,
		FORUMS_TABLE		=<span class="hl kwd">&amp;gt;</span> &apos;f&apos;,
	),

	&apos;LEFT_JOIN&apos;	=<span class="hl kwd">&amp;gt;</span> array(
		array(
			&apos;FROM&apos;	=<span class="hl kwd">&amp;gt;</span> array(FORUMS_TRACK_TABLE =<span class="hl kwd">&amp;gt;</span> &apos;ft&apos;),
			&apos;ON&apos;	=<span class="hl kwd">&amp;gt;</span> &apos;ft.user_id = &apos; . $user-<span class="hl kwd">&amp;gt;</span>data[&apos;user_id&apos;] . &apos; AND ft.forum_id = f.forum_id&apos;,
		),
	),

	&apos;WHERE&apos;		=<span class="hl kwd">&amp;gt;</span> &apos;fw.user_id = &apos; . $user-<span class="hl kwd">&amp;gt;</span>data[&apos;user_id&apos;] . &apos;
		AND f.forum_id = fw.forum_id&apos;,

	&apos;ORDER_BY&apos;	=<span class="hl kwd">&amp;gt;</span> &apos;left_id&apos;,
);

$sql = $db-<span class="hl kwd">&amp;gt;</span>sql_build_query(&apos;SELECT&apos;, $sql_array);<span class="hl kwa">&lt;/pre&gt;</span>
	<span class="hl kwa">&lt;/div&gt;</span>

	<span class="hl kwa">&lt;p&gt;</span>The possible first parameter for sql_build_query() is SELECT or SELECT_DISTINCT. As you can see, the logic is pretty self-explaining. For the LEFT_JOIN key, just add another array if you want to join on to tables for example. The added benefit of using this construct is that you are able to easily build the query statement based on conditions - for example the above LEFT_JOIN is only necessary if server side topic tracking is enabled; a slight adjustement would be:<span class="hl kwa">&lt;/p&gt;</span>

	<span class="hl kwa">&lt;div</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;codebox&quot;</span><span class="hl kwa">&gt;&lt;pre&gt;</span>
$sql_array = array(
	&apos;SELECT&apos;	=<span class="hl kwd">&amp;gt;</span> &apos;f.*&apos;,

	&apos;FROM&apos;		=<span class="hl kwd">&amp;gt;</span> array(
		FORUMS_WATCH_TABLE	=<span class="hl kwd">&amp;gt;</span> &apos;fw&apos;,
		FORUMS_TABLE		=<span class="hl kwd">&amp;gt;</span> &apos;f&apos;,
	),

	&apos;WHERE&apos;		=<span class="hl kwd">&amp;gt;</span> &apos;fw.user_id = &apos; . $user-<span class="hl kwd">&amp;gt;</span>data[&apos;user_id&apos;] . &apos;
		AND f.forum_id = fw.forum_id&apos;,

	&apos;ORDER_BY&apos;	=<span class="hl kwd">&amp;gt;</span> &apos;left_id&apos;,
);

if ($config[&apos;load_db_lastread&apos;])
{
	$sql_array[&apos;LEFT_JOIN&apos;] = array(
		array(
			&apos;FROM&apos;	=<span class="hl kwd">&amp;gt;</span> array(FORUMS_TRACK_TABLE =<span class="hl kwd">&amp;gt;</span> &apos;ft&apos;),
			&apos;ON&apos;	=<span class="hl kwd">&amp;gt;</span> &apos;ft.user_id = &apos; . $user-<span class="hl kwd">&amp;gt;</span>data[&apos;user_id&apos;] . &apos; AND ft.forum_id = f.forum_id&apos;,
		),
	);

	$sql_array[&apos;SELECT&apos;] .= &apos;, ft.mark_time &apos;;
}
else
{
	// Here we read the cookie data
}

$sql = $db-<span class="hl kwd">&amp;gt;</span>sql_build_query(&apos;SELECT&apos;, $sql_array);<span class="hl kwa">&lt;/pre&gt;</span>
	<span class="hl kwa">&lt;/div&gt;</span>

	<span class="hl kwa">&lt;a</span> <span class="hl kwb">name</span>=<span class="hl str">&quot;optimizing&quot;</span><span class="hl kwa">&gt;&lt;/a&gt;&lt;h3&gt;</span><span class="hl num">2</span>.iv. Optimizations<span class="hl kwa">&lt;/h3&gt;</span>

	<span class="hl kwa">&lt;h4&gt;</span>Operations in loop definition: <span class="hl kwa">&lt;/h4&gt;</span>
	<span class="hl kwa">&lt;p&gt;</span>Always try to optimize your loops if operations are going on at the comparing part, since this part is executed every time the loop is parsed through. For assignments a descriptive name should be chosen. Example:<span class="hl kwa">&lt;/p&gt;</span>

	<span class="hl kwa">&lt;p</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;bad&quot;</span><span class="hl kwa">&gt;</span>// On every iteration the sizeof function is called<span class="hl kwa">&lt;/p&gt;</span>
	<span class="hl kwa">&lt;div</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;codebox&quot;</span><span class="hl kwa">&gt;&lt;pre&gt;</span>
for ($i = <span class="hl num">0</span>; $i <span class="hl kwd">&amp;lt;</span> sizeof($post_data); $i++)
{
	do_something();
}<span class="hl kwa">&lt;/pre&gt;</span>
	<span class="hl kwa">&lt;/div&gt;</span>

	<span class="hl kwa">&lt;p</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;good&quot;</span><span class="hl kwa">&gt;</span>// You are able to assign the (not changing) result within the loop itself<span class="hl kwa">&lt;/p&gt;</span>
	<span class="hl kwa">&lt;div</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;codebox&quot;</span><span class="hl kwa">&gt;&lt;pre&gt;</span>
for ($i = <span class="hl num">0</span>, $size = sizeof($post_data); $i <span class="hl kwd">&amp;lt;</span> $size; $i++)
{
	do_something();
}<span class="hl kwa">&lt;/pre&gt;</span>
	<span class="hl kwa">&lt;/div&gt;</span>

	<span class="hl kwa">&lt;h4&gt;</span>Use of in_array(): <span class="hl kwa">&lt;/h4&gt;</span>
	<span class="hl kwa">&lt;p&gt;</span>Try to avoid using in_array() on huge arrays, and try to not place them into loops if the array to check consist of more than <span class="hl num">20</span> entries. in_array() can be very time consuming and uses a lot of cpu processing time. For little checks it is not noticeable, but if checked against a huge array within a loop those checks alone can take several seconds. If you need this functionality, try using isset() on the arrays keys instead, actually shifting the values into keys and vice versa. A call to <span class="hl kwa">&lt;code&gt;</span>isset($array[$var])<span class="hl kwa">&lt;/code&gt;</span> is a lot faster than <span class="hl kwa">&lt;code&gt;</span>in_array($var, array_keys($array))<span class="hl kwa">&lt;/code&gt;</span> for example.<span class="hl kwa">&lt;/p&gt;</span>


	<span class="hl kwa">&lt;a</span> <span class="hl kwb">name</span>=<span class="hl str">&quot;general&quot;</span><span class="hl kwa">&gt;&lt;/a&gt;&lt;h3&gt;</span><span class="hl num">2</span>.v. General Guidelines<span class="hl kwa">&lt;/h3&gt;</span>

	<span class="hl kwa">&lt;h4&gt;</span>General things:<span class="hl kwa">&lt;/h4&gt;</span>
	<span class="hl kwa">&lt;p&gt;</span>Never trust user input (this also applies to server variables as well as cookies).<span class="hl kwa">&lt;/p&gt;</span>
	<span class="hl kwa">&lt;p&gt;</span>Try to sanitize values returned from a function.<span class="hl kwa">&lt;/p&gt;</span>
	<span class="hl kwa">&lt;p&gt;</span>Try to sanitize given function variables within your function.<span class="hl kwa">&lt;/p&gt;</span>
	<span class="hl kwa">&lt;p&gt;</span>The auth class should be used for all authorisation checking.<span class="hl kwa">&lt;/p&gt;</span>
	<span class="hl kwa">&lt;p&gt;</span>No attempt should be made to remove any copyright information (either contained within the source or displayed interactively when the source is run/compiled), neither should the copyright information be altered in any way (it may be added to).<span class="hl kwa">&lt;/p&gt;</span>

	<span class="hl kwa">&lt;h4&gt;</span>Variables: <span class="hl kwa">&lt;/h4&gt;</span>
	<span class="hl kwa">&lt;p&gt;</span>Make use of the <span class="hl kwa">&lt;code&gt;</span>\phpbb\request\request<span class="hl kwa">&lt;/code&gt;</span> class for everything.<span class="hl kwa">&lt;/p&gt;</span>
	<span class="hl kwa">&lt;p&gt;</span>The $request-<span class="hl kwa">&gt;</span>variable() method determines the type to set from the second parameter (which determines the default value too). If you need to get a scalar variable type, you need to tell this the variable() method explicitly. Examples:<span class="hl kwa">&lt;/p&gt;</span>

	<span class="hl kwa">&lt;p</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;bad&quot;</span><span class="hl kwa">&gt;</span>// Old method, do not use it<span class="hl kwa">&lt;/p&gt;</span>
	<span class="hl kwa">&lt;div</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;codebox&quot;</span><span class="hl kwa">&gt;&lt;pre&gt;</span>
$start = (isset($HTTP_GET_VARS[&apos;start&apos;])) ? intval($HTTP_GET_VARS[&apos;start&apos;]) : intval($HTTP_POST_VARS[&apos;start&apos;]);
$submit = (isset($HTTP_POST_VARS[&apos;submit&apos;])) ? true : false;<span class="hl kwa">&lt;/pre&gt;</span>
	<span class="hl kwa">&lt;/div&gt;</span>

	<span class="hl kwa">&lt;p</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;good&quot;</span><span class="hl kwa">&gt;</span>// Use request var and define a default variable (use the correct type)<span class="hl kwa">&lt;/p&gt;</span>
	<span class="hl kwa">&lt;div</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;codebox&quot;</span><span class="hl kwa">&gt;&lt;pre&gt;</span>
$start = $request-<span class="hl kwa">&gt;</span>variable(&apos;start&apos;, <span class="hl num">0</span>);
$submit = $request-<span class="hl kwa">&gt;</span>is_set_post(&apos;submit&apos;);<span class="hl kwa">&lt;/pre&gt;</span>
	<span class="hl kwa">&lt;/div&gt;</span>

	<span class="hl kwa">&lt;p</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;bad&quot;</span><span class="hl kwa">&gt;</span>// $start is an int, the following use of $request-<span class="hl kwa">&gt;</span>variable() therefore is not allowed<span class="hl kwa">&lt;/p&gt;</span>
	<span class="hl kwa">&lt;div</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;codebox&quot;</span><span class="hl kwa">&gt;&lt;pre&gt;</span>
$start = $request-<span class="hl kwa">&gt;</span>variable(&apos;start&apos;, &apos;<span class="hl num">0</span>&apos;);<span class="hl kwa">&lt;/pre&gt;</span>
	<span class="hl kwa">&lt;/div&gt;</span>

	<span class="hl kwa">&lt;p</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;good&quot;</span><span class="hl kwa">&gt;</span>// Getting an array, keys are integers, value defaults to <span class="hl num">0</span><span class="hl kwa">&lt;/p&gt;</span>
	<span class="hl kwa">&lt;div</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;codebox&quot;</span><span class="hl kwa">&gt;&lt;pre&gt;</span>
$mark_array = $request-<span class="hl kwa">&gt;</span>variable(&apos;mark&apos;, array(<span class="hl num">0</span>));<span class="hl kwa">&lt;/pre&gt;</span>
	<span class="hl kwa">&lt;/div&gt;</span>

	<span class="hl kwa">&lt;p</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;good&quot;</span><span class="hl kwa">&gt;</span>// Getting an array, keys are strings, value defaults to <span class="hl num">0</span><span class="hl kwa">&lt;/p&gt;</span>
	<span class="hl kwa">&lt;div</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;codebox&quot;</span><span class="hl kwa">&gt;&lt;pre&gt;</span>
$action_ary = $request-<span class="hl kwa">&gt;</span>variable(&apos;action&apos;, array(&apos;&apos; =<span class="hl kwd">&amp;gt;</span> <span class="hl num">0</span>));<span class="hl kwa">&lt;/pre&gt;</span>
	<span class="hl kwa">&lt;/div&gt;</span>

	<span class="hl kwa">&lt;h4&gt;</span>Login checks/redirection: <span class="hl kwa">&lt;/h4&gt;</span>
	<span class="hl kwa">&lt;p&gt;</span>To show a forum login box use <span class="hl kwa">&lt;code&gt;</span>login_forum_box($forum_data)<span class="hl kwa">&lt;/code&gt;</span>, else use the <span class="hl kwa">&lt;code&gt;</span>login_box()<span class="hl kwa">&lt;/code&gt;</span> function.<span class="hl kwa">&lt;/p&gt;</span>

	<span class="hl kwa">&lt;p&gt;&lt;code&gt;</span>$forum_data<span class="hl kwa">&lt;/code&gt;</span> should contain at least the <span class="hl kwa">&lt;code&gt;</span>forum_id<span class="hl kwa">&lt;/code&gt;</span> and <span class="hl kwa">&lt;code&gt;</span>forum_password<span class="hl kwa">&lt;/code&gt;</span> fields. If the field <span class="hl kwa">&lt;code&gt;</span>forum_name<span class="hl kwa">&lt;/code&gt;</span> is available, then it is displayed on the forum login page.<span class="hl kwa">&lt;/p&gt;</span>

	<span class="hl kwa">&lt;p&gt;</span>The <span class="hl kwa">&lt;code&gt;</span>login_box()<span class="hl kwa">&lt;/code&gt;</span> function can have a redirect as the first parameter. As a thumb of rule, specify an empty string if you want to redirect to the users current location, else do not add the <span class="hl kwa">&lt;code&gt;</span>$SID<span class="hl kwa">&lt;/code&gt;</span> to the redirect string (for example within the ucp/login we redirect to the board index because else the user would be redirected to the login screen).<span class="hl kwa">&lt;/p&gt;</span>

	<span class="hl kwa">&lt;h4&gt;</span>Sensitive Operations: <span class="hl kwa">&lt;/h4&gt;</span>
	<span class="hl kwa">&lt;p&gt;</span>For sensitive operations always let the user confirm the action. For the confirmation screens, make use of the <span class="hl kwa">&lt;code&gt;</span>confirm_box()<span class="hl kwa">&lt;/code&gt;</span> function.<span class="hl kwa">&lt;/p&gt;</span>

	<span class="hl kwa">&lt;h4&gt;</span>Altering Operations: <span class="hl kwa">&lt;/h4&gt;</span>
	<span class="hl kwa">&lt;p&gt;</span>For operations altering the state of the database, for instance posting, always verify the form token, unless you are already using <span class="hl kwa">&lt;code&gt;</span>confirm_box()<span class="hl kwa">&lt;/code&gt;</span>. To do so, make use of the <span class="hl kwa">&lt;code&gt;</span>add_form_key()<span class="hl kwa">&lt;/code&gt;</span> and <span class="hl kwa">&lt;code&gt;</span>check_form_key()<span class="hl kwa">&lt;/code&gt;</span> functions. <span class="hl kwa">&lt;/p&gt;</span>
	<span class="hl kwa">&lt;div</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;codebox&quot;</span><span class="hl kwa">&gt;&lt;pre&gt;</span>
	add_form_key(&apos;my_form&apos;);

	if ($submit)
	{
		if (!check_form_key(&apos;my_form&apos;))
		{
			trigger_error(&apos;FORM_INVALID&apos;);
		}
	}<span class="hl kwa">&lt;/pre&gt;</span>
	<span class="hl kwa">&lt;/div&gt;</span>

	<span class="hl kwa">&lt;p&gt;</span>The string passed to <span class="hl kwa">&lt;code&gt;</span>add_form_key()<span class="hl kwa">&lt;/code&gt;</span> needs to match the string passed to <span class="hl kwa">&lt;code&gt;</span>check_form_key()<span class="hl kwa">&lt;/code&gt;</span>. Another requirement for this to work correctly is that all forms include the <span class="hl kwa">&lt;code&gt;</span>{S_FORM_TOKEN}<span class="hl kwa">&lt;/code&gt;</span> template variable.<span class="hl kwa">&lt;/p&gt;</span>


	<span class="hl kwa">&lt;h4&gt;</span>Sessions: <span class="hl kwa">&lt;/h4&gt;</span>
	<span class="hl kwa">&lt;p&gt;</span>Sessions should be initiated on each page, as near the top as possible using the following code:<span class="hl kwa">&lt;/p&gt;</span>

	<span class="hl kwa">&lt;div</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;codebox&quot;</span><span class="hl kwa">&gt;&lt;pre&gt;</span>
$user-<span class="hl kwd">&amp;gt;</span>session_begin();
$auth-<span class="hl kwd">&amp;gt;</span>acl($user-<span class="hl kwd">&amp;gt;</span>data);
$user-<span class="hl kwd">&amp;gt;</span>setup();<span class="hl kwa">&lt;/pre&gt;</span>
	<span class="hl kwa">&lt;/div&gt;</span>

	<span class="hl kwa">&lt;p&gt;</span>The <span class="hl kwa">&lt;code&gt;</span>$user-<span class="hl kwd">&amp;gt;</span>setup()<span class="hl kwa">&lt;/code&gt;</span> call can be used to pass on additional language definition and a custom style (used in viewforum).<span class="hl kwa">&lt;/p&gt;</span>

	<span class="hl kwa">&lt;h4&gt;</span>Errors and messages: <span class="hl kwa">&lt;/h4&gt;</span>
	<span class="hl kwa">&lt;p&gt;</span>All messages/errors should be outputted by calling <span class="hl kwa">&lt;code&gt;</span>trigger_error()<span class="hl kwa">&lt;/code&gt;</span> using the appropriate message type and language string. Example:<span class="hl kwa">&lt;/p&gt;</span>

	<span class="hl kwa">&lt;div</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;codebox&quot;</span><span class="hl kwa">&gt;&lt;pre&gt;</span>
trigger_error(&apos;NO_FORUM&apos;);<span class="hl kwa">&lt;/pre&gt;</span>
	<span class="hl kwa">&lt;/div&gt;</span>

	<span class="hl kwa">&lt;div</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;codebox&quot;</span><span class="hl kwa">&gt;&lt;pre&gt;</span>
trigger_error($user-<span class="hl kwd">&amp;gt;</span>lang[&apos;NO_FORUM&apos;]);<span class="hl kwa">&lt;/pre&gt;</span>
	<span class="hl kwa">&lt;/div&gt;</span>

	<span class="hl kwa">&lt;div</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;codebox&quot;</span><span class="hl kwa">&gt;&lt;pre&gt;</span>
trigger_error(&apos;NO_MODE&apos;, E_USER_ERROR);<span class="hl kwa">&lt;/pre&gt;</span>
	<span class="hl kwa">&lt;/div&gt;</span>

	<span class="hl kwa">&lt;h4&gt;</span>Url formatting<span class="hl kwa">&lt;/h4&gt;</span>

	<span class="hl kwa">&lt;p&gt;</span>All urls pointing to internal files need to be prepended by the <span class="hl kwa">&lt;code&gt;</span>$phpbb_root_path<span class="hl kwa">&lt;/code&gt;</span> variable. Within the administration control panel all urls pointing to internal files need to be prepended by the <span class="hl kwa">&lt;code&gt;</span>$phpbb_admin_path<span class="hl kwa">&lt;/code&gt;</span> variable. This makes sure the path is always correct and users being able to just rename the admin folder and the acp still working as intended (though some links will fail and the code need to be slightly adjusted).<span class="hl kwa">&lt;/p&gt;</span>

	<span class="hl kwa">&lt;p&gt;</span>The <span class="hl kwa">&lt;code&gt;</span>append_sid()<span class="hl kwa">&lt;/code&gt;</span> function from <span class="hl num">2.0</span>.x is available too, though it does not handle url alterations automatically. Please have a look at the code documentation if you want to get more details on how to use append_sid(). A sample call to append_sid() can look like this:<span class="hl kwa">&lt;/p&gt;</span>

	<span class="hl kwa">&lt;div</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;codebox&quot;</span><span class="hl kwa">&gt;&lt;pre&gt;</span>
append_sid(<span class="hl kwd">&amp;quot;</span>{$phpbb_root_path}memberlist.$phpEx<span class="hl kwd">&amp;quot;</span>, &apos;mode=group<span class="hl kwd">&amp;amp;</span>amp;g=&apos; . $row[&apos;group_id&apos;])<span class="hl kwa">&lt;/pre&gt;</span>
	<span class="hl kwa">&lt;/div&gt;</span>

	<span class="hl kwa">&lt;h4&gt;</span>General function usage: <span class="hl kwa">&lt;/h4&gt;</span>

	<span class="hl kwa">&lt;p&gt;</span>Some of these functions are only chosen over others because of personal preference and have no benefit other than maintaining consistency throughout the code.<span class="hl kwa">&lt;/p&gt;</span>

	<span class="hl kwa">&lt;ul&gt;</span>
		<span class="hl kwa">&lt;li&gt;</span>
			<span class="hl kwa">&lt;p&gt;</span>Use <span class="hl kwa">&lt;code&gt;</span>sizeof<span class="hl kwa">&lt;/code&gt;</span> instead of <span class="hl kwa">&lt;code&gt;</span>count<span class="hl kwa">&lt;/code&gt;&lt;/p&gt;</span>
		<span class="hl kwa">&lt;/li&gt;</span>
		<span class="hl kwa">&lt;li&gt;</span>
			<span class="hl kwa">&lt;p&gt;</span>Use <span class="hl kwa">&lt;code&gt;</span>strpos<span class="hl kwa">&lt;/code&gt;</span> instead of <span class="hl kwa">&lt;code&gt;</span>strstr<span class="hl kwa">&lt;/code&gt;&lt;/p&gt;</span>
		<span class="hl kwa">&lt;/li&gt;</span>
		<span class="hl kwa">&lt;li&gt;</span>
			<span class="hl kwa">&lt;p&gt;</span>Use <span class="hl kwa">&lt;code&gt;</span>else if<span class="hl kwa">&lt;/code&gt;</span> instead of <span class="hl kwa">&lt;code&gt;</span>elseif<span class="hl kwa">&lt;/code&gt;&lt;/p&gt;</span>
		<span class="hl kwa">&lt;/li&gt;</span>
		<span class="hl kwa">&lt;li&gt;</span>
			<span class="hl kwa">&lt;p&gt;</span>Use <span class="hl kwa">&lt;code&gt;</span>false<span class="hl kwa">&lt;/code&gt;</span> (lowercase) instead of <span class="hl kwa">&lt;code&gt;</span>FALSE<span class="hl kwa">&lt;/code&gt;&lt;/p&gt;</span>
		<span class="hl kwa">&lt;/li&gt;</span>
		<span class="hl kwa">&lt;li&gt;</span>
			<span class="hl kwa">&lt;p&gt;</span>Use <span class="hl kwa">&lt;code&gt;</span>true<span class="hl kwa">&lt;/code&gt;</span> (lowercase) instead of <span class="hl kwa">&lt;code&gt;</span>TRUE<span class="hl kwa">&lt;/code&gt;&lt;/p&gt;</span>
		<span class="hl kwa">&lt;/li&gt;</span>
	<span class="hl kwa">&lt;/ul&gt;</span>

	<span class="hl kwa">&lt;h4&gt;</span>Exiting<span class="hl kwa">&lt;/h4&gt;</span>

	<span class="hl kwa">&lt;p&gt;</span>Your page should either call <span class="hl kwa">&lt;code&gt;</span>page_footer()<span class="hl kwa">&lt;/code&gt;</span> in the end to trigger output through the template engine and terminate the script, or alternatively at least call the <span class="hl kwa">&lt;code&gt;</span>exit_handler()<span class="hl kwa">&lt;/code&gt;</span>. That call is necessary because it provides a method for external applications embedding phpBB to be called at the end of the script.<span class="hl kwa">&lt;/p&gt;</span>

	<span class="hl kwa">&lt;a</span> <span class="hl kwb">name</span>=<span class="hl str">&quot;phprestrictions&quot;</span><span class="hl kwa">&gt;&lt;/a&gt;&lt;h3&gt;</span><span class="hl num">2</span>.vi. Restrictions on the Use of PHP<span class="hl kwa">&lt;/h3&gt;</span>

	<span class="hl kwa">&lt;h4&gt;</span>Dynamic code execution:<span class="hl kwa">&lt;/h4&gt;</span>

	<span class="hl kwa">&lt;p&gt;</span>Never execute dynamic PHP code (generated or in a constant string) using any of the following PHP functions:<span class="hl kwa">&lt;/p&gt;</span>

	<span class="hl kwa">&lt;ul&gt;</span>
		<span class="hl kwa">&lt;li&gt;&lt;strong&gt;</span>eval<span class="hl kwa">&lt;/strong&gt;&lt;/li&gt;</span>
		<span class="hl kwa">&lt;li&gt;&lt;strong&gt;</span>create_function<span class="hl kwa">&lt;/strong&gt;&lt;/li&gt;</span>
		<span class="hl kwa">&lt;li&gt;&lt;strong&gt;</span>preg_replace<span class="hl kwa">&lt;/strong&gt;</span> with the <span class="hl kwa">&lt;strong&gt;</span>e<span class="hl kwa">&lt;/strong&gt;</span> modifier in the pattern<span class="hl kwa">&lt;/li&gt;</span>
	<span class="hl kwa">&lt;/ul&gt;</span>

	<span class="hl kwa">&lt;p&gt;</span>If absolutely necessary a file should be created, and a mechanism for creating this file prior to running phpBB should be provided as a setup process.<span class="hl kwa">&lt;/p&gt;</span>

	<span class="hl kwa">&lt;p&gt;</span>The <span class="hl kwa">&lt;strong&gt;</span>e<span class="hl kwa">&lt;/strong&gt;</span> modifier in <span class="hl kwa">&lt;strong&gt;</span>preg_replace<span class="hl kwa">&lt;/strong&gt;</span> can be replaced by <span class="hl kwa">&lt;strong&gt;</span>preg_replace_callback<span class="hl kwa">&lt;/strong&gt;</span> and objects to encapsulate state that is needed in the callback code.<span class="hl kwa">&lt;/p&gt;</span>

	<span class="hl kwa">&lt;h4&gt;</span>Other functions, operators, statements and keywords:<span class="hl kwa">&lt;/h4&gt;</span>

	<span class="hl kwa">&lt;p&gt;</span>The following PHP statements should also not be used in phpBB:<span class="hl kwa">&lt;/p&gt;</span>

	<span class="hl kwa">&lt;ul&gt;</span>
		<span class="hl kwa">&lt;li&gt;&lt;strong&gt;</span>goto<span class="hl kwa">&lt;/strong&gt;&lt;/li&gt;</span>
	<span class="hl kwa">&lt;/ul&gt;</span>

		<span class="hl kwa">&lt;/div&gt;</span>

		<span class="hl kwa">&lt;div</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;back2top&quot;</span><span class="hl kwa">&gt;&lt;a</span> <span class="hl kwb">href</span>=<span class="hl str">&quot;#wrap&quot;</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;top&quot;</span><span class="hl kwa">&gt;</span>Back to Top<span class="hl kwa">&lt;/a&gt;&lt;/div&gt;</span>

		<span class="hl kwa">&lt;/div&gt;</span>
	<span class="hl kwa">&lt;/div&gt;</span>

	<span class="hl kwa">&lt;hr /&gt;</span>

<span class="hl kwa">&lt;a</span> <span class="hl kwb">name</span>=<span class="hl str">&quot;styling&quot;</span><span class="hl kwa">&gt;&lt;/a&gt;&lt;h2&gt;</span><span class="hl num">3</span>. Styling<span class="hl kwa">&lt;/h2&gt;</span>
	<span class="hl kwa">&lt;div</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;paragraph&quot;</span><span class="hl kwa">&gt;</span>
		<span class="hl kwa">&lt;div</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;inner&quot;</span><span class="hl kwa">&gt;</span>

		<span class="hl kwa">&lt;div</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;content&quot;</span><span class="hl kwa">&gt;</span>
	<span class="hl kwa">&lt;a</span> <span class="hl kwb">name</span>=<span class="hl str">&quot;cfgfiles&quot;</span><span class="hl kwa">&gt;&lt;/a&gt;&lt;h3&gt;</span><span class="hl num">3</span>.i. Style Config Files<span class="hl kwa">&lt;/h3&gt;</span>
	<span class="hl kwa">&lt;p&gt;</span>Style cfg files are simple name-value lists with the information necessary for installing a style. The important part of the style configuration file is assigning an unique name.<span class="hl kwa">&lt;/p&gt;</span>
	<span class="hl kwa">&lt;div</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;codebox&quot;</span><span class="hl kwa">&gt;&lt;pre&gt;</span>
# General Information about this style
name = prosilver_duplicate
copyright = © phpBB Limited, <span class="hl num">2007</span>
style_version = <span class="hl num">3.2.0</span>
phpbb_version = <span class="hl num">3.2.0</span>

# Defining a different template bitfield
# template_bitfield = lNg=

# Parent style
# Set value to empty or to this style&apos;s name if this style does not have a parent style
parent = prosilver<span class="hl kwa">&lt;/pre&gt;</span>
	<span class="hl kwa">&lt;/div&gt;</span>
	<span class="hl kwa">&lt;a</span> <span class="hl kwb">name</span>=<span class="hl str">&quot;genstyling&quot;</span><span class="hl kwa">&gt;&lt;/a&gt;&lt;h3&gt;</span><span class="hl num">3.2</span>. General Styling Rules<span class="hl kwa">&lt;/h3&gt;</span>
<span class="hl kwa">&lt;p&gt;</span>Templates should be produced in a consistent manner. Where appropriate they should be based off an existing copy, e.g. index, viewforum or viewtopic (the combination of which implement a range of conditional and variable forms). Please also note that the indentation and coding guidelines also apply to templates where possible.<span class="hl kwa">&lt;/p&gt;</span>

<span class="hl kwa">&lt;p&gt;</span>The outer table class <span class="hl kwa">&lt;code&gt;</span>forumline<span class="hl kwa">&lt;/code&gt;</span> has gone and is replaced with <span class="hl kwa">&lt;code&gt;</span>tablebg<span class="hl kwa">&lt;/code&gt;</span>.<span class="hl kwa">&lt;/p&gt;</span>
<span class="hl kwa">&lt;p&gt;</span>When writing <span class="hl kwa">&lt;code&gt;</span><span class="hl kwd">&amp;lt;</span>table<span class="hl kwd">&amp;gt;</span><span class="hl kwa">&lt;/code&gt;</span> the order <span class="hl kwa">&lt;code&gt;</span><span class="hl kwd">&amp;lt;</span>table <span class="hl kwb">class</span>=<span class="hl str">&quot;&quot;</span> <span class="hl kwb">cellspacing</span>=<span class="hl str">&quot;&quot;</span> <span class="hl kwb">cellpadding</span>=<span class="hl str">&quot;&quot;</span> <span class="hl kwb">border</span>=<span class="hl str">&quot;&quot;</span> <span class="hl kwb">align</span>=<span class="hl str">&quot;&quot;</span><span class="hl kwd">&amp;gt;</span><span class="hl kwa">&lt;/code&gt;</span> creates consistency and allows everyone to easily see which table produces which <span class="hl str">&quot;look&quot;</span>. The same applies to most other tags for which additional parameters can be set, consistency is the major aim here.<span class="hl kwa">&lt;/p&gt;</span>
<span class="hl kwa">&lt;p&gt;</span>Each block level element should be indented by one tab, same for tabular elements, e.g. <span class="hl kwa">&lt;code&gt;</span><span class="hl kwd">&amp;lt;</span>tr<span class="hl kwd">&amp;gt;</span><span class="hl kwa">&lt;/code&gt; &lt;code&gt;</span><span class="hl kwd">&amp;lt;</span>td<span class="hl kwd">&amp;gt;</span><span class="hl kwa">&lt;/code&gt;</span> etc., whereby the intendiation of <span class="hl kwa">&lt;code&gt;</span><span class="hl kwd">&amp;lt;</span>table<span class="hl kwd">&amp;gt;</span><span class="hl kwa">&lt;/code&gt;</span> and the following/ending <span class="hl kwa">&lt;code&gt;</span><span class="hl kwd">&amp;lt;</span>tr<span class="hl kwd">&amp;gt;</span><span class="hl kwa">&lt;/code&gt;</span> should be on the same line. This applies not to div elements of course.<span class="hl kwa">&lt;/p&gt;</span>
<span class="hl kwa">&lt;p&gt;</span>Don&apos;t use <span class="hl kwa">&lt;code&gt;</span><span class="hl kwd">&amp;lt;</span>span<span class="hl kwd">&amp;gt;</span><span class="hl kwa">&lt;/code&gt;</span> more than is essential ... the CSS is such that text sizes are dependent on the parent class. So writing <span class="hl kwa">&lt;code&gt;</span><span class="hl kwd">&amp;lt;</span>span <span class="hl kwb">class</span>=<span class="hl str">&quot;gensmall&quot;</span><span class="hl kwd">&amp;gt;&amp;lt;</span>span <span class="hl kwb">class</span>=<span class="hl str">&quot;gensmall&quot;</span><span class="hl kwd">&amp;gt;</span>TEST<span class="hl kwd">&amp;lt;</span>/span<span class="hl kwd">&amp;gt;&amp;lt;</span>/span<span class="hl kwd">&amp;gt;</span><span class="hl kwa">&lt;/code&gt;</span> will result in very very small text. Similarly don&apos;t use span at all if another element can contain the class definition, e.g.<span class="hl kwa">&lt;/p&gt;</span>

<span class="hl kwa">&lt;div</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;codebox&quot;</span><span class="hl kwa">&gt;&lt;pre&gt;</span>
<span class="hl kwd">&amp;lt;</span>td<span class="hl kwd">&amp;gt;&amp;lt;</span>span class=<span class="hl kwd">&amp;quot;</span>gensmall<span class="hl kwd">&amp;quot;&amp;gt;</span>TEST<span class="hl kwd">&amp;lt;</span>/span<span class="hl kwd">&amp;gt;&amp;lt;</span>/td<span class="hl kwd">&amp;gt;</span>
<span class="hl kwa">&lt;/pre&gt;&lt;/div&gt;</span>

<span class="hl kwa">&lt;p&gt;</span>can just as well become:<span class="hl kwa">&lt;/p&gt;</span>
<span class="hl kwa">&lt;div</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;codebox&quot;</span><span class="hl kwa">&gt;&lt;pre&gt;</span>
<span class="hl kwd">&amp;lt;</span>td class=<span class="hl kwd">&amp;quot;</span>gensmall<span class="hl kwd">&amp;quot;&amp;gt;</span>TEST<span class="hl kwd">&amp;lt;</span>/td<span class="hl kwd">&amp;gt;</span>
<span class="hl kwa">&lt;/pre&gt;&lt;/div&gt;</span>

<span class="hl kwa">&lt;p&gt;</span>Try to match text class types with existing useage, e.g. don&apos;t use the nav class where viewtopic uses gensmall for example.<span class="hl kwa">&lt;/p&gt;</span>

<span class="hl kwa">&lt;p&gt;</span>Row colours/classes are now defined by the template, use an <span class="hl kwa">&lt;code&gt;</span>IF S_ROW_COUNT<span class="hl kwa">&lt;/code&gt;</span> switch, see viewtopic or viewforum for an example.<span class="hl kwa">&lt;/p&gt;</span>

<span class="hl kwa">&lt;p&gt;</span>Remember block level ordering is important.<span class="hl kwa">&lt;/p&gt;</span>

<span class="hl kwa">&lt;p&gt;</span>Use a standard cellpadding of <span class="hl num">2</span> and cellspacing of <span class="hl num">0</span> on outer tables. Inner tables can vary from <span class="hl num">0</span> to <span class="hl num">3</span> or even <span class="hl num">4</span> depending on the need.<span class="hl kwa">&lt;/p&gt;</span>

<span class="hl kwa">&lt;p&gt;&lt;strong&gt;</span>Use div container/css for styling and table for data representation.<span class="hl kwa">&lt;/strong&gt;&lt;/p&gt;</span>

<span class="hl kwa">&lt;p&gt;</span>The separate catXXXX and thXXX classes are gone. When defining a header cell just use <span class="hl kwa">&lt;code&gt;</span><span class="hl kwd">&amp;lt;</span>th<span class="hl kwd">&amp;gt;</span><span class="hl kwa">&lt;/code&gt;</span> rather than <span class="hl kwa">&lt;code&gt;</span><span class="hl kwd">&amp;lt;</span>th <span class="hl kwb">class</span>=<span class="hl str">&quot;thHead&quot;</span><span class="hl kwd">&amp;gt;</span><span class="hl kwa">&lt;/code&gt;</span> etc. Similarly for cat, don&apos;t use <span class="hl kwa">&lt;code&gt;</span><span class="hl kwd">&amp;lt;</span>td <span class="hl kwb">class</span>=<span class="hl str">&quot;catLeft&quot;</span><span class="hl kwd">&amp;gt;</span><span class="hl kwa">&lt;/code&gt;</span> use <span class="hl kwa">&lt;code&gt;</span><span class="hl kwd">&amp;lt;</span>td <span class="hl kwb">class</span>=<span class="hl str">&quot;cat&quot;</span><span class="hl kwd">&amp;gt;</span><span class="hl kwa">&lt;/code&gt;</span> etc.<span class="hl kwa">&lt;/p&gt;</span>

<span class="hl kwa">&lt;p&gt;</span>Try to retain consistency of basic layout and class useage, i.e. _EXPLAIN text should generally be placed below the title it explains, e.g. <span class="hl kwa">&lt;code&gt;</span>{L_POST_USERNAME}<span class="hl kwd">&amp;lt;</span>br /<span class="hl kwd">&amp;gt;&amp;lt;</span>span <span class="hl kwb">class</span>=<span class="hl str">&quot;gensmall&quot;</span><span class="hl kwd">&amp;gt;</span>{L_POST_USERNAME_EXPLAIN}<span class="hl kwd">&amp;lt;</span>/span<span class="hl kwd">&amp;gt;</span><span class="hl kwa">&lt;/code&gt;</span> is the typical way of handling this ... there may be exceptions and this isn&apos;t a hard and fast rule.<span class="hl kwa">&lt;/p&gt;</span>

<span class="hl kwa">&lt;p&gt;</span>Try to keep template conditional and other statements tabbed in line with the block to which they refer.<span class="hl kwa">&lt;/p&gt;</span>

<span class="hl kwa">&lt;p</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;good&quot;</span><span class="hl kwa">&gt;</span>this is correct<span class="hl kwa">&lt;/p&gt;</span>
<span class="hl kwa">&lt;div</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;codebox&quot;</span><span class="hl kwa">&gt;&lt;pre&gt;</span>
<span class="hl kwa">&lt;span</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;comment&quot;</span><span class="hl kwa">&gt;</span><span class="hl kwd">&amp;lt;</span>!-- BEGIN test --<span class="hl kwd">&amp;gt;</span><span class="hl kwa">&lt;/span&gt;</span>
	<span class="hl kwd">&amp;lt;</span>tr<span class="hl kwd">&amp;gt;</span>
		<span class="hl kwd">&amp;lt;</span>td<span class="hl kwd">&amp;gt;&amp;#123;</span>test.TEXT<span class="hl kwd">&amp;#125;&amp;lt;</span>/td<span class="hl kwd">&amp;gt;</span>
	<span class="hl kwd">&amp;lt;</span>/tr<span class="hl kwd">&amp;gt;</span>
<span class="hl kwa">&lt;span</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;comment&quot;</span><span class="hl kwa">&gt;</span><span class="hl kwd">&amp;lt;</span>!-- END test --<span class="hl kwd">&amp;gt;</span><span class="hl kwa">&lt;/span&gt;</span>
<span class="hl kwa">&lt;/pre&gt;&lt;/div&gt;</span>

<span class="hl kwa">&lt;p</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;good&quot;</span><span class="hl kwa">&gt;</span>this is also correct:<span class="hl kwa">&lt;/p&gt;</span>
<span class="hl kwa">&lt;div</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;codebox&quot;</span><span class="hl kwa">&gt;&lt;pre&gt;</span>
<span class="hl kwa">&lt;span</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;comment&quot;</span><span class="hl kwa">&gt;</span><span class="hl kwd">&amp;lt;</span>!-- BEGIN test --<span class="hl kwd">&amp;gt;</span><span class="hl kwa">&lt;/span&gt;</span>
<span class="hl kwd">&amp;lt;</span>tr<span class="hl kwd">&amp;gt;</span>
	<span class="hl kwd">&amp;lt;</span>td<span class="hl kwd">&amp;gt;&amp;#123;</span>test.TEXT<span class="hl kwd">&amp;#125;&amp;lt;</span>/td<span class="hl kwd">&amp;gt;</span>
<span class="hl kwd">&amp;lt;</span>/tr<span class="hl kwd">&amp;gt;</span>
<span class="hl kwa">&lt;span</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;comment&quot;</span><span class="hl kwa">&gt;</span><span class="hl kwd">&amp;lt;</span>!-- END test --<span class="hl kwd">&amp;gt;</span><span class="hl kwa">&lt;/span&gt;</span>
<span class="hl kwa">&lt;/pre&gt;&lt;/div&gt;</span>

<span class="hl kwa">&lt;p&gt;</span>it gives immediate feedback on exactly what is looping - decide which way to use based on the readability.<span class="hl kwa">&lt;/p&gt;</span>

		<span class="hl kwa">&lt;/div&gt;</span>

		<span class="hl kwa">&lt;div</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;back2top&quot;</span><span class="hl kwa">&gt;&lt;a</span> <span class="hl kwb">href</span>=<span class="hl str">&quot;#wrap&quot;</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;top&quot;</span><span class="hl kwa">&gt;</span>Back to Top<span class="hl kwa">&lt;/a&gt;&lt;/div&gt;</span>

		<span class="hl kwa">&lt;/div&gt;</span>
	<span class="hl kwa">&lt;/div&gt;</span>

	<span class="hl kwa">&lt;hr /&gt;</span>

<span class="hl kwa">&lt;a</span> <span class="hl kwb">name</span>=<span class="hl str">&quot;templating&quot;</span><span class="hl kwa">&gt;&lt;/a&gt;&lt;h2&gt;</span><span class="hl num">4</span>. Templating<span class="hl kwa">&lt;/h2&gt;</span>
	<span class="hl kwa">&lt;div</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;paragraph&quot;</span><span class="hl kwa">&gt;</span>
		<span class="hl kwa">&lt;div</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;inner&quot;</span><span class="hl kwa">&gt;</span>

		<span class="hl kwa">&lt;div</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;content&quot;</span><span class="hl kwa">&gt;</span>
	<span class="hl kwa">&lt;a</span> <span class="hl kwb">name</span>=<span class="hl str">&quot;templates&quot;</span><span class="hl kwa">&gt;&lt;/a&gt;&lt;h3&gt;</span><span class="hl num">4</span>.i. General Templating<span class="hl kwa">&lt;/h3&gt;</span>

<span class="hl kwa">&lt;h4&gt;</span>File naming<span class="hl kwa">&lt;/h4&gt;</span>
<span class="hl kwa">&lt;p&gt;</span>Firstly templates now take the suffix <span class="hl kwd">&amp;quot;</span>.html<span class="hl kwd">&amp;quot;</span> rather than <span class="hl kwd">&amp;quot;</span>.tpl<span class="hl kwd">&amp;quot;</span>. This was done simply to make the lives of some people easier wrt syntax highlighting, etc.<span class="hl kwa">&lt;/p&gt;</span>

<span class="hl kwa">&lt;h4&gt;</span>Variables<span class="hl kwa">&lt;/h4&gt;</span>
<span class="hl kwa">&lt;p&gt;</span>All template variables should be named appropriately (using underscores for spaces), language entries should be prefixed with L_, system data with S_, urls with U_, javascript urls with UA_, language to be put in javascript statements with LA_, all other variables should be presented &apos;as is&apos;.<span class="hl kwa">&lt;/p&gt;</span>

<span class="hl kwa">&lt;p&gt;</span>L_* template variables are automatically mapped to the corresponding language entry if the code does not set (and therefore overwrite) this variable specifically and if the language entry exists. For example <span class="hl kwa">&lt;code&gt;</span>{L_USERNAME}<span class="hl kwa">&lt;/code&gt;</span> maps to <span class="hl kwa">&lt;code&gt;</span>$user-<span class="hl kwd">&amp;gt;</span>lang[&apos;USERNAME&apos;]<span class="hl kwa">&lt;/code&gt;</span>. The LA_* template variables are handled within the same way, but properly escaped so they can be put in javascript code. This should reduce the need to assign loads of new language variables in MODifications.
<span class="hl kwa">&lt;/p&gt;</span>

<span class="hl kwa">&lt;h4&gt;</span>Blocks/Loops<span class="hl kwa">&lt;/h4&gt;</span>
<span class="hl kwa">&lt;p&gt;</span>The basic block level loop remains and takes the form:<span class="hl kwa">&lt;/p&gt;</span>
<span class="hl kwa">&lt;div</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;codebox&quot;</span><span class="hl kwa">&gt;&lt;pre&gt;</span>
<span class="hl kwa">&lt;span</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;comment&quot;</span><span class="hl kwa">&gt;</span><span class="hl kwd">&amp;lt;</span>!-- BEGIN loopname --<span class="hl kwd">&amp;gt;</span><span class="hl kwa">&lt;/span&gt;</span>
	markup, {loopname<span class="hl kwd">&amp;#46;</span>X_YYYYY}, etc<span class="hl kwd">&amp;#46;</span>
<span class="hl kwa">&lt;span</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;comment&quot;</span><span class="hl kwa">&gt;</span><span class="hl kwd">&amp;lt;</span>!-- END loopname --<span class="hl kwd">&amp;gt;</span><span class="hl kwa">&lt;/span&gt;</span>
<span class="hl kwa">&lt;/pre&gt;&lt;/div&gt;</span>

<span class="hl kwa">&lt;p&gt;</span>A bit later loops will be explained further. To not irritate you we will explain conditionals as well as other statements first.<span class="hl kwa">&lt;/p&gt;</span>

<span class="hl kwa">&lt;h4&gt;</span>Including files<span class="hl kwa">&lt;/h4&gt;</span>
<span class="hl kwa">&lt;p&gt;</span>Something that existed in <span class="hl num">2.0</span>.x which no longer exists in <span class="hl num">3</span>.x is the ability to assign a template to a variable. This was used (for example) to output the jumpbox. Instead (perhaps better, perhaps not but certainly more flexible) we now have INCLUDE. This takes the simple form:<span class="hl kwa">&lt;/p&gt;</span>

<span class="hl kwa">&lt;div</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;codebox&quot;</span><span class="hl kwa">&gt;&lt;pre&gt;</span>
<span class="hl kwa">&lt;span</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;comment&quot;</span><span class="hl kwa">&gt;</span><span class="hl kwd">&amp;lt;</span>!-- INCLUDE filename --<span class="hl kwd">&amp;gt;</span><span class="hl kwa">&lt;/span&gt;</span>
<span class="hl kwa">&lt;/pre&gt;&lt;/div&gt;</span>

<span class="hl kwa">&lt;p&gt;</span>You will note in the <span class="hl num">3</span>.x templates the major sources start with <span class="hl kwa">&lt;code&gt;</span><span class="hl kwd">&amp;lt;</span>!-- INCLUDE overall_header.html --<span class="hl kwd">&amp;gt;</span><span class="hl kwa">&lt;/code&gt;</span> or <span class="hl kwa">&lt;code&gt;</span><span class="hl kwd">&amp;lt;</span>!-- INCLUDE simple_header.html --<span class="hl kwd">&amp;gt;</span><span class="hl kwa">&lt;/code&gt;</span>, etc. In <span class="hl num">2.0</span>.x control of <span class="hl kwd">&amp;quot;</span>which<span class="hl kwd">&amp;quot;</span> header to use was defined entirely within the code. In <span class="hl num">3</span>.x the template designer can output what they like. Note that you can introduce new templates (i.e. other than those in the default set) using this system and include them as you wish ... perhaps useful for a common <span class="hl kwd">&amp;quot;</span>menu<span class="hl kwd">&amp;quot;</span> bar or some such. No need to modify loads of files as with <span class="hl num">2.0</span>.x.<span class="hl kwa">&lt;/p&gt;</span>

<span class="hl kwa">&lt;p&gt;</span>Added in <span class="hl kwa">&lt;strong&gt;</span><span class="hl num">3.0.6</span><span class="hl kwa">&lt;/strong&gt;</span> is the ability to include a file using a template variable to specify the file, this functionality only works for root variables (i.e. not block variables).<span class="hl kwa">&lt;/p&gt;</span>
<span class="hl kwa">&lt;div</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;codebox&quot;</span><span class="hl kwa">&gt;&lt;pre&gt;</span>
<span class="hl kwa">&lt;span</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;comment&quot;</span><span class="hl kwa">&gt;</span><span class="hl kwd">&amp;lt;</span>!-- INCLUDE {FILE_VAR} --<span class="hl kwd">&amp;gt;</span><span class="hl kwa">&lt;/span&gt;</span>
<span class="hl kwa">&lt;/pre&gt;&lt;/div&gt;</span>

<span class="hl kwa">&lt;p&gt;</span>Template defined variables can also be utilised.<span class="hl kwa">&lt;/p&gt;</span>

<span class="hl kwa">&lt;div</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;codebox&quot;</span><span class="hl kwa">&gt;&lt;pre&gt;</span>
<span class="hl kwa">&lt;span</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;comment&quot;</span><span class="hl kwa">&gt;</span><span class="hl kwd">&amp;lt;</span>!-- DEFINE $SOME_VAR = &apos;my_file.html&apos; --<span class="hl kwd">&amp;gt;</span><span class="hl kwa">&lt;/span&gt;</span>
<span class="hl kwa">&lt;span</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;comment&quot;</span><span class="hl kwa">&gt;</span><span class="hl kwd">&amp;lt;</span>!-- INCLUDE {$SOME_VAR} --<span class="hl kwd">&amp;gt;</span><span class="hl kwa">&lt;/span&gt;</span>
<span class="hl kwa">&lt;/pre&gt;&lt;/div&gt;</span>

<span class="hl kwa">&lt;h4&gt;</span>PHP<span class="hl kwa">&lt;/h4&gt;</span>
<span class="hl kwa">&lt;p&gt;</span>A contentious decision has seen the ability to include PHP within the template introduced. This is achieved by enclosing the PHP within relevant tags:<span class="hl kwa">&lt;/p&gt;</span>

<span class="hl kwa">&lt;div</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;codebox&quot;</span><span class="hl kwa">&gt;&lt;pre&gt;</span>
<span class="hl kwa">&lt;span</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;comment&quot;</span><span class="hl kwa">&gt;</span><span class="hl kwd">&amp;lt;</span>!-- PHP --<span class="hl kwd">&amp;gt;</span><span class="hl kwa">&lt;/span&gt;</span>
	echo <span class="hl kwd">&amp;quot;</span>hello!<span class="hl kwd">&amp;quot;</span>;
<span class="hl kwa">&lt;span</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;comment&quot;</span><span class="hl kwa">&gt;</span><span class="hl kwd">&amp;lt;</span>!-- ENDPHP --<span class="hl kwd">&amp;gt;</span><span class="hl kwa">&lt;/span&gt;</span>
<span class="hl kwa">&lt;/pre&gt;&lt;/div&gt;</span>

<span class="hl kwa">&lt;p&gt;</span>You may also include PHP from an external file using:<span class="hl kwa">&lt;/p&gt;</span>

<span class="hl kwa">&lt;div</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;codebox&quot;</span><span class="hl kwa">&gt;&lt;pre&gt;</span>
<span class="hl kwa">&lt;span</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;comment&quot;</span><span class="hl kwa">&gt;</span><span class="hl kwd">&amp;lt;</span>!-- INCLUDEPHP somefile<span class="hl kwd">&amp;#46;</span>php --<span class="hl kwd">&amp;gt;</span><span class="hl kwa">&lt;/span&gt;</span>
<span class="hl kwa">&lt;/pre&gt;&lt;/div&gt;</span>

<span class="hl kwa">&lt;p&gt;</span>it will be included and executed inline.<span class="hl kwa">&lt;br /&gt;&lt;br /&gt;</span>A note, it is very much encouraged that template designers do not include PHP. The ability to include raw PHP was introduced primarily to allow end users to include banner code, etc. without modifying multiple files (as with <span class="hl num">2.0</span>.x). It was not intended for general use ... hence <span class="hl com">&lt;!-- w --&gt;</span><span class="hl kwa">&lt;a</span> <span class="hl kwb">href</span>=<span class="hl str">&quot;https://www.phpbb.com&quot;</span><span class="hl kwa">&gt;</span>www.phpbb.com<span class="hl kwa">&lt;/a&gt;</span><span class="hl com">&lt;!-- w --&gt;</span> will <span class="hl kwa">&lt;strong&gt;</span>not<span class="hl kwa">&lt;/strong&gt;</span> make available template sets which include PHP. And by default templates will have PHP disabled (the admin will need to specifically activate PHP for a template).<span class="hl kwa">&lt;/p&gt;</span>

<span class="hl kwa">&lt;h4&gt;</span>Conditionals/Control structures<span class="hl kwa">&lt;/h4&gt;</span>
<span class="hl kwa">&lt;p&gt;</span>The most significant addition to <span class="hl num">3</span>.x are conditions or control structures, <span class="hl kwd">&amp;quot;</span>if something then do this else do that<span class="hl kwd">&amp;quot;</span>. The system deployed is very similar to Smarty. This may confuse some people at first but it offers great potential and great flexibility with a little imagination. In their most simple form these constructs take the form:<span class="hl kwa">&lt;/p&gt;</span>

<span class="hl kwa">&lt;div</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;codebox&quot;</span><span class="hl kwa">&gt;&lt;pre&gt;</span>
<span class="hl kwa">&lt;span</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;comment&quot;</span><span class="hl kwa">&gt;</span><span class="hl kwd">&amp;lt;</span>!-- IF expr --<span class="hl kwd">&amp;gt;</span><span class="hl kwa">&lt;/span&gt;</span>
	markup
<span class="hl kwa">&lt;span</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;comment&quot;</span><span class="hl kwa">&gt;</span><span class="hl kwd">&amp;lt;</span>!-- ENDIF --<span class="hl kwd">&amp;gt;</span><span class="hl kwa">&lt;/span&gt;</span>
<span class="hl kwa">&lt;/pre&gt;&lt;/div&gt;</span>

<span class="hl kwa">&lt;p&gt;</span>expr can take many forms, for example:<span class="hl kwa">&lt;/p&gt;</span>

<span class="hl kwa">&lt;div</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;codebox&quot;</span><span class="hl kwa">&gt;&lt;pre&gt;</span>
<span class="hl kwa">&lt;span</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;comment&quot;</span><span class="hl kwa">&gt;</span><span class="hl kwd">&amp;lt;</span>!-- IF loop<span class="hl kwd">&amp;#46;</span>S_ROW_COUNT is even --<span class="hl kwd">&amp;gt;</span><span class="hl kwa">&lt;/span&gt;</span>
	markup
<span class="hl kwa">&lt;span</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;comment&quot;</span><span class="hl kwa">&gt;</span><span class="hl kwd">&amp;lt;</span>!-- ENDIF --<span class="hl kwd">&amp;gt;</span><span class="hl kwa">&lt;/span&gt;</span>
<span class="hl kwa">&lt;/pre&gt;&lt;/div&gt;</span>

<span class="hl kwa">&lt;p&gt;</span>This will output the markup if the S_ROW_COUNT variable in the current iteration of loop is an even value (i.e. the expr is TRUE). You can use various comparison methods (standard as well as equivalent textual versions noted in square brackets) including (<span class="hl kwa">&lt;code&gt;</span>not, or, and, eq, neq, is<span class="hl kwa">&lt;/code&gt;</span> should be used if possible for better readability):<span class="hl kwa">&lt;/p&gt;</span>

<span class="hl kwa">&lt;div</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;codebox&quot;</span><span class="hl kwa">&gt;&lt;pre&gt;</span>
== [eq]
!= [neq, ne]
<span class="hl kwd">&amp;lt;&amp;gt;</span> (same as !=)
!== (not equivalent in value and type)
=== (equivalent in value and type)
<span class="hl kwd">&amp;gt;</span> [gt]
<span class="hl kwd">&amp;lt;</span> [lt]
<span class="hl kwd">&amp;gt;</span>= [gte]
<span class="hl kwd">&amp;lt;</span>= [lte]
<span class="hl kwd">&amp;amp;&amp;amp;</span> [and]
|| [or]
% [mod]
! [not]
+
-
*
/
,
<span class="hl kwd">&amp;lt;&amp;lt;</span> (bitwise shift left)
<span class="hl kwd">&amp;gt;&amp;gt;</span> (bitwise shift right)
| (bitwise or)
^ (bitwise xor)
<span class="hl kwd">&amp;amp;</span> (bitwise and)
~ (bitwise not)
is (can be used to join comparison operations)
<span class="hl kwa">&lt;/pre&gt;&lt;/div&gt;</span>

<span class="hl kwa">&lt;p&gt;</span>Basic parenthesis can also be used to enforce good old BODMAS rules. Additionally some basic comparison types are defined:<span class="hl kwa">&lt;/p&gt;</span>

<span class="hl kwa">&lt;div</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;codebox&quot;</span><span class="hl kwa">&gt;&lt;pre&gt;</span>
even
odd
div
<span class="hl kwa">&lt;/pre&gt;&lt;/div&gt;</span>

<span class="hl kwa">&lt;p&gt;</span>Beyond the simple use of IF you can also do a sequence of comparisons using the following:<span class="hl kwa">&lt;/p&gt;</span>

<span class="hl kwa">&lt;div</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;codebox&quot;</span><span class="hl kwa">&gt;&lt;pre&gt;</span>
<span class="hl kwa">&lt;span</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;comment&quot;</span><span class="hl kwa">&gt;</span><span class="hl kwd">&amp;lt;</span>!-- IF expr1 --<span class="hl kwd">&amp;gt;</span><span class="hl kwa">&lt;/span&gt;</span>
	markup
<span class="hl kwa">&lt;span</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;comment&quot;</span><span class="hl kwa">&gt;</span><span class="hl kwd">&amp;lt;</span>!-- ELSEIF expr2 --<span class="hl kwd">&amp;gt;</span><span class="hl kwa">&lt;/span&gt;</span>
	markup
	<span class="hl kwd">&amp;#46;</span>
	<span class="hl kwd">&amp;#46;</span>
	<span class="hl kwd">&amp;#46;</span>
<span class="hl kwa">&lt;span</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;comment&quot;</span><span class="hl kwa">&gt;</span><span class="hl kwd">&amp;lt;</span>!-- ELSEIF exprN --<span class="hl kwd">&amp;gt;</span><span class="hl kwa">&lt;/span&gt;</span>
	markup
<span class="hl kwa">&lt;span</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;comment&quot;</span><span class="hl kwa">&gt;</span><span class="hl kwd">&amp;lt;</span>!-- ELSE --<span class="hl kwd">&amp;gt;</span><span class="hl kwa">&lt;/span&gt;</span>
	markup
<span class="hl kwa">&lt;span</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;comment&quot;</span><span class="hl kwa">&gt;</span><span class="hl kwd">&amp;lt;</span>!-- ENDIF --<span class="hl kwd">&amp;gt;</span><span class="hl kwa">&lt;/span&gt;</span>
<span class="hl kwa">&lt;/pre&gt;&lt;/div&gt;</span>

<span class="hl kwa">&lt;p&gt;</span>Each statement will be tested in turn and the relevant output generated when a match (if a match) is found. It is not necessary to always use ELSEIF, ELSE can be used alone to match <span class="hl kwd">&amp;quot;</span>everything else<span class="hl kwd">&amp;quot;</span>.<span class="hl kwa">&lt;br /&gt;&lt;br /&gt;</span>So what can you do with all this? Well take for example the colouration of rows in viewforum. In <span class="hl num">2.0</span>.x row colours were predefined within the source as either row color1, row color2 or row class1, row class2. In <span class="hl num">3</span>.x this is moved to the template, it may look a little daunting at first but remember control flows from top to bottom and it&apos;s not too difficult:<span class="hl kwa">&lt;/p&gt;</span>

<span class="hl kwa">&lt;div</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;codebox&quot;</span><span class="hl kwa">&gt;&lt;pre&gt;</span>
<span class="hl kwd">&amp;lt;</span>table<span class="hl kwd">&amp;gt;</span>
	<span class="hl kwa">&lt;span</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;comment&quot;</span><span class="hl kwa">&gt;</span><span class="hl kwd">&amp;lt;</span>!-- IF loop<span class="hl kwd">&amp;#46;</span>S_ROW_COUNT is even --<span class="hl kwd">&amp;gt;</span><span class="hl kwa">&lt;/span&gt;</span>
		<span class="hl kwd">&amp;lt;</span>tr class=<span class="hl kwd">&amp;quot;</span>row1<span class="hl kwd">&amp;quot;&amp;gt;</span>
	<span class="hl kwa">&lt;span</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;comment&quot;</span><span class="hl kwa">&gt;</span><span class="hl kwd">&amp;lt;</span>!-- ELSE --<span class="hl kwd">&amp;gt;</span><span class="hl kwa">&lt;/span&gt;</span>
		<span class="hl kwd">&amp;lt;</span>tr class=<span class="hl kwd">&amp;quot;</span>row2<span class="hl kwd">&amp;quot;&amp;gt;</span>
	<span class="hl kwa">&lt;span</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;comment&quot;</span><span class="hl kwa">&gt;</span><span class="hl kwd">&amp;lt;</span>!-- ENDIF --<span class="hl kwd">&amp;gt;</span><span class="hl kwa">&lt;/span&gt;</span>
	<span class="hl kwd">&amp;lt;</span>td<span class="hl kwd">&amp;gt;</span>HELLO!<span class="hl kwd">&amp;lt;</span>/td<span class="hl kwd">&amp;gt;</span>
<span class="hl kwd">&amp;lt;</span>/tr<span class="hl kwd">&amp;gt;</span>
<span class="hl kwd">&amp;lt;</span>/table<span class="hl kwd">&amp;gt;</span>
<span class="hl kwa">&lt;/pre&gt;&lt;/div&gt;</span>

<span class="hl kwa">&lt;p&gt;</span>This will cause the row cell to be output using class row1 when the row count is even, and class row2 otherwise. The S_ROW_COUNT parameter gets assigned to loops by default. Another example would be the following: <span class="hl kwa">&lt;/p&gt;</span>

<span class="hl kwa">&lt;div</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;codebox&quot;</span><span class="hl kwa">&gt;&lt;pre&gt;</span>
<span class="hl kwd">&amp;lt;</span>table<span class="hl kwd">&amp;gt;</span>
	<span class="hl kwa">&lt;span</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;comment&quot;</span><span class="hl kwa">&gt;</span><span class="hl kwd">&amp;lt;</span>!-- IF loop<span class="hl kwd">&amp;#46;</span>S_ROW_COUNT <span class="hl kwd">&amp;gt;</span> <span class="hl num">10</span> --<span class="hl kwd">&amp;gt;</span><span class="hl kwa">&lt;/span&gt;</span>
		<span class="hl kwd">&amp;lt;</span>tr bgcolor=<span class="hl kwd">&amp;quot;</span>#FF0000<span class="hl kwd">&amp;quot;&amp;gt;</span>
	<span class="hl kwa">&lt;span</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;comment&quot;</span><span class="hl kwa">&gt;</span><span class="hl kwd">&amp;lt;</span>!-- ELSEIF loop<span class="hl kwd">&amp;#46;</span>S_ROW_COUNT <span class="hl kwd">&amp;gt;</span> <span class="hl num">5</span> --<span class="hl kwd">&amp;gt;</span><span class="hl kwa">&lt;/span&gt;</span>
		<span class="hl kwd">&amp;lt;</span>tr bgcolor=<span class="hl kwd">&amp;quot;</span>#<span class="hl num">00</span>FF00<span class="hl kwd">&amp;quot;&amp;gt;</span>
	<span class="hl kwa">&lt;span</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;comment&quot;</span><span class="hl kwa">&gt;</span><span class="hl kwd">&amp;lt;</span>!-- ELSEIF loop<span class="hl kwd">&amp;#46;</span>S_ROW_COUNT <span class="hl kwd">&amp;gt;</span> <span class="hl num">2</span> --<span class="hl kwd">&amp;gt;</span><span class="hl kwa">&lt;/span&gt;</span>
		<span class="hl kwd">&amp;lt;</span>tr bgcolor=<span class="hl kwd">&amp;quot;</span>#<span class="hl num">0000</span>FF<span class="hl kwd">&amp;quot;&amp;gt;</span>
	<span class="hl kwa">&lt;span</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;comment&quot;</span><span class="hl kwa">&gt;</span><span class="hl kwd">&amp;lt;</span>!-- ELSE --<span class="hl kwd">&amp;gt;</span><span class="hl kwa">&lt;/span&gt;</span>
		<span class="hl kwd">&amp;lt;</span>tr bgcolor=<span class="hl kwd">&amp;quot;</span>#FF00FF<span class="hl kwd">&amp;quot;&amp;gt;</span>
	<span class="hl kwa">&lt;span</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;comment&quot;</span><span class="hl kwa">&gt;</span><span class="hl kwd">&amp;lt;</span>!-- ENDIF --<span class="hl kwd">&amp;gt;</span><span class="hl kwa">&lt;/span&gt;</span>
	<span class="hl kwd">&amp;lt;</span>td<span class="hl kwd">&amp;gt;</span>hello!<span class="hl kwd">&amp;lt;</span>/td<span class="hl kwd">&amp;gt;</span>
<span class="hl kwd">&amp;lt;</span>/tr<span class="hl kwd">&amp;gt;</span>
<span class="hl kwd">&amp;lt;</span>/table<span class="hl kwd">&amp;gt;</span>
<span class="hl kwa">&lt;/pre&gt;&lt;/div&gt;</span>

<span class="hl kwa">&lt;p&gt;</span>This will output the row cell in purple for the first two rows, blue for rows <span class="hl num">2</span> to <span class="hl num">5</span>, green for rows <span class="hl num">5</span> to <span class="hl num">10</span> and red for remainder. So, you could produce a <span class="hl kwd">&amp;quot;</span>nice<span class="hl kwd">&amp;quot;</span> gradient effect, for example.<span class="hl kwa">&lt;br /&gt;&lt;br /&gt;</span>What else can you do? Well, you could use IF to do common checks on for example the login state of a user:<span class="hl kwa">&lt;/p&gt;</span>

<span class="hl kwa">&lt;div</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;codebox&quot;</span><span class="hl kwa">&gt;&lt;pre&gt;</span>
<span class="hl kwa">&lt;span</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;comment&quot;</span><span class="hl kwa">&gt;</span><span class="hl kwd">&amp;lt;</span>!-- IF S_USER_LOGGED_IN --<span class="hl kwd">&amp;gt;</span><span class="hl kwa">&lt;/span&gt;</span>
	markup
<span class="hl kwa">&lt;span</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;comment&quot;</span><span class="hl kwa">&gt;</span><span class="hl kwd">&amp;lt;</span>!-- ENDIF --<span class="hl kwd">&amp;gt;</span><span class="hl kwa">&lt;/span&gt;</span>
<span class="hl kwa">&lt;/pre&gt;&lt;/div&gt;</span>

<span class="hl kwa">&lt;p&gt;</span>This replaces the existing (fudged) method in <span class="hl num">2.0</span>.x using a zero length array and BEGIN/END.<span class="hl kwa">&lt;/p&gt;</span>

<span class="hl kwa">&lt;h4&gt;</span>Extended syntax for Blocks/Loops<span class="hl kwa">&lt;/h4&gt;</span>

<span class="hl kwa">&lt;p&gt;</span>Back to our loops - they had been extended with the following additions. Firstly you can set the start and end points of the loop. For example:<span class="hl kwa">&lt;/p&gt;</span>

<span class="hl kwa">&lt;div</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;codebox&quot;</span><span class="hl kwa">&gt;&lt;pre&gt;</span>
<span class="hl kwa">&lt;span</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;comment&quot;</span><span class="hl kwa">&gt;</span><span class="hl kwd">&amp;lt;</span>!-- BEGIN loopname(<span class="hl num">2</span>) --<span class="hl kwd">&amp;gt;</span><span class="hl kwa">&lt;/span&gt;</span>
	markup
<span class="hl kwa">&lt;span</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;comment&quot;</span><span class="hl kwa">&gt;</span><span class="hl kwd">&amp;lt;</span>!-- END loopname --<span class="hl kwd">&amp;gt;</span><span class="hl kwa">&lt;/span&gt;</span>
<span class="hl kwa">&lt;/pre&gt;&lt;/div&gt;</span>

<span class="hl kwa">&lt;p&gt;</span>Will start the loop on the third entry (note that indexes start at zero). Extensions of this are:
<span class="hl kwa">&lt;br /&gt;&lt;br /&gt;</span>
<span class="hl kwa">&lt;code&gt;</span>loopname(<span class="hl num">2</span>)<span class="hl kwa">&lt;/code&gt;</span>: Will start the loop on the <span class="hl num">3</span>rd entry<span class="hl kwa">&lt;br /&gt;</span>
<span class="hl kwa">&lt;code&gt;</span>loopname(-<span class="hl num">2</span>)<span class="hl kwa">&lt;/code&gt;</span>: Will start the loop two entries from the end<span class="hl kwa">&lt;br /&gt;</span>
<span class="hl kwa">&lt;code&gt;</span>loopname(<span class="hl num">3</span>,<span class="hl num">4</span>)<span class="hl kwa">&lt;/code&gt;</span>: Will start the loop on the fourth entry and end it on the fifth<span class="hl kwa">&lt;br /&gt;</span>
<span class="hl kwa">&lt;code&gt;</span>loopname(<span class="hl num">3</span>,-<span class="hl num">4</span>)<span class="hl kwa">&lt;/code&gt;</span>: Will start the loop on the fourth entry and end it four from last<span class="hl kwa">&lt;br /&gt;</span>
<span class="hl kwa">&lt;/p&gt;</span>

<span class="hl kwa">&lt;p&gt;</span>A further extension to begin is BEGINELSE:<span class="hl kwa">&lt;/p&gt;</span>

<span class="hl kwa">&lt;div</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;codebox&quot;</span><span class="hl kwa">&gt;&lt;pre&gt;</span>
<span class="hl kwa">&lt;span</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;comment&quot;</span><span class="hl kwa">&gt;</span><span class="hl kwd">&amp;lt;</span>!-- BEGIN loop --<span class="hl kwd">&amp;gt;</span><span class="hl kwa">&lt;/span&gt;</span>
	markup
<span class="hl kwa">&lt;span</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;comment&quot;</span><span class="hl kwa">&gt;</span><span class="hl kwd">&amp;lt;</span>!-- BEGINELSE --<span class="hl kwd">&amp;gt;</span><span class="hl kwa">&lt;/span&gt;</span>
	markup
<span class="hl kwa">&lt;span</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;comment&quot;</span><span class="hl kwa">&gt;</span><span class="hl kwd">&amp;lt;</span>!-- END loop --<span class="hl kwd">&amp;gt;</span><span class="hl kwa">&lt;/span&gt;</span>
<span class="hl kwa">&lt;/pre&gt;&lt;/div&gt;</span>

<span class="hl kwa">&lt;p&gt;</span>This will cause the markup between <span class="hl kwa">&lt;code&gt;</span>BEGINELSE<span class="hl kwa">&lt;/code&gt;</span> and <span class="hl kwa">&lt;code&gt;</span>END<span class="hl kwa">&lt;/code&gt;</span> to be output if the loop contains no values. This is useful for forums with no topics (for example) ... in some ways it replaces <span class="hl kwd">&amp;quot;</span>bits of<span class="hl kwd">&amp;quot;</span> the existing <span class="hl kwd">&amp;quot;</span>switch_<span class="hl kwd">&amp;quot;</span> type control (the rest being replaced by conditionals).<span class="hl kwa">&lt;/p&gt;</span>

<span class="hl kwa">&lt;p&gt;</span>Another way of checking if a loop contains values is by prefixing the loops name with a dot:<span class="hl kwa">&lt;/p&gt;</span>

<span class="hl kwa">&lt;div</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;codebox&quot;</span><span class="hl kwa">&gt;&lt;pre&gt;</span>
<span class="hl kwa">&lt;span</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;comment&quot;</span><span class="hl kwa">&gt;</span><span class="hl kwd">&amp;lt;</span>!-- IF .loop --<span class="hl kwd">&amp;gt;</span><span class="hl kwa">&lt;/span&gt;</span>
	<span class="hl kwa">&lt;span</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;comment&quot;</span><span class="hl kwa">&gt;</span><span class="hl kwd">&amp;lt;</span>!-- BEGIN loop --<span class="hl kwd">&amp;gt;</span><span class="hl kwa">&lt;/span&gt;</span>
		markup
	<span class="hl kwa">&lt;span</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;comment&quot;</span><span class="hl kwa">&gt;</span><span class="hl kwd">&amp;lt;</span>!-- END loop --<span class="hl kwd">&amp;gt;</span><span class="hl kwa">&lt;/span&gt;</span>
<span class="hl kwa">&lt;span</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;comment&quot;</span><span class="hl kwa">&gt;</span><span class="hl kwd">&amp;lt;</span>!-- ELSE --<span class="hl kwd">&amp;gt;</span><span class="hl kwa">&lt;/span&gt;</span>
	markup
<span class="hl kwa">&lt;span</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;comment&quot;</span><span class="hl kwa">&gt;</span><span class="hl kwd">&amp;lt;</span>!-- ENDIF --<span class="hl kwd">&amp;gt;</span><span class="hl kwa">&lt;/span&gt;</span>
<span class="hl kwa">&lt;/pre&gt;&lt;/div&gt;</span>

<span class="hl kwa">&lt;p&gt;</span>You are even able to check the number of items within a loop by comparing it with values within the IF condition:<span class="hl kwa">&lt;/p&gt;</span>

<span class="hl kwa">&lt;div</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;codebox&quot;</span><span class="hl kwa">&gt;&lt;pre&gt;</span>
<span class="hl kwa">&lt;span</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;comment&quot;</span><span class="hl kwa">&gt;</span><span class="hl kwd">&amp;lt;</span>!-- IF .loop <span class="hl kwd">&amp;gt;</span> <span class="hl num">2</span> --<span class="hl kwd">&amp;gt;</span><span class="hl kwa">&lt;/span&gt;</span>
	<span class="hl kwa">&lt;span</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;comment&quot;</span><span class="hl kwa">&gt;</span><span class="hl kwd">&amp;lt;</span>!-- BEGIN loop --<span class="hl kwd">&amp;gt;</span><span class="hl kwa">&lt;/span&gt;</span>
		markup
	<span class="hl kwa">&lt;span</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;comment&quot;</span><span class="hl kwa">&gt;</span><span class="hl kwd">&amp;lt;</span>!-- END loop --<span class="hl kwd">&amp;gt;</span><span class="hl kwa">&lt;/span&gt;</span>
<span class="hl kwa">&lt;span</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;comment&quot;</span><span class="hl kwa">&gt;</span><span class="hl kwd">&amp;lt;</span>!-- ELSE --<span class="hl kwd">&amp;gt;</span><span class="hl kwa">&lt;/span&gt;</span>
	markup
<span class="hl kwa">&lt;span</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;comment&quot;</span><span class="hl kwa">&gt;</span><span class="hl kwd">&amp;lt;</span>!-- ENDIF --<span class="hl kwd">&amp;gt;</span><span class="hl kwa">&lt;/span&gt;</span>
<span class="hl kwa">&lt;/pre&gt;&lt;/div&gt;</span>

<span class="hl kwa">&lt;p&gt;</span>Nesting loops cause the conditionals needing prefixed with all loops from the outer one to the inner most. An illustration of this:<span class="hl kwa">&lt;/p&gt;</span>

<span class="hl kwa">&lt;div</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;codebox&quot;</span><span class="hl kwa">&gt;&lt;pre&gt;</span>
<span class="hl kwa">&lt;span</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;comment&quot;</span><span class="hl kwa">&gt;</span><span class="hl kwd">&amp;lt;</span>!-- BEGIN firstloop --<span class="hl kwd">&amp;gt;</span><span class="hl kwa">&lt;/span&gt;</span>
	{firstloop.MY_VARIABLE_FROM_FIRSTLOOP}

	<span class="hl kwa">&lt;span</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;comment&quot;</span><span class="hl kwa">&gt;</span><span class="hl kwd">&amp;lt;</span>!-- BEGIN secondloop --<span class="hl kwd">&amp;gt;</span><span class="hl kwa">&lt;/span&gt;</span>
		{firstloop.secondloop.MY_VARIABLE_FROM_SECONDLOOP}
	<span class="hl kwa">&lt;span</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;comment&quot;</span><span class="hl kwa">&gt;</span><span class="hl kwd">&amp;lt;</span>!-- END secondloop --<span class="hl kwd">&amp;gt;</span><span class="hl kwa">&lt;/span&gt;</span>
<span class="hl kwa">&lt;span</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;comment&quot;</span><span class="hl kwa">&gt;</span><span class="hl kwd">&amp;lt;</span>!-- END firstloop --<span class="hl kwd">&amp;gt;</span><span class="hl kwa">&lt;/span&gt;</span>
<span class="hl kwa">&lt;/pre&gt;&lt;/div&gt;</span>

<span class="hl kwa">&lt;p&gt;</span>Sometimes it is necessary to break out of nested loops to be able to call another loop within the current iteration. This sounds a little bit confusing and it is not used very often. The following (rather complex) example shows this quite good - it also shows how you test for the first and last row in a loop (i will explain the example in detail further down):<span class="hl kwa">&lt;/p&gt;</span>

<span class="hl kwa">&lt;div</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;codebox&quot;</span><span class="hl kwa">&gt;&lt;pre&gt;</span>
<span class="hl kwa">&lt;span</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;comment&quot;</span><span class="hl kwa">&gt;</span><span class="hl kwd">&amp;lt;</span>!-- BEGIN l_block1 --<span class="hl kwd">&amp;gt;</span><span class="hl kwa">&lt;/span&gt;</span>
	<span class="hl kwa">&lt;span</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;comment&quot;</span><span class="hl kwa">&gt;</span><span class="hl kwd">&amp;lt;</span>!-- IF l_block1.S_SELECTED --<span class="hl kwd">&amp;gt;</span><span class="hl kwa">&lt;/span&gt;</span>
		<span class="hl kwd">&amp;lt;</span>strong<span class="hl kwd">&amp;gt;</span>{l_block1.L_TITLE}<span class="hl kwd">&amp;lt;</span>/strong<span class="hl kwd">&amp;gt;</span>
		<span class="hl kwa">&lt;span</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;comment&quot;</span><span class="hl kwa">&gt;</span><span class="hl kwd">&amp;lt;</span>!-- IF S_PRIVMSGS --<span class="hl kwd">&amp;gt;</span><span class="hl kwa">&lt;/span&gt;</span>

			<span class="hl kwa">&lt;span</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;comment&quot;</span><span class="hl kwa">&gt;</span><span class="hl kwd">&amp;lt;</span>!-- the ! at the beginning of the loop name forces the loop to be not a nested one of l_block1 --<span class="hl kwd">&amp;gt;</span><span class="hl kwa">&lt;/span&gt;</span>
			<span class="hl kwa">&lt;span</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;comment&quot;</span><span class="hl kwa">&gt;</span><span class="hl kwd">&amp;lt;</span>!-- BEGIN !folder --<span class="hl kwd">&amp;gt;</span><span class="hl kwa">&lt;/span&gt;</span>
				<span class="hl kwa">&lt;span</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;comment&quot;</span><span class="hl kwa">&gt;</span><span class="hl kwd">&amp;lt;</span>!-- IF folder.S_FIRST_ROW --<span class="hl kwd">&amp;gt;</span><span class="hl kwa">&lt;/span&gt;</span>
					<span class="hl kwd">&amp;lt;</span>ul class=<span class="hl kwd">&amp;quot;</span>nav<span class="hl kwd">&amp;quot;&amp;gt;</span>
				<span class="hl kwa">&lt;span</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;comment&quot;</span><span class="hl kwa">&gt;</span><span class="hl kwd">&amp;lt;</span>!-- ENDIF --<span class="hl kwd">&amp;gt;</span><span class="hl kwa">&lt;/span&gt;</span>

				<span class="hl kwd">&amp;lt;</span>li<span class="hl kwd">&amp;gt;&amp;lt;</span>a href=<span class="hl kwd">&amp;quot;</span>{folder.U_FOLDER}<span class="hl kwd">&amp;quot;&amp;gt;</span>{folder.FOLDER_NAME}<span class="hl kwd">&amp;lt;</span>/a<span class="hl kwd">&amp;gt;&amp;lt;</span>/li<span class="hl kwd">&amp;gt;</span>

				<span class="hl kwa">&lt;span</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;comment&quot;</span><span class="hl kwa">&gt;</span><span class="hl kwd">&amp;lt;</span>!-- IF folder.S_LAST_ROW --<span class="hl kwd">&amp;gt;</span><span class="hl kwa">&lt;/span&gt;</span>
					<span class="hl kwd">&amp;lt;</span>/ul<span class="hl kwd">&amp;gt;</span>
				<span class="hl kwa">&lt;span</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;comment&quot;</span><span class="hl kwa">&gt;</span><span class="hl kwd">&amp;lt;</span>!-- ENDIF --<span class="hl kwd">&amp;gt;</span><span class="hl kwa">&lt;/span&gt;</span>
			<span class="hl kwa">&lt;span</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;comment&quot;</span><span class="hl kwa">&gt;</span><span class="hl kwd">&amp;lt;</span>!-- END !folder --<span class="hl kwd">&amp;gt;</span><span class="hl kwa">&lt;/span&gt;</span>

		<span class="hl kwa">&lt;span</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;comment&quot;</span><span class="hl kwa">&gt;</span><span class="hl kwd">&amp;lt;</span>!-- ENDIF --<span class="hl kwd">&amp;gt;</span><span class="hl kwa">&lt;/span&gt;</span>

		<span class="hl kwd">&amp;lt;</span>ul class=<span class="hl kwd">&amp;quot;</span>nav<span class="hl kwd">&amp;quot;&amp;gt;</span>
		<span class="hl kwa">&lt;span</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;comment&quot;</span><span class="hl kwa">&gt;</span><span class="hl kwd">&amp;lt;</span>!-- BEGIN l_block2 --<span class="hl kwd">&amp;gt;</span><span class="hl kwa">&lt;/span&gt;</span>
			<span class="hl kwd">&amp;lt;</span>li<span class="hl kwd">&amp;gt;</span>
				<span class="hl kwa">&lt;span</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;comment&quot;</span><span class="hl kwa">&gt;</span><span class="hl kwd">&amp;lt;</span>!-- IF l_block1.l_block2.S_SELECTED --<span class="hl kwd">&amp;gt;</span><span class="hl kwa">&lt;/span&gt;</span>
					<span class="hl kwd">&amp;lt;</span>strong<span class="hl kwd">&amp;gt;</span>{l_block1.l_block2.L_TITLE}<span class="hl kwd">&amp;lt;</span>/strong<span class="hl kwd">&amp;gt;</span>
				<span class="hl kwa">&lt;span</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;comment&quot;</span><span class="hl kwa">&gt;</span><span class="hl kwd">&amp;lt;</span>!-- ELSE --<span class="hl kwd">&amp;gt;</span><span class="hl kwa">&lt;/span&gt;</span>
					<span class="hl kwd">&amp;lt;</span>a href=<span class="hl kwd">&amp;quot;</span>{l_block1.l_block2.U_TITLE}<span class="hl kwd">&amp;quot;&amp;gt;</span>{l_block1.l_block2.L_TITLE}<span class="hl kwd">&amp;lt;</span>/a<span class="hl kwd">&amp;gt;</span>
				<span class="hl kwa">&lt;span</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;comment&quot;</span><span class="hl kwa">&gt;</span><span class="hl kwd">&amp;lt;</span>!-- ENDIF --<span class="hl kwd">&amp;gt;</span><span class="hl kwa">&lt;/span&gt;</span>
			<span class="hl kwd">&amp;lt;</span>/li<span class="hl kwd">&amp;gt;</span>
		<span class="hl kwa">&lt;span</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;comment&quot;</span><span class="hl kwa">&gt;</span><span class="hl kwd">&amp;lt;</span>!-- END l_block2 --<span class="hl kwd">&amp;gt;</span><span class="hl kwa">&lt;/span&gt;</span>
		<span class="hl kwd">&amp;lt;</span>/ul<span class="hl kwd">&amp;gt;</span>
	<span class="hl kwa">&lt;span</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;comment&quot;</span><span class="hl kwa">&gt;</span><span class="hl kwd">&amp;lt;</span>!-- ELSE --<span class="hl kwd">&amp;gt;</span><span class="hl kwa">&lt;/span&gt;</span>
		<span class="hl kwd">&amp;lt;</span>a class=<span class="hl kwd">&amp;quot;</span>nav<span class="hl kwd">&amp;quot;</span> href=<span class="hl kwd">&amp;quot;</span>{l_block1.U_TITLE}<span class="hl kwd">&amp;quot;&amp;gt;</span>{l_block1.L_TITLE}<span class="hl kwd">&amp;lt;</span>/a<span class="hl kwd">&amp;gt;</span>
	<span class="hl kwa">&lt;span</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;comment&quot;</span><span class="hl kwa">&gt;</span><span class="hl kwd">&amp;lt;</span>!-- ENDIF --<span class="hl kwd">&amp;gt;</span><span class="hl kwa">&lt;/span&gt;</span>
<span class="hl kwa">&lt;span</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;comment&quot;</span><span class="hl kwa">&gt;</span><span class="hl kwd">&amp;lt;</span>!-- END l_block1 --<span class="hl kwd">&amp;gt;</span><span class="hl kwa">&lt;/span&gt;</span>
<span class="hl kwa">&lt;/pre&gt;&lt;/div&gt;</span>

<span class="hl kwa">&lt;p&gt;</span>Let us first concentrate on this part of the example:<span class="hl kwa">&lt;/p&gt;</span>

<span class="hl kwa">&lt;div</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;codebox&quot;</span><span class="hl kwa">&gt;&lt;pre&gt;</span>
<span class="hl kwa">&lt;span</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;comment&quot;</span><span class="hl kwa">&gt;</span><span class="hl kwd">&amp;lt;</span>!-- BEGIN l_block1 --<span class="hl kwd">&amp;gt;</span><span class="hl kwa">&lt;/span&gt;</span>
	<span class="hl kwa">&lt;span</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;comment&quot;</span><span class="hl kwa">&gt;</span><span class="hl kwd">&amp;lt;</span>!-- IF l_block1.S_SELECTED --<span class="hl kwd">&amp;gt;</span><span class="hl kwa">&lt;/span&gt;</span>
		markup
	<span class="hl kwa">&lt;span</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;comment&quot;</span><span class="hl kwa">&gt;</span><span class="hl kwd">&amp;lt;</span>!-- ELSE --<span class="hl kwd">&amp;gt;</span><span class="hl kwa">&lt;/span&gt;</span>
		<span class="hl kwd">&amp;lt;</span>a class=<span class="hl kwd">&amp;quot;</span>nav<span class="hl kwd">&amp;quot;</span> href=<span class="hl kwd">&amp;quot;</span>{l_block1.U_TITLE}<span class="hl kwd">&amp;quot;&amp;gt;</span>{l_block1.L_TITLE}<span class="hl kwd">&amp;lt;</span>/a<span class="hl kwd">&amp;gt;</span>
	<span class="hl kwa">&lt;span</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;comment&quot;</span><span class="hl kwa">&gt;</span><span class="hl kwd">&amp;lt;</span>!-- ENDIF --<span class="hl kwd">&amp;gt;</span><span class="hl kwa">&lt;/span&gt;</span>
<span class="hl kwa">&lt;span</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;comment&quot;</span><span class="hl kwa">&gt;</span><span class="hl kwd">&amp;lt;</span>!-- END l_block1 --<span class="hl kwd">&amp;gt;</span><span class="hl kwa">&lt;/span&gt;</span>
<span class="hl kwa">&lt;/pre&gt;&lt;/div&gt;</span>

<span class="hl kwa">&lt;p&gt;</span>Here we open the loop l_block1 and do some things if the value S_SELECTED within the current loop iteration is true, else we write the blocks link and title. Here, you see <span class="hl kwa">&lt;code&gt;</span>{l_block1.L_TITLE}<span class="hl kwa">&lt;/code&gt;</span> referenced - you remember that L_* variables get automatically assigned the corresponding language entry? This is true, but not within loops. The L_TITLE variable within the loop l_block1 is assigned within the code itself.<span class="hl kwa">&lt;/p&gt;</span>

<span class="hl kwa">&lt;p&gt;</span>Let&apos;s have a closer look at the markup:<span class="hl kwa">&lt;/p&gt;</span>

<span class="hl kwa">&lt;div</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;codebox&quot;</span><span class="hl kwa">&gt;&lt;pre&gt;</span>
<span class="hl kwa">&lt;span</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;comment&quot;</span><span class="hl kwa">&gt;</span><span class="hl kwd">&amp;lt;</span>!-- BEGIN l_block1 --<span class="hl kwd">&amp;gt;</span><span class="hl kwa">&lt;/span&gt;</span>
.
.
	<span class="hl kwa">&lt;span</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;comment&quot;</span><span class="hl kwa">&gt;</span><span class="hl kwd">&amp;lt;</span>!-- IF S_PRIVMSGS --<span class="hl kwd">&amp;gt;</span><span class="hl kwa">&lt;/span&gt;</span>

		<span class="hl kwa">&lt;span</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;comment&quot;</span><span class="hl kwa">&gt;</span><span class="hl kwd">&amp;lt;</span>!-- BEGIN !folder --<span class="hl kwd">&amp;gt;</span><span class="hl kwa">&lt;/span&gt;</span>
			<span class="hl kwa">&lt;span</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;comment&quot;</span><span class="hl kwa">&gt;</span><span class="hl kwd">&amp;lt;</span>!-- IF folder.S_FIRST_ROW --<span class="hl kwd">&amp;gt;</span><span class="hl kwa">&lt;/span&gt;</span>
				<span class="hl kwd">&amp;lt;</span>ul class=<span class="hl kwd">&amp;quot;</span>nav<span class="hl kwd">&amp;quot;&amp;gt;</span>
			<span class="hl kwa">&lt;span</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;comment&quot;</span><span class="hl kwa">&gt;</span><span class="hl kwd">&amp;lt;</span>!-- ENDIF --<span class="hl kwd">&amp;gt;</span><span class="hl kwa">&lt;/span&gt;</span>

			<span class="hl kwd">&amp;lt;</span>li<span class="hl kwd">&amp;gt;&amp;lt;</span>a href=<span class="hl kwd">&amp;quot;</span>{folder.U_FOLDER}<span class="hl kwd">&amp;quot;&amp;gt;</span>{folder.FOLDER_NAME}<span class="hl kwd">&amp;lt;</span>/a<span class="hl kwd">&amp;gt;&amp;lt;</span>/li<span class="hl kwd">&amp;gt;</span>

			<span class="hl kwa">&lt;span</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;comment&quot;</span><span class="hl kwa">&gt;</span><span class="hl kwd">&amp;lt;</span>!-- IF folder.S_LAST_ROW --<span class="hl kwd">&amp;gt;</span><span class="hl kwa">&lt;/span&gt;</span>
				<span class="hl kwd">&amp;lt;</span>/ul<span class="hl kwd">&amp;gt;</span>
			<span class="hl kwa">&lt;span</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;comment&quot;</span><span class="hl kwa">&gt;</span><span class="hl kwd">&amp;lt;</span>!-- ENDIF --<span class="hl kwd">&amp;gt;</span><span class="hl kwa">&lt;/span&gt;</span>
		<span class="hl kwa">&lt;span</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;comment&quot;</span><span class="hl kwa">&gt;</span><span class="hl kwd">&amp;lt;</span>!-- END !folder --<span class="hl kwd">&amp;gt;</span><span class="hl kwa">&lt;/span&gt;</span>

	<span class="hl kwa">&lt;span</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;comment&quot;</span><span class="hl kwa">&gt;</span><span class="hl kwd">&amp;lt;</span>!-- ENDIF --<span class="hl kwd">&amp;gt;</span><span class="hl kwa">&lt;/span&gt;</span>
.
.
<span class="hl kwa">&lt;span</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;comment&quot;</span><span class="hl kwa">&gt;</span><span class="hl kwd">&amp;lt;</span>!-- END l_block1 --<span class="hl kwd">&amp;gt;</span><span class="hl kwa">&lt;/span&gt;</span>
<span class="hl kwa">&lt;/pre&gt;&lt;/div&gt;</span>

<span class="hl kwa">&lt;p&gt;</span>The <span class="hl kwa">&lt;code&gt;</span><span class="hl kwd">&amp;lt;</span>!-- IF S_PRIVMSGS --<span class="hl kwd">&amp;gt;</span><span class="hl kwa">&lt;/code&gt;</span> statement clearly checks a global variable and not one within the loop, since the loop is not given here. So, if S_PRIVMSGS is true we execute the shown markup. Now, you see the <span class="hl kwa">&lt;code&gt;</span><span class="hl kwd">&amp;lt;</span>!-- BEGIN !folder --<span class="hl kwd">&amp;gt;</span><span class="hl kwa">&lt;/code&gt;</span> statement. The exclamation mark is responsible for instructing the template engine to iterate through the main loop folder. So, we are now within the loop folder - with <span class="hl kwa">&lt;code&gt;</span><span class="hl kwd">&amp;lt;</span>!-- BEGIN folder --<span class="hl kwd">&amp;gt;</span><span class="hl kwa">&lt;/code&gt;</span> we would have been within the loop <span class="hl kwa">&lt;code&gt;</span>l_block1.folder<span class="hl kwa">&lt;/code&gt;</span> automatically as is the case with l_block2:<span class="hl kwa">&lt;/p&gt;</span>

<span class="hl kwa">&lt;div</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;codebox&quot;</span><span class="hl kwa">&gt;&lt;pre&gt;</span>
<span class="hl kwa">&lt;span</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;comment&quot;</span><span class="hl kwa">&gt;</span><span class="hl kwd">&amp;lt;</span>!-- BEGIN l_block1 --<span class="hl kwd">&amp;gt;</span><span class="hl kwa">&lt;/span&gt;</span>
.
.
	<span class="hl kwd">&amp;lt;</span>ul class=<span class="hl kwd">&amp;quot;</span>nav<span class="hl kwd">&amp;quot;&amp;gt;</span>
	<span class="hl kwa">&lt;span</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;comment&quot;</span><span class="hl kwa">&gt;</span><span class="hl kwd">&amp;lt;</span>!-- BEGIN l_block2 --<span class="hl kwd">&amp;gt;</span><span class="hl kwa">&lt;/span&gt;</span>
		<span class="hl kwd">&amp;lt;</span>li<span class="hl kwd">&amp;gt;</span>
			<span class="hl kwa">&lt;span</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;comment&quot;</span><span class="hl kwa">&gt;</span><span class="hl kwd">&amp;lt;</span>!-- IF l_block1.l_block2.S_SELECTED --<span class="hl kwd">&amp;gt;</span><span class="hl kwa">&lt;/span&gt;</span>
				<span class="hl kwd">&amp;lt;</span>strong<span class="hl kwd">&amp;gt;</span>{l_block1.l_block2.L_TITLE}<span class="hl kwd">&amp;lt;</span>/strong<span class="hl kwd">&amp;gt;</span>
			<span class="hl kwa">&lt;span</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;comment&quot;</span><span class="hl kwa">&gt;</span><span class="hl kwd">&amp;lt;</span>!-- ELSE --<span class="hl kwd">&amp;gt;</span><span class="hl kwa">&lt;/span&gt;</span>
				<span class="hl kwd">&amp;lt;</span>a href=<span class="hl kwd">&amp;quot;</span>{l_block1.l_block2.U_TITLE}<span class="hl kwd">&amp;quot;&amp;gt;</span>{l_block1.l_block2.L_TITLE}<span class="hl kwd">&amp;lt;</span>/a<span class="hl kwd">&amp;gt;</span>
			<span class="hl kwa">&lt;span</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;comment&quot;</span><span class="hl kwa">&gt;</span><span class="hl kwd">&amp;lt;</span>!-- ENDIF --<span class="hl kwd">&amp;gt;</span><span class="hl kwa">&lt;/span&gt;</span>
		<span class="hl kwd">&amp;lt;</span>/li<span class="hl kwd">&amp;gt;</span>
	<span class="hl kwa">&lt;span</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;comment&quot;</span><span class="hl kwa">&gt;</span><span class="hl kwd">&amp;lt;</span>!-- END l_block2 --<span class="hl kwd">&amp;gt;</span><span class="hl kwa">&lt;/span&gt;</span>
	<span class="hl kwd">&amp;lt;</span>/ul<span class="hl kwd">&amp;gt;</span>
.
.
<span class="hl kwa">&lt;span</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;comment&quot;</span><span class="hl kwa">&gt;</span><span class="hl kwd">&amp;lt;</span>!-- END l_block1 --<span class="hl kwd">&amp;gt;</span><span class="hl kwa">&lt;/span&gt;</span>
<span class="hl kwa">&lt;/pre&gt;&lt;/div&gt;</span>

<span class="hl kwa">&lt;p&gt;</span>You see the difference? The loop l_block2 is a member of the loop l_block1 but the loop folder is a main loop.<span class="hl kwa">&lt;/p&gt;</span>

<span class="hl kwa">&lt;p&gt;</span>Now back to our folder loop:<span class="hl kwa">&lt;/p&gt;</span>

<span class="hl kwa">&lt;div</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;codebox&quot;</span><span class="hl kwa">&gt;&lt;pre&gt;</span>
<span class="hl kwa">&lt;span</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;comment&quot;</span><span class="hl kwa">&gt;</span><span class="hl kwd">&amp;lt;</span>!-- IF folder.S_FIRST_ROW --<span class="hl kwd">&amp;gt;</span><span class="hl kwa">&lt;/span&gt;</span>
	<span class="hl kwd">&amp;lt;</span>ul class=<span class="hl kwd">&amp;quot;</span>nav<span class="hl kwd">&amp;quot;&amp;gt;</span>
<span class="hl kwa">&lt;span</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;comment&quot;</span><span class="hl kwa">&gt;</span><span class="hl kwd">&amp;lt;</span>!-- ENDIF --<span class="hl kwd">&amp;gt;</span><span class="hl kwa">&lt;/span&gt;</span>

<span class="hl kwd">&amp;lt;</span>li<span class="hl kwd">&amp;gt;&amp;lt;</span>a href=<span class="hl kwd">&amp;quot;</span>{folder.U_FOLDER}<span class="hl kwd">&amp;quot;&amp;gt;</span>{folder.FOLDER_NAME}<span class="hl kwd">&amp;lt;</span>/a<span class="hl kwd">&amp;gt;&amp;lt;</span>/li<span class="hl kwd">&amp;gt;</span>

<span class="hl kwa">&lt;span</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;comment&quot;</span><span class="hl kwa">&gt;</span><span class="hl kwd">&amp;lt;</span>!-- IF folder.S_LAST_ROW --<span class="hl kwd">&amp;gt;</span><span class="hl kwa">&lt;/span&gt;</span>
	<span class="hl kwd">&amp;lt;</span>/ul<span class="hl kwd">&amp;gt;</span>
<span class="hl kwa">&lt;span</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;comment&quot;</span><span class="hl kwa">&gt;</span><span class="hl kwd">&amp;lt;</span>!-- ENDIF --<span class="hl kwd">&amp;gt;</span><span class="hl kwa">&lt;/span&gt;</span>
<span class="hl kwa">&lt;/pre&gt;&lt;/div&gt;</span>

<span class="hl kwa">&lt;p&gt;</span>You may have wondered what the comparison to S_FIRST_ROW and S_LAST_ROW is about. If you haven&apos;t guessed already - it is checking for the first iteration of the loop with <span class="hl kwa">&lt;code&gt;</span>S_FIRST_ROW<span class="hl kwa">&lt;/code&gt;</span> and the last iteration with <span class="hl kwa">&lt;code&gt;</span>S_LAST_ROW<span class="hl kwa">&lt;/code&gt;</span>. This can come in handy quite often if you want to open or close design elements, like the above list. Let us imagine a folder loop build with three iterations, it would go this way:<span class="hl kwa">&lt;/p&gt;</span>

<span class="hl kwa">&lt;div</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;codebox&quot;</span><span class="hl kwa">&gt;&lt;pre&gt;</span>
<span class="hl kwd">&amp;lt;</span>ul class=<span class="hl kwd">&amp;quot;</span>nav<span class="hl kwd">&amp;quot;&amp;gt;</span> <span class="hl kwa">&lt;span</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;comment&quot;</span><span class="hl kwa">&gt;</span><span class="hl kwd">&amp;lt;</span>!-- written on first iteration --<span class="hl kwd">&amp;gt;</span><span class="hl kwa">&lt;/span&gt;</span>
	<span class="hl kwd">&amp;lt;</span>li<span class="hl kwd">&amp;gt;</span>first element<span class="hl kwd">&amp;lt;</span>/li<span class="hl kwd">&amp;gt;</span> <span class="hl kwa">&lt;span</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;comment&quot;</span><span class="hl kwa">&gt;</span><span class="hl kwd">&amp;lt;</span>!-- written on first iteration --<span class="hl kwd">&amp;gt;</span><span class="hl kwa">&lt;/span&gt;</span>
	<span class="hl kwd">&amp;lt;</span>li<span class="hl kwd">&amp;gt;</span>second element<span class="hl kwd">&amp;lt;</span>/li<span class="hl kwd">&amp;gt;</span> <span class="hl kwa">&lt;span</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;comment&quot;</span><span class="hl kwa">&gt;</span><span class="hl kwd">&amp;lt;</span>!-- written on second iteration --<span class="hl kwd">&amp;gt;</span><span class="hl kwa">&lt;/span&gt;</span>
	<span class="hl kwd">&amp;lt;</span>li<span class="hl kwd">&amp;gt;</span>third element<span class="hl kwd">&amp;lt;</span>/li<span class="hl kwd">&amp;gt;</span> <span class="hl kwa">&lt;span</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;comment&quot;</span><span class="hl kwa">&gt;</span><span class="hl kwd">&amp;lt;</span>!-- written on third iteration --<span class="hl kwd">&amp;gt;</span><span class="hl kwa">&lt;/span&gt;</span>
<span class="hl kwd">&amp;lt;</span>/ul<span class="hl kwd">&amp;gt;</span> <span class="hl kwa">&lt;span</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;comment&quot;</span><span class="hl kwa">&gt;</span><span class="hl kwd">&amp;lt;</span>!-- written on third iteration --<span class="hl kwd">&amp;gt;</span><span class="hl kwa">&lt;/span&gt;</span>
<span class="hl kwa">&lt;/pre&gt;&lt;/div&gt;</span>

<span class="hl kwa">&lt;p&gt;</span>As you can see, all three elements are written down as well as the markup for the first iteration and the last one. Sometimes you want to omit writing the general markup - for example:<span class="hl kwa">&lt;/p&gt;</span>

<span class="hl kwa">&lt;div</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;codebox&quot;</span><span class="hl kwa">&gt;&lt;pre&gt;</span>
<span class="hl kwa">&lt;span</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;comment&quot;</span><span class="hl kwa">&gt;</span><span class="hl kwd">&amp;lt;</span>!-- IF folder.S_FIRST_ROW --<span class="hl kwd">&amp;gt;</span><span class="hl kwa">&lt;/span&gt;</span>
	<span class="hl kwd">&amp;lt;</span>ul class=<span class="hl kwd">&amp;quot;</span>nav<span class="hl kwd">&amp;quot;&amp;gt;</span>
<span class="hl kwa">&lt;span</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;comment&quot;</span><span class="hl kwa">&gt;</span><span class="hl kwd">&amp;lt;</span>!-- ELSEIF folder.S_LAST_ROW --<span class="hl kwd">&amp;gt;</span><span class="hl kwa">&lt;/span&gt;</span>
	<span class="hl kwd">&amp;lt;</span>/ul<span class="hl kwd">&amp;gt;</span>
<span class="hl kwa">&lt;span</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;comment&quot;</span><span class="hl kwa">&gt;</span><span class="hl kwd">&amp;lt;</span>!-- ELSE --<span class="hl kwd">&amp;gt;</span><span class="hl kwa">&lt;/span&gt;</span>
	<span class="hl kwd">&amp;lt;</span>li<span class="hl kwd">&amp;gt;&amp;lt;</span>a href=<span class="hl kwd">&amp;quot;</span>{folder.U_FOLDER}<span class="hl kwd">&amp;quot;&amp;gt;</span>{folder.FOLDER_NAME}<span class="hl kwd">&amp;lt;</span>/a<span class="hl kwd">&amp;gt;&amp;lt;</span>/li<span class="hl kwd">&amp;gt;</span>
<span class="hl kwa">&lt;span</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;comment&quot;</span><span class="hl kwa">&gt;</span><span class="hl kwd">&amp;lt;</span>!-- ENDIF --<span class="hl kwd">&amp;gt;</span><span class="hl kwa">&lt;/span&gt;</span>
<span class="hl kwa">&lt;/pre&gt;&lt;/div&gt;</span>

<span class="hl kwa">&lt;p&gt;</span>would result in the following markup:<span class="hl kwa">&lt;/p&gt;</span>

<span class="hl kwa">&lt;div</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;codebox&quot;</span><span class="hl kwa">&gt;&lt;pre&gt;</span>
<span class="hl kwd">&amp;lt;</span>ul class=<span class="hl kwd">&amp;quot;</span>nav<span class="hl kwd">&amp;quot;&amp;gt;</span> <span class="hl kwa">&lt;span</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;comment&quot;</span><span class="hl kwa">&gt;</span><span class="hl kwd">&amp;lt;</span>!-- written on first iteration --<span class="hl kwd">&amp;gt;</span><span class="hl kwa">&lt;/span&gt;</span>
	<span class="hl kwd">&amp;lt;</span>li<span class="hl kwd">&amp;gt;</span>second element<span class="hl kwd">&amp;lt;</span>/li<span class="hl kwd">&amp;gt;</span> <span class="hl kwa">&lt;span</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;comment&quot;</span><span class="hl kwa">&gt;</span><span class="hl kwd">&amp;lt;</span>!-- written on second iteration --<span class="hl kwd">&amp;gt;</span><span class="hl kwa">&lt;/span&gt;</span>
<span class="hl kwd">&amp;lt;</span>/ul<span class="hl kwd">&amp;gt;</span> <span class="hl kwa">&lt;span</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;comment&quot;</span><span class="hl kwa">&gt;</span><span class="hl kwd">&amp;lt;</span>!-- written on third iteration --<span class="hl kwd">&amp;gt;</span><span class="hl kwa">&lt;/span&gt;</span>
<span class="hl kwa">&lt;/pre&gt;&lt;/div&gt;</span>

<span class="hl kwa">&lt;p&gt;</span>Just always remember that processing is taking place from top to bottom.<span class="hl kwa">&lt;/p&gt;</span>

	<span class="hl kwa">&lt;h4&gt;</span>Forms<span class="hl kwa">&lt;/h4&gt;</span>
		<span class="hl kwa">&lt;p&gt;</span>If a form is used for a non-trivial operation (i.e. more than a jumpbox), then it should include the <span class="hl kwa">&lt;code&gt;</span>{S_FORM_TOKEN}<span class="hl kwa">&lt;/code&gt;</span> template variable.<span class="hl kwa">&lt;/p&gt;</span>
		<span class="hl kwa">&lt;div</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;codebox&quot;</span><span class="hl kwa">&gt;&lt;pre&gt;</span>
<span class="hl kwd">&amp;lt;</span>form method=<span class="hl kwd">&amp;quot;</span>post<span class="hl kwd">&amp;quot;</span> id=<span class="hl kwd">&amp;quot;</span>mcp<span class="hl kwd">&amp;quot;</span> action=<span class="hl kwd">&amp;quot;</span>{U_POST_ACTION}<span class="hl kwd">&amp;quot;&amp;gt;</span>

	<span class="hl kwd">&amp;lt;</span>fieldset <span class="hl kwb">class</span>=<span class="hl str">&quot;submit-buttons&quot;</span><span class="hl kwd">&amp;gt;</span>
		<span class="hl kwd">&amp;lt;</span>input type=<span class="hl kwd">&amp;quot;</span>reset<span class="hl kwd">&amp;quot;</span> value=<span class="hl kwd">&amp;quot;</span>{L_RESET}<span class="hl kwd">&amp;quot;</span> name=<span class="hl kwd">&amp;quot;</span>reset<span class="hl kwd">&amp;quot;</span> class=<span class="hl kwd">&amp;quot;</span>button2<span class="hl kwd">&amp;quot;</span> /<span class="hl kwd">&amp;gt;&amp;nbsp;</span>
		<span class="hl kwd">&amp;lt;</span>input type=<span class="hl kwd">&amp;quot;</span>submit<span class="hl kwd">&amp;quot;</span> name=<span class="hl kwd">&amp;quot;</span>action[add_warning]<span class="hl kwd">&amp;quot;</span> value=<span class="hl kwd">&amp;quot;</span>{L_SUBMIT}<span class="hl kwd">&amp;quot;</span> class=<span class="hl kwd">&amp;quot;</span>button1<span class="hl kwd">&amp;quot;</span> /<span class="hl kwd">&amp;gt;</span>
		{S_FORM_TOKEN}
	<span class="hl kwd">&amp;lt;</span>/fieldset<span class="hl kwd">&amp;gt;</span>
<span class="hl kwd">&amp;lt;</span>/form<span class="hl kwd">&amp;gt;</span>
		<span class="hl kwa">&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;</span>

	<span class="hl kwa">&lt;a</span> <span class="hl kwb">name</span>=<span class="hl str">&quot;stylestree&quot;</span><span class="hl kwa">&gt;&lt;/a&gt;&lt;h3&gt;</span><span class="hl num">4</span>.ii. Styles Tree<span class="hl kwa">&lt;/h3&gt;</span>
		<span class="hl kwa">&lt;p&gt;</span>When basing a new style on an existing one, it is not necessary to provide all the template files. By declaring the base style name in the <span class="hl kwa">&lt;strong&gt;</span>parent<span class="hl kwa">&lt;/strong&gt;</span> field in the style configuration file, the style can be set to reuse template files from the parent style.<span class="hl kwa">&lt;/p&gt;</span>

		<span class="hl kwa">&lt;p&gt;</span>The effect of doing so is that the template engine will use the template files in the new style where they exist, but fall back to files in the parent style otherwise.<span class="hl kwa">&lt;/p&gt;</span>

		<span class="hl kwa">&lt;p&gt;</span>We strongly encourage the use of parent styles for styles based on the bundled styles, as it will ease the update procedure.<span class="hl kwa">&lt;/p&gt;</span>

		<span class="hl kwa">&lt;div</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;codebox&quot;</span><span class="hl kwa">&gt;&lt;pre&gt;</span>
# General Information about this style
name = Custom Style
copyright = © phpBB Limited, <span class="hl num">2007</span>
style_version = <span class="hl num">3.2.0</span>-b1
phpbb_version = <span class="hl num">3.2.0</span>-b1

# Defining a different template bitfield
# template_bitfield = lNg=

# Parent style
# Set value to empty or to this style&apos;s name if this style does not have a parent style
parent = prosilver
		<span class="hl kwa">&lt;/pre&gt;&lt;/div&gt;</span>

		<span class="hl kwa">&lt;a</span> <span class="hl kwb">name</span>=<span class="hl str">&quot;template-events&quot;</span><span class="hl kwa">&gt;&lt;/a&gt;&lt;h3&gt;</span><span class="hl num">4</span>.iii. Template Events<span class="hl kwa">&lt;/h3&gt;</span>
		<span class="hl kwa">&lt;p&gt;</span>Template events must follow this format: <span class="hl kwa">&lt;code&gt;</span><span class="hl kwd">&amp;lt;</span>!-- EVENT event_name --<span class="hl kwd">&amp;gt;</span><span class="hl kwa">&lt;/code&gt;&lt;/p&gt;</span>
		<span class="hl kwa">&lt;p&gt;</span>Using the above example, files named <span class="hl kwa">&lt;code&gt;</span>event_name.html<span class="hl kwa">&lt;/code&gt;</span> located within extensions will be injected into the location of the event.<span class="hl kwa">&lt;/p&gt;</span>

		<span class="hl kwa">&lt;h4&gt;</span>Template event naming guidelines:<span class="hl kwa">&lt;/h4&gt;</span>
		<span class="hl kwa">&lt;ul&gt;</span>
			<span class="hl kwa">&lt;li&gt;</span>An event name must be all lowercase, with each word separated by an underscore.<span class="hl kwa">&lt;/li&gt;</span>
			<span class="hl kwa">&lt;li&gt;</span>An event name must briefly describe the location and purpose of the event.<span class="hl kwa">&lt;/li&gt;</span>
			<span class="hl kwa">&lt;li&gt;</span>
				An event name must end with one of the following suffixes:
				<span class="hl kwa">&lt;ul&gt;</span>
					<span class="hl kwa">&lt;li&gt;&lt;code&gt;</span>_prepend<span class="hl kwa">&lt;/code&gt;</span> - This event adds an item to the beginning of a block of related items, or adds to the beginning of individual items in a block.<span class="hl kwa">&lt;/li&gt;</span>
					<span class="hl kwa">&lt;li&gt;&lt;code&gt;</span>_append<span class="hl kwa">&lt;/code&gt;</span> - This event adds an item to the end of a block of related items, or adds to the end of individual items in a block.<span class="hl kwa">&lt;/li&gt;</span>
					<span class="hl kwa">&lt;li&gt;&lt;code&gt;</span>_before<span class="hl kwa">&lt;/code&gt;</span> - This event adds content directly before the specified block<span class="hl kwa">&lt;/li&gt;</span>
					<span class="hl kwa">&lt;li&gt;&lt;code&gt;</span>_after<span class="hl kwa">&lt;/code&gt;</span> - This event adds content directly after the specified block<span class="hl kwa">&lt;/li&gt;</span>
				<span class="hl kwa">&lt;/ul&gt;</span>
			<span class="hl kwa">&lt;/li&gt;</span>
		<span class="hl kwa">&lt;/ul&gt;</span>

		<span class="hl kwa">&lt;h4&gt;</span>Template event documentation<span class="hl kwa">&lt;/h4&gt;</span>
		<span class="hl kwa">&lt;p&gt;</span>Events must be documented in <span class="hl kwa">&lt;code&gt;</span>phpBB/docs/events.md<span class="hl kwa">&lt;/code&gt;</span> in alphabetical order based on the event name. The format is as follows:<span class="hl kwa">&lt;/p&gt;</span>

		<span class="hl kwa">&lt;ul&gt;&lt;li&gt;</span>An event found in only one template file:
		<span class="hl kwa">&lt;div</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;codebox&quot;</span><span class="hl kwa">&gt;&lt;pre&gt;</span>event_name
===
* Location: styles/<span class="hl kwd">&amp;lt;</span>style_name<span class="hl kwd">&amp;gt;</span>/template/filename.html
* Purpose: A brief description of what this event should be used for.
This may span multiple lines.
* Since: Version since when the event was added
<span class="hl kwa">&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;</span>
		<span class="hl kwa">&lt;li&gt;</span>An event found in multiple template files:
		<span class="hl kwa">&lt;div</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;codebox&quot;</span><span class="hl kwa">&gt;&lt;pre&gt;</span>event_name
===
* Locations:
    + first/file/path.html
    + second/file/path.html
* Purpose: Same as above.
* Since: <span class="hl num">3.2.0</span>-b1
<span class="hl kwa">&lt;/pre&gt;&lt;/div&gt;</span>
		<span class="hl kwa">&lt;li&gt;</span>An event that is found multiple times in a file should have the number of instances in parenthesis next to the filename.
		<span class="hl kwa">&lt;div</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;codebox&quot;</span><span class="hl kwa">&gt;&lt;pre&gt;</span>event_name
===
* Locations:
    + first/file/path.html (<span class="hl num">2</span>)
    + second/file/path.html
* Purpose: Same as above.
* Since: <span class="hl num">3.2.0</span>-b1
<span class="hl kwa">&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;</span>
		<span class="hl kwa">&lt;li&gt;</span>An actual example event documentation:
		<span class="hl kwa">&lt;div</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;codebox&quot;</span><span class="hl kwa">&gt;&lt;pre&gt;</span>forumlist_body_last_post_title_prepend
====
* Locations:
    + styles/prosilver/template/forumlist_body.html
    + styles/subsilver2/template/forumlist_body.html
* Purpose: Add content before the post title of the latest post in a forum on the forum list.
* Since: <span class="hl num">3.2.0</span>-a1
<span class="hl kwa">&lt;/pre&gt;&lt;/div&gt;&lt;/ul&gt;&lt;br /&gt;</span>

		<span class="hl kwa">&lt;/div&gt;</span>

		<span class="hl kwa">&lt;div</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;back2top&quot;</span><span class="hl kwa">&gt;&lt;a</span> <span class="hl kwb">href</span>=<span class="hl str">&quot;#wrap&quot;</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;top&quot;</span><span class="hl kwa">&gt;</span>Back to Top<span class="hl kwa">&lt;/a&gt;&lt;/div&gt;</span>

		<span class="hl kwa">&lt;/div&gt;</span>
	<span class="hl kwa">&lt;/div&gt;</span>

	<span class="hl kwa">&lt;hr /&gt;</span>



<span class="hl kwa">&lt;a</span> <span class="hl kwb">name</span>=<span class="hl str">&quot;charsets&quot;</span><span class="hl kwa">&gt;&lt;/a&gt;&lt;h2&gt;</span><span class="hl num">5</span>. Character Sets and Encodings<span class="hl kwa">&lt;/h2&gt;</span>

	<span class="hl kwa">&lt;div</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;paragraph&quot;</span><span class="hl kwa">&gt;</span>
		<span class="hl kwa">&lt;div</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;inner&quot;</span><span class="hl kwa">&gt;</span>

		<span class="hl kwa">&lt;div</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;content&quot;</span><span class="hl kwa">&gt;</span>



<span class="hl kwa">&lt;h4&gt;</span>What are Unicode, UCS and UTF-<span class="hl num">8</span>?<span class="hl kwa">&lt;/h4&gt;</span>
<span class="hl kwa">&lt;p&gt;</span>The <span class="hl kwa">&lt;a</span> <span class="hl kwb">href</span>=<span class="hl str">&quot;http://en.wikipedia.org/wiki/Universal_Character_Set&quot;</span><span class="hl kwa">&gt;</span>Universal Character Set (UCS)<span class="hl kwa">&lt;/a&gt;</span> described in ISO/IEC <span class="hl num">10646</span> consists of a large amount of characters. Each of them has a unique name and a code point which is an integer number. <span class="hl kwa">&lt;a</span> <span class="hl kwb">href</span>=<span class="hl str">&quot;http://en.wikipedia.org/wiki/Unicode&quot;</span><span class="hl kwa">&gt;</span>Unicode<span class="hl kwa">&lt;/a&gt;</span> - which is an industry standard - complements the Universal Character Set with further information about the characters&apos; properties and alternative character encodings. More information on Unicode can be found on the <span class="hl kwa">&lt;a</span> <span class="hl kwb">href</span>=<span class="hl str">&quot;http://www.unicode.org/&quot;</span><span class="hl kwa">&gt;</span>Unicode Consortium&apos;s website<span class="hl kwa">&lt;/a&gt;</span>. One of the Unicode encodings is the <span class="hl kwa">&lt;a</span> <span class="hl kwb">href</span>=<span class="hl str">&quot;http://en.wikipedia.org/wiki/UTF-8&quot;</span><span class="hl kwa">&gt;</span><span class="hl num">8</span>-bit Unicode Transformation Format (UTF-<span class="hl num">8</span>)<span class="hl kwa">&lt;/a&gt;</span>. It encodes characters with up to four bytes aiming for maximum compatibility with the <span class="hl kwa">&lt;a</span> <span class="hl kwb">href</span>=<span class="hl str">&quot;http://en.wikipedia.org/wiki/ASCII&quot;</span><span class="hl kwa">&gt;</span>American Standard Code for Information Interchange<span class="hl kwa">&lt;/a&gt;</span> which is a <span class="hl num">7</span>-bit encoding of a relatively small subset of the UCS.<span class="hl kwa">&lt;/p&gt;</span>

<span class="hl kwa">&lt;h4&gt;</span>phpBB&apos;s use of Unicode<span class="hl kwa">&lt;/h4&gt;</span>
<span class="hl kwa">&lt;p&gt;</span>Unfortunately PHP does not faciliate the use of Unicode prior to version <span class="hl num">6</span>. Most functions simply treat strings as sequences of bytes assuming that each character takes up exactly one byte. This behaviour still allows for storing UTF-<span class="hl num">8</span> encoded text in PHP strings but many operations on strings have unexpected results. To circumvent this problem we have created some alternative functions to PHP&apos;s native string operations which use code points instead of bytes. These functions can be found in <span class="hl kwa">&lt;code&gt;</span>/includes/utf/utf_tools.php<span class="hl kwa">&lt;/code&gt;</span>. They are also covered in the <span class="hl kwa">&lt;a</span> <span class="hl kwb">href</span>=<span class="hl str">&quot;http://area51.phpbb.com/docs/code/&quot;</span><span class="hl kwa">&gt;</span>phpBB3 Sourcecode Documentation<span class="hl kwa">&lt;/a&gt;</span>. A lot of native PHP functions still work with UTF-<span class="hl num">8</span> as long as you stick to certain restrictions. For example <span class="hl kwa">&lt;code&gt;</span>explode<span class="hl kwa">&lt;/code&gt;</span> still works as long as the first and the last character of the delimiter string are ASCII characters.<span class="hl kwa">&lt;/p&gt;</span>

<span class="hl kwa">&lt;p&gt;</span>phpBB only uses the ASCII and the UTF-<span class="hl num">8</span> character encodings. Still all Strings are UTF-<span class="hl num">8</span> encoded because ASCII is a subset of UTF-<span class="hl num">8</span>. The only exceptions to this rule are code sections which deal with external systems which use other encodings and character sets. Such external data should be converted to UTF-<span class="hl num">8</span> using the <span class="hl kwa">&lt;code&gt;</span>utf8_recode()<span class="hl kwa">&lt;/code&gt;</span> function supplied with phpBB. It supports a variety of other character sets and encodings, a full list can be found below.<span class="hl kwa">&lt;/p&gt;</span>

<span class="hl kwa">&lt;p&gt;</span>With <span class="hl kwa">&lt;code&gt;</span>$request-<span class="hl kwa">&gt;</span>variable()<span class="hl kwa">&lt;/code&gt;</span> you can either allow all UCS characters in user input or restrict user input to ASCII characters. This feature is controlled by the method&apos;s third parameter called <span class="hl kwa">&lt;code&gt;</span>$multibyte<span class="hl kwa">&lt;/code&gt;</span>. You should allow multibyte characters in posts, PMs, topic titles, forum names, etc. but it&apos;s not necessary for internal uses like a <span class="hl kwa">&lt;code&gt;</span>$mode<span class="hl kwa">&lt;/code&gt;</span> variable which should only hold a predefined list of ASCII strings anyway.<span class="hl kwa">&lt;/p&gt;</span>

<span class="hl kwa">&lt;div</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;codebox&quot;</span><span class="hl kwa">&gt;&lt;pre&gt;</span>
// an input string containing a multibyte character
$_REQUEST[&apos;multibyte_string&apos;] = &apos;K<span class="hl kwd">&amp;#228;</span>se&apos;;

// print request variable as a UTF-<span class="hl num">8</span> string allowing multibyte characters
echo $request-<span class="hl kwa">&gt;</span>variable(&apos;multibyte_string&apos;, &apos;&apos;, true);
// print request variable as ASCII string
echo $request-<span class="hl kwa">&gt;</span>variable(&apos;multibyte_string&apos;, &apos;&apos;);
<span class="hl kwa">&lt;/pre&gt;&lt;/div&gt;</span>

<span class="hl kwa">&lt;p&gt;</span>This code snippet will generate the following output:<span class="hl kwa">&lt;/p&gt;</span>

<span class="hl kwa">&lt;div</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;codebox&quot;</span><span class="hl kwa">&gt;&lt;pre&gt;</span>
K<span class="hl kwd">&amp;#228;</span>se
K??se
<span class="hl kwa">&lt;/pre&gt;&lt;/div&gt;</span>

<span class="hl kwa">&lt;h4&gt;</span>Case Folding<span class="hl kwa">&lt;/h4&gt;</span>

<span class="hl kwa">&lt;p&gt;</span>Case insensitive comparison of strings is no longer possible with <span class="hl kwa">&lt;code&gt;</span>strtolower<span class="hl kwa">&lt;/code&gt;</span> or <span class="hl kwa">&lt;code&gt;</span>strtoupper<span class="hl kwa">&lt;/code&gt;</span> as some characters have multiple lower case or multiple upper case forms depending on their position in a word. The <span class="hl kwa">&lt;code&gt;</span>utf8_strtolower<span class="hl kwa">&lt;/code&gt;</span> and the <span class="hl kwa">&lt;code&gt;</span>utf8_strtoupper<span class="hl kwa">&lt;/code&gt;</span> functions suffer from the same problem so they can only be used to display upper/lower case versions of a string but they cannot be used for case insensitive comparisons either. So instead you should use case folding which gives you a case insensitive version of the string which can be used for case insensitive comparisons. An NFC normalized string can be case folded using <span class="hl kwa">&lt;code&gt;</span>utf8_case_fold_nfc()<span class="hl kwa">&lt;/code&gt;</span>.<span class="hl kwa">&lt;/p&gt;</span>

<span class="hl kwa">&lt;p</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;bad&quot;</span><span class="hl kwa">&gt;</span>// Bad - The strings might be the same even if strtolower differs<span class="hl kwa">&lt;/p&gt;</span>

<span class="hl kwa">&lt;div</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;codebox&quot;</span><span class="hl kwa">&gt;&lt;pre&gt;</span>
if (strtolower($string1) == strtolower($string2))
{
	echo &apos;$string1 and $string2 are equal or differ in case&apos;;
}
<span class="hl kwa">&lt;/pre&gt;&lt;/div&gt;</span>

<span class="hl kwa">&lt;p</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;good&quot;</span><span class="hl kwa">&gt;</span>// Good - Case folding is really case insensitive<span class="hl kwa">&lt;/p&gt;</span>

<span class="hl kwa">&lt;div</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;codebox&quot;</span><span class="hl kwa">&gt;&lt;pre&gt;</span>
if (utf8_case_fold_nfc($string1) == utf8_case_fold_nfc($string2))
{
	echo &apos;$string1 and $string2 are equal or differ in case&apos;;
}
<span class="hl kwa">&lt;/pre&gt;&lt;/div&gt;</span>

<span class="hl kwa">&lt;h4&gt;</span>Confusables Detection<span class="hl kwa">&lt;/h4&gt;</span>

<span class="hl kwa">&lt;p&gt;</span>phpBB offers a special method <span class="hl kwa">&lt;code&gt;</span>utf8_clean_string<span class="hl kwa">&lt;/code&gt;</span> which can be used to make sure string identifiers are unique. This method uses Normalization Form Compatibility Composition (NFKC) instead of NFC and replaces similarly looking characters with a particular representative of the equivalence class. This method is currently used for usernames and group names to avoid confusion with similarly looking names.<span class="hl kwa">&lt;/p&gt;</span>

		<span class="hl kwa">&lt;/div&gt;</span>

		<span class="hl kwa">&lt;div</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;back2top&quot;</span><span class="hl kwa">&gt;&lt;a</span> <span class="hl kwb">href</span>=<span class="hl str">&quot;#wrap&quot;</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;top&quot;</span><span class="hl kwa">&gt;</span>Back to Top<span class="hl kwa">&lt;/a&gt;&lt;/div&gt;</span>

		<span class="hl kwa">&lt;/div&gt;</span>
	<span class="hl kwa">&lt;/div&gt;</span>

	<span class="hl kwa">&lt;hr /&gt;</span>

<span class="hl kwa">&lt;a</span> <span class="hl kwb">name</span>=<span class="hl str">&quot;translation&quot;</span><span class="hl kwa">&gt;&lt;/a&gt;&lt;h2&gt;</span><span class="hl num">6</span>. Translation (<span class="hl kwa">&lt;abbr</span> <span class="hl kwb">title</span>=<span class="hl str">&quot;Internationalisation&quot;</span><span class="hl kwa">&gt;</span>i18n<span class="hl kwa">&lt;/abbr&gt;</span>/<span class="hl kwa">&lt;abbr</span> <span class="hl kwb">title</span>=<span class="hl str">&quot;Localisation&quot;</span><span class="hl kwa">&gt;</span>L10n<span class="hl kwa">&lt;/abbr&gt;</span>) Guidelines<span class="hl kwa">&lt;/h2&gt;</span>

	<span class="hl kwa">&lt;div</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;paragraph&quot;</span><span class="hl kwa">&gt;</span>
		<span class="hl kwa">&lt;div</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;inner&quot;</span><span class="hl kwa">&gt;</span>

		<span class="hl kwa">&lt;div</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;content&quot;</span><span class="hl kwa">&gt;</span>

	<span class="hl kwa">&lt;a</span> <span class="hl kwb">name</span>=<span class="hl str">&quot;standardisation&quot;</span><span class="hl kwa">&gt;&lt;/a&gt;&lt;h3&gt;</span><span class="hl num">6</span>.i. Standardisation<span class="hl kwa">&lt;/h3&gt;</span>

	<span class="hl kwa">&lt;h4&gt;</span>Reason:<span class="hl kwa">&lt;/h4&gt;</span>

	<span class="hl kwa">&lt;p&gt;</span>phpBB is one of the most translated open-source projects, with the current stable version being available in over <span class="hl num">60</span> localisations. Whilst the ad hoc approach to the naming of language packs has worked, for phpBB3 and beyond we hope to make this process saner which will allow for better interoperation with current and future web browsers.<span class="hl kwa">&lt;/p&gt;</span>

	<span class="hl kwa">&lt;h4&gt;</span>Encoding:<span class="hl kwa">&lt;/h4&gt;</span>

	<span class="hl kwa">&lt;p&gt;</span>With phpBB3, the output encoding for the forum in now UTF-<span class="hl num">8</span>, a Universal Character Encoding by the Unicode Consortium that is by design a superset to US-ASCII and ISO-<span class="hl num">8859</span>-<span class="hl num">1</span>. By using one character set which simultaenously supports all scripts which previously would have required different encodings (eg: ISO-<span class="hl num">8859</span>-<span class="hl num">1</span> to ISO-<span class="hl num">8859</span>-<span class="hl num">15</span> (Latin, Greek, Cyrillic, Thai, Hebrew, Arabic); GB2312 (Simplified Chinese); Big5 (Traditional Chinese), EUC-JP (Japanese), EUC-KR (Korean), VISCII (Vietnamese); et cetera), we remove the need to convert between encodings and improves the accessibility of multilingual forums.<span class="hl kwa">&lt;/p&gt;</span>

	<span class="hl kwa">&lt;p&gt;</span>The impact is that the language files for phpBB must now also be encoded as UTF-<span class="hl num">8</span>, with a caveat that the files must <span class="hl kwa">&lt;strong&gt;</span>not contain<span class="hl kwa">&lt;/strong&gt;</span> a <span class="hl kwa">&lt;abbr</span> <span class="hl kwb">title</span>=<span class="hl str">&quot;Byte-Order-Mark&quot;</span><span class="hl kwa">&gt;</span>BOM<span class="hl kwa">&lt;/abbr&gt;</span> for compatibility reasons with non-Unicode aware versions of PHP. For those with forums using the Latin character set (ie: most European languages), this change is transparent since UTF-<span class="hl num">8</span> is superset to US-ASCII and ISO-<span class="hl num">8859</span>-<span class="hl num">1</span>.<span class="hl kwa">&lt;/p&gt;</span>

	<span class="hl kwa">&lt;h4&gt;</span>Language Tag:<span class="hl kwa">&lt;/h4&gt;</span>

	<span class="hl kwa">&lt;p&gt;</span>The <span class="hl kwa">&lt;abbr</span> <span class="hl kwb">title</span>=<span class="hl str">&quot;Internet Engineering Task Force&quot;</span><span class="hl kwa">&gt;</span>IETF<span class="hl kwa">&lt;/abbr&gt;</span> recently published <span class="hl kwa">&lt;a</span> <span class="hl kwb">href</span>=<span class="hl str">&quot;http://tools.ietf.org/html/rfc4646&quot;</span><span class="hl kwa">&gt;</span>RFC <span class="hl num">4646</span><span class="hl kwa">&lt;/a&gt;</span> for tags used to identify languages, which in combination with <span class="hl kwa">&lt;a</span> <span class="hl kwb">href</span>=<span class="hl str">&quot;http://tools.ietf.org/html/rfc4647&quot;</span><span class="hl kwa">&gt;</span>RFC <span class="hl num">4647</span><span class="hl kwa">&lt;/a&gt;</span> obseletes the older <span class="hl kwa">&lt;a</span> <span class="hl kwb">href</span>=<span class="hl str">&quot;http://tools.ietf.org/html/rfc3066&quot;</span><span class="hl kwa">&gt;</span>RFC <span class="hl num">3006</span><span class="hl kwa">&lt;/a&gt;</span> and older-still <span class="hl kwa">&lt;a</span> <span class="hl kwb">href</span>=<span class="hl str">&quot;http://tools.ietf.org/html/rfc1766&quot;</span><span class="hl kwa">&gt;</span>RFC <span class="hl num">1766</span><span class="hl kwa">&lt;/a&gt;</span>. <span class="hl kwa">&lt;a</span> <span class="hl kwb">href</span>=<span class="hl str">&quot;http://tools.ietf.org/html/rfc4646&quot;</span><span class="hl kwa">&gt;</span>RFC <span class="hl num">4646</span><span class="hl kwa">&lt;/a&gt;</span> uses <span class="hl kwa">&lt;a</span> <span class="hl kwb">href</span>=<span class="hl str">&quot;http://www.loc.gov/standards/iso639-2/php/English_list.php&quot;</span><span class="hl kwa">&gt;</span>ISO <span class="hl num">639</span>-<span class="hl num">1</span>/ISO <span class="hl num">639</span>-<span class="hl num">2</span><span class="hl kwa">&lt;/a&gt;</span>, <span class="hl kwa">&lt;a</span> <span class="hl kwb">href</span>=<span class="hl str">&quot;http://www.iso.ch/iso/en/prods-services/iso3166ma/02iso-3166-code-lists/list-en1.html&quot;</span><span class="hl kwa">&gt;</span>ISO <span class="hl num">3166</span>-<span class="hl num">1</span> alpha-<span class="hl num">2</span><span class="hl kwa">&lt;/a&gt;</span>, <span class="hl kwa">&lt;a</span> <span class="hl kwb">href</span>=<span class="hl str">&quot;http://www.unicode.org/iso15924/iso15924-codes.html&quot;</span><span class="hl kwa">&gt;</span>ISO <span class="hl num">15924</span><span class="hl kwa">&lt;/a&gt;</span> and <span class="hl kwa">&lt;a</span> <span class="hl kwb">href</span>=<span class="hl str">&quot;http://unstats.un.org/unsd/methods/m49/m49.htm&quot;</span><span class="hl kwa">&gt;</span>UN M<span class="hl num">.49</span><span class="hl kwa">&lt;/a&gt;</span> to define a language tag. Each complete tag is composed of subtags which are not case sensitive and can also be empty.<span class="hl kwa">&lt;/p&gt;</span>

	<span class="hl kwa">&lt;p&gt;</span>Ordering of the subtags in the case that they are all non-empty is: <span class="hl kwa">&lt;code&gt;</span>language<span class="hl kwa">&lt;/code&gt;</span>-<span class="hl kwa">&lt;code&gt;</span>script<span class="hl kwa">&lt;/code&gt;</span>-<span class="hl kwa">&lt;code&gt;</span>region<span class="hl kwa">&lt;/code&gt;</span>-<span class="hl kwa">&lt;code&gt;</span>variant<span class="hl kwa">&lt;/code&gt;</span>-<span class="hl kwa">&lt;code&gt;</span>extension<span class="hl kwa">&lt;/code&gt;</span>-<span class="hl kwa">&lt;code&gt;</span>privateuse<span class="hl kwa">&lt;/code&gt;</span>. Should any subtag be empty, its corresponding hyphen would also be ommited. Thus, the language tag for English will be <span class="hl kwa">&lt;code&gt;</span>en<span class="hl kwa">&lt;/code&gt; &lt;strong&gt;</span>and not<span class="hl kwa">&lt;/strong&gt; &lt;code&gt;</span>en-----<span class="hl kwa">&lt;/code&gt;</span>.<span class="hl kwa">&lt;/p&gt;</span>

	<span class="hl kwa">&lt;p&gt;</span>Most language tags consist of a two- or three-letter language subtag (from <span class="hl kwa">&lt;a</span> <span class="hl kwb">href</span>=<span class="hl str">&quot;http://www.loc.gov/standards/iso639-2/php/English_list.php&quot;</span><span class="hl kwa">&gt;</span>ISO <span class="hl num">639</span>-<span class="hl num">1</span>/ISO <span class="hl num">639</span>-<span class="hl num">2</span><span class="hl kwa">&lt;/a&gt;</span>). Sometimes, this is followed by a two-letter or three-digit region subtag (from <span class="hl kwa">&lt;a</span> <span class="hl kwb">href</span>=<span class="hl str">&quot;http://www.iso.ch/iso/en/prods-services/iso3166ma/02iso-3166-code-lists/list-en1.html&quot;</span><span class="hl kwa">&gt;</span>ISO <span class="hl num">3166</span>-<span class="hl num">1</span> alpha-<span class="hl num">2</span><span class="hl kwa">&lt;/a&gt;</span> or <span class="hl kwa">&lt;a</span> <span class="hl kwb">href</span>=<span class="hl str">&quot;http://unstats.un.org/unsd/methods/m49/m49.htm&quot;</span><span class="hl kwa">&gt;</span>UN M<span class="hl num">.49</span><span class="hl kwa">&lt;/a&gt;</span>). Some examples are:<span class="hl kwa">&lt;/p&gt;</span>

	<span class="hl kwa">&lt;table&gt;</span>
	<span class="hl kwa">&lt;caption&gt;</span>Examples of various possible language tags as described by RFC <span class="hl num">4646</span> and RFC <span class="hl num">4647</span><span class="hl kwa">&lt;/caption&gt;</span>
	<span class="hl kwa">&lt;thead&gt;</span>
	<span class="hl kwa">&lt;tr&gt;</span>
		<span class="hl kwa">&lt;th</span> <span class="hl kwb">scope</span>=<span class="hl str">&quot;col&quot;</span><span class="hl kwa">&gt;</span>Language tag<span class="hl kwa">&lt;/th&gt;</span>
		<span class="hl kwa">&lt;th</span> <span class="hl kwb">scope</span>=<span class="hl str">&quot;col&quot;</span><span class="hl kwa">&gt;</span>Description<span class="hl kwa">&lt;/th&gt;</span>
		<span class="hl kwa">&lt;th</span> <span class="hl kwb">scope</span>=<span class="hl str">&quot;col&quot;</span><span class="hl kwa">&gt;</span>Component subtags<span class="hl kwa">&lt;/th&gt;</span>
	<span class="hl kwa">&lt;/tr&gt;</span>
	<span class="hl kwa">&lt;/thead&gt;</span>
	<span class="hl kwa">&lt;tbody&gt;</span>
	<span class="hl kwa">&lt;tr&gt;</span>
		<span class="hl kwa">&lt;td&gt;&lt;code&gt;</span>en<span class="hl kwa">&lt;/code&gt;&lt;/td&gt;</span>
		<span class="hl kwa">&lt;td&gt;</span>English<span class="hl kwa">&lt;/td&gt;</span>
		<span class="hl kwa">&lt;td&gt;&lt;code&gt;</span>language<span class="hl kwa">&lt;/code&gt;&lt;/td&gt;</span>
	<span class="hl kwa">&lt;/tr&gt;</span>
	<span class="hl kwa">&lt;tr&gt;</span>
		<span class="hl kwa">&lt;td&gt;&lt;code&gt;</span>mas<span class="hl kwa">&lt;/code&gt;&lt;/td&gt;</span>
		<span class="hl kwa">&lt;td&gt;</span>Masai<span class="hl kwa">&lt;/td&gt;</span>
		<span class="hl kwa">&lt;td&gt;&lt;code&gt;</span>language<span class="hl kwa">&lt;/code&gt;&lt;/td&gt;</span>
	<span class="hl kwa">&lt;/tr&gt;</span>
	<span class="hl kwa">&lt;tr&gt;</span>
		<span class="hl kwa">&lt;td&gt;&lt;code&gt;</span>fr-CA<span class="hl kwa">&lt;/code&gt;&lt;/td&gt;</span>
		<span class="hl kwa">&lt;td&gt;</span>French as used in Canada<span class="hl kwa">&lt;/td&gt;</span>
		<span class="hl kwa">&lt;td&gt;&lt;code&gt;</span>language<span class="hl kwa">&lt;/code&gt;</span>+<span class="hl kwa">&lt;code&gt;</span>region<span class="hl kwa">&lt;/code&gt;&lt;/td&gt;</span>
	<span class="hl kwa">&lt;/tr&gt;</span>
	<span class="hl kwa">&lt;tr&gt;</span>
		<span class="hl kwa">&lt;td&gt;&lt;code&gt;</span>en-<span class="hl num">833</span><span class="hl kwa">&lt;/code&gt;&lt;/td&gt;</span>
		<span class="hl kwa">&lt;td&gt;</span>English as used in the Isle of Man<span class="hl kwa">&lt;/td&gt;</span>
		<span class="hl kwa">&lt;td&gt;&lt;code&gt;</span>language<span class="hl kwa">&lt;/code&gt;</span>+<span class="hl kwa">&lt;code&gt;</span>region<span class="hl kwa">&lt;/code&gt;&lt;/td&gt;</span>
	<span class="hl kwa">&lt;/tr&gt;</span>
	<span class="hl kwa">&lt;tr&gt;</span>
		<span class="hl kwa">&lt;td&gt;&lt;code&gt;</span>zh-Hans<span class="hl kwa">&lt;/code&gt;&lt;/td&gt;</span>
		<span class="hl kwa">&lt;td&gt;</span>Chinese written with Simplified script<span class="hl kwa">&lt;/td&gt;</span>
		<span class="hl kwa">&lt;td&gt;&lt;code&gt;</span>language<span class="hl kwa">&lt;/code&gt;</span>+<span class="hl kwa">&lt;code&gt;</span>script<span class="hl kwa">&lt;/code&gt;&lt;/td&gt;</span>
	<span class="hl kwa">&lt;/tr&gt;</span>
	<span class="hl kwa">&lt;tr&gt;</span>
		<span class="hl kwa">&lt;td&gt;&lt;code&gt;</span>zh-Hant-HK<span class="hl kwa">&lt;/code&gt;&lt;/td&gt;</span>
		<span class="hl kwa">&lt;td&gt;</span>Chinese written with Traditional script as used in Hong Kong<span class="hl kwa">&lt;/td&gt;</span>
		<span class="hl kwa">&lt;td&gt;&lt;code&gt;</span>language<span class="hl kwa">&lt;/code&gt;</span>+<span class="hl kwa">&lt;code&gt;</span>script<span class="hl kwa">&lt;/code&gt;</span>+<span class="hl kwa">&lt;code&gt;</span>region<span class="hl kwa">&lt;/code&gt;&lt;/td&gt;</span>
	<span class="hl kwa">&lt;/tr&gt;</span>
	<span class="hl kwa">&lt;tr&gt;</span>
		<span class="hl kwa">&lt;td&gt;&lt;code&gt;</span>de-AT-<span class="hl num">1996</span><span class="hl kwa">&lt;/code&gt;&lt;/td&gt;</span>
		<span class="hl kwa">&lt;td&gt;</span>German as used in Austria with <span class="hl num">1996</span> orthography<span class="hl kwa">&lt;/td&gt;</span>
		<span class="hl kwa">&lt;td&gt;&lt;code&gt;</span>language<span class="hl kwa">&lt;/code&gt;</span>+<span class="hl kwa">&lt;code&gt;</span>region<span class="hl kwa">&lt;/code&gt;</span>+<span class="hl kwa">&lt;code&gt;</span>variant<span class="hl kwa">&lt;/code&gt;&lt;/td&gt;</span>
	<span class="hl kwa">&lt;/tr&gt;</span>
	<span class="hl kwa">&lt;/tbody&gt;</span>
	<span class="hl kwa">&lt;/table&gt;</span>

	<span class="hl kwa">&lt;p&gt;</span>The ultimate aim of a language tag is to convey the needed <span class="hl kwa">&lt;strong&gt;</span>useful distingushing information<span class="hl kwa">&lt;/strong&gt;</span>, whilst keeping it as <span class="hl kwa">&lt;strong&gt;</span>short as possible<span class="hl kwa">&lt;/strong&gt;</span>. So for example, use <span class="hl kwa">&lt;code&gt;</span>en<span class="hl kwa">&lt;/code&gt;</span>, <span class="hl kwa">&lt;code&gt;</span>fr<span class="hl kwa">&lt;/code&gt;</span> and <span class="hl kwa">&lt;code&gt;</span>ja<span class="hl kwa">&lt;/code&gt;</span> as opposed to <span class="hl kwa">&lt;code&gt;</span>en-GB<span class="hl kwa">&lt;/code&gt;</span>, <span class="hl kwa">&lt;code&gt;</span>fr-FR<span class="hl kwa">&lt;/code&gt;</span> and <span class="hl kwa">&lt;code&gt;</span>ja-JP<span class="hl kwa">&lt;/code&gt;</span>, since we know English, French and Japanese are the native language of Great Britain, France and Japan respectively.<span class="hl kwa">&lt;/p&gt;</span>

	<span class="hl kwa">&lt;p&gt;</span>Next is the <span class="hl kwa">&lt;a</span> <span class="hl kwb">href</span>=<span class="hl str">&quot;http://www.unicode.org/iso15924/iso15924-codes.html&quot;</span><span class="hl kwa">&gt;</span>ISO <span class="hl num">15924</span><span class="hl kwa">&lt;/a&gt;</span> language script code and when one should or shouldn&apos;t use it. For example, whilst <span class="hl kwa">&lt;code&gt;</span>en-Latn<span class="hl kwa">&lt;/code&gt;</span> is syntaxically correct for describing English written with Latin script, real world English writing is <span class="hl kwa">&lt;strong&gt;</span>more-or-less exclusively in the Latin script<span class="hl kwa">&lt;/strong&gt;</span>. For such languages like English that are written in a single script, the <span class="hl kwa">&lt;a</span> <span class="hl kwb">href</span>=<span class="hl str">&quot;http://www.iana.org/assignments/language-subtag-registry&quot;</span><span class="hl kwa">&gt;&lt;abbr</span> <span class="hl kwb">title</span>=<span class="hl str">&quot;Internet Assigned Numbers Authority&quot;</span><span class="hl kwa">&gt;</span>IANA<span class="hl kwa">&lt;/abbr&gt;</span> Language Subtag Registry<span class="hl kwa">&lt;/a&gt;</span> has a <span class="hl str">&quot;Suppress-Script&quot;</span> field meaning the script code <span class="hl kwa">&lt;strong&gt;</span>should be ommitted<span class="hl kwa">&lt;/strong&gt;</span> unless a specific language tag requires a specific script code. Some languages are <span class="hl kwa">&lt;strong&gt;</span>written in more than one script<span class="hl kwa">&lt;/strong&gt;</span> and in such cases, the script code <span class="hl kwa">&lt;strong&gt;</span>is encouraged<span class="hl kwa">&lt;/strong&gt;</span> since an end-user may be able to read their language in one script, but not the other. Some examples are:<span class="hl kwa">&lt;/p&gt;</span>

	<span class="hl kwa">&lt;table&gt;</span>
	<span class="hl kwa">&lt;caption&gt;</span>Examples of using a language subtag in combination with a script subtag<span class="hl kwa">&lt;/caption&gt;</span>
	<span class="hl kwa">&lt;thead&gt;</span>
	<span class="hl kwa">&lt;tr&gt;</span>
		<span class="hl kwa">&lt;th</span> <span class="hl kwb">scope</span>=<span class="hl str">&quot;col&quot;</span><span class="hl kwa">&gt;</span>Language tag<span class="hl kwa">&lt;/th&gt;</span>
		<span class="hl kwa">&lt;th</span> <span class="hl kwb">scope</span>=<span class="hl str">&quot;col&quot;</span><span class="hl kwa">&gt;</span>Description<span class="hl kwa">&lt;/th&gt;</span>
		<span class="hl kwa">&lt;th</span> <span class="hl kwb">scope</span>=<span class="hl str">&quot;col&quot;</span><span class="hl kwa">&gt;</span>Component subtags<span class="hl kwa">&lt;/th&gt;</span>
	<span class="hl kwa">&lt;/tr&gt;</span>
	<span class="hl kwa">&lt;/thead&gt;</span>
	<span class="hl kwa">&lt;tbody&gt;</span>
	<span class="hl kwa">&lt;tr&gt;</span>
		<span class="hl kwa">&lt;td&gt;&lt;code&gt;</span>en-Brai<span class="hl kwa">&lt;/code&gt;&lt;/td&gt;</span>
		<span class="hl kwa">&lt;td&gt;</span>English written in Braille script<span class="hl kwa">&lt;/td&gt;</span>
		<span class="hl kwa">&lt;td&gt;&lt;code&gt;</span>language<span class="hl kwa">&lt;/code&gt;</span>+<span class="hl kwa">&lt;code&gt;</span>script<span class="hl kwa">&lt;/code&gt;&lt;/td&gt;</span>
	<span class="hl kwa">&lt;/tr&gt;</span>
	<span class="hl kwa">&lt;tr&gt;</span>
		<span class="hl kwa">&lt;td&gt;&lt;code&gt;</span>en-Dsrt<span class="hl kwa">&lt;/code&gt;&lt;/td&gt;</span>
		<span class="hl kwa">&lt;td&gt;</span>English written in Deseret (Mormon) script<span class="hl kwa">&lt;/td&gt;</span>
		<span class="hl kwa">&lt;td&gt;&lt;code&gt;</span>language<span class="hl kwa">&lt;/code&gt;</span>+<span class="hl kwa">&lt;code&gt;</span>script<span class="hl kwa">&lt;/code&gt;&lt;/td&gt;</span>
	<span class="hl kwa">&lt;/tr&gt;</span>
	<span class="hl kwa">&lt;tr&gt;</span>
		<span class="hl kwa">&lt;td&gt;&lt;code&gt;</span>sr-Latn<span class="hl kwa">&lt;/code&gt;&lt;/td&gt;</span>
		<span class="hl kwa">&lt;td&gt;</span>Serbian written in Latin script<span class="hl kwa">&lt;/td&gt;</span>
		<span class="hl kwa">&lt;td&gt;&lt;code&gt;</span>language<span class="hl kwa">&lt;/code&gt;</span>+<span class="hl kwa">&lt;code&gt;</span>script<span class="hl kwa">&lt;/code&gt;&lt;/td&gt;</span>
	<span class="hl kwa">&lt;/tr&gt;</span>
	<span class="hl kwa">&lt;tr&gt;</span>
		<span class="hl kwa">&lt;td&gt;&lt;code&gt;</span>sr-Cyrl<span class="hl kwa">&lt;/code&gt;&lt;/td&gt;</span>
		<span class="hl kwa">&lt;td&gt;</span>Serbian written in Cyrillic script<span class="hl kwa">&lt;/td&gt;</span>
		<span class="hl kwa">&lt;td&gt;&lt;code&gt;</span>language<span class="hl kwa">&lt;/code&gt;</span>+<span class="hl kwa">&lt;code&gt;</span>script<span class="hl kwa">&lt;/code&gt;&lt;/td&gt;</span>
	<span class="hl kwa">&lt;/tr&gt;</span>
	<span class="hl kwa">&lt;tr&gt;</span>
		<span class="hl kwa">&lt;td&gt;&lt;code&gt;</span>mn-Mong<span class="hl kwa">&lt;/code&gt;&lt;/td&gt;</span>
		<span class="hl kwa">&lt;td&gt;</span>Mongolian written in Mongolian script<span class="hl kwa">&lt;/td&gt;</span>
		<span class="hl kwa">&lt;td&gt;&lt;code&gt;</span>language<span class="hl kwa">&lt;/code&gt;</span>+<span class="hl kwa">&lt;code&gt;</span>script<span class="hl kwa">&lt;/code&gt;&lt;/td&gt;</span>
	<span class="hl kwa">&lt;/tr&gt;</span>
	<span class="hl kwa">&lt;tr&gt;</span>
		<span class="hl kwa">&lt;td&gt;&lt;code&gt;</span>mn-Cyrl<span class="hl kwa">&lt;/code&gt;&lt;/td&gt;</span>
		<span class="hl kwa">&lt;td&gt;</span>Mongolian written in Cyrillic script<span class="hl kwa">&lt;/td&gt;</span>
		<span class="hl kwa">&lt;td&gt;&lt;code&gt;</span>language<span class="hl kwa">&lt;/code&gt;</span>+<span class="hl kwa">&lt;code&gt;</span>script<span class="hl kwa">&lt;/code&gt;&lt;/td&gt;</span>
	<span class="hl kwa">&lt;/tr&gt;</span>
	<span class="hl kwa">&lt;tr&gt;</span>
		<span class="hl kwa">&lt;td&gt;&lt;code&gt;</span>mn-Phag<span class="hl kwa">&lt;/code&gt;&lt;/td&gt;</span>
		<span class="hl kwa">&lt;td&gt;</span>Mongolian written in Phags-pa script<span class="hl kwa">&lt;/td&gt;</span>
		<span class="hl kwa">&lt;td&gt;&lt;code&gt;</span>language<span class="hl kwa">&lt;/code&gt;</span>+<span class="hl kwa">&lt;code&gt;</span>script<span class="hl kwa">&lt;/code&gt;&lt;/td&gt;</span>
	<span class="hl kwa">&lt;/tr&gt;</span>
	<span class="hl kwa">&lt;tr&gt;</span>
		<span class="hl kwa">&lt;td&gt;&lt;code&gt;</span>az-Cyrl-AZ<span class="hl kwa">&lt;/code&gt;&lt;/td&gt;</span>
		<span class="hl kwa">&lt;td&gt;</span>Azerbaijani written in Cyrillic script as used in Azerbaijan<span class="hl kwa">&lt;/td&gt;</span>
		<span class="hl kwa">&lt;td&gt;&lt;code&gt;</span>language<span class="hl kwa">&lt;/code&gt;</span>+<span class="hl kwa">&lt;code&gt;</span>script<span class="hl kwa">&lt;/code&gt;</span>+<span class="hl kwa">&lt;code&gt;</span>region<span class="hl kwa">&lt;/code&gt;&lt;/td&gt;</span>
	<span class="hl kwa">&lt;/tr&gt;</span>
	<span class="hl kwa">&lt;tr&gt;</span>
		<span class="hl kwa">&lt;td&gt;&lt;code&gt;</span>az-Latn-AZ<span class="hl kwa">&lt;/code&gt;&lt;/td&gt;</span>
		<span class="hl kwa">&lt;td&gt;</span>Azerbaijani written in Latin script as used in Azerbaijan<span class="hl kwa">&lt;/td&gt;</span>
		<span class="hl kwa">&lt;td&gt;&lt;code&gt;</span>language<span class="hl kwa">&lt;/code&gt;</span>+<span class="hl kwa">&lt;code&gt;</span>script<span class="hl kwa">&lt;/code&gt;</span>+<span class="hl kwa">&lt;code&gt;</span>region<span class="hl kwa">&lt;/code&gt;&lt;/td&gt;</span>
	<span class="hl kwa">&lt;/tr&gt;</span>
	<span class="hl kwa">&lt;tr&gt;</span>
		<span class="hl kwa">&lt;td&gt;&lt;code&gt;</span>az-Arab-IR<span class="hl kwa">&lt;/code&gt;&lt;/td&gt;</span>
		<span class="hl kwa">&lt;td&gt;</span>Azerbaijani written in Arabic script as used in Iran<span class="hl kwa">&lt;/td&gt;</span>
		<span class="hl kwa">&lt;td&gt;&lt;code&gt;</span>language<span class="hl kwa">&lt;/code&gt;</span>+<span class="hl kwa">&lt;code&gt;</span>script<span class="hl kwa">&lt;/code&gt;</span>+<span class="hl kwa">&lt;code&gt;</span>region<span class="hl kwa">&lt;/code&gt;&lt;/td&gt;</span>
	<span class="hl kwa">&lt;/tr&gt;</span>
	<span class="hl kwa">&lt;/tbody&gt;</span>
	<span class="hl kwa">&lt;/table&gt;</span>

	<span class="hl kwa">&lt;p&gt;</span>Usage of the three-digit <span class="hl kwa">&lt;a</span> <span class="hl kwb">href</span>=<span class="hl str">&quot;http://unstats.un.org/unsd/methods/m49/m49.htm&quot;</span><span class="hl kwa">&gt;</span>UN M<span class="hl num">.49</span><span class="hl kwa">&lt;/a&gt;</span> code over the two-letter <span class="hl kwa">&lt;a</span> <span class="hl kwb">href</span>=<span class="hl str">&quot;http://www.iso.ch/iso/en/prods-services/iso3166ma/02iso-3166-code-lists/list-en1.html&quot;</span><span class="hl kwa">&gt;</span>ISO <span class="hl num">3166</span>-<span class="hl num">1</span> alpha-<span class="hl num">2</span><span class="hl kwa">&lt;/a&gt;</span> code should hapen if a macro-geographical entity is required and/or the <span class="hl kwa">&lt;a</span> <span class="hl kwb">href</span>=<span class="hl str">&quot;http://www.iso.ch/iso/en/prods-services/iso3166ma/02iso-3166-code-lists/list-en1.html&quot;</span><span class="hl kwa">&gt;</span>ISO <span class="hl num">3166</span>-<span class="hl num">1</span> alpha-<span class="hl num">2</span><span class="hl kwa">&lt;/a&gt;</span> is ambiguous.<span class="hl kwa">&lt;/p&gt;</span>

	<span class="hl kwa">&lt;p&gt;</span>Examples of English using marco-geographical regions:<span class="hl kwa">&lt;/p&gt;</span>

	<span class="hl kwa">&lt;table&gt;</span>
	<span class="hl kwa">&lt;caption&gt;</span>Coding for English using macro-geographical regions (examples for English of ISO <span class="hl num">3166</span>-<span class="hl num">1</span> alpha-<span class="hl num">2</span> vs. UN M<span class="hl num">.49</span> code)<span class="hl kwa">&lt;/caption&gt;</span>
	<span class="hl kwa">&lt;thead&gt;</span>
	<span class="hl kwa">&lt;tr&gt;</span>
		<span class="hl kwa">&lt;th</span> <span class="hl kwb">scope</span>=<span class="hl str">&quot;col&quot;</span><span class="hl kwa">&gt;</span>ISO <span class="hl num">639</span>-<span class="hl num">1</span>/ISO <span class="hl num">639</span>-<span class="hl num">2</span> + ISO <span class="hl num">3166</span>-<span class="hl num">1</span> alpha-<span class="hl num">2</span><span class="hl kwa">&lt;/th&gt;</span>
		<span class="hl kwa">&lt;th</span> <span class="hl kwb">scope</span>=<span class="hl str">&quot;col&quot;</span> <span class="hl kwb">colspan</span>=<span class="hl str">&quot;2&quot;</span><span class="hl kwa">&gt;</span>ISO <span class="hl num">639</span>-<span class="hl num">1</span>/ISO <span class="hl num">639</span>-<span class="hl num">2</span> + UN M<span class="hl num">.49</span> (Example macro regions)<span class="hl kwa">&lt;/th&gt;</span>
	<span class="hl kwa">&lt;/tr&gt;</span>
	<span class="hl kwa">&lt;/thead&gt;</span>
	<span class="hl kwa">&lt;tbody&gt;</span>
	<span class="hl kwa">&lt;tr&gt;</span>
		<span class="hl kwa">&lt;td&gt;&lt;dl&gt;&lt;dt&gt;&lt;code&gt;</span>en-AU<span class="hl kwa">&lt;/code&gt;&lt;/dt&gt;&lt;dd&gt;</span>English as used in <span class="hl kwa">&lt;strong&gt;</span>Australia<span class="hl kwa">&lt;/strong&gt;&lt;/dd&gt;&lt;/dl&gt;&lt;/td&gt;</span>
		<span class="hl kwa">&lt;td</span> <span class="hl kwb">rowspan</span>=<span class="hl str">&quot;2&quot;</span><span class="hl kwa">&gt;&lt;dl&gt;&lt;dt&gt;&lt;code&gt;</span>en-<span class="hl num">053</span><span class="hl kwa">&lt;/code&gt;&lt;/dt&gt;&lt;dd&gt;</span>English as used in <span class="hl kwa">&lt;strong&gt;</span>Australia <span class="hl kwd">&amp;amp;</span> New Zealand<span class="hl kwa">&lt;/strong&gt;&lt;/dd&gt;&lt;/dl&gt;&lt;/td&gt;</span>
		<span class="hl kwa">&lt;td</span> <span class="hl kwb">rowspan</span>=<span class="hl str">&quot;3&quot;</span><span class="hl kwa">&gt;&lt;dl&gt;&lt;dt&gt;&lt;code&gt;</span>en-<span class="hl num">009</span><span class="hl kwa">&lt;/code&gt;&lt;/dt&gt;&lt;dd&gt;</span>English as used in <span class="hl kwa">&lt;strong&gt;</span>Oceania<span class="hl kwa">&lt;/strong&gt;&lt;/dd&gt;&lt;/dl&gt;&lt;/td&gt;</span>
	<span class="hl kwa">&lt;/tr&gt;</span>
	<span class="hl kwa">&lt;tr&gt;</span>
		<span class="hl kwa">&lt;td&gt;&lt;dl&gt;&lt;dt&gt;&lt;code&gt;</span>en-NZ<span class="hl kwa">&lt;/code&gt;&lt;/dt&gt;&lt;dd&gt;</span>English as used in <span class="hl kwa">&lt;strong&gt;</span>New Zealand<span class="hl kwa">&lt;/strong&gt;&lt;/dd&gt;&lt;/dl&gt;&lt;/td&gt;</span>
	<span class="hl kwa">&lt;/tr&gt;</span>
	<span class="hl kwa">&lt;tr&gt;</span>
		<span class="hl kwa">&lt;td&gt;&lt;dl&gt;&lt;dt&gt;&lt;code&gt;</span>en-FJ<span class="hl kwa">&lt;/code&gt;&lt;/dt&gt;&lt;dd&gt;</span>English as used in <span class="hl kwa">&lt;strong&gt;</span>Fiji<span class="hl kwa">&lt;/strong&gt;&lt;/dd&gt;&lt;/dl&gt;&lt;/td&gt;</span>
		<span class="hl kwa">&lt;td&gt;&lt;dl&gt;&lt;dt&gt;&lt;code&gt;</span>en-<span class="hl num">054</span> <span class="hl kwa">&lt;/code&gt;&lt;/dt&gt;&lt;dd&gt;</span>English as used in <span class="hl kwa">&lt;strong&gt;</span>Melanesia<span class="hl kwa">&lt;/strong&gt;&lt;/dd&gt;&lt;/dl&gt;&lt;/td&gt;</span>
	<span class="hl kwa">&lt;/tr&gt;</span>
	<span class="hl kwa">&lt;/tbody&gt;</span>
	<span class="hl kwa">&lt;/table&gt;</span>

	<span class="hl kwa">&lt;p&gt;</span>Examples of Spanish using marco-geographical regions:<span class="hl kwa">&lt;/p&gt;</span>

	<span class="hl kwa">&lt;table&gt;</span>
	<span class="hl kwa">&lt;caption&gt;</span>Coding for Spanish macro-geographical regions (examples for Spanish of ISO <span class="hl num">3166</span>-<span class="hl num">1</span> alpha-<span class="hl num">2</span> vs. UN M<span class="hl num">.49</span> code)<span class="hl kwa">&lt;/caption&gt;</span>
	<span class="hl kwa">&lt;thead&gt;</span>
	<span class="hl kwa">&lt;tr&gt;</span>
		<span class="hl kwa">&lt;th</span> <span class="hl kwb">scope</span>=<span class="hl str">&quot;col&quot;</span><span class="hl kwa">&gt;</span>ISO <span class="hl num">639</span>-<span class="hl num">1</span>/ISO <span class="hl num">639</span>-<span class="hl num">2</span> + ISO <span class="hl num">3166</span>-<span class="hl num">1</span> alpha-<span class="hl num">2</span><span class="hl kwa">&lt;/th&gt;</span>
		<span class="hl kwa">&lt;th</span> <span class="hl kwb">scope</span>=<span class="hl str">&quot;col&quot;</span> <span class="hl kwb">colspan</span>=<span class="hl str">&quot;2&quot;</span><span class="hl kwa">&gt;</span>ISO <span class="hl num">639</span>-<span class="hl num">1</span>/ISO <span class="hl num">639</span>-<span class="hl num">2</span> + UN M<span class="hl num">.49</span> (Example macro regions)<span class="hl kwa">&lt;/th&gt;</span>
	<span class="hl kwa">&lt;/tr&gt;</span>
	<span class="hl kwa">&lt;/thead&gt;</span>
	<span class="hl kwa">&lt;tbody&gt;</span>
	<span class="hl kwa">&lt;tr&gt;</span>
		<span class="hl kwa">&lt;td&gt;&lt;dl&gt;&lt;dt&gt;&lt;code&gt;</span>es-PR<span class="hl kwa">&lt;/code&gt;&lt;/dt&gt;&lt;dd&gt;</span>Spanish as used in <span class="hl kwa">&lt;strong&gt;</span>Puerto Rico<span class="hl kwa">&lt;/strong&gt;&lt;/dd&gt;&lt;/dl&gt;&lt;/td&gt;</span>
		<span class="hl kwa">&lt;td</span> <span class="hl kwb">rowspan</span>=<span class="hl str">&quot;3&quot;</span><span class="hl kwa">&gt;&lt;dl&gt;&lt;dt&gt;&lt;code&gt;</span>es-<span class="hl num">419</span><span class="hl kwa">&lt;/code&gt;&lt;/dt&gt;&lt;dd&gt;</span>Spanish as used in <span class="hl kwa">&lt;strong&gt;</span>Latin America <span class="hl kwd">&amp;amp;</span> the Caribbean<span class="hl kwa">&lt;/strong&gt;&lt;/dd&gt;&lt;/dl&gt;&lt;/td&gt;</span>
		<span class="hl kwa">&lt;td</span> <span class="hl kwb">rowspan</span>=<span class="hl str">&quot;4&quot;</span><span class="hl kwa">&gt;&lt;dl&gt;&lt;dt&gt;&lt;code&gt;</span>es-<span class="hl num">019</span><span class="hl kwa">&lt;/code&gt;&lt;/dt&gt;&lt;dd&gt;</span>Spanish as used in <span class="hl kwa">&lt;strong&gt;</span>the Americas<span class="hl kwa">&lt;/strong&gt;&lt;/dd&gt;&lt;/dl&gt;&lt;/td&gt;</span>
	<span class="hl kwa">&lt;/tr&gt;</span>
	<span class="hl kwa">&lt;tr&gt;</span>
		<span class="hl kwa">&lt;td&gt;&lt;dl&gt;&lt;dt&gt;&lt;code&gt;</span>es-HN<span class="hl kwa">&lt;/code&gt;&lt;/dt&gt;&lt;dd&gt;</span>Spanish as used in <span class="hl kwa">&lt;strong&gt;</span>Honduras<span class="hl kwa">&lt;/strong&gt;&lt;/dd&gt;&lt;/dl&gt;&lt;/td&gt;</span>
	<span class="hl kwa">&lt;/tr&gt;</span>
	<span class="hl kwa">&lt;tr&gt;</span>
		<span class="hl kwa">&lt;td&gt;&lt;dl&gt;&lt;dt&gt;&lt;code&gt;</span>es-AR<span class="hl kwa">&lt;/code&gt;&lt;/dt&gt;&lt;dd&gt;</span>Spanish as used in <span class="hl kwa">&lt;strong&gt;</span>Argentina<span class="hl kwa">&lt;/strong&gt;&lt;/dd&gt;&lt;/dl&gt;&lt;/td&gt;</span>
	<span class="hl kwa">&lt;/tr&gt;</span>
	<span class="hl kwa">&lt;tr&gt;</span>
		<span class="hl kwa">&lt;td&gt;&lt;dl&gt;&lt;dt&gt;&lt;code&gt;</span>es-US<span class="hl kwa">&lt;/code&gt;&lt;/dt&gt;&lt;dd&gt;</span>Spanish as used in <span class="hl kwa">&lt;strong&gt;</span>United States of America<span class="hl kwa">&lt;/strong&gt;&lt;/dd&gt;&lt;/dl&gt;&lt;/td&gt;</span>
		<span class="hl kwa">&lt;td&gt;&lt;dl&gt;&lt;dt&gt;&lt;code&gt;</span>es-<span class="hl num">021</span><span class="hl kwa">&lt;/code&gt;&lt;/dt&gt;&lt;dd&gt;</span>Spanish as used in <span class="hl kwa">&lt;strong&gt;</span>North America<span class="hl kwa">&lt;/strong&gt;&lt;/dd&gt;&lt;/dl&gt;&lt;/td&gt;</span>
	<span class="hl kwa">&lt;/tr&gt;</span>
	<span class="hl kwa">&lt;/tbody&gt;</span>
	<span class="hl kwa">&lt;/table&gt;</span>

	<span class="hl kwa">&lt;p&gt;</span>Example of where the <span class="hl kwa">&lt;a</span> <span class="hl kwb">href</span>=<span class="hl str">&quot;http://www.iso.ch/iso/en/prods-services/iso3166ma/02iso-3166-code-lists/list-en1.html&quot;</span><span class="hl kwa">&gt;</span>ISO <span class="hl num">3166</span>-<span class="hl num">1</span> alpha-<span class="hl num">2</span><span class="hl kwa">&lt;/a&gt;</span> is ambiguous and why <span class="hl kwa">&lt;a</span> <span class="hl kwb">href</span>=<span class="hl str">&quot;http://unstats.un.org/unsd/methods/m49/m49.htm&quot;</span><span class="hl kwa">&gt;</span>UN M<span class="hl num">.49</span><span class="hl kwa">&lt;/a&gt;</span> might be preferred:<span class="hl kwa">&lt;/p&gt;</span>

	<span class="hl kwa">&lt;table&gt;</span>
	<span class="hl kwa">&lt;caption&gt;</span>Coding for ambiguous ISO <span class="hl num">3166</span>-<span class="hl num">1</span> alpha-<span class="hl num">2</span> regions<span class="hl kwa">&lt;/caption&gt;</span>
	<span class="hl kwa">&lt;thead&gt;</span>
	<span class="hl kwa">&lt;tr&gt;</span>
		<span class="hl kwa">&lt;th</span> <span class="hl kwb">scope</span>=<span class="hl str">&quot;col&quot;</span> <span class="hl kwb">colspan</span>=<span class="hl str">&quot;2&quot;</span><span class="hl kwa">&gt;&lt;code&gt;</span>CS<span class="hl kwa">&lt;/code&gt;</span> assignment pre-<span class="hl num">1994</span><span class="hl kwa">&lt;/th&gt;</span>
		<span class="hl kwa">&lt;th</span> <span class="hl kwb">scope</span>=<span class="hl str">&quot;col&quot;</span> <span class="hl kwb">colspan</span>=<span class="hl str">&quot;2&quot;</span><span class="hl kwa">&gt;&lt;code&gt;</span>CS<span class="hl kwa">&lt;/code&gt;</span> assignment post-<span class="hl num">1994</span><span class="hl kwa">&lt;/th&gt;</span>
	<span class="hl kwa">&lt;/tr&gt;</span>
	<span class="hl kwa">&lt;/thead&gt;</span>
	<span class="hl kwa">&lt;tbody&gt;</span>
	<span class="hl kwa">&lt;tr&gt;</span>
		<span class="hl kwa">&lt;td</span> <span class="hl kwb">colspan</span>=<span class="hl str">&quot;2&quot;</span><span class="hl kwa">&gt;</span>
		<span class="hl kwa">&lt;dl&gt;</span>
		<span class="hl kwa">&lt;dt&gt;&lt;code&gt;</span>CS<span class="hl kwa">&lt;/code&gt;&lt;/dt&gt;&lt;dd&gt;&lt;strong&gt;</span>Czechoslovakia<span class="hl kwa">&lt;/strong&gt;</span> (ISO <span class="hl num">3166</span>-<span class="hl num">1</span>)<span class="hl kwa">&lt;/dd&gt;</span>
		<span class="hl kwa">&lt;dt&gt;&lt;code&gt;</span><span class="hl num">200</span><span class="hl kwa">&lt;/code&gt;&lt;/dt&gt;&lt;dd&gt;&lt;strong&gt;</span>Czechoslovakia<span class="hl kwa">&lt;/strong&gt;</span> (UN M<span class="hl num">.49</span>)<span class="hl kwa">&lt;/dd&gt;</span>
		<span class="hl kwa">&lt;/dl&gt;</span>
		<span class="hl kwa">&lt;/td&gt;</span>
		<span class="hl kwa">&lt;td</span> <span class="hl kwb">colspan</span>=<span class="hl str">&quot;2&quot;</span><span class="hl kwa">&gt;</span>
		<span class="hl kwa">&lt;dl&gt;</span>
		<span class="hl kwa">&lt;dt&gt;&lt;code&gt;</span>CS<span class="hl kwa">&lt;/code&gt;&lt;/dt&gt;&lt;dd&gt;&lt;strong&gt;</span>Serbian <span class="hl kwd">&amp;amp;</span> Montenegro<span class="hl kwa">&lt;/strong&gt;</span> (ISO <span class="hl num">3166</span>-<span class="hl num">1</span>)<span class="hl kwa">&lt;/dd&gt;</span>
		<span class="hl kwa">&lt;dt&gt;&lt;code&gt;</span><span class="hl num">891</span><span class="hl kwa">&lt;/code&gt;&lt;/dt&gt;&lt;dd&gt;&lt;strong&gt;</span>Serbian <span class="hl kwd">&amp;amp;</span> Montenegro<span class="hl kwa">&lt;/strong&gt;</span> (UN M<span class="hl num">.49</span>)<span class="hl kwa">&lt;/dd&gt;</span>
		<span class="hl kwa">&lt;/dl&gt;</span>
		<span class="hl kwa">&lt;/td&gt;</span>
	<span class="hl kwa">&lt;/tr&gt;</span>
	<span class="hl kwa">&lt;tr&gt;</span>
		<span class="hl kwa">&lt;td&gt;</span>
		<span class="hl kwa">&lt;dl&gt;</span>
		<span class="hl kwa">&lt;dt&gt;&lt;code&gt;</span>CZ<span class="hl kwa">&lt;/code&gt;&lt;/dt&gt;&lt;dd&gt;&lt;strong&gt;</span>Czech Republic<span class="hl kwa">&lt;/strong&gt;</span> (ISO <span class="hl num">3166</span>-<span class="hl num">1</span>)<span class="hl kwa">&lt;/dd&gt;</span>
		<span class="hl kwa">&lt;dt&gt;&lt;code&gt;</span><span class="hl num">203</span><span class="hl kwa">&lt;/code&gt;&lt;/dt&gt;&lt;dd&gt;&lt;strong&gt;</span>Czech Republic<span class="hl kwa">&lt;/strong&gt;</span> (UN M<span class="hl num">.49</span>)<span class="hl kwa">&lt;/dd&gt;</span>
		<span class="hl kwa">&lt;/dl&gt;</span>
		<span class="hl kwa">&lt;/td&gt;</span>
		<span class="hl kwa">&lt;td&gt;</span>
		<span class="hl kwa">&lt;dl&gt;</span>
		<span class="hl kwa">&lt;dt&gt;&lt;code&gt;</span>SK<span class="hl kwa">&lt;/code&gt;&lt;/dt&gt;&lt;dd&gt;&lt;strong&gt;</span>Slovakia<span class="hl kwa">&lt;/strong&gt;</span> (ISO <span class="hl num">3166</span>-<span class="hl num">1</span>)<span class="hl kwa">&lt;/dd&gt;</span>
		<span class="hl kwa">&lt;dt&gt;&lt;code&gt;</span><span class="hl num">703</span><span class="hl kwa">&lt;/code&gt;&lt;/dt&gt;&lt;dd&gt;&lt;strong&gt;</span>Slovakia<span class="hl kwa">&lt;/strong&gt;</span> (UN M<span class="hl num">.49</span>)<span class="hl kwa">&lt;/dd&gt;</span>
		<span class="hl kwa">&lt;/dl&gt;</span>
		<span class="hl kwa">&lt;/td&gt;</span>
		<span class="hl kwa">&lt;td&gt;</span>
		<span class="hl kwa">&lt;dl&gt;</span>
		<span class="hl kwa">&lt;dt&gt;&lt;code&gt;</span>RS<span class="hl kwa">&lt;/code&gt;&lt;/dt&gt;&lt;dd&gt;&lt;strong&gt;</span>Serbia<span class="hl kwa">&lt;/strong&gt;</span> (ISO <span class="hl num">3166</span>-<span class="hl num">1</span>)<span class="hl kwa">&lt;/dd&gt;</span>
		<span class="hl kwa">&lt;dt&gt;&lt;code&gt;</span><span class="hl num">688</span><span class="hl kwa">&lt;/code&gt;&lt;/dt&gt;&lt;dd&gt;&lt;strong&gt;</span>Serbia<span class="hl kwa">&lt;/strong&gt;</span> (UN M<span class="hl num">.49</span>)<span class="hl kwa">&lt;/dd&gt;</span>
		<span class="hl kwa">&lt;/dl&gt;</span>
		<span class="hl kwa">&lt;/td&gt;</span>
		<span class="hl kwa">&lt;td&gt;</span>
		<span class="hl kwa">&lt;dl&gt;</span>
		<span class="hl kwa">&lt;dt&gt;&lt;code&gt;</span>ME<span class="hl kwa">&lt;/code&gt;&lt;/dt&gt;&lt;dd&gt;&lt;strong&gt;</span>Montenegro<span class="hl kwa">&lt;/strong&gt;</span> (ISO <span class="hl num">3166</span>-<span class="hl num">1</span>)<span class="hl kwa">&lt;/dd&gt;</span>
		<span class="hl kwa">&lt;dt&gt;&lt;code&gt;</span><span class="hl num">499</span><span class="hl kwa">&lt;/code&gt;&lt;/dt&gt;&lt;dd&gt;&lt;strong&gt;</span>Montenegro<span class="hl kwa">&lt;/strong&gt;</span> (UN M<span class="hl num">.49</span>)<span class="hl kwa">&lt;/dd&gt;</span>
		<span class="hl kwa">&lt;/dl&gt;</span>
		<span class="hl kwa">&lt;/td&gt;</span>
	<span class="hl kwa">&lt;/tr&gt;</span>
	<span class="hl kwa">&lt;/tbody&gt;</span>
	<span class="hl kwa">&lt;/table&gt;</span>

	<span class="hl kwa">&lt;h4&gt;</span>Macro-languages <span class="hl kwd">&amp;amp;</span> Topolects:<span class="hl kwa">&lt;/h4&gt;</span>

	<span class="hl kwa">&lt;p&gt;&lt;a</span> <span class="hl kwb">href</span>=<span class="hl str">&quot;http://tools.ietf.org/html/rfc4646&quot;</span><span class="hl kwa">&gt;</span>RFC <span class="hl num">4646</span><span class="hl kwa">&lt;/a&gt;</span> anticipates features which shall be available in (currently draft) <span class="hl kwa">&lt;a</span> <span class="hl kwb">href</span>=<span class="hl str">&quot;http://www.sil.org/iso639-3/&quot;</span><span class="hl kwa">&gt;</span>ISO <span class="hl num">639</span>-<span class="hl num">3</span><span class="hl kwa">&lt;/a&gt;</span> which aims to provide as complete enumeration of languages as possible, including living, extinct, ancient and constructed languages, whether majour, minor or unwritten. A new feature of <span class="hl kwa">&lt;a</span> <span class="hl kwb">href</span>=<span class="hl str">&quot;http://www.sil.org/iso639-3/&quot;</span><span class="hl kwa">&gt;</span>ISO <span class="hl num">639</span>-<span class="hl num">3</span><span class="hl kwa">&lt;/a&gt;</span> compared to the previous two revisions is the concept of <span class="hl kwa">&lt;a</span> <span class="hl kwb">href</span>=<span class="hl str">&quot;http://www.sil.org/iso639-3/macrolanguages.asp&quot;</span><span class="hl kwa">&gt;</span>macrolanguages<span class="hl kwa">&lt;/a&gt;</span> where Arabic and Chinese are two such examples. In such cases, their respective codes of <span class="hl kwa">&lt;code&gt;</span>ar<span class="hl kwa">&lt;/code&gt;</span> and <span class="hl kwa">&lt;code&gt;</span>zh<span class="hl kwa">&lt;/code&gt;</span> is very vague as to which dialect/topolect is used or perhaps some terse classical variant which may be difficult for all but very educated users. For such macrolanguages, it is recommended that the sub-language tag is used as a suffix to the macrolanguage tag, eg:<span class="hl kwa">&lt;/p&gt;</span>

	<span class="hl kwa">&lt;table&gt;</span>
	<span class="hl kwa">&lt;caption&gt;</span>Macrolanguage subtag + sub-language subtag examples<span class="hl kwa">&lt;/caption&gt;</span>
	<span class="hl kwa">&lt;thead&gt;</span>
	<span class="hl kwa">&lt;tr&gt;</span>
		<span class="hl kwa">&lt;th</span> <span class="hl kwb">scope</span>=<span class="hl str">&quot;col&quot;</span><span class="hl kwa">&gt;</span>Language tag<span class="hl kwa">&lt;/th&gt;</span>
		<span class="hl kwa">&lt;th</span> <span class="hl kwb">scope</span>=<span class="hl str">&quot;col&quot;</span><span class="hl kwa">&gt;</span>Description<span class="hl kwa">&lt;/th&gt;</span>
		<span class="hl kwa">&lt;th</span> <span class="hl kwb">scope</span>=<span class="hl str">&quot;col&quot;</span><span class="hl kwa">&gt;</span>Component subtags<span class="hl kwa">&lt;/th&gt;</span>
	<span class="hl kwa">&lt;/tr&gt;</span>
	<span class="hl kwa">&lt;/thead&gt;</span>
	<span class="hl kwa">&lt;tbody&gt;</span>
	<span class="hl kwa">&lt;tr&gt;</span>
		<span class="hl kwa">&lt;td&gt;&lt;code&gt;</span>zh-cmn<span class="hl kwa">&lt;/code&gt;&lt;/td&gt;</span>
		<span class="hl kwa">&lt;td&gt;</span>Mandarin (Putonghau/Guoyu) Chinese<span class="hl kwa">&lt;/td&gt;</span>
		<span class="hl kwa">&lt;td&gt;&lt;code&gt;</span>macrolanguage<span class="hl kwa">&lt;/code&gt;</span>+<span class="hl kwa">&lt;code&gt;</span>sublanguage<span class="hl kwa">&lt;/code&gt;&lt;/td&gt;</span>
	<span class="hl kwa">&lt;/tr&gt;</span>
	<span class="hl kwa">&lt;tr&gt;</span>
		<span class="hl kwa">&lt;td&gt;&lt;code&gt;</span>zh-yue<span class="hl kwa">&lt;/code&gt;&lt;/td&gt;</span>
		<span class="hl kwa">&lt;td&gt;</span>Yue (Cantonese) Chinese<span class="hl kwa">&lt;/td&gt;</span>
		<span class="hl kwa">&lt;td&gt;&lt;code&gt;</span>macrolanguage<span class="hl kwa">&lt;/code&gt;</span>+<span class="hl kwa">&lt;code&gt;</span>sublanguage<span class="hl kwa">&lt;/code&gt;&lt;/td&gt;</span>
	<span class="hl kwa">&lt;/tr&gt;</span>
	<span class="hl kwa">&lt;tr&gt;</span>
		<span class="hl kwa">&lt;td&gt;&lt;code&gt;</span>zh-cmn-Hans<span class="hl kwa">&lt;/code&gt;&lt;/td&gt;</span>
		<span class="hl kwa">&lt;td&gt;</span>Mandarin (Putonghau/Guoyu) Chinese written in Simplified script<span class="hl kwa">&lt;/td&gt;</span>
		<span class="hl kwa">&lt;td&gt;&lt;code&gt;</span>macrolanguage<span class="hl kwa">&lt;/code&gt;</span>+<span class="hl kwa">&lt;code&gt;</span>sublanguage<span class="hl kwa">&lt;/code&gt;</span>+<span class="hl kwa">&lt;code&gt;</span>script<span class="hl kwa">&lt;/code&gt;&lt;/td&gt;</span>
	<span class="hl kwa">&lt;/tr&gt;</span>
	<span class="hl kwa">&lt;tr&gt;</span>
		<span class="hl kwa">&lt;td&gt;&lt;code&gt;</span>zh-cmn-Hant<span class="hl kwa">&lt;/code&gt;&lt;/td&gt;</span>
		<span class="hl kwa">&lt;td&gt;</span>Mandarin (Putonghau/Guoyu) Chinese written in Traditional script<span class="hl kwa">&lt;/td&gt;</span>
		<span class="hl kwa">&lt;td&gt;&lt;code&gt;</span>macrolanguage<span class="hl kwa">&lt;/code&gt;</span>+<span class="hl kwa">&lt;code&gt;</span>sublanguage<span class="hl kwa">&lt;/code&gt;</span>+<span class="hl kwa">&lt;code&gt;</span>script<span class="hl kwa">&lt;/code&gt;&lt;/td&gt;</span>
	<span class="hl kwa">&lt;/tr&gt;</span>
	<span class="hl kwa">&lt;tr&gt;</span>
		<span class="hl kwa">&lt;td&gt;&lt;code&gt;</span>zh-nan-Latn-TW<span class="hl kwa">&lt;/code&gt;&lt;/td&gt;</span>
		<span class="hl kwa">&lt;td&gt;</span>Minnan (Hoklo) Chinese written in Latin script (POJ Romanisation) as used in Taiwan<span class="hl kwa">&lt;/td&gt;</span>
		<span class="hl kwa">&lt;td&gt;&lt;code&gt;</span>macrolanguage<span class="hl kwa">&lt;/code&gt;</span>+<span class="hl kwa">&lt;code&gt;</span>sublanguage<span class="hl kwa">&lt;/code&gt;</span>+<span class="hl kwa">&lt;code&gt;</span>script<span class="hl kwa">&lt;/code&gt;</span>+<span class="hl kwa">&lt;code&gt;</span>region<span class="hl kwa">&lt;/code&gt;&lt;/td&gt;</span>
	<span class="hl kwa">&lt;/tr&gt;</span>
	<span class="hl kwa">&lt;/tbody&gt;</span>
	<span class="hl kwa">&lt;/table&gt;</span>

	<span class="hl kwa">&lt;a</span> <span class="hl kwb">name</span>=<span class="hl str">&quot;otherconsiderations&quot;</span><span class="hl kwa">&gt;&lt;/a&gt;&lt;h3&gt;</span><span class="hl num">6</span>.ii. Other considerations<span class="hl kwa">&lt;/h3&gt;</span>

	<span class="hl kwa">&lt;h4&gt;</span>Normalisation of language tags for phpBB:<span class="hl kwa">&lt;/h4&gt;</span>

	<span class="hl kwa">&lt;p&gt;</span>For phpBB, the language tags are <span class="hl kwa">&lt;strong&gt;</span>not<span class="hl kwa">&lt;/strong&gt;</span> used in their raw form and instead converted to all lower-case and have the hyphen <span class="hl kwa">&lt;code&gt;</span>-<span class="hl kwa">&lt;/code&gt;</span> replaced with an underscore <span class="hl kwa">&lt;code&gt;</span>_<span class="hl kwa">&lt;/code&gt;</span> where appropriate, with some examples below:<span class="hl kwa">&lt;/p&gt;</span>

	<span class="hl kwa">&lt;table&gt;</span>
	<span class="hl kwa">&lt;caption&gt;</span>Language tag normalisation examples<span class="hl kwa">&lt;/caption&gt;</span>
	<span class="hl kwa">&lt;thead&gt;</span>
	<span class="hl kwa">&lt;tr&gt;</span>
		<span class="hl kwa">&lt;th</span> <span class="hl kwb">scope</span>=<span class="hl str">&quot;col&quot;</span><span class="hl kwa">&gt;</span>Raw language tag<span class="hl kwa">&lt;/th&gt;</span>
		<span class="hl kwa">&lt;th</span> <span class="hl kwb">scope</span>=<span class="hl str">&quot;col&quot;</span><span class="hl kwa">&gt;</span>Description<span class="hl kwa">&lt;/th&gt;</span>
		<span class="hl kwa">&lt;th</span> <span class="hl kwb">scope</span>=<span class="hl str">&quot;col&quot;</span><span class="hl kwa">&gt;</span>Value of <span class="hl kwa">&lt;code&gt;</span>USER_LANG<span class="hl kwa">&lt;/code&gt;&lt;br /&gt;</span>in <span class="hl kwa">&lt;code&gt;</span>./common.php<span class="hl kwa">&lt;/code&gt;&lt;/th&gt;</span>
		<span class="hl kwa">&lt;th</span> <span class="hl kwb">scope</span>=<span class="hl str">&quot;col&quot;</span><span class="hl kwa">&gt;</span>Language pack directory<span class="hl kwa">&lt;br /&gt;</span>name in <span class="hl kwa">&lt;code&gt;</span>/language/<span class="hl kwa">&lt;/code&gt;&lt;/th&gt;</span>
	<span class="hl kwa">&lt;/tr&gt;</span>
	<span class="hl kwa">&lt;/thead&gt;</span>
	<span class="hl kwa">&lt;tbody&gt;</span>
	<span class="hl kwa">&lt;tr&gt;</span>
		<span class="hl kwa">&lt;td&gt;&lt;code&gt;</span>en<span class="hl kwa">&lt;/code&gt;&lt;/td&gt;</span>
		<span class="hl kwa">&lt;td&gt;</span>British English<span class="hl kwa">&lt;/td&gt;</span>
		<span class="hl kwa">&lt;td&gt;&lt;code&gt;</span>en<span class="hl kwa">&lt;/code&gt;&lt;/td&gt;</span>
		<span class="hl kwa">&lt;td&gt;&lt;code&gt;</span>en<span class="hl kwa">&lt;/code&gt;&lt;/td&gt;</span>
	<span class="hl kwa">&lt;/tr&gt;</span>
	<span class="hl kwa">&lt;tr&gt;</span>
		<span class="hl kwa">&lt;td&gt;&lt;code&gt;</span>de-AT<span class="hl kwa">&lt;/code&gt;&lt;/td&gt;</span>
		<span class="hl kwa">&lt;td&gt;</span>German as used in Austria<span class="hl kwa">&lt;/td&gt;</span>
		<span class="hl kwa">&lt;td&gt;&lt;code&gt;</span>de-at<span class="hl kwa">&lt;/code&gt;&lt;/td&gt;</span>
		<span class="hl kwa">&lt;td&gt;&lt;code&gt;</span>de_at<span class="hl kwa">&lt;/code&gt;&lt;/td&gt;</span>
	<span class="hl kwa">&lt;/tr&gt;</span>
	<span class="hl kwa">&lt;tr&gt;</span>
		<span class="hl kwa">&lt;td&gt;&lt;code&gt;</span>es-<span class="hl num">419</span><span class="hl kwa">&lt;/code&gt;&lt;/td&gt;</span>
		<span class="hl kwa">&lt;td&gt;</span>Spanish as used in Latin America <span class="hl kwd">&amp;amp;</span> Caribbean<span class="hl kwa">&lt;/td&gt;</span>
		<span class="hl kwa">&lt;td&gt;&lt;code&gt;</span>en-<span class="hl num">419</span><span class="hl kwa">&lt;/code&gt;&lt;/td&gt;</span>
		<span class="hl kwa">&lt;td&gt;&lt;code&gt;</span>en_419<span class="hl kwa">&lt;/code&gt;&lt;/td&gt;</span>
	<span class="hl kwa">&lt;/tr&gt;</span>
	<span class="hl kwa">&lt;tr&gt;</span>
		<span class="hl kwa">&lt;td&gt;&lt;code&gt;</span>zh-yue-Hant-HK<span class="hl kwa">&lt;/code&gt;&lt;/td&gt;</span>
		<span class="hl kwa">&lt;td&gt;</span>Cantonese written in Traditional script as used in Hong Kong<span class="hl kwa">&lt;/td&gt;</span>
		<span class="hl kwa">&lt;td&gt;&lt;code&gt;</span>zh-yue-hant-hk<span class="hl kwa">&lt;/code&gt;&lt;/td&gt;</span>
		<span class="hl kwa">&lt;td&gt;&lt;code&gt;</span>zh_yue_hant_hk<span class="hl kwa">&lt;/code&gt;&lt;/td&gt;</span>
	<span class="hl kwa">&lt;/tr&gt;</span>
	<span class="hl kwa">&lt;/tbody&gt;</span>
	<span class="hl kwa">&lt;/table&gt;</span>

	<span class="hl kwa">&lt;h4&gt;</span>How to use <span class="hl kwa">&lt;code&gt;</span>iso.txt<span class="hl kwa">&lt;/code&gt;</span>:<span class="hl kwa">&lt;/h4&gt;</span>

	<span class="hl kwa">&lt;p&gt;</span>The <span class="hl kwa">&lt;code&gt;</span>iso.txt<span class="hl kwa">&lt;/code&gt;</span> file is a small UTF-<span class="hl num">8</span> encoded plain-text file which consists of three lines:<span class="hl kwa">&lt;/p&gt;</span>

	<span class="hl kwa">&lt;ol&gt;</span>
		<span class="hl kwa">&lt;li&gt;&lt;code&gt;</span>Language&apos;s English name<span class="hl kwa">&lt;/code&gt;&lt;/li&gt;</span>
		<span class="hl kwa">&lt;li&gt;&lt;code&gt;</span>Language&apos;s local name<span class="hl kwa">&lt;/code&gt;&lt;/li&gt;</span>
		<span class="hl kwa">&lt;li&gt;&lt;code&gt;</span>Authors information<span class="hl kwa">&lt;/code&gt;&lt;/li&gt;</span>
	<span class="hl kwa">&lt;/ol&gt;</span>

	<span class="hl kwa">&lt;p&gt;&lt;code&gt;</span>iso.txt<span class="hl kwa">&lt;/code&gt;</span> is automatically generated by the language pack submission system on phpBB.com. You don&apos;t have to create this file yourself if you plan on releasing your language pack on phpBB.com, but do keep in mind that phpBB itself does require this file to be present.<span class="hl kwa">&lt;/p&gt;</span>

	<span class="hl kwa">&lt;p&gt;</span>Because language tags themselves are meant to be machine read, they can be rather obtuse to humans and why descriptive strings as provided by <span class="hl kwa">&lt;code&gt;</span>iso.txt<span class="hl kwa">&lt;/code&gt;</span> are needed. Whilst <span class="hl kwa">&lt;code&gt;</span>en-US<span class="hl kwa">&lt;/code&gt;</span> could be fairly easily deduced to be <span class="hl str">&quot;English as used in the United States&quot;</span>, <span class="hl kwa">&lt;code&gt;</span>de-CH<span class="hl kwa">&lt;/code&gt;</span> is more difficult less one happens to know that <span class="hl kwa">&lt;code&gt;</span>de<span class="hl kwa">&lt;/code&gt;</span> is from <span class="hl str">&quot;&lt;span lang=&quot;</span>de<span class="hl str">&quot;&gt;Deutsch&lt;/span&gt;&quot;</span>, German for <span class="hl str">&quot;German&quot;</span> and <span class="hl kwa">&lt;code&gt;</span>CH<span class="hl kwa">&lt;/code&gt;</span> is the abbreviation of the official Latin name for Switzerland, <span class="hl str">&quot;&lt;span lang=&quot;</span>la<span class="hl str">&quot;&gt;Confoederatio Helvetica&lt;/span&gt;&quot;</span>.<span class="hl kwa">&lt;/p&gt;</span>

	<span class="hl kwa">&lt;p&gt;</span>For the English language description, the language name is always first and any additional attributes required to describe the subtags within the language code are then listed in order separated with commas and enclosed within parentheses, eg:<span class="hl kwa">&lt;/p&gt;</span>

	<span class="hl kwa">&lt;table&gt;</span>
	<span class="hl kwa">&lt;caption&gt;</span>English language description examples for iso.txt<span class="hl kwa">&lt;/caption&gt;</span>
	<span class="hl kwa">&lt;thead&gt;</span>
	<span class="hl kwa">&lt;tr&gt;</span>
		<span class="hl kwa">&lt;th</span> <span class="hl kwb">scope</span>=<span class="hl str">&quot;col&quot;</span><span class="hl kwa">&gt;</span>Raw language tag<span class="hl kwa">&lt;/th&gt;</span>
		<span class="hl kwa">&lt;th</span> <span class="hl kwb">scope</span>=<span class="hl str">&quot;col&quot;</span><span class="hl kwa">&gt;</span>English description within <span class="hl kwa">&lt;code&gt;</span>iso.txt<span class="hl kwa">&lt;/code&gt;&lt;/th&gt;</span>
	<span class="hl kwa">&lt;/tr&gt;</span>
	<span class="hl kwa">&lt;/thead&gt;</span>
	<span class="hl kwa">&lt;tbody&gt;</span>
	<span class="hl kwa">&lt;tr&gt;</span>
		<span class="hl kwa">&lt;td&gt;&lt;code&gt;</span>en<span class="hl kwa">&lt;/code&gt;&lt;/td&gt;</span>
		<span class="hl kwa">&lt;td&gt;</span>British English<span class="hl kwa">&lt;/td&gt;</span>
	<span class="hl kwa">&lt;/tr&gt;</span>
	<span class="hl kwa">&lt;tr&gt;</span>
		<span class="hl kwa">&lt;td&gt;&lt;code&gt;</span>en-US<span class="hl kwa">&lt;/code&gt;&lt;/td&gt;</span>
		<span class="hl kwa">&lt;td&gt;</span>English (United States)<span class="hl kwa">&lt;/td&gt;</span>
	<span class="hl kwa">&lt;/tr&gt;</span>
	<span class="hl kwa">&lt;tr&gt;</span>
		<span class="hl kwa">&lt;td&gt;&lt;code&gt;</span>en-<span class="hl num">053</span><span class="hl kwa">&lt;/code&gt;&lt;/td&gt;</span>
		<span class="hl kwa">&lt;td&gt;</span>English (Australia <span class="hl kwd">&amp;amp;</span> New Zealand)<span class="hl kwa">&lt;/td&gt;</span>
	<span class="hl kwa">&lt;/tr&gt;</span>
	<span class="hl kwa">&lt;tr&gt;</span>
		<span class="hl kwa">&lt;td&gt;&lt;code&gt;</span>de<span class="hl kwa">&lt;/code&gt;&lt;/td&gt;</span>
		<span class="hl kwa">&lt;td&gt;</span>German<span class="hl kwa">&lt;/td&gt;</span>
	<span class="hl kwa">&lt;/tr&gt;</span>
	<span class="hl kwa">&lt;tr&gt;</span>
		<span class="hl kwa">&lt;td&gt;&lt;code&gt;</span>de-CH-<span class="hl num">1996</span><span class="hl kwa">&lt;/code&gt;&lt;/td&gt;</span>
		<span class="hl kwa">&lt;td&gt;</span>German (Switzerland, <span class="hl num">1996</span> orthography)<span class="hl kwa">&lt;/td&gt;</span>
	<span class="hl kwa">&lt;/tr&gt;</span>
	<span class="hl kwa">&lt;tr&gt;</span>
		<span class="hl kwa">&lt;td&gt;&lt;code&gt;</span>gws-<span class="hl num">1996</span><span class="hl kwa">&lt;/code&gt;&lt;/td&gt;</span>
		<span class="hl kwa">&lt;td&gt;</span>Swiss German (<span class="hl num">1996</span> orthography)<span class="hl kwa">&lt;/td&gt;</span>
	<span class="hl kwa">&lt;/tr&gt;</span>
	<span class="hl kwa">&lt;tr&gt;</span>
		<span class="hl kwa">&lt;td&gt;&lt;code&gt;</span>zh-cmn-Hans-CN<span class="hl kwa">&lt;/code&gt;&lt;/td&gt;</span>
		<span class="hl kwa">&lt;td&gt;</span>Mandarin Chinese (Simplified, Mainland China)<span class="hl kwa">&lt;/td&gt;</span>
	<span class="hl kwa">&lt;/tr&gt;</span>
	<span class="hl kwa">&lt;tr&gt;</span>
		<span class="hl kwa">&lt;td&gt;&lt;code&gt;</span>zh-yue-Hant-HK<span class="hl kwa">&lt;/code&gt;&lt;/td&gt;</span>
		<span class="hl kwa">&lt;td&gt;</span>Cantonese Chinese (Traditional, Hong Kong)<span class="hl kwa">&lt;/td&gt;</span>
	<span class="hl kwa">&lt;/tr&gt;</span>
	<span class="hl kwa">&lt;/tbody&gt;</span>
	<span class="hl kwa">&lt;/table&gt;</span>

	<span class="hl kwa">&lt;p&gt;</span>For the localised language description, just translate the English version though use whatever appropriate punctuation typical for your own locale, assuming the language uses punctuation at all.<span class="hl kwa">&lt;/p&gt;</span>

	<span class="hl kwa">&lt;h4&gt;</span>Unicode bi-directional considerations:<span class="hl kwa">&lt;/h4&gt;</span>

	<span class="hl kwa">&lt;p&gt;</span>Because phpBB is now UTF-<span class="hl num">8</span>, all translators must take into account that certain strings may be shown when the directionality of the document is either opposite to normal or is ambiguous.<span class="hl kwa">&lt;/p&gt;</span>

	<span class="hl kwa">&lt;p&gt;</span>The various Unicode control characters for bi-directional text and their HTML enquivalents where appropriate are as follows:<span class="hl kwa">&lt;/p&gt;</span>

	<span class="hl kwa">&lt;table&gt;</span>
	<span class="hl kwa">&lt;caption&gt;</span>Unicode bidirectional control characters <span class="hl kwd">&amp;amp;</span> HTML elements/entities<span class="hl kwa">&lt;/caption&gt;</span>
	<span class="hl kwa">&lt;thead&gt;</span>
	<span class="hl kwa">&lt;tr&gt;</span>
		<span class="hl kwa">&lt;th</span> <span class="hl kwb">scope</span>=<span class="hl str">&quot;col&quot;</span><span class="hl kwa">&gt;</span>Unicode character<span class="hl kwa">&lt;br /&gt;</span>abbreviation<span class="hl kwa">&lt;/th&gt;</span>
		<span class="hl kwa">&lt;th</span> <span class="hl kwb">scope</span>=<span class="hl str">&quot;col&quot;</span><span class="hl kwa">&gt;</span>Unicode<span class="hl kwa">&lt;br /&gt;</span>code-point<span class="hl kwa">&lt;/th&gt;</span>
		<span class="hl kwa">&lt;th</span> <span class="hl kwb">scope</span>=<span class="hl str">&quot;col&quot;</span><span class="hl kwa">&gt;</span>Unicode character<span class="hl kwa">&lt;br /&gt;</span>name<span class="hl kwa">&lt;/th&gt;</span>
		<span class="hl kwa">&lt;th</span> <span class="hl kwb">scope</span>=<span class="hl str">&quot;col&quot;</span><span class="hl kwa">&gt;</span>Equivalent HTML<span class="hl kwa">&lt;br /&gt;</span>markup/entity<span class="hl kwa">&lt;/th&gt;</span>
		<span class="hl kwa">&lt;th</span> <span class="hl kwb">scope</span>=<span class="hl str">&quot;col&quot;</span><span class="hl kwa">&gt;</span>Raw character<span class="hl kwa">&lt;br /&gt;</span>(enclosed between &apos;&apos;)<span class="hl kwa">&lt;/th&gt;</span>
	<span class="hl kwa">&lt;/tr&gt;</span>
	<span class="hl kwa">&lt;/thead&gt;</span>
	<span class="hl kwa">&lt;tbody&gt;</span>
	<span class="hl kwa">&lt;tr&gt;</span>
		<span class="hl kwa">&lt;td&gt;&lt;code&gt;</span>LRM<span class="hl kwa">&lt;/code&gt;&lt;/td&gt;</span>
		<span class="hl kwa">&lt;td&gt;&lt;code&gt;</span>U+<span class="hl num">200</span>E<span class="hl kwa">&lt;/code&gt;&lt;/td&gt;</span>
		<span class="hl kwa">&lt;td&gt;</span>Left-to-Right Mark<span class="hl kwa">&lt;/td&gt;</span>
		<span class="hl kwa">&lt;td&gt;&lt;code&gt;</span><span class="hl kwd">&amp;amp;</span>lrm;<span class="hl kwa">&lt;/code&gt;&lt;/td&gt;</span>
		<span class="hl kwa">&lt;td&gt;</span>&apos;<span class="hl kwd">&amp;#x200E;</span>&apos;<span class="hl kwa">&lt;/td&gt;</span>
	<span class="hl kwa">&lt;/tr&gt;</span>
	<span class="hl kwa">&lt;tr&gt;</span>
		<span class="hl kwa">&lt;td&gt;&lt;code&gt;</span>RLM<span class="hl kwa">&lt;/code&gt;&lt;/td&gt;</span>
		<span class="hl kwa">&lt;td&gt;&lt;code&gt;</span>U+<span class="hl num">200</span>F<span class="hl kwa">&lt;/code&gt;&lt;/td&gt;</span>
		<span class="hl kwa">&lt;td&gt;</span>Right-to-Left Mark<span class="hl kwa">&lt;/td&gt;</span>
		<span class="hl kwa">&lt;td&gt;&lt;code&gt;</span><span class="hl kwd">&amp;amp;</span>rlm;<span class="hl kwa">&lt;/code&gt;&lt;/td&gt;</span>
		<span class="hl kwa">&lt;td&gt;</span>&apos;<span class="hl kwd">&amp;#x200F;</span>&apos;<span class="hl kwa">&lt;/td&gt;</span>
	<span class="hl kwa">&lt;/tr&gt;</span>
	<span class="hl kwa">&lt;tr&gt;</span>
		<span class="hl kwa">&lt;td&gt;&lt;code&gt;</span>LRE<span class="hl kwa">&lt;/code&gt;&lt;/td&gt;</span>
		<span class="hl kwa">&lt;td&gt;&lt;code&gt;</span>U+<span class="hl num">202</span>A<span class="hl kwa">&lt;/code&gt;&lt;/td&gt;</span>
		<span class="hl kwa">&lt;td&gt;</span>Left-to-Right Embedding<span class="hl kwa">&lt;/td&gt;</span>
		<span class="hl kwa">&lt;td&gt;&lt;code&gt;</span>dir=<span class="hl kwd">&amp;quot;</span>ltr<span class="hl kwd">&amp;quot;</span><span class="hl kwa">&lt;/code&gt;&lt;/td&gt;</span>
		<span class="hl kwa">&lt;td&gt;</span>&apos;<span class="hl kwd">&amp;#x202A;</span>&apos;<span class="hl kwa">&lt;/td&gt;</span>
	<span class="hl kwa">&lt;/tr&gt;</span>
	<span class="hl kwa">&lt;tr&gt;</span>
		<span class="hl kwa">&lt;td&gt;&lt;code&gt;</span>RLE<span class="hl kwa">&lt;/code&gt;&lt;/td&gt;</span>
		<span class="hl kwa">&lt;td&gt;&lt;code&gt;</span>U+<span class="hl num">202</span>B<span class="hl kwa">&lt;/code&gt;&lt;/td&gt;</span>
		<span class="hl kwa">&lt;td&gt;</span>Right-to-Left Embedding<span class="hl kwa">&lt;/td&gt;</span>
		<span class="hl kwa">&lt;td&gt;&lt;code&gt;</span>dir=<span class="hl kwd">&amp;quot;</span>rtl<span class="hl kwd">&amp;quot;</span><span class="hl kwa">&lt;/code&gt;&lt;/td&gt;</span>
		<span class="hl kwa">&lt;td&gt;</span>&apos;<span class="hl kwd">&amp;#x202B;</span>&apos;<span class="hl kwa">&lt;/td&gt;</span>
	<span class="hl kwa">&lt;/tr&gt;</span>
	<span class="hl kwa">&lt;tr&gt;</span>
		<span class="hl kwa">&lt;td&gt;&lt;code&gt;</span>PDF<span class="hl kwa">&lt;/code&gt;&lt;/td&gt;</span>
		<span class="hl kwa">&lt;td&gt;&lt;code&gt;</span>U+<span class="hl num">202</span>C<span class="hl kwa">&lt;/code&gt;&lt;/td&gt;</span>
		<span class="hl kwa">&lt;td&gt;</span>Pop Directional Formatting<span class="hl kwa">&lt;/td&gt;</span>
		<span class="hl kwa">&lt;td&gt;&lt;code&gt;</span><span class="hl kwd">&amp;lt;</span>/bdo<span class="hl kwd">&amp;gt;</span><span class="hl kwa">&lt;/code&gt;&lt;/td&gt;</span>
		<span class="hl kwa">&lt;td&gt;</span>&apos;<span class="hl kwd">&amp;#x202C;</span>&apos;<span class="hl kwa">&lt;/td&gt;</span>
	<span class="hl kwa">&lt;/tr&gt;</span>
	<span class="hl kwa">&lt;tr&gt;</span>
		<span class="hl kwa">&lt;td&gt;&lt;code&gt;</span>LRO<span class="hl kwa">&lt;/code&gt;&lt;/td&gt;</span>
		<span class="hl kwa">&lt;td&gt;&lt;code&gt;</span>U+<span class="hl num">202</span>D<span class="hl kwa">&lt;/code&gt;&lt;/td&gt;</span>
		<span class="hl kwa">&lt;td&gt;</span>Left-to-Right Override<span class="hl kwa">&lt;/td&gt;</span>
		<span class="hl kwa">&lt;td&gt;&lt;code&gt;</span><span class="hl kwd">&amp;lt;</span>bdo dir=<span class="hl kwd">&amp;quot;</span>ltr<span class="hl kwd">&amp;quot;&amp;gt;</span><span class="hl kwa">&lt;/code&gt;&lt;/td&gt;</span>
		<span class="hl kwa">&lt;td&gt;</span>&apos;<span class="hl kwd">&amp;#x202D;</span>&apos;<span class="hl kwa">&lt;/td&gt;</span>
	<span class="hl kwa">&lt;/tr&gt;</span>
	<span class="hl kwa">&lt;tr&gt;</span>
		<span class="hl kwa">&lt;td&gt;&lt;code&gt;</span>RLO<span class="hl kwa">&lt;/code&gt;&lt;/td&gt;</span>
		<span class="hl kwa">&lt;td&gt;&lt;code&gt;</span>U+<span class="hl num">202</span>E<span class="hl kwa">&lt;/code&gt;&lt;/td&gt;</span>
		<span class="hl kwa">&lt;td&gt;</span>Right-to-Left Override<span class="hl kwa">&lt;/td&gt;</span>
		<span class="hl kwa">&lt;td&gt;&lt;code&gt;</span><span class="hl kwd">&amp;lt;</span>bdo dir=<span class="hl kwd">&amp;quot;</span>rtl<span class="hl kwd">&amp;quot;&amp;gt;</span><span class="hl kwa">&lt;/code&gt;&lt;/td&gt;</span>
		<span class="hl kwa">&lt;td&gt;</span>&apos;<span class="hl kwd">&amp;#x202E;</span>&apos;<span class="hl kwa">&lt;/td&gt;</span>
	<span class="hl kwa">&lt;/tr&gt;</span>
	<span class="hl kwa">&lt;/tbody&gt;</span>
	<span class="hl kwa">&lt;/table&gt;</span>

	<span class="hl kwa">&lt;p&gt;</span>For <span class="hl kwa">&lt;code&gt;</span>iso.txt<span class="hl kwa">&lt;/code&gt;</span>, the directionality of the text can be explicitly set using special Unicode characters via any of the three methods provided by left-to-right/right-to-left markers/embeds/overrides, as without them, the ordering of characters will be incorrect, eg:<span class="hl kwa">&lt;/p&gt;</span>

	<span class="hl kwa">&lt;table&gt;</span>
	<span class="hl kwa">&lt;caption&gt;</span>Unicode bidirectional control characters iso.txt<span class="hl kwa">&lt;/caption&gt;</span>
	<span class="hl kwa">&lt;thead&gt;</span>
	<span class="hl kwa">&lt;tr&gt;</span>
		<span class="hl kwa">&lt;th</span> <span class="hl kwb">scope</span>=<span class="hl str">&quot;col&quot;</span><span class="hl kwa">&gt;</span>Directionality<span class="hl kwa">&lt;/th&gt;</span>
		<span class="hl kwa">&lt;th</span> <span class="hl kwb">scope</span>=<span class="hl str">&quot;col&quot;</span><span class="hl kwa">&gt;</span>Raw character view<span class="hl kwa">&lt;/th&gt;</span>
		<span class="hl kwa">&lt;th</span> <span class="hl kwb">scope</span>=<span class="hl str">&quot;col&quot;</span><span class="hl kwa">&gt;</span>Display of localised<span class="hl kwa">&lt;br /&gt;</span>description in <span class="hl kwa">&lt;code&gt;</span>iso.txt<span class="hl kwa">&lt;/code&gt;&lt;/th&gt;</span>
		<span class="hl kwa">&lt;th</span> <span class="hl kwb">scope</span>=<span class="hl str">&quot;col&quot;</span><span class="hl kwa">&gt;</span>Ordering<span class="hl kwa">&lt;/th&gt;</span>
	<span class="hl kwa">&lt;/tr&gt;</span>
	<span class="hl kwa">&lt;/thead&gt;</span>
	<span class="hl kwa">&lt;tbody&gt;</span>
	<span class="hl kwa">&lt;tr&gt;</span>
		<span class="hl kwa">&lt;td&gt;&lt;code&gt;</span>dir=<span class="hl kwd">&amp;quot;</span>ltr<span class="hl kwd">&amp;quot;</span><span class="hl kwa">&lt;/code&gt;&lt;/td&gt;</span>
		<span class="hl kwa">&lt;td&gt;</span>English (Australia <span class="hl kwd">&amp;amp;</span> New Zealand)<span class="hl kwa">&lt;/td&gt;</span>
		<span class="hl kwa">&lt;td</span> <span class="hl kwb">dir</span>=<span class="hl str">&quot;ltr&quot;</span><span class="hl kwa">&gt;</span>English (Australia <span class="hl kwd">&amp;amp;</span> New Zealand)<span class="hl kwa">&lt;/td&gt;</span>
		<span class="hl kwa">&lt;td</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;good&quot;</span><span class="hl kwa">&gt;</span>Correct<span class="hl kwa">&lt;/td&gt;</span>
	<span class="hl kwa">&lt;/tr&gt;</span>
	<span class="hl kwa">&lt;tr&gt;</span>
		<span class="hl kwa">&lt;td&gt;&lt;code&gt;</span>dir=<span class="hl kwd">&amp;quot;</span>rtl<span class="hl kwd">&amp;quot;</span><span class="hl kwa">&lt;/code&gt;&lt;/td&gt;</span>
		<span class="hl kwa">&lt;td&gt;</span>English (Australia <span class="hl kwd">&amp;amp;</span> New Zealand)<span class="hl kwa">&lt;/td&gt;</span>
		<span class="hl kwa">&lt;td</span> <span class="hl kwb">dir</span>=<span class="hl str">&quot;rtl&quot;</span><span class="hl kwa">&gt;</span>English (Australia <span class="hl kwd">&amp;amp;</span> New Zealand)<span class="hl kwa">&lt;/td&gt;</span>
		<span class="hl kwa">&lt;td</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;bad&quot;</span><span class="hl kwa">&gt;</span>Incorrect<span class="hl kwa">&lt;/td&gt;</span>
	<span class="hl kwa">&lt;/tr&gt;</span>
	<span class="hl kwa">&lt;tr&gt;</span>
		<span class="hl kwa">&lt;td&gt;&lt;code&gt;</span>dir=<span class="hl kwd">&amp;quot;</span>rtl<span class="hl kwd">&amp;quot;</span><span class="hl kwa">&lt;/code&gt;</span> with <span class="hl kwa">&lt;code&gt;</span>LRM<span class="hl kwa">&lt;/code&gt;&lt;/td&gt;</span>
		<span class="hl kwa">&lt;td&gt;</span>English (Australia <span class="hl kwd">&amp;amp;</span> New Zealand)<span class="hl kwa">&lt;code&gt;</span>U+<span class="hl num">200</span>E<span class="hl kwa">&lt;/code&gt;&lt;/td&gt;</span>
		<span class="hl kwa">&lt;td</span> <span class="hl kwb">dir</span>=<span class="hl str">&quot;rtl&quot;</span><span class="hl kwa">&gt;</span>English (Australia <span class="hl kwd">&amp;amp;</span> New Zealand)<span class="hl kwd">&amp;#x200E;</span><span class="hl kwa">&lt;/td&gt;</span>
		<span class="hl kwa">&lt;td</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;good&quot;</span><span class="hl kwa">&gt;</span>Correct<span class="hl kwa">&lt;/td&gt;</span>
	<span class="hl kwa">&lt;/tr&gt;</span>
	<span class="hl kwa">&lt;tr&gt;</span>
		<span class="hl kwa">&lt;td&gt;&lt;code&gt;</span>dir=<span class="hl kwd">&amp;quot;</span>rtl<span class="hl kwd">&amp;quot;</span><span class="hl kwa">&lt;/code&gt;</span> with <span class="hl kwa">&lt;code&gt;</span>LRE<span class="hl kwa">&lt;/code&gt;</span> <span class="hl kwd">&amp;amp;</span> <span class="hl kwa">&lt;code&gt;</span>PDF<span class="hl kwa">&lt;/code&gt;&lt;/td&gt;</span>
		<span class="hl kwa">&lt;td&gt;&lt;code&gt;</span>U+<span class="hl num">202</span>A<span class="hl kwa">&lt;/code&gt;</span>English (Australia <span class="hl kwd">&amp;amp;</span> New Zealand)<span class="hl kwa">&lt;code&gt;</span>U+<span class="hl num">202</span>C<span class="hl kwa">&lt;/code&gt;&lt;/td&gt;</span>
		<span class="hl kwa">&lt;td</span> <span class="hl kwb">dir</span>=<span class="hl str">&quot;rtl&quot;</span><span class="hl kwa">&gt;</span><span class="hl kwd">&amp;#x202A;</span>English (Australia <span class="hl kwd">&amp;amp;</span> New Zealand)<span class="hl kwd">&amp;#x202C;</span><span class="hl kwa">&lt;/td&gt;</span>
		<span class="hl kwa">&lt;td</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;good&quot;</span><span class="hl kwa">&gt;</span>Correct<span class="hl kwa">&lt;/td&gt;</span>
	<span class="hl kwa">&lt;/tr&gt;</span>
	<span class="hl kwa">&lt;tr&gt;</span>
		<span class="hl kwa">&lt;td&gt;&lt;code&gt;</span>dir=<span class="hl kwd">&amp;quot;</span>rtl<span class="hl kwd">&amp;quot;</span><span class="hl kwa">&lt;/code&gt;</span> with <span class="hl kwa">&lt;code&gt;</span>LRO<span class="hl kwa">&lt;/code&gt;</span> <span class="hl kwd">&amp;amp;</span> <span class="hl kwa">&lt;code&gt;</span>PDF<span class="hl kwa">&lt;/code&gt;&lt;/td&gt;</span>
		<span class="hl kwa">&lt;td&gt;&lt;code&gt;</span>U+<span class="hl num">202</span>D<span class="hl kwa">&lt;/code&gt;</span>English (Australia <span class="hl kwd">&amp;amp;</span> New Zealand)<span class="hl kwa">&lt;code&gt;</span>U+<span class="hl num">202</span>C<span class="hl kwa">&lt;/code&gt;&lt;/td&gt;</span>
		<span class="hl kwa">&lt;td</span> <span class="hl kwb">dir</span>=<span class="hl str">&quot;rtl&quot;</span><span class="hl kwa">&gt;</span><span class="hl kwd">&amp;#x202D;</span>English (Australia <span class="hl kwd">&amp;amp;</span> New Zealand)<span class="hl kwd">&amp;#x202C;</span><span class="hl kwa">&lt;/td&gt;</span>
		<span class="hl kwa">&lt;td</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;good&quot;</span><span class="hl kwa">&gt;</span>Correct<span class="hl kwa">&lt;/td&gt;</span>
	<span class="hl kwa">&lt;/tr&gt;</span>
	<span class="hl kwa">&lt;/tbody&gt;</span>
	<span class="hl kwa">&lt;/table&gt;</span>

	<span class="hl kwa">&lt;p&gt;</span>In choosing which of the three methods to use, in the majority of cases, the <span class="hl kwa">&lt;code&gt;</span>LRM<span class="hl kwa">&lt;/code&gt;</span> or <span class="hl kwa">&lt;code&gt;</span>RLM<span class="hl kwa">&lt;/code&gt;</span> to put a <span class="hl kwd">&amp;quot;</span>strong<span class="hl kwd">&amp;quot;</span> character to fully enclose an ambiguous punctuation character and thus make it inherit the correct directionality is sufficient.<span class="hl kwa">&lt;/p&gt;</span>
	<span class="hl kwa">&lt;p&gt;</span>Within some cases, there may be mixed scripts of a left-to-right and right-to-left direction, so using <span class="hl kwa">&lt;code&gt;</span>LRE<span class="hl kwa">&lt;/code&gt;</span> <span class="hl kwd">&amp;amp;</span> <span class="hl kwa">&lt;code&gt;</span>RLE<span class="hl kwa">&lt;/code&gt;</span> with <span class="hl kwa">&lt;code&gt;</span>PDF<span class="hl kwa">&lt;/code&gt;</span> may be more appropriate. Lastly, in very rare instances where directionality must be forced, then use <span class="hl kwa">&lt;code&gt;</span>LRO<span class="hl kwa">&lt;/code&gt;</span> <span class="hl kwd">&amp;amp;</span> <span class="hl kwa">&lt;code&gt;</span>RLO<span class="hl kwa">&lt;/code&gt;</span> with <span class="hl kwa">&lt;code&gt;</span>PDF<span class="hl kwa">&lt;/code&gt;</span>.<span class="hl kwa">&lt;/p&gt;</span>
	<span class="hl kwa">&lt;p&gt;</span>For further information on authoring techniques of bi-directional text, please see the W3C tutorial on <span class="hl kwa">&lt;a</span> <span class="hl kwb">href</span>=<span class="hl str">&quot;http://www.w3.org/International/tutorials/bidi-xhtml/&quot;</span><span class="hl kwa">&gt;</span>authoring techniques for XHTML pages with bi-directional text<span class="hl kwa">&lt;/a&gt;</span>.<span class="hl kwa">&lt;/p&gt;</span>

	<span class="hl kwa">&lt;a</span> <span class="hl kwb">name</span>=<span class="hl str">&quot;placeholders&quot;</span><span class="hl kwa">&gt;&lt;/a&gt;&lt;h3&gt;</span><span class="hl num">6</span>.iii. Working with placeholders<span class="hl kwa">&lt;/h3&gt;</span>

	<span class="hl kwa">&lt;p&gt;</span>As phpBB is translated into languages with different ordering rules to that of English, it is possible to show specific values in any order deemed appropriate. Take for example the extremely simple <span class="hl kwd">&amp;quot;</span>Page <span class="hl kwa">&lt;em&gt;</span>X<span class="hl kwa">&lt;/em&gt;</span> of <span class="hl kwa">&lt;em&gt;</span>Y<span class="hl kwa">&lt;/em&gt;</span><span class="hl kwd">&amp;quot;</span>, whilst in English this could just be coded as:<span class="hl kwa">&lt;/p&gt;</span>

	<span class="hl kwa">&lt;div</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;codebox&quot;</span><span class="hl kwa">&gt;&lt;pre&gt;</span>
	...
&apos;PAGE_OF&apos;	=<span class="hl kwd">&amp;gt;</span>	&apos;Page %s of %s&apos;,
		/* Just grabbing the replacements as they
		come and hope they are in the right order */
	...<span class="hl kwa">&lt;/pre&gt;</span>
	<span class="hl kwa">&lt;/div&gt;</span>

	<span class="hl kwa">&lt;p&gt;</span><span class="hl kwd">&amp;hellip;</span> a clearer way to show explicit replacement ordering is to do:<span class="hl kwa">&lt;/p&gt;</span>

	<span class="hl kwa">&lt;div</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;codebox&quot;</span><span class="hl kwa">&gt;&lt;pre&gt;</span>
	...
&apos;PAGE_OF&apos;	=<span class="hl kwd">&amp;gt;</span>	&apos;Page %<span class="hl num">1</span>$s of %<span class="hl num">2</span>$s&apos;,
		/* Explicit ordering of the replacements,
		even if they are the same order as English */
	...<span class="hl kwa">&lt;/pre&gt;</span>
	<span class="hl kwa">&lt;/div&gt;</span>

	<span class="hl kwa">&lt;p&gt;</span>Why bother at all? Because some languages, the string transliterated back to English might read something like:<span class="hl kwa">&lt;/p&gt;</span>

	<span class="hl kwa">&lt;div</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;codebox&quot;</span><span class="hl kwa">&gt;&lt;pre&gt;</span>
	...
&apos;PAGE_OF&apos;	=<span class="hl kwd">&amp;gt;</span>	&apos;Total of %<span class="hl num">2</span>$s pages, currently on page %<span class="hl num">1</span>$s&apos;,
		/* Explicit ordering of the replacements,
		reversed compared to English as the total comes first */
	...<span class="hl kwa">&lt;/pre&gt;</span>
	<span class="hl kwa">&lt;/div&gt;</span>

	<span class="hl kwa">&lt;a</span> <span class="hl kwb">name</span>=<span class="hl str">&quot;usingplurals&quot;</span><span class="hl kwa">&gt;&lt;/a&gt;&lt;h3&gt;</span><span class="hl num">6</span>.iv. Using plurals<span class="hl kwa">&lt;/h3&gt;</span>

	<span class="hl kwa">&lt;p&gt;</span>
		The english language is very simple when it comes to plurals.<span class="hl kwa">&lt;br /&gt;</span>
		You have <span class="hl kwa">&lt;code&gt;</span><span class="hl num">0</span> elephants<span class="hl kwa">&lt;/code&gt;</span>, <span class="hl kwa">&lt;code&gt;</span><span class="hl num">1</span> elephant<span class="hl kwa">&lt;/code&gt;</span>, or <span class="hl kwa">&lt;code&gt;</span><span class="hl num">2</span>+ elephants<span class="hl kwa">&lt;/code&gt;</span>. So basically you have <span class="hl num">2</span> different forms: one singular and one plural.<span class="hl kwa">&lt;br /&gt;</span>
		But for some other languages this is quite more difficult. Let&apos;s take the Bosnian language as another example:<span class="hl kwa">&lt;br /&gt;</span>
		You have <span class="hl kwa">&lt;code&gt;</span>[<span class="hl num">1</span>/<span class="hl num">21</span>/<span class="hl num">31</span>] slon<span class="hl kwa">&lt;/code&gt;</span>, <span class="hl kwa">&lt;code&gt;</span>[<span class="hl num">2</span>/<span class="hl num">3</span>/<span class="hl num">4</span>] slona<span class="hl kwa">&lt;/code&gt;</span>, <span class="hl kwa">&lt;code&gt;</span>[<span class="hl num">0</span>/<span class="hl num">5</span>/<span class="hl num">6</span>] slonova<span class="hl kwa">&lt;/code&gt;</span> and <span class="hl kwa">&lt;code&gt;</span>[<span class="hl num">7</span>/<span class="hl num">8</span>/<span class="hl num">9</span>/<span class="hl num">11</span>] ...<span class="hl kwa">&lt;/code&gt;</span> and some more difficult rules.
	<span class="hl kwa">&lt;/p&gt;</span>

	<span class="hl kwa">&lt;p&gt;</span>The <span class="hl kwa">&lt;a</span> <span class="hl kwb">href</span>=<span class="hl str">&quot;https://wiki.phpbb.com/Plural_Rules&quot;</span><span class="hl kwa">&gt;</span>plural system<span class="hl kwa">&lt;/a&gt;</span> takes care of this and can be used as follows:<span class="hl kwa">&lt;/p&gt;</span>

	<span class="hl kwa">&lt;p&gt;</span>The PHP code will basically look like this:<span class="hl kwa">&lt;/p&gt;</span>

	<span class="hl kwa">&lt;div</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;codebox&quot;</span><span class="hl kwa">&gt;&lt;pre&gt;</span>
	...
	$user-<span class="hl kwa">&gt;</span>lang(&apos;NUMBER_OF_ELEPHANTS&apos;, $number_of_elephants);
	...<span class="hl kwa">&lt;/pre&gt;</span>
	<span class="hl kwa">&lt;/div&gt;</span>

	<span class="hl kwa">&lt;p&gt;</span>And the English translation would be:<span class="hl kwa">&lt;/p&gt;</span>

	<span class="hl kwa">&lt;div</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;codebox&quot;</span><span class="hl kwa">&gt;&lt;pre&gt;</span>
	...
	&apos;NUMBER_OF_ELEPHANTS&apos;	=<span class="hl kwa">&gt;</span> array(
		<span class="hl num">0</span>	=<span class="hl kwa">&gt;</span> &apos;You have no elephants&apos;, // Optional special case for <span class="hl num">0</span>
		<span class="hl num">1</span>	=<span class="hl kwa">&gt;</span> &apos;You have <span class="hl num">1</span> elephant&apos;, // Singular
		<span class="hl num">2</span>	=<span class="hl kwa">&gt;</span> &apos;You have %d elephants&apos;, // Plural
	),
	...<span class="hl kwa">&lt;/pre&gt;</span>
	<span class="hl kwa">&lt;/div&gt;</span>

	<span class="hl kwa">&lt;p&gt;</span>While the Bosnian translation can have more cases:<span class="hl kwa">&lt;/p&gt;</span>

	<span class="hl kwa">&lt;div</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;codebox&quot;</span><span class="hl kwa">&gt;&lt;pre&gt;</span>
	...
	&apos;NUMBER_OF_ELEPHANTS&apos;	=<span class="hl kwa">&gt;</span> array(
		<span class="hl num">0</span>	=<span class="hl kwa">&gt;</span> &apos;You have no slonova&apos;, // Optional special case for <span class="hl num">0</span>
		<span class="hl num">1</span>	=<span class="hl kwa">&gt;</span> &apos;You have %d slon&apos;, // Used for <span class="hl num">1</span>, <span class="hl num">21</span>, <span class="hl num">31</span>, ..
		<span class="hl num">2</span>	=<span class="hl kwa">&gt;</span> &apos;You have %d slona&apos;, // Used for <span class="hl num">5</span>, <span class="hl num">6</span>,
		<span class="hl num">3</span>	=<span class="hl kwa">&gt;</span> ...
	),
	...<span class="hl kwa">&lt;/pre&gt;</span>
	<span class="hl kwa">&lt;/div&gt;</span>

	<span class="hl kwa">&lt;p&gt;&lt;strong&gt;</span>NOTE:<span class="hl kwa">&lt;/strong&gt;</span> It is okay to use plurals for an unknown number compared to a single item, when the number is not known and displayed:<span class="hl kwa">&lt;/p&gt;</span>
	<span class="hl kwa">&lt;div</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;codebox&quot;</span><span class="hl kwa">&gt;&lt;pre&gt;</span>
	...
	&apos;MODERATOR&apos;	=<span class="hl kwa">&gt;</span> &apos;Moderator&apos;,  // Your board has <span class="hl num">1</span> moderator
	&apos;MODERATORS&apos;	=<span class="hl kwa">&gt;</span> &apos;Moderators&apos;, // Your board has multiple moderators
	...<span class="hl kwa">&lt;/pre&gt;</span>
	<span class="hl kwa">&lt;/div&gt;</span>

	<span class="hl kwa">&lt;a</span> <span class="hl kwb">name</span>=<span class="hl str">&quot;writingstyle&quot;</span><span class="hl kwa">&gt;&lt;/a&gt;&lt;h3&gt;</span><span class="hl num">6</span>.v. Writing Style<span class="hl kwa">&lt;/h3&gt;</span>

	<span class="hl kwa">&lt;h4&gt;</span>Miscellaneous tips <span class="hl kwd">&amp;amp;</span> hints:<span class="hl kwa">&lt;/h4&gt;</span>

	<span class="hl kwa">&lt;p&gt;</span>As the language files are PHP files, where the various strings for phpBB are stored within an array which in turn are used for display within an HTML page, rules of syntax for both must be considered. Potentially problematic characters are: <span class="hl kwa">&lt;code&gt;</span>&apos;<span class="hl kwa">&lt;/code&gt;</span> (straight quote/apostrophe), <span class="hl kwa">&lt;code&gt;</span><span class="hl kwd">&amp;quot;</span><span class="hl kwa">&lt;/code&gt;</span> (straight double quote), <span class="hl kwa">&lt;code&gt;</span><span class="hl kwd">&amp;lt;</span><span class="hl kwa">&lt;/code&gt;</span> (less-than sign), <span class="hl kwa">&lt;code&gt;</span><span class="hl kwd">&amp;gt;</span><span class="hl kwa">&lt;/code&gt;</span> (greater-than sign) and <span class="hl kwa">&lt;code&gt;</span><span class="hl kwd">&amp;amp;</span><span class="hl kwa">&lt;/code&gt;</span> (ampersand).<span class="hl kwa">&lt;/p&gt;</span>

	<span class="hl kwa">&lt;p</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;bad&quot;</span><span class="hl kwa">&gt;</span>// Bad - The un-escapsed straight-quote/apostrophe will throw a PHP parse error<span class="hl kwa">&lt;/p&gt;</span>

	<span class="hl kwa">&lt;div</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;codebox&quot;</span><span class="hl kwa">&gt;&lt;pre&gt;</span>
	...
&apos;CONV_ERROR_NO_AVATAR_PATH&apos;
	=<span class="hl kwd">&amp;gt;</span>	&apos;Note to developer: you must specify $convertor[&apos;avatar_path&apos;] to use %s.&apos;,
	...<span class="hl kwa">&lt;/pre&gt;</span>
	<span class="hl kwa">&lt;/div&gt;</span>

	<span class="hl kwa">&lt;p</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;good&quot;</span><span class="hl kwa">&gt;</span>// Good - Literal straight quotes should be escaped with a backslash, ie: \<span class="hl kwa">&lt;/p&gt;</span>

	<span class="hl kwa">&lt;div</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;codebox&quot;</span><span class="hl kwa">&gt;&lt;pre&gt;</span>
	...
&apos;CONV_ERROR_NO_AVATAR_PATH&apos;
	=<span class="hl kwd">&amp;gt;</span>	&apos;Note to developer: you must specify $convertor[\&apos;avatar_path\&apos;] to use %s.&apos;,
	...<span class="hl kwa">&lt;/pre&gt;</span>
	<span class="hl kwa">&lt;/div&gt;</span>

	<span class="hl kwa">&lt;p&gt;</span>However, because phpBB3 now uses UTF-<span class="hl num">8</span> as its sole encoding, we can actually use this to our advantage and not have to remember to escape a straight quote when we don&apos;t have to:<span class="hl kwa">&lt;/p&gt;</span>

	<span class="hl kwa">&lt;p</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;bad&quot;</span><span class="hl kwa">&gt;</span>// Bad - The un-escapsed straight-quote/apostrophe will throw a PHP parse error<span class="hl kwa">&lt;/p&gt;</span>

	<span class="hl kwa">&lt;div</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;codebox&quot;</span><span class="hl kwa">&gt;&lt;pre&gt;</span>
	...
&apos;USE_PERMISSIONS&apos;	=<span class="hl kwd">&amp;gt;</span>	&apos;Test out user&apos;s permissions&apos;,
	...<span class="hl kwa">&lt;/pre&gt;</span>
	<span class="hl kwa">&lt;/div&gt;</span>

	<span class="hl kwa">&lt;p</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;good&quot;</span><span class="hl kwa">&gt;</span>// Okay - However, non-programmers wouldn&apos;t type <span class="hl str">&quot;user\&apos;s&quot;</span> automatically<span class="hl kwa">&lt;/p&gt;</span>

	<span class="hl kwa">&lt;div</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;codebox&quot;</span><span class="hl kwa">&gt;&lt;pre&gt;</span>
	...
&apos;USE_PERMISSIONS&apos;	=<span class="hl kwd">&amp;gt;</span>	&apos;Test out user\&apos;s permissions&apos;,
	...<span class="hl kwa">&lt;/pre&gt;</span>
	<span class="hl kwa">&lt;/div&gt;</span>

	<span class="hl kwa">&lt;p</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;good&quot;</span><span class="hl kwa">&gt;</span>// Best - Use the Unicode Right-Single-Quotation-Mark character<span class="hl kwa">&lt;/p&gt;</span>

	<span class="hl kwa">&lt;div</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;codebox&quot;</span><span class="hl kwa">&gt;&lt;pre&gt;</span>
	...
&apos;USE_PERMISSIONS&apos;	=<span class="hl kwd">&amp;gt;</span>	&apos;Test out user<span class="hl kwd">&amp;rsquo;</span>s permissions&apos;,
	...<span class="hl kwa">&lt;/pre&gt;</span>
	<span class="hl kwa">&lt;/div&gt;</span>

	<span class="hl kwa">&lt;p&gt;</span>The <span class="hl kwa">&lt;code&gt;</span><span class="hl kwd">&amp;quot;</span><span class="hl kwa">&lt;/code&gt;</span> (straight double quote), <span class="hl kwa">&lt;code&gt;</span><span class="hl kwd">&amp;lt;</span><span class="hl kwa">&lt;/code&gt;</span> (less-than sign) and <span class="hl kwa">&lt;code&gt;</span><span class="hl kwd">&amp;gt;</span><span class="hl kwa">&lt;/code&gt;</span> (greater-than sign) characters can all be used as displayed glyphs or as part of HTML markup, for example:<span class="hl kwa">&lt;/p&gt;</span>

	<span class="hl kwa">&lt;p</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;bad&quot;</span><span class="hl kwa">&gt;</span>// Bad - Invalid HTML, as segments not part of elements are not entitised<span class="hl kwa">&lt;/p&gt;</span>

	<span class="hl kwa">&lt;div</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;codebox&quot;</span><span class="hl kwa">&gt;&lt;pre&gt;</span>
	...
&apos;FOO_BAR&apos;	=<span class="hl kwd">&amp;gt;</span>	&apos;PHP version <span class="hl kwd">&amp;lt;</span> <span class="hl num">5.3.3</span>.<span class="hl kwd">&amp;lt;</span>br /<span class="hl kwd">&amp;gt;</span>
	Visit <span class="hl kwd">&amp;quot;</span>Downloads<span class="hl kwd">&amp;quot;</span> at <span class="hl kwd">&amp;lt;</span>a href=<span class="hl kwd">&amp;quot;</span>http://www.php.net/<span class="hl kwd">&amp;quot;&amp;gt;</span>www.php.net<span class="hl kwd">&amp;lt;</span>/a<span class="hl kwd">&amp;gt;</span>.&apos;,
	...<span class="hl kwa">&lt;/pre&gt;</span>
	<span class="hl kwa">&lt;/div&gt;</span>

	<span class="hl kwa">&lt;p</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;good&quot;</span><span class="hl kwa">&gt;</span>// Okay - No more invalid HTML, but <span class="hl kwd">&amp;quot;&amp;amp;</span>quot;<span class="hl kwd">&amp;quot;</span> is rather clumsy<span class="hl kwa">&lt;/p&gt;</span>

	<span class="hl kwa">&lt;div</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;codebox&quot;</span><span class="hl kwa">&gt;&lt;pre&gt;</span>
	...
&apos;FOO_BAR&apos;	=<span class="hl kwd">&amp;gt;</span>	&apos;PHP version <span class="hl kwd">&amp;amp;</span>lt; <span class="hl num">5.3.3</span>.<span class="hl kwd">&amp;lt;</span>br /<span class="hl kwd">&amp;gt;</span>
	Visit <span class="hl kwd">&amp;amp;</span>quot;Downloads<span class="hl kwd">&amp;amp;</span>quot; at <span class="hl kwd">&amp;lt;</span>a href=<span class="hl kwd">&amp;quot;</span>http://www.php.net/<span class="hl kwd">&amp;quot;&amp;gt;</span>www.php.net<span class="hl kwd">&amp;lt;</span>/a<span class="hl kwd">&amp;gt;</span>.&apos;,
	...<span class="hl kwa">&lt;/pre&gt;</span>
	<span class="hl kwa">&lt;/div&gt;</span>

	<span class="hl kwa">&lt;p</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;good&quot;</span><span class="hl kwa">&gt;</span>// Best - No more invalid HTML, and usage of correct typographical quotation marks<span class="hl kwa">&lt;/p&gt;</span>

	<span class="hl kwa">&lt;div</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;codebox&quot;</span><span class="hl kwa">&gt;&lt;pre&gt;</span>
	...
&apos;FOO_BAR&apos;	=<span class="hl kwd">&amp;gt;</span>	&apos;PHP version <span class="hl kwd">&amp;amp;</span>lt; <span class="hl num">5.3.3</span>.<span class="hl kwd">&amp;lt;</span>br /<span class="hl kwd">&amp;gt;</span>
	Visit <span class="hl kwd">&amp;ldquo;</span>Downloads<span class="hl kwd">&amp;rdquo;</span> at <span class="hl kwd">&amp;lt;</span>a href=<span class="hl kwd">&amp;quot;</span>http://www.php.net/<span class="hl kwd">&amp;quot;&amp;gt;</span>www.php.net<span class="hl kwd">&amp;lt;</span>/a<span class="hl kwd">&amp;gt;</span>.&apos;,
	...<span class="hl kwa">&lt;/pre&gt;</span>
	<span class="hl kwa">&lt;/div&gt;</span>

	<span class="hl kwa">&lt;p&gt;</span>Lastly, the <span class="hl kwa">&lt;code&gt;</span><span class="hl kwd">&amp;amp;</span><span class="hl kwa">&lt;/code&gt;</span> (ampersand) must always be entitised regardless of where it is used:<span class="hl kwa">&lt;/p&gt;</span>

	<span class="hl kwa">&lt;p</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;bad&quot;</span><span class="hl kwa">&gt;</span>// Bad - Invalid HTML, none of the ampersands are entitised<span class="hl kwa">&lt;/p&gt;</span>

	<span class="hl kwa">&lt;div</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;codebox&quot;</span><span class="hl kwa">&gt;&lt;pre&gt;</span>
	...
&apos;FOO_BAR&apos;	=<span class="hl kwd">&amp;gt;</span>	&apos;<span class="hl kwd">&amp;lt;</span>a href=<span class="hl kwd">&amp;quot;</span>http://somedomain.tld/?foo=<span class="hl num">1</span><span class="hl kwd">&amp;amp;</span>bar=<span class="hl num">2</span><span class="hl kwd">&amp;quot;&amp;gt;</span>Foo <span class="hl kwd">&amp;amp;</span> Bar<span class="hl kwd">&amp;lt;</span>/a<span class="hl kwd">&amp;gt;</span>.&apos;,
	...<span class="hl kwa">&lt;/pre&gt;</span>
	<span class="hl kwa">&lt;/div&gt;</span>

	<span class="hl kwa">&lt;p</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;good&quot;</span><span class="hl kwa">&gt;</span>// Good - Valid HTML, amperands are correctly entitised in all cases<span class="hl kwa">&lt;/p&gt;</span>

	<span class="hl kwa">&lt;div</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;codebox&quot;</span><span class="hl kwa">&gt;&lt;pre&gt;</span>
	...
&apos;FOO_BAR&apos;	=<span class="hl kwd">&amp;gt;</span>	&apos;<span class="hl kwd">&amp;lt;</span>a href=<span class="hl kwd">&amp;quot;</span>http://somedomain.tld/?foo=<span class="hl num">1</span><span class="hl kwd">&amp;amp;</span>amp;bar=<span class="hl num">2</span><span class="hl kwd">&amp;quot;&amp;gt;</span>Foo <span class="hl kwd">&amp;amp;</span>amp; Bar<span class="hl kwd">&amp;lt;</span>/a<span class="hl kwd">&amp;gt;</span>.&apos;,
	...<span class="hl kwa">&lt;/pre&gt;</span>
	<span class="hl kwa">&lt;/div&gt;</span>

	<span class="hl kwa">&lt;p&gt;</span>As for how these charcters are entered depends very much on choice of Operating System, current language locale/keyboard configuration and native abilities of the text editor used to edit phpBB language files. Please see <span class="hl kwa">&lt;a</span> <span class="hl kwb">href</span>=<span class="hl str">&quot;http://en.wikipedia.org/wiki/Unicode#Input_methods&quot;</span><span class="hl kwa">&gt;</span>http://en.wikipedia.org/wiki/Unicode#Input_methods<span class="hl kwa">&lt;/a&gt;</span> for more information.<span class="hl kwa">&lt;/p&gt;</span>

	<span class="hl kwa">&lt;h4&gt;</span>Spelling, punctuation, grammar, et cetera:<span class="hl kwa">&lt;/h4&gt;</span>

	<span class="hl kwa">&lt;p&gt;</span>The default language pack bundled with phpBB is <span class="hl kwa">&lt;strong&gt;</span>British English<span class="hl kwa">&lt;/strong&gt;</span> using <span class="hl kwa">&lt;a</span> <span class="hl kwb">href</span>=<span class="hl str">&quot;http://www.cambridge.org/&quot;</span><span class="hl kwa">&gt;</span>Cambridge University Press<span class="hl kwa">&lt;/a&gt;</span> spelling and is assigned the language code <span class="hl kwa">&lt;code&gt;</span>en<span class="hl kwa">&lt;/code&gt;</span>. The style and tone of writing tends towards formal and translations <span class="hl kwa">&lt;strong&gt;</span>should<span class="hl kwa">&lt;/strong&gt;</span> emulate this style, at least for the variant using the most compact language code. Less formal translations or those with colloquialisms <span class="hl kwa">&lt;strong&gt;</span>must<span class="hl kwa">&lt;/strong&gt;</span> be denoted as such via either an <span class="hl kwa">&lt;code&gt;</span>extension<span class="hl kwa">&lt;/code&gt;</span> or <span class="hl kwa">&lt;code&gt;</span>privateuse<span class="hl kwa">&lt;/code&gt;</span> tag within its language code.<span class="hl kwa">&lt;/p&gt;</span>

		<span class="hl kwa">&lt;/div&gt;</span>

		<span class="hl kwa">&lt;div</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;back2top&quot;</span><span class="hl kwa">&gt;&lt;a</span> <span class="hl kwb">href</span>=<span class="hl str">&quot;#wrap&quot;</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;top&quot;</span><span class="hl kwa">&gt;</span>Back to Top<span class="hl kwa">&lt;/a&gt;&lt;/div&gt;</span>

		<span class="hl kwa">&lt;/div&gt;</span>
	<span class="hl kwa">&lt;/div&gt;</span>

	<span class="hl kwa">&lt;hr /&gt;</span>

<span class="hl kwa">&lt;a</span> <span class="hl kwb">name</span>=<span class="hl str">&quot;disclaimer&quot;</span><span class="hl kwa">&gt;&lt;/a&gt;&lt;h2&gt;</span><span class="hl num">7</span>. Copyright and disclaimer<span class="hl kwa">&lt;/h2&gt;</span>

	<span class="hl kwa">&lt;div</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;paragraph&quot;</span><span class="hl kwa">&gt;</span>
		<span class="hl kwa">&lt;div</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;inner&quot;</span><span class="hl kwa">&gt;</span>

		<span class="hl kwa">&lt;div</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;content&quot;</span><span class="hl kwa">&gt;</span>

	<span class="hl kwa">&lt;p&gt;</span>phpBB is free software, released under the terms of the <span class="hl kwa">&lt;a</span> <span class="hl kwb">href</span>=<span class="hl str">&quot;http://opensource.org/licenses/gpl-2.0.php&quot;</span><span class="hl kwa">&gt;</span>GNU General Public License, version <span class="hl num">2</span> (GPL-<span class="hl num">2.0</span>)<span class="hl kwa">&lt;/a&gt;</span>. Copyright © <span class="hl kwa">&lt;a</span> <span class="hl kwb">href</span>=<span class="hl str">&quot;https://www.phpbb.com&quot;</span><span class="hl kwa">&gt;</span>phpBB Limited<span class="hl kwa">&lt;/a&gt;</span>. For full copyright and license information, please see the docs/CREDITS.txt file.<span class="hl kwa">&lt;/p&gt;</span>

		<span class="hl kwa">&lt;/div&gt;</span>

		<span class="hl kwa">&lt;div</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;back2top&quot;</span><span class="hl kwa">&gt;&lt;a</span> <span class="hl kwb">href</span>=<span class="hl str">&quot;#wrap&quot;</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;top&quot;</span><span class="hl kwa">&gt;</span>Back to Top<span class="hl kwa">&lt;/a&gt;&lt;/div&gt;</span>

		<span class="hl kwa">&lt;/div&gt;</span>
	<span class="hl kwa">&lt;/div&gt;</span>

<span class="hl com">&lt;!-- END DOCUMENT --&gt;</span>

	<span class="hl kwa">&lt;div</span> <span class="hl kwb">id</span>=<span class="hl str">&quot;page-footer&quot;</span><span class="hl kwa">&gt;</span>
		<span class="hl kwa">&lt;div</span> <span class="hl kwb">class</span>=<span class="hl str">&quot;version&quot;</span><span class="hl kwa">&gt;</span><span class="hl kwd">&amp;nbsp;</span><span class="hl kwa">&lt;/div&gt;</span>
	<span class="hl kwa">&lt;/div&gt;</span>
<span class="hl kwa">&lt;/div&gt;&lt;/div&gt;</span>

<span class="hl kwa">&lt;div&gt;</span>
	<span class="hl kwa">&lt;a</span> <span class="hl kwb">id</span>=<span class="hl str">&quot;bottom&quot;</span> <span class="hl kwb">accesskey</span>=<span class="hl str">&quot;z&quot;</span><span class="hl kwa">&gt;&lt;/a&gt;</span>
<span class="hl kwa">&lt;/div&gt;</span>

<span class="hl kwa">&lt;/body&gt;</span>
<span class="hl kwa">&lt;/html&gt;</span>
</code></pre></td></tr></table>
</div> <!-- class=content -->
<div class='footer'>generated by <a href='https://git.zx2c4.com/cgit/about/'>cgit v1.2.1</a> (<a href='https://git-scm.com/'>git 2.21.0</a>) at 2026-05-14 20:36:13 +0000</div>
</div> <!-- id=cgit -->
</body>
</html>
