You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
kvirc/src/kvirc/sparser/kvi_sp_tables.cpp

1090 lines
61 KiB

//
// File : kvi_sp_tables.cpp
// Creation date : Sun Jun 30 2000 18:10:19 by Szymon Stefanek
//
// This file is part of the KVirc irc client distribution
// Copyright (C) 1999-2000 Szymon Stefanek (pragma at kvirc dot net)
//
// 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 opinion) 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.
//
#define __KVIRC__
#include "kvi_sparser.h"
// FIXME: #warning "Reorder this table!"
#define PTM(__m) KVI_PTR2MEMBER(KviServerParser::__m)
KviLiteralMessageParseStruct KviServerParser::m_literalParseProcTable[]=
{
{ "PRIVMSG" , PTM(parseLiteralPrivmsg)},
{ "PING" , PTM(parseLiteralPing) },
{ "MODE" , PTM(parseLiteralMode) },
{ "TOPIC" , PTM(parseLiteralTopic) },
{ "JOIN" , PTM(parseLiteralJoin) },
{ "PART" , PTM(parseLiteralPart) },
{ "QUIT" , PTM(parseLiteralQuit) },
{ "NICK" , PTM(parseLiteralNick) },
{ "KICK" , PTM(parseLiteralKick) },
{ "NOTICE" , PTM(parseLiteralNotice) },
{ "INVITE" , PTM(parseLiteralInvite) },
{ "WALLOPS" , PTM(parseLiteralWallops)},
{ "PONG" , PTM(parseLiteralPong) },
{ "ERROR" , PTM(parseLiteralError) },
{ 0 , 0 }
};
// FIXME: #warning "Merge these two tables into one"
KviCtcpMessageParseStruct KviServerParser::m_ctcpRequestParseProcTable[]=
{
{ "PING" , PTM(parseCtcpRequestPing) , 0 },
{ "VERSION" , PTM(parseCtcpRequestVersion) , 0 },
{ "USERINFO" , PTM(parseCtcpRequestUserinfo) , 0 },
{ "CLIENTINFO" , PTM(parseCtcpRequestClientinfo) , 0 },
{ "FINGER" , PTM(parseCtcpRequestFinger) , 0 },
{ "SOURCE" , PTM(parseCtcpRequestSource) , 0 },
{ "TIME" , PTM(parseCtcpRequestTime) , 0 },
{ "ACTION" , PTM(parseCtcpRequestAction) , 0 },
{ "AVATAR" , PTM(parseCtcpRequestAvatar) , 0 },
{ "DCC" , PTM(parseCtcpRequestDcc) , 0 },
{ "TDCC" , PTM(parseCtcpRequestDcc) , 0 },
{ "XDCC" , PTM(parseCtcpRequestDcc) , 0 },
{ "PAGE" , PTM(parseCtcpRequestPage) , 0 },
{ 0 , 0 , 0 }
};
KviCtcpMessageParseStruct KviServerParser::m_ctcpReplyParseProcTable[]=
{
{ "AVATAR" , PTM(parseCtcpReplyAvatar) , 0 },
{ "ACTION" , PTM(parseCtcpRequestAction) , 0 },
{ "DCC" , PTM(parseCtcpRequestDcc) , 0 },
{ "TDCC" , PTM(parseCtcpRequestDcc) , 0 },
{ "XDCC" , PTM(parseCtcpRequestDcc) , 0 },
{ "VERSION" , PTM(parseCtcpReplyGeneric) , 0 },
{ "USERINFO" , PTM(parseCtcpReplyUserinfo) , 0 },
{ "CLIENTINFO" , PTM(parseCtcpReplyGeneric) , 0 },
{ "FINGER" , PTM(parseCtcpReplyGeneric) , 0 },
{ "TIME" , PTM(parseCtcpReplyGeneric) , 0 },
{ "SOURCE" , PTM(parseCtcpReplyGeneric) , 0 },
{ "PING" , PTM(parseCtcpReplyPing) , 0 },
{ "PAGE" , PTM(parseCtcpReplyGeneric) , 0 },
{ "LAGCHECK" , PTM(parseCtcpReplyLagcheck) , KVI_CTCP_MESSAGE_PARSE_TRIGGERNOEVENT },
{ 0 , 0 , 0 }
};
messageParseProc KviServerParser::m_numericParseProcTable[1000]=
{
0, // 000
PTM(parseNumeric001) , // 001 RPL_WELCOME
PTM(parseNumeric002) , // 002 RPL_YOURHOST
PTM(parseNumeric003) , // 003 RPL_CREATED
PTM(parseNumeric004) , // 004 RPL_MYINFO
PTM(parseNumeric005) , // 005 RPL_BOUNCE, RPL_PROTOCTL
0, // 006
0, // 007
0, // 008
0, // 009
0, // 010
0, // 011
0, // 012
0, // 013
0, // 014
0, // 015
0, // 016
0, // 017
0, // 018
0, // 019
PTM(parseNumeric020) , // 020
0, // 021
0, // 022
0, // 023
0, // 024
0, // 025
0, // 026
0, // 027
0, // 028
0, // 029
0, // 030
0, // 031
0, // 032
0, // 033
0, // 034
0, // 035
0, // 036
0, // 037
0, // 038
0, // 039
0, // 040
0, // 041
0, // 042
0, // 043
0, // 044
0, // 045
0, // 046
0, // 047
0, // 048
0, // 049
0, // 050
0, // 051
0, // 052
0, // 053
0, // 054
0, // 055
0, // 056
0, // 057
0, // 058
0, // 059
0, // 060
0, // 061
0, // 062
0, // 063
0, // 064
0, // 065
0, // 066
0, // 067
0, // 068
0, // 069
0, // 070
0, // 071
0, // 072
0, // 073
0, // 074
0, // 075
0, // 076
0, // 077
0, // 078
0, // 079
0, // 080
0, // 081
0, // 082
0, // 083
0, // 084
0, // 085
0, // 086
0, // 087
0, // 088
0, // 089
0, // 090
0, // 091
0, // 092
0, // 093
0, // 094
0, // 095
0, // 096
0, // 097
0, // 098
0, // 099
0, // 100
0, // 101
0, // 102
0, // 103
0, // 104
0, // 105
0, // 106
0, // 107
0, // 108
0, // 109
0, // 110
0, // 111
0, // 112
0, // 113
0, // 114
0, // 115
0, // 116
0, // 117
0, // 118
0, // 119
0, // 120
0, // 121
0, // 122
0, // 123
0, // 124
0, // 125
0, // 126
0, // 127
0, // 128
0, // 129
0, // 130
0, // 131
0, // 132
0, // 133
0, // 134
0, // 135
0, // 136
0, // 137
0, // 138
0, // 139
0, // 140
0, // 141
0, // 142
0, // 143
0, // 144
0, // 145
0, // 146
0, // 147
0, // 148
0, // 149
0, // 150
0, // 151
0, // 152
0, // 153
0, // 154
0, // 155
0, // 156
0, // 157
0, // 158
0, // 159
0, // 160
0, // 161
0, // 162
0, // 163
0, // 164
0, // 165
0, // 166
0, // 167
0, // 168
0, // 169
0, // 170
0, // 171
0, // 172
0, // 173
0, // 174
0, // 175
0, // 176
0, // 177
0, // 178
0, // 179
0, // 180
0, // 181
0, // 182
0, // 183
0, // 184
0, // 185
0, // 186
0, // 187
0, // 188
0, // 189
0, // 190
0, // 191
0, // 192
0, // 193
0, // 194
0, // 195
0, // 196
0, // 197
0, // 198
0, // 199
0, // 200
0, // 201
0, // 202
0, // 203
0, // 204
0, // 205
0, // 206
0, // 207
0, // 208
0, // 209
0, // 210
0, // 211
0, // 212
0, // 213
0, // 214
0, // 215
0, // 216
0, // 217
0, // 218
PTM(parseNumericEndOfStats), // 219 RPL_ENDOFSTATS
0, // 220
PTM(parseNumericUserMode) , // 221 RPL_UMODEIS
PTM(parseNumericCodePageSet), // 222 RusNet Codepage set
0, // 223
0, // 224
0, // 225
0, // 226
0, // 227
0, // 228
0, // 229
0, // 230
0, // 231
0, // 232
0, // 233
0, // 234
0, // 235
0, // 236
0, // 237
0, // 238
PTM(parseNumericStats) , // 239 RPL_STATSIAUTH
PTM(parseNumericStats) , // 240 RPL_STATSVLINE
PTM(parseNumericStats) , // 241 RPL_STATSLLINE
PTM(parseNumericStats) , // 242 RPL_STATSUPTIME
PTM(parseNumericStats) , // 243 RPL_STATSOLINE
PTM(parseNumericStats) , // 244 RPL_STATSHLINE
PTM(parseNumericStats) , // 245 RPL_STATSSLINE
PTM(parseNumericStats) , // 246 RPL_STATSPING RPL_STATSTLINE
PTM(parseNumericStats) , // 247 RPL_STATSBLINE_I RPL_STATSGLINE RPL_STATSXLINE
PTM(parseNumericStats) , // 248 RPL_STATSDEFINE RPL_STATSULINE
PTM(parseNumericStats) , // 249 RPL_STATSDEBUG
PTM(parseNumericStats) , // 250 RPL_STATSCONN RPL_STATSDLINE_I
PTM(parseNumericStats) , // 251 RPL_LUSERCLIENT
PTM(parseNumericStats) , // 252 RPL_LUSEROP
PTM(parseNumericStats) , // 253 RPL_LUSERUNKNOWN
PTM(parseNumericStats) , // 254 RPL_LUSERCHANNELS
PTM(parseNumericStats) , // 255 RPL_LUSERME
PTM(parseNumericServerAdminInfoTitle) , // 256 RPL_ADMINME
PTM(parseNumericServerAdminInfoServerName) , // 257 RPL_ADMINLOC1
PTM(parseNumericServerAdminInfoAdminName) , // 258 RPL_ADMINLOC2
PTM(parseNumericServerAdminInfoAdminContact) , // 259 RPL_ADMINEMAIL
0, // 260
0, // 261
0, // 262
0, // 263
0, // 264
PTM(parseNumericStats) , // 265 RPL_LOCALUSERS
PTM(parseNumericStats) , // 266 RPL_GLOBALUSERS
PTM(parseNumericStats) , // 267 RPL_SHAREDUSERS
0, // 268
0, // 269
0, // 270
0, // 271
0, // 272
0, // 273
0, // 274
PTM(parseNumericWhoisOther) , // 275 RPL_WHOISSSL
0, // 276
0, // 277
0, // 278
0, // 279
0, // 280
0, // 281
0, // 282
0, // 283
0, // 284
0, // 285
0, // 286
0, // 287
0, // 288
0, // 289
0, // 290
0, // 291
0, // 292
0, // 293
0, // 294
0, // 295
0, // 296
0, // 297
0, // 298
0, // 299
0, // 300
PTM(parseNumericWhoisAway) , // 301
PTM(parseNumericUserhost) , // 302 RPL_USERHOST
PTM(parseNumericIsOn) , // 303 RPL_ISON
0, // 304
PTM(parseNumericBackFromAway) , // 305 RPL_UNAWAY
PTM(parseNumericAway) , // 306 RPL_NOWAWAY
PTM(parseNumericWhoisOther) , // 307 RPL_WHOISREGNICK
PTM(parseNumericWhoisOther) , // 308 RPL_WHOISADMIN
PTM(parseNumericWhoisOther) , // 309 RPL_WHOISSADMIN
PTM(parseNumericWhoisOther) , // 310 RPL_WHOISHELPOP
PTM(parseNumericWhoisUser) , // 311 RPL_WHOISUSER
PTM(parseNumericWhoisServer) , // 312 RPL_WHOISSERVER
PTM(parseNumericWhoisOther) , // 313 RPL_WHOISOPERATOR
PTM(parseNumericWhowasUser) , // 314 RPL_WHOWASUSER
PTM(parseNumericEndOfWho) , // 315 RPL_ENDOFWHO
PTM(parseNumericWhoisOther) , // 316 RPL_WHOISCHANOP
PTM(parseNumericWhoisIdle) , // 317 RPL_WHOISIDLE
PTM(parseNumericEndOfWhois) , // 318 RPL_ENDOFWHOIS
PTM(parseNumericWhoisChannels) , // 319 RPL_WHOISCHANNELS
PTM(parseNumericWhoisOther) , // 320 RPL_WHOISIDENTIFIED
PTM(parseNumericListStart) , // 321 RPL_LISTSTART
PTM(parseNumericList) , // 322 RPL_LIST
PTM(parseNumericListEnd) , // 323 RPL_LISTEND
PTM(parseNumericChannelModeIs) , // 324 RPL_CHANNELMODEIS
0, // 325
0, // 326
0, // 327
0, // 328
PTM(parseNumericCreationTime) , // 329 RPL_CREATIONTIME
PTM(parseNumericWhoisAuth) , // 330 RPL_WHOISAUTH
PTM(parseNumericNoTopic) , // 331 RPL_NOTOPIC
PTM(parseNumericTopic) , // 332 RPL_TOPIC
PTM(parseNumericTopicWhoTime) , // 333 RPL_TOPICWHOTIME
PTM(parseNumericCommandSyntax) , // 334 RPL_COMMANDSYNTAX
0, // 335
0, // 336
0, // 337
PTM(parseNumericWhoisOther), // 338 RPL_WHOISACTUALLY
PTM(parseNumericWhoisOther), // 339
0, // 340
PTM(parseNumericInviting) , // 351 RPL_INVITING
0, // 342
0, // 343
0, // 344
0, // 345
PTM(parseNumericInviteList) , // 346 RPL_INVITELIST
PTM(parseNumericEndOfInviteList) , // 347 RPL_ENDOFINVITELIST
PTM(parseNumericExceptList) , // 348 RPL_EXCEPTLIST
PTM(parseNumericEndOfExceptList) , // 349 RPL_ENDOFEXCEPTLIST
0, // 350
0, // 351
PTM(parseNumericWhoReply) , // 352 RPL_WHOREPLY
PTM(parseNumericNames) , // 353 RPL_NAMREPLY
0, // 354
0, // 355
0, // 356
0, // 357
0, // 358
0, // 359
0, // 360
0, // 361
0, // 362
0, // 363
PTM(parseNumericLinks) , // 364 RPL_LINKS
PTM(parseNumericEndOfLinks) , // 365 RPL_ENDOFLINKS
PTM(parseNumericEndOfNames) , // 366 RPL_ENDOFNAMES
PTM(parseNumericBanList) , // 367 RPL_BANLIST
PTM(parseNumericEndOfBanList) , // 368 RPL_ENDOFBANLIST
PTM(parseNumericEndOfWhowas) , // 369 RPL_ENDOFWHOWAS
0, // 370
PTM(parseNumericInfo) , // 371 RPL_INFO
PTM(parseNumericMotd) , // 372 RPL_MOTD
PTM(parseNumericInfoStart) , // 373 RPL_INFOSTART
PTM(parseNumericInfoEnd) , // 374 RPL_ENDOFINFO
PTM(parseNumericMotd) , // 375 RPL_MOTDSTART
PTM(parseNumericMotd) , // 376 RPL_ENDOFMOTD
PTM(parseNumericMotd) , // 377 RPL_MOTD2
PTM(parseNumericMotd) , // 378 RPL_MOTD3
0, // 379
0, // 380
0, // 381
0, // 382
0, // 383
0, // 384
0, // 385
0, // 386
0, // 387
0, // 388
0, // 389
0, // 390
PTM(parseNumericTime) , // 391 RPL_TIME
0, // 392
0, // 393
0, // 394
0, // 395
0, // 396
0, // 397
0, // 398
0, // 399
0, // 400
PTM(parseNumericNoSuchNick) , // 401 ERR_NOSUCHNICK
PTM(parseNumericNoSuchServer) , // 402 ERR_NOSUCHSERVER
PTM(parseNumericNoSuchChannel) , // 403 ERR_NOSUCHCHANNEL
PTM(parseNumericCannotSend) , // 404 ERR_CANNOTSENDTOCHAN
0, // 405
PTM(parseNumericNoSuchNick) , // 406 ERR_WASNOSUCHNICK
0, // 407
PTM(parseNumericCannotSendColor) , // 408 ERR_NOCOLORSONCHAN
0, // 409
0, // 410
0, // 411
0, // 412
0, // 413
0, // 414
0, // 415
0, // 416
0, // 417
0, // 418
0, // 419
0, // 420
0, // 421
0, // 422
0, // 423
0, // 424
0, // 425
0, // 426
0, // 427
0, // 428
0, // 429
0, // 430
0, // 431
PTM(parseNumericNicknameProblem) , // 432 ERR_ERRONEUSNICKNAME
PTM(parseNumericNicknameProblem) , // 433 ERR_NICKNAMEINUSE
0, // 434
0, // 435
0, // 436
PTM(parseNumericUnavailResource) , // 437 ERR_UNAVAILRESOURCE
0, // 438
0, // 439
0, // 440
0, // 441
0, // 442
0, // 443
0, // 444
0, // 445
0, // 446
0, // 447
0, // 448
0, // 449
0, // 450
0, // 451
0, // 452
0, // 453
0, // 454
0, // 455
0, // 456
0, // 457
0, // 458
0, // 459
0, // 460
0, // 461
0, // 462
0, // 463
0, // 464
0, // 465
0, // 466
PTM(otherChannelError), // 467 ERR_KEYSET
0, // 468
0, // 469
0, // 470
PTM(parseNumericCantJoinChannel) , // 471 ERR_CHANNELISFULL
PTM(otherChannelError), // 472 ERR_UNKNOWNMODE
PTM(parseNumericCantJoinChannel) , // 473 ERR_INVITEONLYCHAN
PTM(parseNumericCantJoinChannel) , // 474 ERR_BANNEDFROMCHAN
PTM(parseNumericCantJoinChannel) , // 475 ERR_BADCHANNELKEY
0, // 476
PTM(parseChannelHelp), // 477 RPL_CHANNELHELP
0, // 478
0, // 479
0, // 480
0, // 481
PTM(otherChannelError), // 482 ERR_CHANOPRIVSNEEDED
0, // 483
0, // 484
0, // 485
0, // 486
0, // 487
0, // 488
0, // 489
0, // 490
0, // 491
0, // 492
0, // 493
0, // 494
0, // 495
0, // 496
0, // 497
0, // 498
0, // 499
0, // 500
0, // 501
0, // 502
0, // 503
0, // 504
0, // 505
0, // 506
0, // 507
0, // 508
0, // 509
0, // 510
0, // 511
0, // 512
0, // 513
0, // 514
0, // 515
0, // 516
0, // 517
0, // 518
0, // 519
0, // 520
0, // 521
0, // 522
0, // 523
0, // 524
0, // 525
0, // 526
0, // 527
0, // 528
0, // 529
0, // 530
0, // 531
0, // 532
0, // 533
0, // 534
0, // 535
0, // 536
0, // 537
0, // 538
0, // 539
0, // 540
0, // 541
0, // 542
0, // 543
0, // 544
0, // 545
0, // 546
0, // 547
0, // 548
0, // 549
0, // 550
0, // 551
0, // 552
0, // 553
0, // 554
0, // 555
0, // 556
0, // 557
0, // 558
0, // 559
0, // 560
0, // 561
0, // 562
0, // 563
0, // 564
0, // 565
0, // 566
0, // 567
0, // 568
0, // 569
0, // 570
0, // 571
0, // 572
0, // 573
0, // 574
0, // 575
0, // 576
0, // 577
0, // 578
0, // 579
0, // 580
0, // 581
0, // 582
0, // 583
0, // 584
0, // 585
0, // 586
0, // 587
0, // 588
0, // 589
0, // 590
0, // 591
0, // 592
0, // 593
0, // 594
0, // 595
0, // 596
0, // 597
0, // 598
0, // 599
PTM(parseNumericWatch) , // 600 RPL_LOGON
PTM(parseNumericWatch) , // 601 RPL_LOGOFF
PTM(parseNumericWatch) , // 602 RPL_WATCHOFF
0, // 603 RPL_WATCHSTAT
PTM(parseNumericWatch) , // 604 RPL_NOWON
PTM(parseNumericWatch) , // 605 RPL_NOWOFF
0, // 606 RPL_WATCHLIST
0, // 607 RPL_ENDOFWATCH
0, // 608
0, // 609
0, // 610
0, // 611
0, // 612
0, // 613
0, // 614
0, // 615
0, // 616
0, // 617
0, // 618
0, // 619
0, // 620
0, // 621
0, // 622
0, // 623
0, // 624
0, // 625
0, // 626
0, // 627
0, // 628
0, // 629
0, // 630
0, // 631
0, // 632
0, // 633
0, // 634
0, // 635
0, // 636
0, // 637
0, // 638
0, // 639
0, // 640
0, // 641
0, // 642
0, // 643
0, // 644
0, // 645
0, // 646
0, // 647
0, // 648
0, // 649
0, // 650
0, // 651
0, // 652
0, // 653
0, // 654
0, // 655
0, // 656
0, // 657
0, // 658
0, // 659
0, // 660
0, // 661
0, // 662
0, // 663
0, // 664
0, // 665
0, // 666
0, // 667
0, // 668
0, // 669
0, // 670
0, // 671
0, // 672
0, // 673
0, // 674
0, // 675
0, // 676
0, // 677
0, // 678
0, // 679
0, // 680
0, // 681
0, // 682
0, // 683
0, // 684
0, // 685
0, // 686
0, // 687
0, // 688
0, // 689
0, // 690
0, // 691
0, // 692
0, // 693
0, // 694
0, // 695
0, // 696
0, // 697
0, // 698
0, // 699
PTM(parseNumericCodePageSet) , // 700 RPL_CODEPAGESET
0, // 701
0, // 702
PTM(parseNumericCodePageScheme) , // 703 RPL_WHOISSCHEME
PTM(parseCommandSyntaxHelp), // 704 RPL_COMMANDSYNTAX
PTM(parseCommandHelp), // 705 RPL_COMMANDHELP
PTM(parseCommandEndOfHelp), // 706 RPL_ENDOFCOMMANDHELP
0, // 707
0, // 708
0, // 709
0, // 710
0, // 711
0, // 712
0, // 713
0, // 714
0, // 715
0, // 716
0, // 717
0, // 718
0, // 719
0, // 720
0, // 721
0, // 722
0, // 723
0, // 724
0, // 725
0, // 726
0, // 727
0, // 728
0, // 729
0, // 730
0, // 731
0, // 732
0, // 733
0, // 734
0, // 735
0, // 736
0, // 737
0, // 738
0, // 739
0, // 740
0, // 741
0, // 742
0, // 743
0, // 744
0, // 745
0, // 746
0, // 747
0, // 748
0, // 749
0, // 750
0, // 751
0, // 752
0, // 753
0, // 754
0, // 755
0, // 756
0, // 757
0, // 758
0, // 759
0, // 760
0, // 761
0, // 762
0, // 763
0, // 764
0, // 765
0, // 766
0, // 767
0, // 768
0, // 769
0, // 770
0, // 771
0, // 772
0, // 773
0, // 774
0, // 775
0, // 776
0, // 777
0, // 778
0, // 779
0, // 780
0, // 781
0, // 782
0, // 783
0, // 784
0, // 785
0, // 786
0, // 787
0, // 788
0, // 789
0, // 790
0, // 791
0, // 792
0, // 793
0, // 794
0, // 795
0, // 796
0, // 797
0, // 798
0, // 799
0, // 800
0, // 801
0, // 802
0, // 803
0, // 804
0, // 805
0, // 806
0, // 807
0, // 808
0, // 809
0, // 810
0, // 811
0, // 812
0, // 813
0, // 814
0, // 815
0, // 816
0, // 817
0, // 818
0, // 819
0, // 820
0, // 821
0, // 822
0, // 823
0, // 824
0, // 825
0, // 826
0, // 827
0, // 828
0, // 829
0, // 830
0, // 831
0, // 832
0, // 833
0, // 834
0, // 835
0, // 836
0, // 837
0, // 838
0, // 839
0, // 840
0, // 841
0, // 842
0, // 843
0, // 844
0, // 845
0, // 846
0, // 847
0, // 848
0, // 849
0, // 850
0, // 851
0, // 852
0, // 853
0, // 854
0, // 855
0, // 856
0, // 857
0, // 858
0, // 859
0, // 860
0, // 861
0, // 862
0, // 863
0, // 864
0, // 865
0, // 866
0, // 867
0, // 868
0, // 869
0, // 870
0, // 871
0, // 872
0, // 873
0, // 874
0, // 875
0, // 876
0, // 877
0, // 878
0, // 879
0, // 880
0, // 881
0, // 882
0, // 883
0, // 884
0, // 885
0, // 886
0, // 887
0, // 888
0, // 889
0, // 890
0, // 891
0, // 892
0, // 893
0, // 894
0, // 895
0, // 896
0, // 897
0, // 898
0, // 899
0, // 900
0, // 901
0, // 902
0, // 903
0, // 904
0, // 905
0, // 906
0, // 907
0, // 908
0, // 909
0, // 910
0, // 911
0, // 912
0, // 913
0, // 914
0, // 915
0, // 916
0, // 917
0, // 918
0, // 919
0, // 920
0, // 921
0, // 922
0, // 923
0, // 924
0, // 925
0, // 926
0, // 927
0, // 928
0, // 929
0, // 930
0, // 931
0, // 932
0, // 933
0, // 934
0, // 935
0, // 936
0, // 937
0, // 938
0, // 939
0, // 940
0, // 941
0, // 942
0, // 943
0, // 944
0, // 945
0, // 946
0, // 947
0, // 948
0, // 949
0, // 950
0, // 951
0, // 952
0, // 953
0, // 954
0, // 955
0, // 956
0, // 957
0, // 958
0, // 959
0, // 960
0, // 961
0, // 962
0, // 963
0, // 964
0, // 965
0, // 966
0, // 967
0, // 968
0, // 969
0, // 970
0, // 971
0, // 972
0, // 973
0, // 974
0, // 975
0, // 976
0, // 977
0, // 978
0, // 979
0, // 980
0, // 981
0, // 982
0, // 983
0, // 984
0, // 985
0, // 986
0, // 987
0, // 988
0, // 989
0, // 990
0, // 991
0, // 992
0, // 993
0, // 994
0, // 995
0, // 996
0, // 997
0, // 998
0 // 999
};