# Telephony

# Asterisk and FreePBX on Debian12

# Preparations

## Database

Create new user in Cloud SQL

```
https://console.cloud.google.com/sql/instances/xxx/users?project=yyy

```

Warning: `-` dashes (hyphens) **can not** be used in the MariaDB databases' naming. To match user to database, only underlines are used.

[![](https://storage.googleapis.com/iau-data-dox/uploads/images/gallery/2025-10/scaled-1680-/vlsJQBF7pTLWaY47-image-1759891637304.png)](https://storage.googleapis.com/iau-data-dox/uploads/images/gallery/2025-10/vlsJQBF7pTLWaY47-image-1759891637304.png)

Verify connection from the host to database server

```bash
mysql -h 172.21.32.6 -u pbx_2dz_fi_asterisk -p

```

Create database and grante permissions for Asterisk

```sql
CREATE DATABASE pbx_2dz_fi_asterisk      CHARACTER SET utf8 COLLATE utf8_general_ci;
CREATE DATABASE pbx_2dz_fi_asteriskcdrdb CHARACTER SET utf8 COLLATE utf8_general_ci;


GRANT ALL PRIVILEGES ON pbx_2dz_fi_asterisk.*      TO 'pbx_2dz_fi_asterisk'@'10.166.0.2';
GRANT ALL PRIVILEGES ON pbx_2dz_fi_asteriskcdrdb.* TO 'pbx_2dz_fi_asterisk'@'10.166.0.2';

FLUSH PRIVILEGES;

```

[![](https://storage.googleapis.com/iau-data-dox/uploads/images/gallery/2025-10/scaled-1680-/w4fvsn9UNyV69QlJ-image-1759891985374.png)](https://storage.googleapis.com/iau-data-dox/uploads/images/gallery/2025-10/w4fvsn9UNyV69QlJ-image-1759891985374.png)

## PHP installation

Elevate

```bash
sudo su

```

Install PHP and depending libraries

```bash
apt install \
    php \
    php-cli \
    php-mysql \
    php-gd \
    php-curl \
    php-mbstring \
    php-xml \
    php-bcmath \
    php-zip \
    php-json \
    php-pear

```

Add more memory for PHP process

```bash
vi /etc/php/8.2/fpm/php.ini

```

```ini
# memory_limit = 128M
memory_limit = 256M

```

[![](https://storage.googleapis.com/iau-data-dox/uploads/images/gallery/2026-06/scaled-1680-/6jJAxHtrCVM3E6z4-image-1781942132923.png)](https://storage.googleapis.com/iau-data-dox/uploads/images/gallery/2026-06/6jJAxHtrCVM3E6z4-image-1781942132923.png)

```bash
systemctl | grep php
systemctl restart php8.2-fpm

```

## node.js installation

```bash
export dir="/home/anton/delme"
mkdir -p ${dir}
cd ${dir}
curl -fsSL https://deb.nodesource.com/setup_18.x | sudo -E bash -
apt install nodejs

```

## Asterisk installation

Choosing Asterisk version considerations

Pickup LTS version from Versions page. On the moment of writing (2025-10-08), it is v22. [![](https://storage.googleapis.com/iau-data-dox/uploads/images/gallery/2025-10/scaled-1680-/hWdAHXVeo1TkoGph-image-1759892909508.png)](https://storage.googleapis.com/iau-data-dox/uploads/images/gallery/2025-10/hWdAHXVeo1TkoGph-image-1759892909508.png)

```url
https://docs.asterisk.org/About-the-Project/Asterisk-Versions/

```

Observer releases From official Github page

```
https://github.com/asterisk/asterisk/releases
https://github.com/asterisk/asterisk/releases/tag/22.5.2

```

[![](https://storage.googleapis.com/iau-data-dox/uploads/images/gallery/2025-10/scaled-1680-/Xv4Zj0FxaqYhfbHN-image-1759893110678.png)](https://storage.googleapis.com/iau-data-dox/uploads/images/gallery/2025-10/Xv4Zj0FxaqYhfbHN-image-1759893110678.png)

Download Asterisk

```bash
export dir="/home/anton/delme"
mkdir -p ${dir}
cd ${dir}

export v="22.5.2"
curl -O -L https://github.com/asterisk/asterisk/releases/download/${v}/asterisk-${v}.tar.gz
curl -O -L https://github.com/asterisk/asterisk/releases/download/${v}/asterisk-${v}.sha256

sha256sum asterisk-${v}.tar.gz
cat asterisk-${v}.sha256

```

Unpack after checksum verification (comparison)

```bash
tar -xzvf asterisk-${v}.tar.gz

```

Change dir and install prerequisites

```bash
cd asterisk-${v}
contrib/scripts/install_prereq install

```

[![](https://storage.googleapis.com/iau-data-dox/uploads/images/gallery/2025-10/scaled-1680-/AZIGi83eA4HhOtLz-image-1759894408072.png)](https://storage.googleapis.com/iau-data-dox/uploads/images/gallery/2025-10/AZIGi83eA4HhOtLz-image-1759894408072.png)

Configure

```bash
./configure

```

[![](https://storage.googleapis.com/iau-data-dox/uploads/images/gallery/2025-10/scaled-1680-/WZrLzlZLPQBQrBWS-image-1759894526700.png)](https://storage.googleapis.com/iau-data-dox/uploads/images/gallery/2025-10/WZrLzlZLPQBQrBWS-image-1759894526700.png)

Define additional features

```bash
make menuselect

```

Enable mp3 support:

```
+ format_mp3
+ app_macro

```

Download additional libraries

```bash
contrib/scripts/get_mp3_source.sh

```

Build and install

```bash
make -j$(nproc)

```

```bash
[13:15:10 Sat Jun 20] @gcp1mx1 /home/anton/delme/asterisk-22.5.2# make -j$(nproc)
# usually, take time (took 35 min on 2-core GCP micro VM).
[13:49:33 Sat Jun 20] @gcp1mx1 /home/anton/delme/asterisk-22.5.2#

```

```
```bash
make install
make samples
make basic-pbx
make config
ldconfig

```

Create run directory

```bash
namei -mo /var/run/asterisk
mkdir -p /var/run/asterisk

```

Set permissions

```bash
?? # useradd -m asterisk
?? chown -R www-data:www-data \
    /var/lib/asterisk \
    /var/spool/asterisk \
    /var/log/asterisk \
    /var/run/asterisk \
    /usr/lib/asterisk \
    /var/lib/php/sessions \


```

Copy default config

```bash
mkdir -p /etc/asterisk/
cp /home/anton/delme/asterisk-22.5.2/configs/samples/asterisk.conf.sample /etc/asterisk/asterisk.conf

```

Modify config

```bash
vi /etc/asterisk/asterisk.conf

```

```ini
[directories]
astetcdir => /etc/asterisk
astmoddir => /usr/lib/asterisk/modules
astvarlibdir => /var/lib/asterisk
astdbdir => /var/lib/asterisk
astkeydir => /var/lib/asterisk
astdatadir => /var/lib/asterisk
astagidir => /var/lib/asterisk/agi-bin
astspooldir => /var/spool/asterisk
astrundir => /var/run/asterisk
astlogdir => /var/log/asterisk


[options]
runuser = asterisk              ; The user to run as.
rungroup = asterisk             ; The group to run as.

```

[![](https://storage.googleapis.com/iau-data-dox/uploads/images/gallery/2025-10/scaled-1680-/0s5AUUlaWjsIait8-image-1759900900934.png)](https://storage.googleapis.com/iau-data-dox/uploads/images/gallery/2025-10/0s5AUUlaWjsIait8-image-1759900900934.png)

Create service override

```bash
mkdir -p /etc/systemd/system/asterisk.service.d/
?? vi /etc/systemd/system/asterisk.service.d/override.conf

```

```ini
[Service]
User=asterisk
Group=asterisk


```

Enable and start the services

```bash
systemctl daemon-reexec
systemctl enable asterisk
systemctl restart asterisk
systemctl status asterisk

```

[![](https://storage.googleapis.com/iau-data-dox/uploads/images/gallery/2026-03/scaled-1680-/ON2n7olMmBIQfOy8-image-1772890565365.png)](https://storage.googleapis.com/iau-data-dox/uploads/images/gallery/2026-03/ON2n7olMmBIQfOy8-image-1772890565365.png)

Verify

```bash
ps aux  | grep asterisk
ss -ntap | grep asterisk

```

[![](https://storage.googleapis.com/iau-data-dox/uploads/images/gallery/2026-03/scaled-1680-/79pd8Dr7hTrtjB8S-image-1772890723006.png)](https://storage.googleapis.com/iau-data-dox/uploads/images/gallery/2026-03/79pd8Dr7hTrtjB8S-image-1772890723006.png)

Define cert in config

```bash
TODO: update cert in Asterisk

```

## FreePBX installation

Preparations, ensure that /var/www/html is empty and not used by any other applications/resources. Destination directory is hardcorded to the installation script and can not be changed. Once installation will be successful, it can be renamed. And it is better not to share that with any other applications.

```bash
ls -la /var/www/html/

```

Install preresequitives

```bash
apt install \
    composer \
    unzip

```

Check compatible version

```bash
https://github.com/FreePBX/framework/tags

```

Download FreePBX

```bash
export dir="/home/anton/delme"
mkdir -p ${dir}
cd ${dir}

git clone -b release/17.0 https://github.com/FreePBX/framework.git freepbx
cd freepbx

```

## Initial FreePBX config

Install FreePBX

```bash
rm -rf /etc/freepbx.conf
rm -rf /etc/amportal.conf

./start_asterisk start
./install 

```

[![](https://storage.googleapis.com/iau-data-dox/uploads/images/gallery/2026-03/scaled-1680-/mscRyzZt71G968NR-image-1772897624433.png)](https://storage.googleapis.com/iau-data-dox/uploads/images/gallery/2026-03/mscRyzZt71G968NR-image-1772897624433.png)

```bash
vi /etc/freepbx.conf

```

adjust path

```php
require_once('/var/www/pbx.2dz.fi/admin/bootstrap.php');

```

enable repo

```bash
fwconsole ma enablerepo standard

```

before

```bash
fwconsole ma listonline

```

[![](https://storage.googleapis.com/iau-data-dox/uploads/images/gallery/2026-03/scaled-1680-/Mc6PdWCQm6hZLu4I-image-1772892950296.png)](https://storage.googleapis.com/iau-data-dox/uploads/images/gallery/2026-03/Mc6PdWCQm6hZLu4I-image-1772892950296.png)

List available online

```bash
fwconsole ma listonline

```

[![](https://storage.googleapis.com/iau-data-dox/uploads/images/gallery/2026-03/scaled-1680-/SQp9uwnnTqbLVV4Y-image-1772893057009.png)](https://storage.googleapis.com/iau-data-dox/uploads/images/gallery/2026-03/SQp9uwnnTqbLVV4Y-image-1772893057009.png)

Install core module

```bash
fwconsole ma downloadinstall core

```

[![](https://storage.googleapis.com/iau-data-dox/uploads/images/gallery/2026-06/scaled-1680-/4KHEai0VI8xzDsVG-image-1781955764812.png)](https://storage.googleapis.com/iau-data-dox/uploads/images/gallery/2026-06/4KHEai0VI8xzDsVG-image-1781955764812.png)

Enable core module

```bash


```

Update framework

```bash
fwconsole ma downloadinstall framework

```

[![](https://storage.googleapis.com/iau-data-dox/uploads/images/gallery/2026-06/scaled-1680-/kBCJjIFu1Jct1OJq-image-1781955817403.png)](https://storage.googleapis.com/iau-data-dox/uploads/images/gallery/2026-06/kBCJjIFu1Jct1OJq-image-1781955817403.png)

Check that application installed

```bash
ls -la /var/www/html/admin
fgrep -irn freepbx.conf /var/www/html/admin/config.php

```

[![](https://storage.googleapis.com/iau-data-dox/uploads/images/gallery/2026-03/scaled-1680-/NUIUjqq8iShyeosN-image-1772891090518.png)](https://storage.googleapis.com/iau-data-dox/uploads/images/gallery/2026-03/NUIUjqq8iShyeosN-image-1772891090518.png)

Move freshly installed directory

```bash
mv /var/www/html /var/www/pbx.2dz.fi

```

Enable host on Nginx webserver

```bash
cd /etc/nginx/sites-available
cp default pbx.2dz.fi.conf
ln -s /etc/nginx/sites-available/pbx.2dz.fi.conf /etc/nginx/sites-enabled/

```

Modify virtual host file to point to

```bash
vi /etc/nginx/sites-available/pbx.2dz.fi.conf

```

```nginx
# root /var/www/html
root /var/www/pbx.2dz.fi

```

Test config and reload webserver

```bash
nginx -t
nginx -s reload

```

Check DNS record is published and match current machine

```bash
curl https://myip.2dz.fi
dig A pbx.2dz.fi +short

```

Request cert from LE (this will create additional SSL block in virtual server config)

```bash
certbot --nginx -d pbx.2dz.fi

```

## Permissions fix

Here it becomes complicated.

Verify that utility can see variables:

```bash
fwconsole setting AMPASTERISKUSER
fwconsole setting AMPASTERISKGROUP
fwconsole setting AMPASTERISKWEBUSER
fwconsole setting AMPASTERISKWEBGROUP

fwconsole chwon

```

```bash
#? chown -R asterisk:asterisk /var/www/pbx.2dz.fi
chown -R www-data:www-data /var/www/pbx.2dz.fi
chown -R www-data:www-data /var/lib/php/sessions/

```

Change FreePBX log's group to www-data, for webserver user to write into

```bash
chown asterisk:www-data /var/log/asterisk/freepbx.log

```

[![](https://storage.googleapis.com/iau-data-dox/uploads/images/gallery/2026-03/scaled-1680-/FBk3zpimted2nUNq-image-1772895104382.png)](https://storage.googleapis.com/iau-data-dox/uploads/images/gallery/2026-03/FBk3zpimted2nUNq-image-1772895104382.png)

Define database credentials created in the beginning

```bash
vi /etc/freepbx.conf

```

[![](https://storage.googleapis.com/iau-data-dox/uploads/images/gallery/2026-03/scaled-1680-/i1UI7WqPfp3L3mKt-image-1772896352759.png)](https://storage.googleapis.com/iau-data-dox/uploads/images/gallery/2026-03/i1UI7WqPfp3L3mKt-image-1772896352759.png)

Initial page [![](https://storage.googleapis.com/iau-data-dox/uploads/images/gallery/2026-03/scaled-1680-/pKe9M4PzYVfr5NQF-image-1772899335240.png)](https://storage.googleapis.com/iau-data-dox/uploads/images/gallery/2026-03/pKe9M4PzYVfr5NQF-image-1772899335240.png)

Welcome page

[![](https://storage.googleapis.com/iau-data-dox/uploads/images/gallery/2026-03/scaled-1680-/4vni4IT0ZKkSKHK0-image-1772899509459.png)](https://storage.googleapis.com/iau-data-dox/uploads/images/gallery/2026-03/4vni4IT0ZKkSKHK0-image-1772899509459.png)

[![](https://storage.googleapis.com/iau-data-dox/uploads/images/gallery/2026-06/scaled-1680-/rldSFlrbtatRsoX3-image-1781955883582.png)](https://storage.googleapis.com/iau-data-dox/uploads/images/gallery/2026-06/rldSFlrbtatRsoX3-image-1781955883582.png)

Login page

[![](https://storage.googleapis.com/iau-data-dox/uploads/images/gallery/2026-06/scaled-1680-/9jmNxBrj0leQBZhu-image-1781939743499.png)](https://storage.googleapis.com/iau-data-dox/uploads/images/gallery/2026-06/9jmNxBrj0leQBZhu-image-1781939743499.png)

No nodules found

[![](https://storage.googleapis.com/iau-data-dox/uploads/images/gallery/2026-03/scaled-1680-/jFiuz6et7xedJExN-image-1772899602250.png)](https://storage.googleapis.com/iau-data-dox/uploads/images/gallery/2026-03/jFiuz6et7xedJExN-image-1772899602250.png)

## SIP configuration

Specify repos;

```bash
#?

```

Install modules

```bash
sudo su
fwconsole ma downloadinstall sipsettings

```

[![](https://storage.googleapis.com/iau-data-dox/uploads/images/gallery/2026-06/scaled-1680-/rod6dhor0NJz48LU-image-1781940126590.png)](https://storage.googleapis.com/iau-data-dox/uploads/images/gallery/2026-06/rod6dhor0NJz48LU-image-1781940126590.png)

---

Upgrade:

```bash
fwconsole backup --list
fwconsole ma refreshsignatures
fwconsole ma upgradeall

```

[![](https://storage.googleapis.com/iau-data-dox/uploads/images/gallery/2026-06/scaled-1680-/AiToPnUcB2kQszfg-image-1781940372977.png)](https://storage.googleapis.com/iau-data-dox/uploads/images/gallery/2026-06/AiToPnUcB2kQszfg-image-1781940372977.png)

```bash
fwconsole backup --list


fwconsole ma refreshsignatures

fwconsole ma listonline
fwconsole ma upgrade framework
fwconsole chown
fwconsole reload --verbose

```

Install Voicemail module

```bash
sudo -i
fwconsole ma refreshsignatures
rm -f /var/www/html/admin/modules/_cache/pm2*
fwconsole ma downloadinstall pm2

```

[![](https://storage.googleapis.com/iau-data-dox/uploads/images/gallery/2026-06/scaled-1680-/O5Y8SRXHNuKxoUvn-image-1781941584449.png)](https://storage.googleapis.com/iau-data-dox/uploads/images/gallery/2026-06/O5Y8SRXHNuKxoUvn-image-1781941584449.png)

```bash
fwconsole ma enable pm2
fwconsole ma upgrade pm2
fwconsole chown


fwconsole ma refreshsignatures
fwconsole ma downloadinstall voicemail

```

[![](https://storage.googleapis.com/iau-data-dox/uploads/images/gallery/2026-06/scaled-1680-/e9Ubvr5TT8uvqXzk-image-1781940674302.png)](https://storage.googleapis.com/iau-data-dox/uploads/images/gallery/2026-06/e9Ubvr5TT8uvqXzk-image-1781940674302.png)

```bash
fwconsole ma upgrade voicemail
fwconsole ma enable voicemail

```

[![](https://storage.googleapis.com/iau-data-dox/uploads/images/gallery/2026-06/scaled-1680-/0QUobveIHll3c30a-image-1781940778705.png)](https://storage.googleapis.com/iau-data-dox/uploads/images/gallery/2026-06/0QUobveIHll3c30a-image-1781940778705.png)

```bash
fwconsole reload --verbose

```

[![](https://storage.googleapis.com/iau-data-dox/uploads/images/gallery/2026-06/scaled-1680-/EpD08b74g3ILwlEB-image-1781941643985.png)](https://storage.googleapis.com/iau-data-dox/uploads/images/gallery/2026-06/EpD08b74g3ILwlEB-image-1781941643985.png)

```bash
fwconsole chown

```

change webuser in db

[![](https://storage.googleapis.com/iau-data-dox/uploads/images/gallery/2026-06/scaled-1680-/TEuR1wkEbVDPPw2Y-image-1781956924778.png)](https://storage.googleapis.com/iau-data-dox/uploads/images/gallery/2026-06/TEuR1wkEbVDPPw2Y-image-1781956924778.png)

Default user comes NOT from config files, but from DATABASE !

Also local path to web directory is defined in database: [![](https://storage.googleapis.com/iau-data-dox/uploads/images/gallery/2026-06/scaled-1680-/FVgz976OlMToYitm-image-1781948931990.png)](https://storage.googleapis.com/iau-data-dox/uploads/images/gallery/2026-06/FVgz976OlMToYitm-image-1781948931990.png)

Enable 'cdr', 'sub-record-check' is normally generated by FreePBX call recording / core dialplan

It is necessary manually update CDR DB config in the main DB: [![](https://storage.googleapis.com/iau-data-dox/uploads/images/gallery/2026-06/scaled-1680-/fyQqk3joJAnCCvdJ-image-1781973195152.png)](https://storage.googleapis.com/iau-data-dox/uploads/images/gallery/2026-06/fyQqk3joJAnCCvdJ-image-1781973195152.png)

and config file

```bash
 vi /etc/freepbx.conf

```

```php
$amp_conf['CDRDBHOST'] = '172.00.00.00';
$amp_conf['CDRDBNAME'] = 'pbx_2dz_fi_asteriskcdrdb';
$amp_conf['CDRDBPASS'] = 'xxxxxxx';
$amp_conf['CDRDBPORT'] = '3306';
$amp_conf['CDRDBTABLENAME'] = 'cdr';
$amp_conf['CDRDBTYPE'] = 'mysql';
$amp_conf['CDRDBUSER'] = 'pbx_2dz_fi_asterisk';
$amp_conf['CDRUSEGMT'] = 0;

```

```bash
fwconsole ma downloadinstall cdr
fwconsole ma install cdr

```

[![](https://storage.googleapis.com/iau-data-dox/uploads/images/gallery/2026-06/scaled-1680-/dyuQ2tg4uJpEl7bC-image-1781973098558.png)](https://storage.googleapis.com/iau-data-dox/uploads/images/gallery/2026-06/dyuQ2tg4uJpEl7bC-image-1781973098558.png)

Recordings:

```bash
fwconsole ma downloadinstall recordings
fwconsole ma downloadinstall callrecording
fwconsole ma enable \
    recordings \
    callrecording
fwconsole reload

```

[![](https://storage.googleapis.com/iau-data-dox/uploads/images/gallery/2026-06/scaled-1680-/fUYwWhknGIFoTL5e-image-1781973854153.png)](https://storage.googleapis.com/iau-data-dox/uploads/images/gallery/2026-06/fUYwWhknGIFoTL5e-image-1781973854153.png)

Troubleshooting logs and tools:

```bash
fwconsole reload --verbose

# in new tmux pane
tail -f /var/log/asterisk/freepbx.log

# clean cache
ls -la /var/www/html/admin/modules/_cache/

```

# Codecs on SIP phones

<table border="1" id="bkmrk-yealink-t31p-grandst" style="border-collapse: collapse; width: 100%;"><colgroup><col style="width: 8.93921%;"></col><col style="width: 21.0965%;"></col><col style="width: 19.1895%;"></col><col style="width: 21.8029%;"></col><col style="width: 28.9718%;"></col></colgroup><tbody><tr><td>  
</td><td>  
</td><td>  
</td><td>  
</td><td>  
</td></tr><tr><td>  
</td><td>**Yealink T31P**</td><td>**Grandstream GRP-2602P**</td><td>**Cisco SPA-303**</td><td>**Linphone**</td></tr><tr><td>Versions</td><td>FW 124.86.0.40  
HW 123.1.1.0.2.0.0</td><td><div class="ant-row ant-form-item bak-form-item " style="display: block;"><div class="ant-col ant-form-item-label"><label class="" for="_0.8891145004928236" title=""><span class="text" style="right: 0px;" title="">Boot </span><span class="ant-form-item-children">1.0.1.32  
</span><span class="text" style="right: 0px;" title="">Core </span><span class="ant-form-item-children">1.0.5.17  
</span><span class="text" style="right: 0px;" title="">Prog </span><span class="ant-form-item-children">1.0.5.5</span></label><label class="" for="_0.6789739635488562" title=""><span class="text" style="right: 0px;" title="">Locale </span><span class="ant-form-item-children">1.0.5.40  
</span><span class="text" style="right: 0px;" title="">Res </span><span class="ant-form-item-children">1.0.5.1</span></label></div></div></td><td>Software Version: 7.4.9c

Hardware Version: 1.0.1

</td><td>Android 9+: v6.2.3 (7 Jul 2026)</td></tr><tr><td>in order of priority</td><td>**Opus**

**G722**

**PCMA**

**PCMU**

**legacy:**

**G729AB**

G729

**G726/40 kbps**

G726/32 kbps

G726/24 kbps

G726/16 kbps

**iLBC/15.2 kbps**

iLBC/13.3 kbps

**G723.1/63 kbps**

G723.1/53 kbps

</td><td>**Opus**

**G722**

**PCMA**

**PCMU**

**legacy:**

**G.729A/B**

**G.726-40 kbps**

**G.726-32 kbps**

G.726-24 kbps

G.726-16 kbps

**iLBC**

G.723.1 kbps

</td><td>**G722**

**G729a**

**G711u**

G711a

**legacy:**

G726-40

G726-32

G726-24

G726-16

</td><td>**Opus/48 kHz**

**Speex/16 kHz**

**PCMU/8 kHz**

**PCMA/8 kHz**

GSM/8 kHz

**G722/8 kHz**

**iLBC/8 kHz**

**G729/8 kHz**

iSAC/16 kHz

**speex/32kHz**

BV16/8 kHz

**L16/44.1 kHz**

(priority order can not be defined in the UI)

**! not supported:**

G.726 (legacy)

G.723 (legacy)

</td></tr><tr><td>  
</td><td>  
</td><td>  
</td><td>  
</td><td>  
</td></tr><tr><td>  
</td><td>  
</td><td>  
</td><td>  
</td><td>  
</td></tr><tr><td>  
</td><td>  
</td><td>  
</td><td>  
</td><td>  
</td></tr><tr><td>  
</td><td>  
</td><td>  
</td><td>  
</td><td>  
</td></tr></tbody></table>