File: gsutil

package info (click to toggle)
gsutil 3.1-1
  • links: PTS
  • area: main
  • in suites: bullseye, buster, jessie, jessie-kfreebsd, sid, stretch, wheezy
  • size: 268 kB
  • ctags: 27
  • sloc: perl: 2,664; makefile: 4
file content (1542 lines) | stat: -rwxr-xr-x 62,612 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400
1401
1402
1403
1404
1405
1406
1407
1408
1409
1410
1411
1412
1413
1414
1415
1416
1417
1418
1419
1420
1421
1422
1423
1424
1425
1426
1427
1428
1429
1430
1431
1432
1433
1434
1435
1436
1437
1438
1439
1440
1441
1442
1443
1444
1445
1446
1447
1448
1449
1450
1451
1452
1453
1454
1455
1456
1457
1458
1459
1460
1461
1462
1463
1464
1465
1466
1467
1468
1469
1470
1471
1472
1473
1474
1475
1476
1477
1478
1479
1480
1481
1482
1483
1484
1485
1486
1487
1488
1489
1490
1491
1492
1493
1494
1495
1496
1497
1498
1499
1500
1501
1502
1503
1504
1505
1506
1507
1508
1509
1510
1511
1512
1513
1514
1515
1516
1517
1518
1519
1520
1521
1522
1523
1524
1525
1526
1527
1528
1529
1530
1531
1532
1533
1534
1535
1536
1537
1538
1539
1540
1541
1542
#!/usr/bin/perl -wT
# gsutil - GrandStream configuration dump/restore + reboot
# Copyright (C) 2009  Charles Howes <gsutil@ch.pkts.ca>
# 
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
# 
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
# 
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
# 02110-1301, USA.

$main::VERSION="3.1"; # 2009-08-13

use strict;
use Getopt::Std;
use HTML::Form;
use HTTP::Request;
use LWP::UserAgent;
use Socket;
use POSIX qw(strftime);
use Data::Dumper;

# Backup the command line:
my $cmdline=join(" ",@ARGV);

# Stuff used by getopts:
$Getopt::Std::STANDARD_HELP_VERSION=1;

# Get command line options:
my %opts;
my $r=getopts('bdehnop:rw',\%opts);

# If the user is asking for help:
if (defined $opts{'h'}) {
  VERSION_MESSAGE(*STDOUT{IO});
  HELP_MESSAGE(*STDOUT{IO});
  exit 0;
}

# Version information, called by getopts if --version or --help given.
sub VERSION_MESSAGE {
  my $fh=$_[0];  # Passed a file handle.
  print $fh "Version $main::VERSION of GSutil, a GrandStream BudgeTone phone backup, restore\n";
  print $fh "and reboot utility.  Written by Charles Howes (gsutil\@ch.pkts.ca).\n";
  print $fh "http://www.pkts.ca/gsutil.shtml\n";
}

# Help information, called by getopts if --help given.
sub HELP_MESSAGE {
  my $fh=$_[0];  # Passed a file handle.
  print $fh "Usage: $0 -[b|d|e|h|r] [-w] [-n] [-o] [-p password] address..\n";
  print $fh "  -b : reboot\n";
  print $fh "  -d : dump to stdout\n";
  print $fh "  -e : show phone firmware versions\n";
  print $fh "  -r : restore from stdin\n";
  print $fh "  -w : wait for device to be free (moves busy devices to end of list)\n";
  print $fh "  -n : don't wait for reboot to finish\n";
  print $fh "  -o : don't translate configuration values\n";
  print $fh "  -p : password (default: admin)\n";
  print $fh "  -h, --help : print this help\n";
  print $fh "  --version : print the version of gsutil\n";
  # getopts exits after calling HELP_MESSAGE()
}

if (!defined $opts{'b'} and !defined $opts{'d'} and !defined $opts{'e'} and !defined $opts{'r'}) {
  print STDERR "No command was given.\n\n";
  print STDERR "Choose one of -b, -d, -e, or -r to do something.\n";
  print STDERR "Try `$0 --help' for more information.\n";
  exit 0;
}

# Get the password
my $password=$opts{'p'};
if (!defined $password) {$password='admin'};  # Default password

# The addresses are on the command line:
if (!defined $ARGV[0]) {
  print STDERR "No addresses of phones were given on the command line.\n";
  HELP_MESSAGE(*STDOUT{IO});
  exit(3);
}

# Convert and error-check all hosts:
my @todo=map {parseaddress($_)} @ARGV;

# The configuration variables get translated into english with this table.
# The translations themselves are stored in the __DATA__ block at the end.
my %translate;
my %untranslate;
while (<DATA>) {
  chomp;
  s/#.*//; # remove comments
  s/\s+$//; # remove trailing space
  # if no translation is available, use the key:
  if (/^\s*(P\d+):\s*(.*)/) {
    $translate{$1} = $2;
    $untranslate{uc($2)} = $1;
  }
}

# Lines of data from stdin
my $linenumber=0;

# For each host on the command line:
while (@todo) {
  my $address=shift(@todo);

  if ($address eq "-pause-") {warn("Pausing for 5 seconds\n");sleep(5);next;}

  # Set up the user agent:
  my $ua=LWP::UserAgent->new(timeout=>3);
  my $url="http://$address/";

  # Get the login page:
  my $req_login=HTTP::Request->new(GET=>$url);
  my $resp_login;

  $resp_login=$ua->request($req_login);
  if ($resp_login->code != 200) { show_error($address,$resp_login); next;}
  if ($resp_login->content =~ m/The device is busy now/i) {
    warn("$address is busy\n");
    if (defined $opts{'w'}) {
      warn("$address requeued\n");
      if (grep(/-pause-/,@todo)==0) {push @todo,"-pause-";}
      push @todo,$address;
    }
    next;
  }

  my $form_login=HTML::Form->parse($resp_login->content,$url);
  if (!defined $form_login) {
    warn("$address didn't respond with a form; is it a GS phone?\n");
    next;
  }


  # See if this is the right form
  if (grep(/^P2$/,$form_login->param)==0) {
    warn("$address The form didn't have the expected 'P2' (password) field in it!\n".
       "    Debug output:\n".Dumper($form_login));
    next;
  }

  # Stuff in the password
  $form_login->value('P2' => $password);

  # Log in and get main page
  my $resp_main = $ua->request($form_login->click);
  if ($resp_main->code != 200 or $resp_main->content =~ m/Your Login Password is not recognized/) { show_error($address,$resp_main); next;}
  my $form_main=HTML::Form->parse($resp_main->content,$form_login->action);

  # Find the cookie:
  my $cookie=$resp_main->headers->header("set-cookie");
  #1.0.5.x:'set-cookie' => 'SessionId=3bf1ca965d26edb9"; Version=1; Path=/'
  #1.0.6.x:'set-cookie' => 'SessionId="965c22e1bd86fece"; Version=1; Path=/'
  if (!defined $cookie) {
    warn("$address No cookie was sent, but the password was accepted?!  This may be a new firmware.\n");
    next;
  }
  if ($cookie!~m/SessionId="?([^"]*)"/) {
    warn("$address The cookie didn't contain 'SessionId'!  This may be a new firmware.\n".
       "  It said: $cookie\n");
    next;
  }
  my $sessionid=$1;

  # Get everything:
  my $domore=0;
  my $resp_index_htm=$ua->request(HTTP::Request->new(GET=>$url."index.htm",HTTP::Headers->new(Cookie=>"SessionID=\"$sessionid\"")));
  my $resp_config2_htm=$ua->request(HTTP::Request->new(GET=>$url."config2.htm",HTTP::Headers->new(Cookie=>"SessionID=\"$sessionid\"")));

  # Get extended phone configuration if your firmware supports it:
  my $resp_config_a1_htm=$ua->request(HTTP::Request->new(GET=>$url."config_a1.htm",HTTP::Headers->new(Cookie=>"SessionID=\"$sessionid\"")));
  if ($resp_config_a1_htm->code==200) {$domore=1;}  # Do a2-a4 only if a1 was found.
  my $resp_config_a2_htm=$domore?$ua->request(HTTP::Request->new(GET=>$url."config_a2.htm",HTTP::Headers->new(Cookie=>"SessionID=\"$sessionid\""))):undef;
  my $resp_config_a3_htm=$domore?$ua->request(HTTP::Request->new(GET=>$url."config_a3.htm",HTTP::Headers->new(Cookie=>"SessionID=\"$sessionid\""))):undef;
  my $resp_config_a4_htm=$domore?$ua->request(HTTP::Request->new(GET=>$url."config_a4.htm",HTTP::Headers->new(Cookie=>"SessionID=\"$sessionid\""))):undef;
  my $resp_config_a5_htm=$domore?$ua->request(HTTP::Request->new(GET=>$url."config_a5.htm",HTTP::Headers->new(Cookie=>"SessionID=\"$sessionid\""))):undef;
  my $resp_config_a6_htm=$domore?$ua->request(HTTP::Request->new(GET=>$url."config_a6.htm",HTTP::Headers->new(Cookie=>"SessionID=\"$sessionid\""))):undef;
  my $resp_config_e1_htm=$domore?$ua->request(HTTP::Request->new(GET=>$url."config_e1.htm",HTTP::Headers->new(Cookie=>"SessionID=\"$sessionid\""))):undef;
  my $resp_config_e2_htm=$domore?$ua->request(HTTP::Request->new(GET=>$url."config_e2.htm",HTTP::Headers->new(Cookie=>"SessionID=\"$sessionid\""))):undef;

  # Do everything:
  if (defined $opts{'e'}) { show_version($address,$resp_main,$resp_index_htm); }
  if (defined $opts{'d'}) { dump_data($address,$resp_main,$resp_index_htm,$resp_config2_htm,$resp_config_a1_htm,$resp_config_a2_htm,$resp_config_a3_htm,$resp_config_a4_htm,$resp_config_a5_htm,$resp_config_a6_htm,$resp_config_e1_htm,$resp_config_e2_htm); }
  if (defined $opts{'r'}) { restore_data($address,$sessionid,$resp_main,$resp_index_htm,$resp_config2_htm,$resp_config_a1_htm,$resp_config_a2_htm,$resp_config_a3_htm,$resp_config_a4_htm,$resp_config_a5_htm,$resp_config_a6_htm,$resp_config_e1_htm,$resp_config_e2_htm); }
  if (defined $opts{'b'}) { reboot($address,$url,$sessionid,$opts{'n'}); }
}

# Show the phone's hardware model and version:
sub show_version {
  my ($address,$resp_main,$resp_index_htm)=@_;
  my $body=$resp_main->content.$resp_index_htm->content;
  my $mac;
  my $model;
  my $version;

  if ($body=~m/<\/b><\/td>\s*<td>([^<]*:[^<]{2}:[^<]{2}:[^<]{2}:[^<]{2}:[^<]{2})/s) {
    $mac=$1;
    $mac=~s/(&nbsp;|\s+)/ /gs;
    $mac=~s/(^\s+)|(\s+$)//gs;
  }
  if ($body=~m/<\/b><\/td>\s*<td>([^\(<]*\(HW[^\)]*\)[^<]*)/s) {
    $model=$1;
    $model=~s/(&nbsp;|\s+)/ /gs;
    $model=~s/(^\s+)|(\s+$)//gs;
  }
  if ($body=~m/<b>Software Version:\s*<\/b><\/td>\s*<td>([^<]*)/s) {
    $version=$1;
    $version=~s/(&nbsp;|\s+)/ /gs;  # delete spaces and &nbsp;
    $version=~s/(^\s+)|(\s+$)//gs;  # delete leading/trailing spaces
    $version=~s/\s+/ /gs;           # delete spaces some more
    $version=~s/--/:/gs;          # turn -- into :
  }
  my $head="# $address";
  if (defined $model) {print $head." Model ".$model;$head="";}
  if (defined $version) {print $head." ".$version;$head="";}
  if (defined $mac) {print $head." MAC ".$mac;$head="";}
  if ($head eq "") {print "\n";}
}

# Reboot the phone:
sub reboot {
  my ($address,$url,$sessionid,$opts_n)=@_;
  my $ua2=LWP::UserAgent->new(timeout=>1);
  my $resp_rs_htm=$ua2->request(HTTP::Request->new(GET=>$url."rs.htm",HTTP::Headers->new(Cookie=>"SessionID=\"$sessionid\"")));
  if (!defined $opts_n) {
    my $req_login=HTTP::Request->new(GET=>$url);
    my $resp_login;
    my $now=time();
    my $up=1;
    for (my $n=0;$n<30;$n++) { # Should be done in 21 seconds or so.
      $resp_login=$ua2->request($req_login);
      if ($resp_login->code==200 and $up==1) {sleep(1);next;}
      if ($resp_login->code==500) {$up=0;next;}
      last;  # It's up again after being down (200 -> 500 -> 200)
      # Note, if pppoe is configured, it could go down again for a bit.
    }
  }
}

# Dump the phone configuration to stdout:
sub dump_data {
  my ($address,@responses)=@_;
  my $stamp=strftime("%Y-%m-%d %H:%M:%S",localtime());
  print "#-- start of phone $address ($stamp)\n"; # Mark the start
  foreach (@responses) { if (defined $_) {dump_form($address,HTML::Form->parse($_));} }
  print "#-- end of phone $address ($stamp)\n";
}

# Restre the phone configuration from stdin:
sub restore_data {
  my ($address,$sessionid,@responses)=@_;
  my %val;

  # Error checking:
  my %formlines;
  my %filled;

  # Read stdinput for the phone's data:
  while(<STDIN>) {
    chomp;
    $linenumber++;

    if (m/^#-- end of phone/) {last;} # End of this phone's configuration
    if (m/^#/) {next;}  # Skip comment lines
    if (m/^$/) {next;}  # Skip blank lines
    s/\s+#.*//;  # Comment deletion (won't cut in the middle of a word)

    if (m/^([^=]+)=(.*)$/) {   # name = value...
      my $ls=$1; # ls=left side
      my $rs=$2; # rs=right side
      # Trim whitespace, uppercase ls:
      $ls=~s/^\s*(.*?)\s*$/\U$1/;
      $rs=~s/^\s*(.*?)\s*$/$1/;
      # Quote removal from rs:
      $rs=~s/^'(.*)'$/$1/;
      $rs=~s/^"(.*)"$/$1/;
      # Stick it into %val:
      if (defined($translate{$ls})) { $val{$ls}=$rs;next;} # P999 = ...
      if (defined($untranslate{$ls})) { $val{$untranslate{$ls}}=$rs;next;} # name = ...
      warn("$address Unknown input variable '$_', from stdin line $linenumber.\n   Add it to the translation table at the end of the program.\n");
    }
    warn("$address Unrecognized input line '$_', from stdin line $linenumber\n");
  }

  # Fill in the form(s):
  my $form;
  my $ua2=LWP::UserAgent->new(timeout=>3);
  foreach my $response (@responses) {
    if (!defined $response) {next;} # No response here (a2-a4?)
    $form=HTML::Form->parse($response);
    if (!defined $form) {next;} # No form here (a1?)
    foreach my $n ($form->param) {
      $formlines{$n}=1;  # These fields were present on the phone
      if (defined $val{$n}) {
	$form->param($n,$val{$n});
	$filled{$n}=1;  # These fields were filled in from stdin
      }
    }

    # Make the request and add a cookie:
    my $request=$form->make_request;
    $request->header("Cookie" => "SessionId=\"$sessionid\"");

    # Send it:
    my $response=$ua2->request($request);
  }

  # Check for missed data:
  foreach (sort keys %val) {
    if (!defined $formlines{$_}) {
      warn("$address The config file had $_ ($translate{$_}), but the phone did not.\n");
    }
  }
}

# Print out the fields and their values:
sub dump_form {
    my ($address,$form) = @_;
    if (!defined $form) {return;}  # Deal with undefined forms
    foreach my $n ($form->param) {
	if ($n =~ m/^(cancel|reboot|gnkey|update|P2|P196)$/) {next;}
	if (defined $translate{$n} && !defined $opts{'o'}) {
	    print $translate{$n}," = ",$form->param($n),"\n";
	} else {
	    if (!defined $opts{'o'}) {
		warn("$address The parameter $n(=".($form->param($n)).") was not found in the translate table.\n  Use -o to skip translation, or manually add it to the translate table\n");
	    }
	    if (defined $translate{$n}) { print "# $translate{$n}:\n"; }
	    print "$n = ",$form->param($n),"\n";
	    print "\n";
	}
    }
}

# Convert addresses given on command line, and check them.
sub parseaddress {
  my $add=$_[0];
  if ($add !~ m/^([a-z0-9.-]{1,80})$/) { # Valid characters?
    warn("$add isn't a valid hostname\n");
    return;
  }
  my $address=$1;
  if ($address=~m/[a-z]/) {  # If it has a letter, it's a hostname
    if (!defined gethostbyname($address)) {
      warn("$address unknown host\n");
      return;
    }
  }
  return $address;
}

# Decode the error message
sub show_error {
  my ($address,$response)=@_;
  if (!defined $response) {
    die("$0: show_error called with not enough arguments");
  }

  # Page not found:
  if ($response->code == 403) {
    warn("$address page not found, is this a GS phone?\n");
    return;
  }

  # Bad password:
  if ($response->content =~ m/Your Login Password is not recognized/) {
    $cmdline =~ s/\s+-p\s*\S+//;  # Cut out old password
    warn("$address bad password.\n".
        "  Try:  $0 -p your-secret-password $cmdline\n");
    return;
  }

  # Error:
  if ($response->code == 500) {
    # Trying to connect to a firewalled, misconfigured or dead phone:
    if ($response->content =~ m/Can't connect to \S+ \(connect: timeout\)/) {
      warn("$address was unreachable (either rebooting, firewalled, misconfigured, unplugged, or dead)\n");
      return;
    }
    # The arp table knows how to get there, but the phone is not answering:
    if ($response->content =~ m/Can't connect to \S+ \(connect: No route to host\)/) {
      warn("$address was unreachable (either rebooting or recently unplugged)\n");
      return;
    }

    # The phone is tired of being queried over and over:
    if ($response->content =~ m/read timeout/) {
      warn("$address gave a read timeout after connecting; try again.\n");
      return;
    }

  }

  # Some other fatal error:
  warn("$address gave an unexpected ".($response->code)." error.\n".
	"  Here is a full dump of the response:\n".
	Dumper($response)."\n".
	"  Send this to the author, gsutil\@ch.pkts.ca\n".
	"  so that it can be added to the program.\n"
      );
  return;
}

# This is the translate table:
__DATA__
P2: admin_password
P3: name
P8: static_ipaddress_true
P9: static_ipaddress_1
P10: static_ipaddress_2
P11: static_ipaddress_3
P12: static_ipaddress_4
P13: static_subnet_1
P14: static_subnet_2
P15: static_subnet_3
P16: static_subnet_4
P17: static_router_1
P18: static_router_2
P19: static_router_3
P20: static_router_4
P21: static_dns1_1
P22: static_dns1_2
P23: static_dns1_3
P24: static_dns1_4
P25: static_dns2_1
P26: static_dns2_2
P27: static_dns2_3
P28: static_dns2_4
P29: early_dial
P30: ntp_server
P31: sip_registration
P32: register_expiration
P33: voicemail_userid
P34: authenticate_password
P35: sip_userid
P36: authenticate_id
P37: voice_frames_per_tx
P38: layer3_QoS
P39: local_rtp_port
P40: local_sip_port
P41: tftp_server_1
P42: tftp_server_2
P43: tftp_server_3
P44: tftp_server_4
P46: vocoder_7
P47: sip_server
P48: outbound_proxy
P49: G723_rate
P50: silence_suppression
P51: layer2_QoS_vlan_tag
P52: nat_traversal_true
P57: vocoder_1
P58: vocoder_2
P59: vocoder_3
P60: vocoder_4
P61: vocoder_5
P62: vocoder_6
P63: userid_is_phone_number
P64: time_zone
P65: send_anonymous
P66: dial_plan_prefix
P71: offhook_autodial
P72: use_hash_as_dial_key
P73: send_dtmf_mode
P74: send_flash_event
P75: daylight_savings_time
P76: nat_traversal_stun_server
P78: use_random_port
P79: dtmf_payload_type
P81: unregister_on_reboot
P82: PPPoE_id
P83: PPPoE_password
P84: keepalive_interval
P85: no_key_entry_timeout
P86: FXS_impedance
P87: layer2_QoS_priority_value
P88: lock_keypad_update
P90: auto_answer
P91: disable_call_waiting
P92: dhcp_dns_server_1
P93: dhcp_dns_server_2
P94: dhcp_dns_server_3
P95: dhcp_dns_server_4
P96: iLBC_payload_type
P97: iLBC_frame_size
P98: vocoder_8
P99: subscribe_for_mwi
P101: use_nat_ip
P102: date_display_format
P103: use_dns_srv
P104: default_ring_tone
P105: custom_ring_tone_1_caller_id
P106: custom_ring_tone_2_caller_id
P107: custom_ring_tone_3_caller_id
P109: allow_out_call_without_registration # 0 or 1
P110: lan_subnet_mask
P111: lan_dhcp_base_ip
P112: dhcp_ip_lease_time
P113: dmz_ip
P115: cloned_wan_mac_addr_1
P116: cloned_wan_mac_addr_2
P117: cloned_wan_mac_addr_3
P118: cloned_wan_mac_addr_4
P119: cloned_wan_mac_addr_5
P120: cloned_wan_mac_addr_6
P122: time_display_format  # 0 = 12 hour; 1 = 24 hour
P123: display_clock_instead_of_date # 0 or 1
P129: anonymous_call_rejection_1 # 0=No, 1=Yes
P130: sip_transport_1 # 1=UDP, 2=TCP
P131: use_rfc3581_symmetric_routing_1 # 0=No, 1=Yes
P134: eventlist_blf_uri_1
P135: referto_use_target_contact_1 # 0=No, 1=Yes
P137: disable_multiple_media_attribute_sdp_1 # 0=No, 1=Yes
P138: sip_registration_failure_retry_wait_time_1
P139: delayed_call_forward_wait_time_1
P143: dhcp_option_2_timezone_override
P144: dhcp_option_42_timeserver_override
P145: dhcp_option_66_bootserver
P146: dhcp_option_12_hostname # ppoe_hostname
P147: dhcp_option_15_domain # ppoe_domain_name
P148: dhcp_option_60_vendor_class_id # ppoe_vendor_class
P150: port_fw_port_num_1
P151: port_fw_port_num_2
P152: port_fw_port_num_3
P153: port_fw_port_num_4
P154: port_fw_port_num_5
P155: port_fw_port_num_6
P156: port_fw_port_num_7
P157: port_fw_port_num_8
P158: port_fw_lan_ip_1
P159: port_fw_lan_ip_2
P160: port_fw_lan_ip_3
P161: port_fw_lan_ip_4
P162: port_fw_lan_ip_5
P163: port_fw_lan_ip_6
P164: port_fw_lan_ip_7
P165: port_fw_lan_ip_9
P166: port_fw_lan_port_1
P167: port_fw_lan_port_2
P168: port_fw_lan_port_3
P169: port_fw_lan_port_4
P170: port_fw_lan_port_5
P171: port_fw_lan_port_6
P172: port_fw_lan_port_7
P173: port_fw_lan_port_8
P174: port_fw_lan_proto_1
P175: port_fw_lan_proto_2
P176: port_fw_lan_proto_3
P177: port_fw_lan_proto_4
P178: port_fw_lan_proto_5
P179: port_fw_lan_proto_6
P180: port_fw_lan_proto_7
P181: port_fw_lan_proto_8
P182: disable_missed_calls_1
P183: srtp_mode_1 # 0=Disabled, 1=Enabled but not forced, 2=Enabled and forced, 3=Optional
P184: use_quick_ip_call_mode
P186: disable_callwaiting_tone_1 # 0=No, 1=Yes
P188: publish_for_presence_1 # 0=No, 1=Yes
P189: replay_to_icmp_in_wan	# 0 = no
				# 1 = yes
P190: wan_side_http_access	# 0 = no
				# 1 = yes
P191: enable_call_features
P192: http_upgrade_url
P193: automatic_http_upgrade_days
P194: automatic_http_upgrade
P196: end_user_password
P197: proxy_require
P198: special_feature_1 # 100 = Standard
                        # 101 = Nortel MCS
                        # 102 = Broadsoft
                        # 103 = Howdy
                        # 104 = Sonus
                        # 105 = 3COM
                        # 108 = CBCOM
                        # 109 = RNX
                        # 110 = Sylantro
P200: caller_id_scheme
P205: polarity_reversal
P206: onhook_voltage
P207: syslog_server
P208: syslog_level
P209: sip_t1_timeout	# 50 = 0_5_sek
			# 100 = 1_sek
			# 200 = 2_sek
P212: firmware_upgrade
P213: firmware_upgrade_tftp_1
P214: firmware_upgrade_tftp_2
P215: firmware_upgrade_tftp_3
P216: firmware_upgrade_tftp_4
P228: fax_mode
P231: device_mode	# 0 = switch
			# 1 = nat_router
P232: firmware_file_prefix
P233: firmware_file_postfix
P234: config_file_prefix
P235: config_file_postfix
P237: config_server_path
P238: always_check_for_new_firmware
P239: register_expiration_delay # in seconds, default 1800
P240: auth_config_file	# 0 = No
			# 1 = Yes
P241: allow_conf_sip_account_in_basic_settings	# 0 or 1
P242: firmware_key	# text (in Hexadecimal Representation)
P243: allow_from_sip_proxy_only # 0 or 1
P244: override_mtu_size	# 0 or 1
P245: onhook_threshold	# 0 = Hookflash OFF
			# 2 = 200 ms
			# 4 = 400 ms
			# 6 = 600 ms
			# 8 = 800 ms (default)
			# 10 = 1000 ms
			# 12 = 1200 ms
P246: daylight_savings_time_optional_rule
P250: sip_t2_interval
P258: check_sip_user_id_for_incoming_invite_1 # 0=No, 1=Yes
P260: session_expiration_1 # in seconds, default 180
P261: min_session_expiration_1 # seconds, minimum 90
P262: caller_request_timer_1 # 0 or 1
P263: callee_request_timer_1 # 0 or 1
P264: force_timer_1 # 0 or 1
P265: force_invite_1 # 0 or 1
P266: uac_specify_refresher_1 # 0=omit, 1=UAC, 2=UAS
P267: uas_specify_refresher_1 # 1=UAC, 2=UAS
P268: anonymous_method	# 0 = Use From Header (default)
			# 1 = Use Privacy Header
P270: account_name_1
P271: account_active_1 # 0 or 1
P272: enable_100rel_1 # 0 or 1
P298: allow_auto_answer_by_call_info
P299: turn_off_speaker_on_remote_disconnect
P301: speed_dial_1_account # 0, 1, 2, 3, 4, 5
P302: speed_dial_1_name
P303: speed_dial_1_userid
P304: speed_dial_2_account
P305: speed_dial_2_name
P306: speed_dial_2_userid
P307: speed_dial_3_account
P308: speed_dial_3_name
P309: speed_dial_3_userid
P310: speed_dial_4_account
P311: speed_dial_4_name
P312: speed_dial_4_userid
P313: speed_dial_5_account
P314: speed_dial_5_name
P315: speed_dial_5_userid
P316: speed_dial_6_account
P317: speed_dial_6_name
P318: speed_dial_6_userid
P319: speed_dial_7_account
P320: speed_dial_7_name
P321: speed_dial_7_userid
P322: lcd_backlight_always_on # 0 or 1
P323: multi_purpose_key_1	# 0 = speed_dial, 1 = asterisk_blf, 2 = presence_watcher, 3 = eventlist_blf
P324: multi_purpose_key_2	# 0 = speed_dial, 1 = asterisk_blf, 2 = presence_watcher, 3 = eventlist_blf
P325: multi_purpose_key_3	# 0 = speed_dial, 1 = asterisk_blf, 2 = presence_watcher, 3 = eventlist_blf
P326: multi_purpose_key_4	# 0 = speed_dial, 1 = asterisk_blf, 2 = presence_watcher, 3 = eventlist_blf
P327: multi_purpose_key_5	# 0 = speed_dial, 1 = asterisk_blf, 2 = presence_watcher, 3 = eventlist_blf
P328: multi_purpose_key_6	# 0 = speed_dial, 1 = asterisk_blf, 2 = presence_watcher, 3 = eventlist_blf
P329: multi_purpose_key_7	# 0 = speed_dial, 1 = asterisk_blf, 2 = presence_watcher, 3 = eventlist_blf
P330: phonebook_xml_download # 0=No, 1=Yes, HTTP, 2=Yes, TFTP
P331: phonebook_xml_server_path
P332: phonebook_xml_download_interval # (minutes) 0 - 720
P333: phonebook_xml_remove_manual_entries # 0=No, 1= Yes
P334: lcd_backlight_brightness_active # 0 - 8, 0=off, 8=brightest
P335: lcd_backlight_brightness_idle # 0 - 8, 0=off, 8=brightest
P336: mute_speaker_ringer # 0=No, 1= Yes
P337: xml_application_server_path
P338: disable_incall_dtmf_display # 0=No, 1= Yes
P340: idle_screen_xml_download # 0=No, 1=Yes, HTTP, 2=Yes, TFTP
P341: idle_screen_xml_download_server_path
P342: display_language # 0=English, 2=Chinese, 3=Secondary Language
P343: call_progress_tones_dial_tone
P344: call_progress_tones_message_waiting
P345: system_ring_tones
P346: call_progress_tones_ring_back_tone
P347: call_progress_tones_callwaiting_tone
P348: call_progress_tones_busy_tone
P349: call_progress_tones_reorder_tone
P351: disable_missed_call_backlight # 0=No, 1= Yes
P352: xml_application_softkey_label
P353: multi_purpose_key_8	# 0 = speed_dial, 1 = asterisk_blf, 2 = presence_watcher, 3 = eventlist_blf
P354: speed_dial_8_account # 0, 1, 2, 3, 4, 5
P355: speed_dial_8_name
P356: speed_dial_8_userid
P357: multi_purpose_key_9	# 0 = speed_dial, 1 = asterisk_blf, 2 = presence_watcher, 3 = eventlist_blf
P358: speed_dial_9_account # 0, 1, 2, 3, 4, 5
P359: speed_dial_9_name
P360: speed_dial_9_userid
P361: multi_purpose_key_10	# 0 = speed_dial, 1 = asterisk_blf, 2 = presence_watcher, 3 = eventlist_blf
P362: speed_dial_10_account # 0, 1, 2, 3, 4, 5
P363: speed_dial_10_name
P364: speed_dial_10_userid
P365: multi_purpose_key_11	# 0 = speed_dial, 1 = asterisk_blf, 2 = presence_watcher, 3 = eventlist_blf
P366: speed_dial_11_account # 0, 1, 2, 3, 4, 5
P367: speed_dial_11_name
P368: speed_dial_11_userid
P369: multi_purpose_key_12	# 0 = speed_dial, 1 = asterisk_blf, 2 = presence_watcher, 3 = eventlist_blf
P370: speed_dial_12_account # 0, 1, 2, 3, 4, 5
P371: speed_dial_12_name
P372: speed_dial_12_userid
P373: multi_purpose_key_13	# 0 = speed_dial, 1 = asterisk_blf, 2 = presence_watcher, 3 = eventlist_blf
P374: speed_dial_13_account # 0, 1, 2, 3, 4, 5
P375: speed_dial_13_name
P376: speed_dial_13_userid
P377: multi_purpose_key_14	# 0 = speed_dial, 1 = asterisk_blf, 2 = presence_watcher, 3 = eventlist_blf
P378: speed_dial_14_account # 0, 1, 2, 3, 4, 5
P379: speed_dial_14_name
P380: speed_dial_14_userid
P381: multi_purpose_key_15	# 0 = speed_dial, 1 = asterisk_blf, 2 = presence_watcher, 3 = eventlist_blf
P382: speed_dial_15_account # 0, 1, 2, 3, 4, 5
P383: speed_dial_15_name
P384: speed_dial_15_userid
P385: multi_purpose_key_16	# 0 = speed_dial, 1 = asterisk_blf, 2 = presence_watcher, 3 = eventlist_blf
P386: speed_dial_16_account # 0, 1, 2, 3, 4, 5
P387: speed_dial_16_name
P388: speed_dial_16_userid
P389: multi_purpose_key_17	# 0 = speed_dial, 1 = asterisk_blf, 2 = presence_watcher, 3 = eventlist_blf
P390: speed_dial_17_account # 0, 1, 2, 3, 4, 5
P391: speed_dial_17_name
P392: speed_dial_17_userid
P393: multi_purpose_key_18	# 0 = speed_dial, 1 = asterisk_blf, 2 = presence_watcher, 3 = eventlist_blf
P394: speed_dial_18_account # 0, 1, 2, 3, 4, 5
P395: speed_dial_18_name
P396: speed_dial_18_userid
P399: secondary_language_file_postfix
P401: account_active_2 # 0 or 1
P402: sip_server_2
P403: outbound_proxy_2
P404: sip_userid_2
P405: authenticate_id_2
P406: authenticate_password_2
P407: name_2
P408: use_dns_srv_2
P409: userid_is_phone_number_2
P410: sip_registration_2
P411: unregister_on_reboot_2
P412: register_expiration_2
P413: local_sip_port_2
P414: nat_traversal_true_2
P415: subscribe_for_mwi_2
P416: send_dtmf_2 # 0=in-audio, 1=RTP (RFC2833), 2=SIP INFO, 8=in-audio, 1=RTP (RFC2833), 2=SIP INFO
P417: account_name_2
P418: proxy_require_2
P419: dial_plan_prefix_2
P420: enable_call_features_2
P421: send_anonymous_2
P422: early_dial_2
P423: account_ring_tone_2 # 0, 1, 2, 3
P424: special_feature_2 # 100 = Standard
                        # 101 = Nortel MCS
                        # 102 = Broadsoft
                        # 103 = Howdy
                        # 104 = Sonus
                        # 105 = 3COM
                        # 108 = CBCOM
                        # 109 = RNX
                        # 110 = Sylantro
P425: auto_answer_2
P426: voicemail_userid_2
P427: min_session_expiration_2
P428: caller_request_timer_2
P429: callee_request_timer_2
P430: force_timer_2
P431: force_invite_2
P432: uac_specify_refresher_2
P433: uas_specify_refresher_2
P434: session_expiration_2
P435: enable_100rel_2
P438: allow_auto_answer_by_caller_info
P439: turn_off_speaker_on_remote_disconnect
P440: sip_t1_imeout
P441: sip_t2_interval
P442: disable_missed_calls_2
P443: srtp_mode_2 # 0=Disabled, 1=Enabled but not forced, 2=Enabled and forced, 3=Optional
P444: eventlist_blf_uri_2
P446: anonymous_call_rejection_2 # 0=No, 1=Yes
P447: use_rfc3581_symmetric_routing_2 # 0=No, 1=Yes
P448: sip_transport_2 # 1=UDP, 2=TCP
P449: check_sip_user_id_for_incoming_invite_2 # 0=No, 1=Yes
P451: vocoder_1_2
P452: vocoder_2_2
P453: vocoder_3_2
P454: vocoder_4_2
P455: vocoder_5_2
P456: vocoder_6_2
P457: vocoder_7_2
P458: vocoder_8_2
P468: anonymous_method_2 # 0=From Header, 1=Privacy Header
P469: referto_use_target_contact_2 # 0=No, 1=Yes
P470: delayed_call_forward_wait_time_2
P471: sip_registration_failure_retry_wait_time_2
P476: ring_timeout_2
P487: disable_multiple_media_attribute_sdp_2 # 0=No, 1=Yes
P488: publish_for_presence_2 # 0=No, 1=Yes
P501: account_active_3 # 0 or 1
P502: sip_server_3
P503: outbound_proxy_3
P504: sip_userid_3
P505: authenticate_id_3
P506: authenticate_password_3
P507: name_3
P508: use_dns_srv_3
P509: userid_is_phone_number_3
P510: sip_registration_3
P511: unregister_on_reboot_3
P512: register_expiration_3
P513: local_sip_port_3
P514: nat_traversal_true_3
P515: subscribe_for_mwi_3
P516: send_dtmf_3 # 8=in-audio, 1=RTP (RFC2833), 2=SIP INFO, 8=in-audio, 1=RTP (RFC2833), 2=SIP INFO
P517: account_name_3
P518: proxy_require_3
P519: dial_plan_prefix_3
P520: enable_call_features_3
P521: send_anonymous_3
P522: early_dial_3
P523: account_ring_tone_3 # 0, 1, 2, 3
P524: special_feature_3 # 100 = Standard
                        # 101 = Nortel MCS
                        # 102 = Broadsoft
                        # 103 = Howdy
                        # 104 = Sonus
                        # 105 = 3COM
                        # 108 = CBCOM
                        # 109 = RNX
                        # 110 = Sylantro
P525: auto_answer_3
P526: voicemail_userid_3
P527: min_session_expiration_3
P528: caller_request_timer_3
P529: callee_request_timer_3
P530: force_timer_3
P531: force_invite_3
P532: uac_specify_refresher_3
P533: uas_specify_refresher_3
P534: session_expiration_3
P535: enable_100rel_3
P538: allow_auto_answer_by_caller_info
P539: turn_off_speaker_on_remote_disconnect
P540: sip_t1_imeout
P541: sip_t2_interval
P542: disable_missed_calls_3
P543: srtp_mode_3 # 0=Disabled, 1=Enabled but not forced, 2=Enabled and forced, 3=Optional
P544: eventlist_blf_uri_3
P546: anonymous_call_rejection_3 # 0=No, 1=Yes
P547: use_rfc3581_symmetric_routing_3 # 0=No, 1=Yes
P548: sip_transport_3 # 1=UDP, 2=TCP
P549: check_sip_user_id_for_incoming_invite_3 # 0=No, 1=Yes
P551: vocoder_1_3
P552: vocoder_2_3
P553: vocoder_3_3
P554: vocoder_4_3
P555: vocoder_5_3
P556: vocoder_6_3
P557: vocoder_7_3
P558: vocoder_8_3
P568: anonymous_method_3 # 0=From Header, 1=Privacy Header
P569: referto_use_target_contact_3 # 0=No, 1=Yes
P570: delayed_call_forward_wait_time_3
P571: sip_registration_failure_retry_wait_time_3
P576: ring_timeout_3
P587: disable_multiple_media_attribute_sdp_3 # 0=No, 1=Yes
P588: publish_for_presence_3 # 0=No, 1=Yes
P601: account_active_4 # 0 or 1
P602: sip_server_4
P603: outbound_proxy_4
P604: sip_userid_4
P605: authenticate_id_4
P606: authenticate_password_4
P607: name_4
P608: use_dns_srv_4
P609: userid_is_phone_number_4
P610: sip_registration_4
P611: unregister_on_reboot_4
P612: register_expiration_4
P613: local_sip_port_4
P614: nat_traversal_true_4
P615: subscribe_for_mwi_4
P616: send_dtmf_4 # 0=in-audio, 1=RTP (RFC2833), 2=SIP INFO, 8=in-audio, 1=RTP (RFC2833), 2=SIP INFO
P617: account_name_4
P618: proxy_require_4
P619: dial_plan_prefix_4
P620: enable_call_features_4
P621: send_anonymous_4
P622: early_dial_4
P623: account_ring_tone_4 # 0, 1, 2, 3
P624: special_feature_4 # 100 = Standard
                        # 101 = Nortel MCS
                        # 102 = Broadsoft
                        # 103 = Howdy
                        # 104 = Sonus
                        # 105 = 3COM
                        # 108 = CBCOM
                        # 109 = RNX
                        # 110 = Sylantro
P625: auto_answer_4
P626: voicemail_userid_4
P627: min_session_expiration_4
P628: caller_request_timer_4
P629: callee_request_timer_4
P630: force_timer_4
P631: force_invite_4
P632: uac_specify_refresher_4
P633: uas_specify_refresher_4
P634: session_expiration_4
P635: enable_100rel_4
P638: allow_auto_answer_by_caller_info
P639: turn_off_speaker_on_remote_disconnect
P640: sip_t1_imeout
P641: sip_t2_interval
P642: disable_missed_calls_4
P643: srtp_mode_4 # 0=Disabled, 1=Enabled but not forced, 2=Enabled and forced, 3=Optional
P644: eventlist_blf_uri_4
P646: anonymous_call_rejection_4 # 0=No, 1=Yes
P647: use_rfc3581_symmetric_routing_4 # 0=No, 1=Yes
P648: sip_transport_4 # 1=UDP, 2=TCP
P649: check_sip_user_id_for_incoming_invite_4 # 0=No, 1=Yes
P651: vocoder_1_4
P652: vocoder_2_4
P653: vocoder_3_4
P654: vocoder_4_4
P655: vocoder_5_4
P656: vocoder_6_4
P657: vocoder_7_4
P658: vocoder_8_4
P668: anonymous_method_4 # 0=From Header, 1=Privacy Header
P669: referto_use_target_contact_4 # 0=No, 1=Yes
P670: delayed_call_forward_wait_time_4
P671: sip_registration_failure_retry_wait_time_4
P676: ring_timeout_4
P687: disable_multiple_media_attribute_sdp_4 # 0=No, 1=Yes
P688: publish_for_presence_4 # 0=No, 1=Yes
P1300: headset_port_type # 0=2.5mm, 1=RJ22
P1301: headset_tx_gain # 0=0 dB, 1=-6dB, 2=+6dB
P1302: headset_rx_gain # 0=0 dB, 1=-6dB, 2=+6dB
P1303: intercom_user_id # (Account 1)
P1304: ldap_script_server_path
P1310: disable_direct_ip_calls # 0=No, 1=Yes
P1311: disable_conference # 0=No, 1=Yes
P1312: headset_key_mode # 0=default, 1=toggle
P1328: ring_timeout
P1329: lcd_contrast # 0 - 20
P1339: enable_mpk_sending_dtmf # 0=No, 1=Yes
P1340: disable_dnd # 0=No, 1=Yes
P1701: account_active_5 # 0 or 1
P1702: sip_server_5
P1703: outbound_proxy_5
P1704: sip_userid_5
P1705: authenticate_id_5
P1706: authenticate_password_5
P1707: name_5
P1708: use_dns_srv_5
P1709: userid_is_phone_number_5
P1710: sip_registration_5
P1711: unregister_on_reboot_5
P1712: register_expiration_5
P1713: local_sip_port_5
P1714: nat_traversal_true_5
P1715: subscribe_for_mwi_5
P1716: send_dtmf_5 # 0=in-audio, 1=RTP (RFC2833), 2=SIP INFO, 8=in-audio, 1=RTP (RFC2833), 2=SIP INFO
P1717: account_name_5
P1718: proxy_require_5
P1719: dial_plan_prefix_5
P1720: enable_call_features_5
P1721: send_anonymous_5
P1722: early_dial_5
P1723: account_ring_tone_5 # 0, 1, 2, 3
P1724: special_feature_5 # 100 = Standard
                        # 101 = Nortel MCS
                        # 102 = Broadsoft
                        # 103 = Howdy
                        # 104 = Sonus
                        # 105 = 3COM
                        # 108 = CBCOM
                        # 109 = RNX
                        # 110 = Sylantro
P1725: auto_answer_5
P1726: voicemail_userid_5
P1727: min_session_expiration_5
P1728: caller_request_timer_5
P1729: callee_request_timer_5
P1730: force_timer_5
P1731: force_invite_5
P1732: uac_specify_refresher_5
P1733: uas_specify_refresher_5
P1734: session_expiration_5
P1735: enable_100rel_5
P1738: allow_auto_answer_by_caller_info
P1739: turn_off_speaker_on_remote_disconnect
P1740: sip_t1_imeout
P1741: sip_t2_interval
P1742: disable_missed_calls_5
P1743: srtp_mode_5 # 0=Disabled, 1=Enabled but not forced, 2=Enabled and forced, 3=Optional
P1744: eventlist_blf_uri_5
P1746: anonymous_call_rejection_5 # 0=No, 1=Yes
P1747: use_rfc3581_symmetric_routing_5 # 0=No, 1=Yes
P1748: sip_transport_5 # 1=UDP, 2=TCP
P1749: check_sip_user_id_for_incoming_invite_5 # 0=No, 1=Yes
P1751: vocoder_1_5
P1752: vocoder_2_5
P1753: vocoder_3_5
P1754: vocoder_4_5
P1755: vocoder_5_5
P1756: vocoder_6_5
P1757: vocoder_7_5
P1758: vocoder_8_5
P1768: anonymous_method_5 # 0=From Header, 1=Privacy Header
P1769: referto_use_target_contact_5 # 0=No, 1=Yes
P1770: delayed_call_forward_wait_time_5
P1771: sip_registration_failure_retry_wait_time_5
P1776: ring_timeout_5
P1787: disable_multiple_media_attribute_sdp_5 # 0=No, 1=Yes
P1788: publish_for_presence_5 # 0=No, 1=Yes
P1801: account_active_6 # 0 or 1
P1802: sip_server_6
P1803: outbound_proxy_6
P1804: sip_userid_6
P1805: authenticate_id_6
P1806: authenticate_password_6
P1807: name_6
P1808: use_dns_srv_6
P1809: userid_is_phone_number_6
P1810: sip_registration_6
P1811: unregister_on_reboot_6
P1812: register_expiration_6
P1813: local_sip_port_6
P1814: nat_traversal_true_6
P1815: subscribe_for_mwi_6
P1816: send_dtmf_6 # 0=in-audio, 1=RTP (RFC2833), 2=SIP INFO, 8=in-audio, 1=RTP (RFC2833), 2=SIP INFO
P1817: account_name_6
P1818: proxy_require_6
P1819: dial_plan_prefix_6
P1820: enable_call_features_6
P1821: send_anonymous_6
P1822: early_dial_6
P1823: account_ring_tone_6 # 0, 1, 2, 3
P1824: special_feature_6 # 100 = Standard
                        # 101 = Nortel MCS
                        # 102 = Broadsoft
                        # 103 = Howdy
                        # 104 = Sonus
                        # 105 = 3COM
                        # 108 = CBCOM
                        # 109 = RNX
                        # 110 = Sylantro
P1825: auto_answer_6
P1826: voicemail_userid_6
P1827: min_session_expiration_6
P1828: caller_request_timer_6
P1829: callee_request_timer_6
P1830: force_timer_6
P1831: force_invite_6
P1832: uac_specify_refresher_6
P1833: uas_specify_refresher_6
P1834: session_expiration_6
P1835: enable_100rel_6
P1838: allow_auto_answer_by_caller_info
P1839: turn_off_speaker_on_remote_disconnect
P1840: sip_t1_imeout
P1841: sip_t2_interval
P1842: disable_missed_calls_6
P1843: srtp_mode_6 # 0=Disabled, 1=Enabled but not forced, 2=Enabled and forced, 3=Optional
P1844: eventlist_blf_uri_6
P1846: anonymous_call_rejection_6 # 0=No, 1=Yes
P1847: use_rfc3581_symmetric_routing_6 # 0=No, 1=Yes
P1848: sip_transport_6 # 1=UDP, 2=TCP
P1849: check_sip_user_id_for_incoming_invite_6 # 0=No, 1=Yes
P1851: vocoder_1_6
P1852: vocoder_2_6
P1853: vocoder_3_6
P1854: vocoder_4_6
P1855: vocoder_5_6
P1856: vocoder_6_6
P1857: vocoder_7_6
P1858: vocoder_8_6
P1868: anonymous_method_6 # 0=From Header, 1=Privacy Header
P1869: referto_use_target_contact_6 # 0=No, 1=Yes
P1870: delayed_call_forward_wait_time_6
P1871: sip_registration_failure_retry_wait_time_6
P1876: ring_timeout_6
P1887: disable_multiple_media_attribute_sdp_6 # 0=No, 1=Yes
P1888: publish_for_presence_6 # 0=No, 1=Yes
P6001: multi_purpose_ext_key_1	# 0 = speed_dial, 1 = asterisk_blf, 2 = presence_watcher, 3 = eventlist_blf
P6002: multi_purpose_ext_key_2	# 0 = speed_dial, 1 = asterisk_blf, 2 = presence_watcher, 3 = eventlist_blf
P6003: multi_purpose_ext_key_3	# 0 = speed_dial, 1 = asterisk_blf, 2 = presence_watcher, 3 = eventlist_blf
P6004: multi_purpose_ext_key_4	# 0 = speed_dial, 1 = asterisk_blf, 2 = presence_watcher, 3 = eventlist_blf
P6005: multi_purpose_ext_key_5	# 0 = speed_dial, 1 = asterisk_blf, 2 = presence_watcher, 3 = eventlist_blf
P6006: multi_purpose_ext_key_6	# 0 = speed_dial, 1 = asterisk_blf, 2 = presence_watcher, 3 = eventlist_blf
P6007: multi_purpose_ext_key_7	# 0 = speed_dial, 1 = asterisk_blf, 2 = presence_watcher, 3 = eventlist_blf
P6008: multi_purpose_ext_key_8	# 0 = speed_dial, 1 = asterisk_blf, 2 = presence_watcher, 3 = eventlist_blf
P6009: multi_purpose_ext_key_9	# 0 = speed_dial, 1 = asterisk_blf, 2 = presence_watcher, 3 = eventlist_blf
P6010: multi_purpose_ext_key_10	# 0 = speed_dial, 1 = asterisk_blf, 2 = presence_watcher, 3 = eventlist_blf
P6011: multi_purpose_ext_key_11	# 0 = speed_dial, 1 = asterisk_blf, 2 = presence_watcher, 3 = eventlist_blf
P6012: multi_purpose_ext_key_12	# 0 = speed_dial, 1 = asterisk_blf, 2 = presence_watcher, 3 = eventlist_blf
P6013: multi_purpose_ext_key_13	# 0 = speed_dial, 1 = asterisk_blf, 2 = presence_watcher, 3 = eventlist_blf
P6014: multi_purpose_ext_key_14	# 0 = speed_dial, 1 = asterisk_blf, 2 = presence_watcher, 3 = eventlist_blf
P6015: multi_purpose_ext_key_15	# 0 = speed_dial, 1 = asterisk_blf, 2 = presence_watcher, 3 = eventlist_blf
P6016: multi_purpose_ext_key_16	# 0 = speed_dial, 1 = asterisk_blf, 2 = presence_watcher, 3 = eventlist_blf
P6017: multi_purpose_ext_key_17	# 0 = speed_dial, 1 = asterisk_blf, 2 = presence_watcher, 3 = eventlist_blf
P6018: multi_purpose_ext_key_18	# 0 = speed_dial, 1 = asterisk_blf, 2 = presence_watcher, 3 = eventlist_blf
P6019: multi_purpose_ext_key_19	# 0 = speed_dial, 1 = asterisk_blf, 2 = presence_watcher, 3 = eventlist_blf
P6020: multi_purpose_ext_key_20	# 0 = speed_dial, 1 = asterisk_blf, 2 = presence_watcher, 3 = eventlist_blf
P6021: multi_purpose_ext_key_21	# 0 = speed_dial, 1 = asterisk_blf, 2 = presence_watcher, 3 = eventlist_blf
P6022: multi_purpose_ext_key_22	# 0 = speed_dial, 1 = asterisk_blf, 2 = presence_watcher, 3 = eventlist_blf
P6023: multi_purpose_ext_key_23	# 0 = speed_dial, 1 = asterisk_blf, 2 = presence_watcher, 3 = eventlist_blf
P6024: multi_purpose_ext_key_24	# 0 = speed_dial, 1 = asterisk_blf, 2 = presence_watcher, 3 = eventlist_blf
P6025: multi_purpose_ext_key_25	# 0 = speed_dial, 1 = asterisk_blf, 2 = presence_watcher, 3 = eventlist_blf
P6026: multi_purpose_ext_key_26	# 0 = speed_dial, 1 = asterisk_blf, 2 = presence_watcher, 3 = eventlist_blf
P6027: multi_purpose_ext_key_27	# 0 = speed_dial, 1 = asterisk_blf, 2 = presence_watcher, 3 = eventlist_blf
P6028: multi_purpose_ext_key_28	# 0 = speed_dial, 1 = asterisk_blf, 2 = presence_watcher, 3 = eventlist_blf
P6029: multi_purpose_ext_key_29	# 0 = speed_dial, 1 = asterisk_blf, 2 = presence_watcher, 3 = eventlist_blf
P6030: multi_purpose_ext_key_30	# 0 = speed_dial, 1 = asterisk_blf, 2 = presence_watcher, 3 = eventlist_blf
P6031: multi_purpose_ext_key_31	# 0 = speed_dial, 1 = asterisk_blf, 2 = presence_watcher, 3 = eventlist_blf
P6032: multi_purpose_ext_key_32	# 0 = speed_dial, 1 = asterisk_blf, 2 = presence_watcher, 3 = eventlist_blf
P6033: multi_purpose_ext_key_33	# 0 = speed_dial, 1 = asterisk_blf, 2 = presence_watcher, 3 = eventlist_blf
P6034: multi_purpose_ext_key_34	# 0 = speed_dial, 1 = asterisk_blf, 2 = presence_watcher, 3 = eventlist_blf
P6035: multi_purpose_ext_key_35	# 0 = speed_dial, 1 = asterisk_blf, 2 = presence_watcher, 3 = eventlist_blf
P6036: multi_purpose_ext_key_36	# 0 = speed_dial, 1 = asterisk_blf, 2 = presence_watcher, 3 = eventlist_blf
P6037: multi_purpose_ext_key_37	# 0 = speed_dial, 1 = asterisk_blf, 2 = presence_watcher, 3 = eventlist_blf
P6038: multi_purpose_ext_key_38	# 0 = speed_dial, 1 = asterisk_blf, 2 = presence_watcher, 3 = eventlist_blf
P6039: multi_purpose_ext_key_39	# 0 = speed_dial, 1 = asterisk_blf, 2 = presence_watcher, 3 = eventlist_blf
P6040: multi_purpose_ext_key_40	# 0 = speed_dial, 1 = asterisk_blf, 2 = presence_watcher, 3 = eventlist_blf
P6041: multi_purpose_ext_key_41	# 0 = speed_dial, 1 = asterisk_blf, 2 = presence_watcher, 3 = eventlist_blf
P6042: multi_purpose_ext_key_42	# 0 = speed_dial, 1 = asterisk_blf, 2 = presence_watcher, 3 = eventlist_blf
P6043: multi_purpose_ext_key_43	# 0 = speed_dial, 1 = asterisk_blf, 2 = presence_watcher, 3 = eventlist_blf
P6044: multi_purpose_ext_key_44	# 0 = speed_dial, 1 = asterisk_blf, 2 = presence_watcher, 3 = eventlist_blf
P6045: multi_purpose_ext_key_45	# 0 = speed_dial, 1 = asterisk_blf, 2 = presence_watcher, 3 = eventlist_blf
P6046: multi_purpose_ext_key_46	# 0 = speed_dial, 1 = asterisk_blf, 2 = presence_watcher, 3 = eventlist_blf
P6047: multi_purpose_ext_key_47	# 0 = speed_dial, 1 = asterisk_blf, 2 = presence_watcher, 3 = eventlist_blf
P6048: multi_purpose_ext_key_48	# 0 = speed_dial, 1 = asterisk_blf, 2 = presence_watcher, 3 = eventlist_blf
P6049: multi_purpose_ext_key_49	# 0 = speed_dial, 1 = asterisk_blf, 2 = presence_watcher, 3 = eventlist_blf
P6050: multi_purpose_ext_key_50	# 0 = speed_dial, 1 = asterisk_blf, 2 = presence_watcher, 3 = eventlist_blf
P6051: multi_purpose_ext_key_51	# 0 = speed_dial, 1 = asterisk_blf, 2 = presence_watcher, 3 = eventlist_blf
P6052: multi_purpose_ext_key_52	# 0 = speed_dial, 1 = asterisk_blf, 2 = presence_watcher, 3 = eventlist_blf
P6053: multi_purpose_ext_key_53	# 0 = speed_dial, 1 = asterisk_blf, 2 = presence_watcher, 3 = eventlist_blf
P6054: multi_purpose_ext_key_54	# 0 = speed_dial, 1 = asterisk_blf, 2 = presence_watcher, 3 = eventlist_blf
P6055: multi_purpose_ext_key_55	# 0 = speed_dial, 1 = asterisk_blf, 2 = presence_watcher, 3 = eventlist_blf
P6056: multi_purpose_ext_key_56	# 0 = speed_dial, 1 = asterisk_blf, 2 = presence_watcher, 3 = eventlist_blf
P6057: multi_purpose_ext_key_57	# 0 = speed_dial, 1 = asterisk_blf, 2 = presence_watcher, 3 = eventlist_blf
P6058: multi_purpose_ext_key_58	# 0 = speed_dial, 1 = asterisk_blf, 2 = presence_watcher, 3 = eventlist_blf
P6059: multi_purpose_ext_key_59	# 0 = speed_dial, 1 = asterisk_blf, 2 = presence_watcher, 3 = eventlist_blf
P6060: multi_purpose_ext_key_60	# 0 = speed_dial, 1 = asterisk_blf, 2 = presence_watcher, 3 = eventlist_blf
P6061: multi_purpose_ext_key_61	# 0 = speed_dial, 1 = asterisk_blf, 2 = presence_watcher, 3 = eventlist_blf
P6062: multi_purpose_ext_key_62	# 0 = speed_dial, 1 = asterisk_blf, 2 = presence_watcher, 3 = eventlist_blf
P6063: multi_purpose_ext_key_63	# 0 = speed_dial, 1 = asterisk_blf, 2 = presence_watcher, 3 = eventlist_blf
P6064: multi_purpose_ext_key_64	# 0 = speed_dial, 1 = asterisk_blf, 2 = presence_watcher, 3 = eventlist_blf
P6065: multi_purpose_ext_key_65	# 0 = speed_dial, 1 = asterisk_blf, 2 = presence_watcher, 3 = eventlist_blf
P6066: multi_purpose_ext_key_66	# 0 = speed_dial, 1 = asterisk_blf, 2 = presence_watcher, 3 = eventlist_blf
P6067: multi_purpose_ext_key_67	# 0 = speed_dial, 1 = asterisk_blf, 2 = presence_watcher, 3 = eventlist_blf
P6068: multi_purpose_ext_key_68	# 0 = speed_dial, 1 = asterisk_blf, 2 = presence_watcher, 3 = eventlist_blf
P6069: multi_purpose_ext_key_69	# 0 = speed_dial, 1 = asterisk_blf, 2 = presence_watcher, 3 = eventlist_blf
P6070: multi_purpose_ext_key_70	# 0 = speed_dial, 1 = asterisk_blf, 2 = presence_watcher, 3 = eventlist_blf
P6071: multi_purpose_ext_key_71	# 0 = speed_dial, 1 = asterisk_blf, 2 = presence_watcher, 3 = eventlist_blf
P6072: multi_purpose_ext_key_72	# 0 = speed_dial, 1 = asterisk_blf, 2 = presence_watcher, 3 = eventlist_blf
P6073: multi_purpose_ext_key_73	# 0 = speed_dial, 1 = asterisk_blf, 2 = presence_watcher, 3 = eventlist_blf
P6074: multi_purpose_ext_key_74	# 0 = speed_dial, 1 = asterisk_blf, 2 = presence_watcher, 3 = eventlist_blf
P6075: multi_purpose_ext_key_75	# 0 = speed_dial, 1 = asterisk_blf, 2 = presence_watcher, 3 = eventlist_blf
P6076: multi_purpose_ext_key_76	# 0 = speed_dial, 1 = asterisk_blf, 2 = presence_watcher, 3 = eventlist_blf
P6077: multi_purpose_ext_key_77	# 0 = speed_dial, 1 = asterisk_blf, 2 = presence_watcher, 3 = eventlist_blf
P6078: multi_purpose_ext_key_78	# 0 = speed_dial, 1 = asterisk_blf, 2 = presence_watcher, 3 = eventlist_blf
P6079: multi_purpose_ext_key_79	# 0 = speed_dial, 1 = asterisk_blf, 2 = presence_watcher, 3 = eventlist_blf
P6080: multi_purpose_ext_key_80	# 0 = speed_dial, 1 = asterisk_blf, 2 = presence_watcher, 3 = eventlist_blf
P6081: multi_purpose_ext_key_81	# 0 = speed_dial, 1 = asterisk_blf, 2 = presence_watcher, 3 = eventlist_blf
P6082: multi_purpose_ext_key_82	# 0 = speed_dial, 1 = asterisk_blf, 2 = presence_watcher, 3 = eventlist_blf
P6083: multi_purpose_ext_key_83	# 0 = speed_dial, 1 = asterisk_blf, 2 = presence_watcher, 3 = eventlist_blf
P6084: multi_purpose_ext_key_84	# 0 = speed_dial, 1 = asterisk_blf, 2 = presence_watcher, 3 = eventlist_blf
P6085: multi_purpose_ext_key_85	# 0 = speed_dial, 1 = asterisk_blf, 2 = presence_watcher, 3 = eventlist_blf
P6086: multi_purpose_ext_key_86	# 0 = speed_dial, 1 = asterisk_blf, 2 = presence_watcher, 3 = eventlist_blf
P6087: multi_purpose_ext_key_87	# 0 = speed_dial, 1 = asterisk_blf, 2 = presence_watcher, 3 = eventlist_blf
P6088: multi_purpose_ext_key_88	# 0 = speed_dial, 1 = asterisk_blf, 2 = presence_watcher, 3 = eventlist_blf
P6089: multi_purpose_ext_key_89	# 0 = speed_dial, 1 = asterisk_blf, 2 = presence_watcher, 3 = eventlist_blf
P6090: multi_purpose_ext_key_90	# 0 = speed_dial, 1 = asterisk_blf, 2 = presence_watcher, 3 = eventlist_blf
P6091: multi_purpose_ext_key_91	# 0 = speed_dial, 1 = asterisk_blf, 2 = presence_watcher, 3 = eventlist_blf
P6092: multi_purpose_ext_key_92	# 0 = speed_dial, 1 = asterisk_blf, 2 = presence_watcher, 3 = eventlist_blf
P6093: multi_purpose_ext_key_93	# 0 = speed_dial, 1 = asterisk_blf, 2 = presence_watcher, 3 = eventlist_blf
P6094: multi_purpose_ext_key_94	# 0 = speed_dial, 1 = asterisk_blf, 2 = presence_watcher, 3 = eventlist_blf
P6095: multi_purpose_ext_key_95	# 0 = speed_dial, 1 = asterisk_blf, 2 = presence_watcher, 3 = eventlist_blf
P6096: multi_purpose_ext_key_96	# 0 = speed_dial, 1 = asterisk_blf, 2 = presence_watcher, 3 = eventlist_blf
P6097: multi_purpose_ext_key_97	# 0 = speed_dial, 1 = asterisk_blf, 2 = presence_watcher, 3 = eventlist_blf
P6098: multi_purpose_ext_key_98	# 0 = speed_dial, 1 = asterisk_blf, 2 = presence_watcher, 3 = eventlist_blf
P6099: multi_purpose_ext_key_99	# 0 = speed_dial, 1 = asterisk_blf, 2 = presence_watcher, 3 = eventlist_blf
P6100: multi_purpose_ext_key_100	# 0 = speed_dial, 1 = asterisk_blf, 2 = presence_watcher, 3 = eventlist_blf
P6101: multi_purpose_ext_key_101	# 0 = speed_dial, 1 = asterisk_blf, 2 = presence_watcher, 3 = eventlist_blf
P6102: multi_purpose_ext_key_102	# 0 = speed_dial, 1 = asterisk_blf, 2 = presence_watcher, 3 = eventlist_blf
P6103: multi_purpose_ext_key_103	# 0 = speed_dial, 1 = asterisk_blf, 2 = presence_watcher, 3 = eventlist_blf
P6104: multi_purpose_ext_key_104	# 0 = speed_dial, 1 = asterisk_blf, 2 = presence_watcher, 3 = eventlist_blf
P6105: multi_purpose_ext_key_105	# 0 = speed_dial, 1 = asterisk_blf, 2 = presence_watcher, 3 = eventlist_blf
P6106: multi_purpose_ext_key_106	# 0 = speed_dial, 1 = asterisk_blf, 2 = presence_watcher, 3 = eventlist_blf
P6107: multi_purpose_ext_key_107	# 0 = speed_dial, 1 = asterisk_blf, 2 = presence_watcher, 3 = eventlist_blf
P6108: multi_purpose_ext_key_108	# 0 = speed_dial, 1 = asterisk_blf, 2 = presence_watcher, 3 = eventlist_blf
P6109: multi_purpose_ext_key_109	# 0 = speed_dial, 1 = asterisk_blf, 2 = presence_watcher, 3 = eventlist_blf
P6110: multi_purpose_ext_key_110	# 0 = speed_dial, 1 = asterisk_blf, 2 = presence_watcher, 3 = eventlist_blf
P6111: multi_purpose_ext_key_111	# 0 = speed_dial, 1 = asterisk_blf, 2 = presence_watcher, 3 = eventlist_blf
P6112: multi_purpose_ext_key_112	# 0 = speed_dial, 1 = asterisk_blf, 2 = presence_watcher, 3 = eventlist_blf
P6201: speed_dial_ext_1_account	# 0, 1, 2, 3, 4, 5
P6202: speed_dial_ext_2_account	# 0, 1, 2, 3, 4, 5
P6203: speed_dial_ext_3_account	# 0, 1, 2, 3, 4, 5
P6204: speed_dial_ext_4_account	# 0, 1, 2, 3, 4, 5
P6205: speed_dial_ext_5_account	# 0, 1, 2, 3, 4, 5
P6206: speed_dial_ext_6_account	# 0, 1, 2, 3, 4, 5
P6207: speed_dial_ext_7_account	# 0, 1, 2, 3, 4, 5
P6208: speed_dial_ext_8_account	# 0, 1, 2, 3, 4, 5
P6209: speed_dial_ext_9_account	# 0, 1, 2, 3, 4, 5
P6210: speed_dial_ext_10_account	# 0, 1, 2, 3, 4, 5
P6211: speed_dial_ext_11_account	# 0, 1, 2, 3, 4, 5
P6212: speed_dial_ext_12_account	# 0, 1, 2, 3, 4, 5
P6213: speed_dial_ext_13_account	# 0, 1, 2, 3, 4, 5
P6214: speed_dial_ext_14_account	# 0, 1, 2, 3, 4, 5
P6215: speed_dial_ext_15_account	# 0, 1, 2, 3, 4, 5
P6216: speed_dial_ext_16_account	# 0, 1, 2, 3, 4, 5
P6217: speed_dial_ext_17_account	# 0, 1, 2, 3, 4, 5
P6218: speed_dial_ext_18_account	# 0, 1, 2, 3, 4, 5
P6219: speed_dial_ext_19_account	# 0, 1, 2, 3, 4, 5
P6220: speed_dial_ext_20_account	# 0, 1, 2, 3, 4, 5
P6221: speed_dial_ext_21_account	# 0, 1, 2, 3, 4, 5
P6222: speed_dial_ext_22_account	# 0, 1, 2, 3, 4, 5
P6223: speed_dial_ext_23_account	# 0, 1, 2, 3, 4, 5
P6224: speed_dial_ext_24_account	# 0, 1, 2, 3, 4, 5
P6225: speed_dial_ext_25_account	# 0, 1, 2, 3, 4, 5
P6226: speed_dial_ext_26_account	# 0, 1, 2, 3, 4, 5
P6227: speed_dial_ext_27_account	# 0, 1, 2, 3, 4, 5
P6228: speed_dial_ext_28_account	# 0, 1, 2, 3, 4, 5
P6229: speed_dial_ext_29_account	# 0, 1, 2, 3, 4, 5
P6230: speed_dial_ext_30_account	# 0, 1, 2, 3, 4, 5
P6231: speed_dial_ext_31_account	# 0, 1, 2, 3, 4, 5
P6232: speed_dial_ext_32_account	# 0, 1, 2, 3, 4, 5
P6233: speed_dial_ext_33_account	# 0, 1, 2, 3, 4, 5
P6234: speed_dial_ext_34_account	# 0, 1, 2, 3, 4, 5
P6235: speed_dial_ext_35_account	# 0, 1, 2, 3, 4, 5
P6236: speed_dial_ext_36_account	# 0, 1, 2, 3, 4, 5
P6237: speed_dial_ext_37_account	# 0, 1, 2, 3, 4, 5
P6238: speed_dial_ext_38_account	# 0, 1, 2, 3, 4, 5
P6239: speed_dial_ext_39_account	# 0, 1, 2, 3, 4, 5
P6240: speed_dial_ext_40_account	# 0, 1, 2, 3, 4, 5
P6241: speed_dial_ext_41_account	# 0, 1, 2, 3, 4, 5
P6242: speed_dial_ext_42_account	# 0, 1, 2, 3, 4, 5
P6243: speed_dial_ext_43_account	# 0, 1, 2, 3, 4, 5
P6244: speed_dial_ext_44_account	# 0, 1, 2, 3, 4, 5
P6245: speed_dial_ext_45_account	# 0, 1, 2, 3, 4, 5
P6246: speed_dial_ext_46_account	# 0, 1, 2, 3, 4, 5
P6247: speed_dial_ext_47_account	# 0, 1, 2, 3, 4, 5
P6248: speed_dial_ext_48_account	# 0, 1, 2, 3, 4, 5
P6249: speed_dial_ext_49_account	# 0, 1, 2, 3, 4, 5
P6250: speed_dial_ext_50_account	# 0, 1, 2, 3, 4, 5
P6251: speed_dial_ext_51_account	# 0, 1, 2, 3, 4, 5
P6252: speed_dial_ext_52_account	# 0, 1, 2, 3, 4, 5
P6253: speed_dial_ext_53_account	# 0, 1, 2, 3, 4, 5
P6254: speed_dial_ext_54_account	# 0, 1, 2, 3, 4, 5
P6255: speed_dial_ext_55_account	# 0, 1, 2, 3, 4, 5
P6256: speed_dial_ext_56_account	# 0, 1, 2, 3, 4, 5
P6257: speed_dial_ext_57_account	# 0, 1, 2, 3, 4, 5
P6258: speed_dial_ext_58_account	# 0, 1, 2, 3, 4, 5
P6259: speed_dial_ext_59_account	# 0, 1, 2, 3, 4, 5
P6260: speed_dial_ext_60_account	# 0, 1, 2, 3, 4, 5
P6261: speed_dial_ext_61_account	# 0, 1, 2, 3, 4, 5
P6262: speed_dial_ext_62_account	# 0, 1, 2, 3, 4, 5
P6263: speed_dial_ext_63_account	# 0, 1, 2, 3, 4, 5
P6264: speed_dial_ext_64_account	# 0, 1, 2, 3, 4, 5
P6265: speed_dial_ext_65_account	# 0, 1, 2, 3, 4, 5
P6266: speed_dial_ext_66_account	# 0, 1, 2, 3, 4, 5
P6267: speed_dial_ext_67_account	# 0, 1, 2, 3, 4, 5
P6268: speed_dial_ext_68_account	# 0, 1, 2, 3, 4, 5
P6269: speed_dial_ext_69_account	# 0, 1, 2, 3, 4, 5
P6270: speed_dial_ext_70_account	# 0, 1, 2, 3, 4, 5
P6271: speed_dial_ext_71_account	# 0, 1, 2, 3, 4, 5
P6272: speed_dial_ext_72_account	# 0, 1, 2, 3, 4, 5
P6273: speed_dial_ext_73_account	# 0, 1, 2, 3, 4, 5
P6274: speed_dial_ext_74_account	# 0, 1, 2, 3, 4, 5
P6275: speed_dial_ext_75_account	# 0, 1, 2, 3, 4, 5
P6276: speed_dial_ext_76_account	# 0, 1, 2, 3, 4, 5
P6277: speed_dial_ext_77_account	# 0, 1, 2, 3, 4, 5
P6278: speed_dial_ext_78_account	# 0, 1, 2, 3, 4, 5
P6279: speed_dial_ext_79_account	# 0, 1, 2, 3, 4, 5
P6280: speed_dial_ext_80_account	# 0, 1, 2, 3, 4, 5
P6281: speed_dial_ext_81_account	# 0, 1, 2, 3, 4, 5
P6282: speed_dial_ext_82_account	# 0, 1, 2, 3, 4, 5
P6283: speed_dial_ext_83_account	# 0, 1, 2, 3, 4, 5
P6284: speed_dial_ext_84_account	# 0, 1, 2, 3, 4, 5
P6285: speed_dial_ext_85_account	# 0, 1, 2, 3, 4, 5
P6286: speed_dial_ext_86_account	# 0, 1, 2, 3, 4, 5
P6287: speed_dial_ext_87_account	# 0, 1, 2, 3, 4, 5
P6288: speed_dial_ext_88_account	# 0, 1, 2, 3, 4, 5
P6289: speed_dial_ext_89_account	# 0, 1, 2, 3, 4, 5
P6290: speed_dial_ext_90_account	# 0, 1, 2, 3, 4, 5
P6291: speed_dial_ext_91_account	# 0, 1, 2, 3, 4, 5
P6292: speed_dial_ext_92_account	# 0, 1, 2, 3, 4, 5
P6293: speed_dial_ext_93_account	# 0, 1, 2, 3, 4, 5
P6294: speed_dial_ext_94_account	# 0, 1, 2, 3, 4, 5
P6295: speed_dial_ext_95_account	# 0, 1, 2, 3, 4, 5
P6296: speed_dial_ext_96_account	# 0, 1, 2, 3, 4, 5
P6297: speed_dial_ext_97_account	# 0, 1, 2, 3, 4, 5
P6298: speed_dial_ext_98_account	# 0, 1, 2, 3, 4, 5
P6299: speed_dial_ext_99_account	# 0, 1, 2, 3, 4, 5
P6300: speed_dial_ext_100_account	# 0, 1, 2, 3, 4, 5
P6301: speed_dial_ext_101_account	# 0, 1, 2, 3, 4, 5
P6302: speed_dial_ext_102_account	# 0, 1, 2, 3, 4, 5
P6303: speed_dial_ext_103_account	# 0, 1, 2, 3, 4, 5
P6304: speed_dial_ext_104_account	# 0, 1, 2, 3, 4, 5
P6305: speed_dial_ext_105_account	# 0, 1, 2, 3, 4, 5
P6306: speed_dial_ext_106_account	# 0, 1, 2, 3, 4, 5
P6307: speed_dial_ext_107_account	# 0, 1, 2, 3, 4, 5
P6308: speed_dial_ext_108_account	# 0, 1, 2, 3, 4, 5
P6309: speed_dial_ext_109_account	# 0, 1, 2, 3, 4, 5
P6310: speed_dial_ext_110_account	# 0, 1, 2, 3, 4, 5
P6311: speed_dial_ext_111_account	# 0, 1, 2, 3, 4, 5
P6312: speed_dial_ext_112_account	# 0, 1, 2, 3, 4, 5
P6401: speed_dial_ext_1_name
P6402: speed_dial_ext_2_name
P6403: speed_dial_ext_3_name
P6404: speed_dial_ext_4_name
P6405: speed_dial_ext_5_name
P6406: speed_dial_ext_6_name
P6407: speed_dial_ext_7_name
P6408: speed_dial_ext_8_name
P6409: speed_dial_ext_9_name
P6410: speed_dial_ext_10_name
P6411: speed_dial_ext_11_name
P6412: speed_dial_ext_12_name
P6413: speed_dial_ext_13_name
P6414: speed_dial_ext_14_name
P6415: speed_dial_ext_15_name
P6416: speed_dial_ext_16_name
P6417: speed_dial_ext_17_name
P6418: speed_dial_ext_18_name
P6419: speed_dial_ext_19_name
P6420: speed_dial_ext_20_name
P6421: speed_dial_ext_21_name
P6422: speed_dial_ext_22_name
P6423: speed_dial_ext_23_name
P6424: speed_dial_ext_24_name
P6425: speed_dial_ext_25_name
P6426: speed_dial_ext_26_name
P6427: speed_dial_ext_27_name
P6428: speed_dial_ext_28_name
P6429: speed_dial_ext_29_name
P6430: speed_dial_ext_30_name
P6431: speed_dial_ext_31_name
P6432: speed_dial_ext_32_name
P6433: speed_dial_ext_33_name
P6434: speed_dial_ext_34_name
P6435: speed_dial_ext_35_name
P6436: speed_dial_ext_36_name
P6437: speed_dial_ext_37_name
P6438: speed_dial_ext_38_name
P6439: speed_dial_ext_39_name
P6440: speed_dial_ext_40_name
P6441: speed_dial_ext_41_name
P6442: speed_dial_ext_42_name
P6443: speed_dial_ext_43_name
P6444: speed_dial_ext_44_name
P6445: speed_dial_ext_45_name
P6446: speed_dial_ext_46_name
P6447: speed_dial_ext_47_name
P6448: speed_dial_ext_48_name
P6449: speed_dial_ext_49_name
P6450: speed_dial_ext_50_name
P6451: speed_dial_ext_51_name
P6452: speed_dial_ext_52_name
P6453: speed_dial_ext_53_name
P6454: speed_dial_ext_54_name
P6455: speed_dial_ext_55_name
P6456: speed_dial_ext_56_name
P6457: speed_dial_ext_57_name
P6458: speed_dial_ext_58_name
P6459: speed_dial_ext_59_name
P6460: speed_dial_ext_60_name
P6461: speed_dial_ext_61_name
P6462: speed_dial_ext_62_name
P6463: speed_dial_ext_63_name
P6464: speed_dial_ext_64_name
P6465: speed_dial_ext_65_name
P6466: speed_dial_ext_66_name
P6467: speed_dial_ext_67_name
P6468: speed_dial_ext_68_name
P6469: speed_dial_ext_69_name
P6470: speed_dial_ext_70_name
P6471: speed_dial_ext_71_name
P6472: speed_dial_ext_72_name
P6473: speed_dial_ext_73_name
P6474: speed_dial_ext_74_name
P6475: speed_dial_ext_75_name
P6476: speed_dial_ext_76_name
P6477: speed_dial_ext_77_name
P6478: speed_dial_ext_78_name
P6479: speed_dial_ext_79_name
P6480: speed_dial_ext_80_name
P6481: speed_dial_ext_81_name
P6482: speed_dial_ext_82_name
P6483: speed_dial_ext_83_name
P6484: speed_dial_ext_84_name
P6485: speed_dial_ext_85_name
P6486: speed_dial_ext_86_name
P6487: speed_dial_ext_87_name
P6488: speed_dial_ext_88_name
P6489: speed_dial_ext_89_name
P6490: speed_dial_ext_90_name
P6491: speed_dial_ext_91_name
P6492: speed_dial_ext_92_name
P6493: speed_dial_ext_93_name
P6494: speed_dial_ext_94_name
P6495: speed_dial_ext_95_name
P6496: speed_dial_ext_96_name
P6497: speed_dial_ext_97_name
P6498: speed_dial_ext_98_name
P6499: speed_dial_ext_99_name
P6500: speed_dial_ext_100_name
P6501: speed_dial_ext_101_name
P6502: speed_dial_ext_102_name
P6503: speed_dial_ext_103_name
P6504: speed_dial_ext_104_name
P6505: speed_dial_ext_105_name
P6506: speed_dial_ext_106_name
P6507: speed_dial_ext_107_name
P6508: speed_dial_ext_108_name
P6509: speed_dial_ext_109_name
P6510: speed_dial_ext_110_name
P6511: speed_dial_ext_111_name
P6512: speed_dial_ext_112_name
P6601: speed_dial_ext_1_userid
P6602: speed_dial_ext_2_userid
P6603: speed_dial_ext_3_userid
P6604: speed_dial_ext_4_userid
P6605: speed_dial_ext_5_userid
P6606: speed_dial_ext_6_userid
P6607: speed_dial_ext_7_userid
P6608: speed_dial_ext_8_userid
P6609: speed_dial_ext_9_userid
P6610: speed_dial_ext_10_userid
P6611: speed_dial_ext_11_userid
P6612: speed_dial_ext_12_userid
P6613: speed_dial_ext_13_userid
P6614: speed_dial_ext_14_userid
P6615: speed_dial_ext_15_userid
P6616: speed_dial_ext_16_userid
P6617: speed_dial_ext_17_userid
P6618: speed_dial_ext_18_userid
P6619: speed_dial_ext_19_userid
P6620: speed_dial_ext_20_userid
P6621: speed_dial_ext_21_userid
P6622: speed_dial_ext_22_userid
P6623: speed_dial_ext_23_userid
P6624: speed_dial_ext_24_userid
P6625: speed_dial_ext_25_userid
P6626: speed_dial_ext_26_userid
P6627: speed_dial_ext_27_userid
P6628: speed_dial_ext_28_userid
P6629: speed_dial_ext_29_userid
P6630: speed_dial_ext_30_userid
P6631: speed_dial_ext_31_userid
P6632: speed_dial_ext_32_userid
P6633: speed_dial_ext_33_userid
P6634: speed_dial_ext_34_userid
P6635: speed_dial_ext_35_userid
P6636: speed_dial_ext_36_userid
P6637: speed_dial_ext_37_userid
P6638: speed_dial_ext_38_userid
P6639: speed_dial_ext_39_userid
P6640: speed_dial_ext_40_userid
P6641: speed_dial_ext_41_userid
P6642: speed_dial_ext_42_userid
P6643: speed_dial_ext_43_userid
P6644: speed_dial_ext_44_userid
P6645: speed_dial_ext_45_userid
P6646: speed_dial_ext_46_userid
P6647: speed_dial_ext_47_userid
P6648: speed_dial_ext_48_userid
P6649: speed_dial_ext_49_userid
P6650: speed_dial_ext_50_userid
P6651: speed_dial_ext_51_userid
P6652: speed_dial_ext_52_userid
P6653: speed_dial_ext_53_userid
P6654: speed_dial_ext_54_userid
P6655: speed_dial_ext_55_userid
P6656: speed_dial_ext_56_userid
P6657: speed_dial_ext_57_userid
P6658: speed_dial_ext_58_userid
P6659: speed_dial_ext_59_userid
P6660: speed_dial_ext_60_userid
P6661: speed_dial_ext_61_userid
P6662: speed_dial_ext_62_userid
P6663: speed_dial_ext_63_userid
P6664: speed_dial_ext_64_userid
P6665: speed_dial_ext_65_userid
P6666: speed_dial_ext_66_userid
P6667: speed_dial_ext_67_userid
P6668: speed_dial_ext_68_userid
P6669: speed_dial_ext_69_userid
P6670: speed_dial_ext_70_userid
P6671: speed_dial_ext_71_userid
P6672: speed_dial_ext_72_userid
P6673: speed_dial_ext_73_userid
P6674: speed_dial_ext_74_userid
P6675: speed_dial_ext_75_userid
P6676: speed_dial_ext_76_userid
P6677: speed_dial_ext_77_userid
P6678: speed_dial_ext_78_userid
P6679: speed_dial_ext_79_userid
P6680: speed_dial_ext_80_userid
P6681: speed_dial_ext_81_userid
P6682: speed_dial_ext_82_userid
P6683: speed_dial_ext_83_userid
P6684: speed_dial_ext_84_userid
P6685: speed_dial_ext_85_userid
P6686: speed_dial_ext_86_userid
P6687: speed_dial_ext_87_userid
P6688: speed_dial_ext_88_userid
P6689: speed_dial_ext_89_userid
P6690: speed_dial_ext_90_userid
P6691: speed_dial_ext_91_userid
P6692: speed_dial_ext_92_userid
P6693: speed_dial_ext_93_userid
P6694: speed_dial_ext_94_userid
P6695: speed_dial_ext_95_userid
P6696: speed_dial_ext_96_userid
P6697: speed_dial_ext_97_userid
P6698: speed_dial_ext_98_userid
P6699: speed_dial_ext_99_userid
P6700: speed_dial_ext_100_userid
P6701: speed_dial_ext_101_userid
P6702: speed_dial_ext_102_userid
P6703: speed_dial_ext_103_userid
P6704: speed_dial_ext_104_userid
P6705: speed_dial_ext_105_userid
P6706: speed_dial_ext_106_userid
P6707: speed_dial_ext_107_userid
P6708: speed_dial_ext_108_userid
P6709: speed_dial_ext_109_userid
P6710: speed_dial_ext_110_userid
P6711: speed_dial_ext_111_userid
P6712: speed_dial_ext_112_userid
# End of the file