]> jfr.im git - solanum.git/blame - doc/technical/ts6-protocol.txt
Numerics are also server-server messages.
[solanum.git] / doc / technical / ts6-protocol.txt
CommitLineData
cdff8b70
JT
1TS6 protocol description
2Written by Jilles Tjoelker
3
4General format: much like rfc1459
5Maximum parameters for a command: 15 (this does not include the prefix
6and command name)
7
8SID: a server's unique ID. It is configured in each server and consists of
9a digit and two alphanumerics. Sending SIDs with lowercase letters is
10questionable.
11
12UID: a client's unique ID. It consists of the server's SID and six
13alphanumerics (so it is nine characters long). The first of the alphanumerics
14should be a letter, numbers are legal but reserved for future use.
15
16hunted: a parameter type used for various remote requests. From local users,
17nicknames and server names are accepted, possibly with wildcards; from servers,
18UIDs/SIDs (sending names or even wildcards is deprecated). This is done with
19the function hunt_server(). Any rate limiting should be done locally.
20
21duration: a parameter type used for ban durations. It is a duration in seconds.
22A value of 0 means a permanent ban.
23
03204327
JT
24propagation: to which other servers the command is sent
25
26For all commands with a hunted parameter, the propagation is determined by
27that, and not otherwise specified.
28
29For all commands with a target server mask parameter, the propagation is
30determined by that, and not otherwise specified. The command is sent to all
31servers with names matching the given mask (for example '*', '*.example.com',
32'irc.example.com'). Those servers do not have to be directly connected.
33Targets cannot be SIDs.
34
35Propagation broadcast means the command is sent to all servers.
36
37Propagation one-to-one means the command is only sent to the target or the
38server the target is on.
39
40Propagation none means the command is never sent to another server if it is
41received.
42
43For some other commands, the propagation depends on the parameters and is
44described in text.
cdff8b70
JT
45
46services server: server mentioned in a service{} block. There are no services
47servers on EFnet.
48
49service: client with umode +S. This implies that it is on a services server.
50
aa12f64b
JT
51connection setup:
52The initiator sends the PASS, CAPAB and SERVER messages. Upon receiving the
53SERVER, the listener will check the information, and if it is valid, it will
54send its own PASS, CAPAB and SERVER messages, followed by SVINFO and the burst.
55Upon receiving the SERVER, the initiator will send SVINFO and the burst. If
56ziplinks are used, SVINFO is the first compressed message.
57
58The burst consists of SID and SERVER messages for all known servers, UID or
59EUID messages for all known users (possibly followed by ENCAP REALHOST, ENCAP
60LOGIN and/or AWAY) and SJOIN messages for all known channels (possibly followed
61by BMASK and/or TB).
62
cdff8b70
JT
63user modes:
64(all)
65+D (deaf: does not receive channel messages)
66+S (network service) (only settable on burst from a services server)
67+a (appears as server administrator)
68+i (invisible, see rfc1459)
69+o (IRC operator, see rfc1459)
70+w (wallops, see rfc1459) (always propagated for historical reasons)
71(charybdis TS6)
72+Q/+R/+g/+l/+s/+z (only locally effective)
73+Z (ssl user) (only settable on burst)
74possibly more added by modules
75
76channel modes:
77(all)
78statuses
79+o (prefix @) (ops)
80+v (prefix +) (voice)
81type A
82+b (ban)
83+e (ban exception)
84+I (invite exception)
85type B
86+k (key: password required to join, <= 23 ascii chars, no : or , or whitespace)
87type C
88+l (limit: maximum number of members before further joins are disallowed)
89type D
90+m (moderated)
91+n (no external messages)
92+p (private: does not appear in /whois to non-members, no /knock allowed)
93+r (only registered users may join) (only if a services server exists)
94+s (secret)
95+t (only chanops may change topic)
96(charybdis TS6)
97type A
98+q (quiet)
99type C
100+f (forward: channel name <= 30 chars)
101+j (join throttle: N:T with integer N and T)
102type D
103+F (free target for +f)
104+L (large ban list)
105+P (permanent: does not disappear when empty)
106+Q (ignore forwards to this)
107+c (strip colours)
108+g (allow any member to /invite)
109+z (send messages blocked by +m to chanops)
110
f8933d67
JT
111<numeric>
112source: server
113parameters: target, any...
114
115The command name should be three decimal ASCII digits.
116
117Propagates a "numeric" command reply, such as from a remote WHOIS request.
118
119If the first digit is 0 (indicating a reply about the local connection), it
120should be changed to 1 before propagation or sending to a user.
121
122Numerics to the local server may be sent to opers.
123
124To avoid infinite loops, servers should not send any replies to numerics.
125
126The target can be:
127- a client
128 propagation: one-to-one
129- a channel name
130 propagation: all servers with -D users on the channel
131
132Numerics to channels are broken in some older servers.
133
cdff8b70
JT
134ADMIN
135source: user
136parameters: hunted
137
138Remote ADMIN request.
139
140AWAY
141source: user
142propagation: broadcast
143parameters: opt. away reason
144
145If the away reason is empty or not present, mark the user as not away.
146Otherwise, mark the user as away.
147
148Changing away reason from one non-empty string to another non-empty string
149may not be propagated.
150
151BMASK
152source: server
153propagation: broadcast
154parameters: channelTS, channel, type, space separated masks
155
156If the channelTS in the message is greater (newer) than the current TS of
157the channel, drop the message and do not propagate it.
158
159Type is the mode letter of a ban-like mode. In efnet TS6 this is 'b', 'e' or
160'I'. In charybdis TS6 additionally 'q' is possible.
161
162Add all the masks to the given list of the channel.
163
164All ban-like modes must be bursted using this command, not using MODE or TMODE.
165
166CAPAB
167source: unregistered server
168propagation: none
169parameters: space separated capability list
170
aa12f64b
JT
171Sends capabilities of the server. This must include QS and ENCAP. It is also
172strongly recommended to include EX, CHW, IE and KNOCK, and for charybdis TS6
173also SAVE and EUID. For use with services, SERVICES and RSFNC are strongly
174recommended.
175
176The capabilities may depend on the configuration for the server they are sent
177to.
cdff8b70
JT
178
179CHGHOST
180charybdis TS6
181source: any
182propagation: broadcast
183parameters: client, new hostname
184
185Changes the visible hostname of a client.
186
187Opers are notified unless the source is a server or a service.
188
189CONNECT
190source: any
191parameters: server to connect to, port, hunted
192
193Remote connect request. A server WALLOPS should be sent by the receiving
194server.
195
196The port can be 0 for the default port.
197
198DLINE
199charybdis TS6
200encap only
201source: user
202parameters: duration, mask, reason
203
204Sets a D:line (IP ban checked directly after accepting connection).
205
206The mask must be an IP address or CIDR mask.
207
208ENCAP
209source: any
210parameters: target server mask, subcommand, opt. parameters...
211
03204327
JT
212Sends a command to matching servers. Propagation is independent of
213understanding the subcommand.
cdff8b70 214
03204327 215Subcommands are listed elsewhere with "encap only".
cdff8b70
JT
216
217ERROR
218source: server or unregistered server
219propagation: none
220parameters: error message
221
222Reports a (usually fatal) error with the connection.
223
224Error messages may contain IP addresses and have a negative effect on server
225IP hiding.
226
227ETRACE
228encap only
229encap target: single server
230source: oper
231parameters: client
232
233Remote ETRACE information request.
234
235EUID
236charybdis TS6
237capab: EUID
238source: server
239parameters: nickname, hopcount, nickTS, umodes, username, visible hostname, IP address, UID, real hostname, account name, gecos
240propagation: broadcast
241
242Introduces a client. The client is on the source server of this command.
243
244The account name is '0' if the user is not logged in with services.
245
246Nick TS rules apply.
247
248EUID is similar to UID but includes the ENCAP REALHOST and ENCAP LOGIN
249information.
250
251GCAP
252encap only
253encap target: *
254source: server
255parameters: space separated capability list
256
257Capability list of remote server.
258
259INFO
260source: user
261parameters: hunted
262
263Remote INFO request.
264
265INVITE
266source: user
267parameters: target user, channel, opt. channelTS
268propagation: one-to-one
269
270Invites a user to a channel.
271
272If the channelTS is greater (newer) than the current TS of the channel, drop
273the message.
274
275Not sending the channelTS parameter is deprecated.
276
277JOIN
2781.
279source: user
280parameters: '0' (one ASCII zero)
281propagation: broadcast
282
283Parts the source user from all channels.
284
2852.
286source: user
287parameters: channelTS, channel, '+' (a plus sign)
288propagation: broadcast
289
290Joins the source user to the given channel. If the channel does not exist yet,
291it is created with the given channelTS and no modes. If the channel already
292exists and has a greater (newer) TS, wipe all simple modes and statuses and
293change the TS, notifying local users of this but not servers (note that
294ban-like modes remain intact; invites may or may not be cleared).
295
2d042188
JT
296A JOIN is propagated with the new TS of the channel.
297
cdff8b70
JT
298KICK
299source: any
300parameters: channel, target user, opt. reason
301propagation: broadcast
302
303Kicks the target user from the given channel.
304
305Unless the channel's TS is 0, no check is done whether the source user has ops.
306
307Not sending the reason parameter is questionable.
308
309KILL
310source: any
311parameters: target user, path
312propagation: broadcast
313
314Removes the user from the network.
315
316The format of the path parameter is some sort of description of the source of
317the kill followed by a space and a parenthesized reason. To avoid overflow,
318it is recommended not to add anything to the path.
319
320KLINE
3211.
322encap only
323source: user
324parameters: duration, user mask, host mask, reason
325
326Sets a K:line (ban on user@host).
327
3282.
329capab: KLN
330source: user
331parameters: target server mask, duration, user mask, host mask, reason
332
333As form 1, deprecated.
334
335KNOCK
336source: user
337parameters: channel
338propagation: broadcast
339
340Requests an invite to a channel that is locked somehow (+ikl). Notifies all
341operators of the channel. (In charybdis, on +g channels all members are
342notified.)
343
344This is broadcast so that each server can store when KNOCK was used last on
345a channel.
346
347LINKS
348source: user
349parameters: hunted, server mask
350
351Remote LINKS request. The server mask limits which servers are listed.
352
3cadd0c4
JT
353LOCOPS
3541.
355encap only
356source: user
357parameters: text
358
359Sends a message to operators (with umode +l set). This is intended to be
360used for strict subsets of the network.
361
3622.
363capab: CLUSTER
364source: user
365parameters: target server mask, text
366
367As form 1, deprecated.
368
cdff8b70
JT
369LOGIN
370encap only
371source: user
372parameters: account name
373
374In a burst, states that the source user is logged in as the account.
375
376LUSERS
377source: user
378parameters: server mask, hunted
379
380Remote LUSERS request. Most servers ignore the server mask, treating it as '*'.
381
382MODE
3831.
384source: user
385parameters: client, umode changes
386propagation: broadcast
387
388Propagates a user mode change. The client parameter must refer to the same user
389as the source.
390
391Not all umodes are propagated to other servers.
392
3932.
394source: any
395parameters: channel, cmode changes, opt. cmode parameters...
396
397Propagates a channel mode change.
398
399This is deprecated because the channelTS is not included. If it is received,
400it should be propagated as TMODE.
401
402MOTD
403source: user
404parameters: hunted
405
406Remote MOTD request.
407
408NICK
4091.
410source: user
411parameters: new nickname, new nickTS
412propagation: broadcast
413
414Propagates a nick change.
415
4162.
417source: server
418parameters: nickname, hopcount, nickTS, umodes, username, hostname, server, gecos
419
420Historic TS5 user introduction. The user is on the server indicated by the
421server parameter; the source server is meaningless (local link).
422
423NICKDELAY
424charybdis TS6
425encap only
426encap target: *
427source: services server
428parameters: duration, nickname
429
430If duration is greater than 0, makes the given nickname unavailable for that
431time.
432
433If duration is 0, removes a nick delay entry for the given nickname.
434
435There may or may not be a client with the given nickname; this does not affect
436the operation.
437
438NOTICE
439source: any
440parameters: msgtarget, message
441
442As PRIVMSG, except NOTICE messages are sent out, server sources are permitted
443and most error messages are suppressed.
444
445OPERSPY
446encap only
447encap target: *
448source: user
449parameters: command name, parameters
450
451Reports operspy usage.
452
453OPERWALL
454source: user
455parameters: message
456propagation: broadcast
457
458Sends a message to operators (with umode +z set).
459
460PART
461source: user
462parameters: comma separated channel list, message
463
464Parts the source user from the given channels.
465
466PASS
467source: unregistered server
468parameters: password, 'TS', TS version, SID
469
470Sends the server link password, TS version and SID.
471
472PING
473source: any
aa12f64b 474parameters: origin, opt. destination server
cdff8b70 475
aa12f64b
JT
476Sends a PING to the destination server, which will reply with a PONG. If the
477destination server parameter is not present, the server receiving the message
478must reply.
cdff8b70 479
aa12f64b
JT
480The origin field is not used in the server protocol. It is sent as the name
481(not UID/SID) of the source.
cdff8b70
JT
482
483Remote PINGs are used for end-of-burst detection, therefore all servers must
484implement them.
485
486PONG
487source: server
488parameters: origin, destination
489
490Routes a PONG back to the destination that originally sent the PING.
491
492PRIVMSG
493source: user
494parameters: msgtarget, message
495
496Sends a normal message (PRIVMSG) to the given target.
497
498The target can be:
499- a client
500 propagation: one-to-one
501- a channel name
502 propagation: all servers with -D users on the channel
503 (cmode +m/+n should be checked everywhere, bans should not be checked
504 remotely)
505- a status character ('@'/'+') followed by a channel name, to send to users
506 with that status or higher only.
507 propagation: all servers with -D users with appropriate status
508- a user@server message, to send to users on a specific server. The exact
509 meaning of the part before the '@' is not prescribed, except that "opers"
510 allows IRC operators to send to all IRC operators on the server in an
511 unspecified format.
512 propagation: one-to-one
513- a message to all users on server names matching a mask ('$$' followed by mask)
514 propagation: broadcast
515- a message to all users with hostnames matching a mask ('$#' followed by mask).
516 Note that this is often implemented poorly.
517 propagation: broadcast
518
519PRIVS
520charybdis TS6
521encap only
522encap target: single server
523source: oper
524parameters: client
525
526Remote PRIVS information request.
527
528QUIT
529source: user
530parameters: comment
531
532Propagates quitting of a client. No QUIT should be sent for a client that
533has been removed as result of a KILL message.
534
535REALHOST
536charybdis TS6
537encap only
538encap target: *
539source: user
540parameters: real hostname
541
542In a burst, propagates the real host of a dynamically-spoofed user.
543
544REHASH
545charybdis TS6
546encap only
547source: user
548parameters: opt. rehash type
549
550Remote REHASH request. If the rehash type is omitted, it is equivalent to
551a regular /rehash, otherwise it is equivalent to /rehash <rehash type>.
552
553RESV
5541.
555encap only
556source: user
557parameters: duration, mask, reason
558
559Sets a RESV, making a nickname mask or exact channel unavailable.
560
5612.
562capab: CLUSTER
563source: user
564parameters: target server mask, duration, mask, reason
565
566As form 1, deprecated.
567
568RSFNC
569encap only
570capab: RSFNC
571encap target: single server
572source: services server
573parameters: target user, new nickname, old nickTS, new nickTS
574
575Forces a nickname change and propagates it.
576
577The command is ignored if the nick TS of the user is not equal to the old
578nickTS parameter. If the new nickname already exists (and is not the target
579user), it is killed first.
580
581SASL
582charybdis TS6
583encap only
5841.
585encap target: *
586source: server
587parameters: source uid, '*', 'S', sasl mechanism name
588
589Requests that a SASL agent (a service) initiate the authentication process.
590The source uid is that of an unregistered client. This is why it is not sent
591as the prefix.
592
5932.
594encap target: single server
595source: server
596parameters: source uid, target uid, mode, data
597
598Part of a SASL authentication exchange. The mode is 'C' to send some data
599(base64 encoded), or 'S' to end the exchange (data indicates type of
600termination: 'A' for abort, 'F' for authentication failure, 'S' for
601authentication success).
602
603SAVE
604capab: SAVE
605source: server
606propagation: broadcast
607parameters: target uid, TS
608
609Resolve a nick collision by changing a nickname to the UID.
610
611The server should verify that the UID belongs to a registered user, the user
612does not already have their UID as their nick and the TS matches the user's
613nickTS. If not, drop the message.
614
615SAVE should be propagated as a regular NICK change to links without SAVE capab.
616present.
617
618SERVER
6191.
620source: unregistered server
621parameters: server name, hopcount, server description
622
623Registers the connection as a server. PASS and CAPAB must have been sent
624before, SVINFO should be sent afterwards.
625
626If there is no such server configured or authentication failed, the connection
627should be dropped.
628
629This is propagated as a SID message.
630
6312.
632source: server
633propagation: broadcast
634parameters: server name, hopcount, server description
635
636Introduces a new TS5 server, directly connected to the source of this command.
637This is only used for jupes as TS5 servers may do little else than existing.
638
639SID
640source: server
641propagation: broadcast
642parameters: server name, hopcount, sid, server description
643
644Introduces a new server, directly connected to the source of this command.
645
646SIGNON
647source: user
648propagation: broadcast
649parameters: new nickname, new username, new visible hostname, new nickTS, new login name
650
651Broadcasts a change of several user parameters at once.
652
653Currently only sent after an SVSLOGIN.
654
655SJOIN
656source: server
657propagation: broadcast
658parameters: channelTS, simple modes, opt. mode parameters..., nicklist
659
660Broadcasts a channel creation or bursts a channel.
661
662The nicklist consists of users joining the channel, with status prefixes for
663their status ('@+', '@', '+' or ''), for example:
664'@+1JJAAAAAB +2JJAAAA4C 1JJAAAADS'. All users must be behind the source server
665so it is not possible to use this message to force users to join a channel.
666
667The interpretation depends on the channelTS and the current TS of the channel.
668If either is 0, set the channel's TS to 0 and accept all modes. Otherwise, if
669the incoming channelTS is greater (newer), ignore the incoming simple modes
670and statuses and join and propagate just the users. If the incoming channelTS
671is lower (older), wipe all modes and change the TS, notifying local users of
672this but not servers (invites may be cleared). In the latter case, kick on
673split riding may happen: if the key (+k) differs or the incoming simple modes
674include +i, kick all local users, sending KICK messages to servers.
675
2d042188
JT
676An SJOIN is propagated with the new TS and modes of the channel. The statuses
677are propagated if and only if they were accepted.
678
cdff8b70
JT
679SJOIN must be used to propagate channel creation and in netbursts. For regular
680users joining channels, JOIN must be used. Pseudoservers may use SJOIN to join
681a user with ops.
682
683SNOTE
684charybdis TS6
685encap only
686source: server
687parameters: snomask letter, text
688
689Sends the text as a server notice from the source server to opers with the
690given snomask set.
691
692SQUIT
693parameters: target server, comment
694
695Removes the target server and all servers and users behind it from the network.
696
697If the target server is the receiving server or the local link this came from,
698this is an announcement that the link is being closed.
699
700Otherwise, if the target server is locally connected, the server should send
701a WALLOPS announcing the SQUIT.
702
703STATS
704source: user
705parameters: stats letter, hunted
706
707Remote STATS request. Privileges are checked on the server executing the
708actual request.
709
710SU
711encap only
712encap target: *
713source: services server
714parameters: target user, new login name (optional)
715
716If the new login name is not present or empty, mark the target user as not
717logged in, otherwise mark the target user as logged in as the given account.
718
719SVINFO
720source: server
721propagation: none
722parameters: current TS version, minimum TS version, '0', current time
723
724Verifies TS protocol compatibility and clock. If anything is not in order,
725the link is dropped.
726
727The current TS version is the highest version supported by the source server
728and the minimum TS version is the lowest version supported.
729
730The current time is sent as a TS in the usual way.
731
732SVSLOGIN
733charybdis TS6
734encap only
735encap target: single server
736source: services server
737parameters: target, new nick, new username, new visible hostname, new login name
738
739Sent after successful SASL authentication.
740
741The target is a UID, typically an unregistered one.
742
743Any of the "new" parameters can be '*' to leave the corresponding field
744unchanged. The new login name can be '0' to log the user out.
745
746If the UID is registered on the network, a SIGNON with the changes will be
747broadcast, otherwise the changes will be stored, to be used when registration
748completes.
749
750TB
751source: server
752propagation: broadcast
753parameters:
754
755TIME
756source: user
757parameters: hunted
758
759Remote TIME request.
760
761TMODE
762source: any
763parameters: channelTS, channel, cmode changes, opt. cmode parameters...
764
765Propagates a channel mode change.
766
767If the channelTS is greater (newer) than the current TS of the channel, drop
768the message.
769
770On input, only the limit on parameters per line restricts how many cmode
771parameters can be present. Apart from this, arbitrary modes shall be
772processed. Redundant modes may be dropped. For example, +n-n may be applied and
773propagated as +n-n, -n or (if the channel was already -n) nothing, but not as
774+n.
775
776The parameter for mode -k (removing a key) shall be ignored.
777
778On output, at most ten cmode parameters should be sent; if there are more,
779multiple TMODE messages should be sent.
780
781TOPIC
782source: user
783propagation: broadcast
784
785Propagates a channel topic change. The server may verify that the source has
786ops in the channel.
787
788TRACE
789source: user
7901.
791parameters: hunted
792
793Performs a trace to the target, sending 200 numerics from each server passing
794the message on. The target server sends a description of the target followed
795by a 262 numeric.
796
797TRACE, STATS l and STATS L are the only commands using hunt_server that use the
798hunted parameter for more than just determining which server the command
799should be executed on.
800
8012.
802parameters: target name, hunted
803
804Executes a trace command on the target server. No 200 numerics are sent.
805The target name is a name, not a UID, and should be on the target server.
806
807UID
808source: server
809propagation: broadcast
810parameters: nickname, hopcount, nickTS, umodes, username, visible hostname, IP address, UID, gecos
811propagation: broadcast
812
813Introduces a client. The client is on the source server of this command.
814
815Nick TS rules apply.
816
817UNDLINE
818charybdis TS6
819encap only
820source: user
821parameters: mask
822
823Removes a D:line (IP ban checked directly after accepting connection).
824
825The mask must be an IP address or CIDR mask.
826
827UNKLINE
8281.
829encap only
830source: user
831parameters: user mask, host mask
832
833Removes a K:line (ban on user@host).
834
8352.
836capab: UNKLN
837source: user
838parameters: target server mask, user mask, host mask
839
840As form 1, deprecated.
841
842UNRESV
8431.
844encap only
845source: user
846parameters: mask
847
848Removes a RESV.
849
8502.
851capab: CLUSTER
852source: user
853parameters: target server mask, mask
854
855As form 1, deprecated.
856
857UNXLINE
8581.
859encap only
860source: user
861parameters: mask
862
863Removes an X:line (ban on realname).
864
8652.
866capab: CLUSTER
867source: user
868parameters: target server mask, mask
869
870As form 1, deprecated.
871
872USERS
873source: user
874parameters: hunted
875
876Remote USERS request.
877
878VERSION
879source: any
880parameters: hunted
881
882Remote VERSION request.
883
884WALLOPS
8851.
886source: user
887parameters: message
888propagation: broadcast
889
890In efnet TS6, sends a message to operators (with umode +z set). This is a
891deprecated equivalent to OPERWALL.
892
893In charybdis TS6, sends a message to local users with umode +w set (or possibly
894another indication that WALLOPS messages should be sent), including non-opers.
895
8962.
897source: server
898parameters: message
899propagation: broadcast
900
901Sends a message to local users with umode +w set (or possibly another
902indication that WALLOPS messages should be sent).
903
904In efnet TS6 this may include non-opers, in charybdis TS6 this may only be
905sent to opers.
906
907WHOIS
908source: user
909parameters: hunted, target nick
910
911Remote WHOIS request.
912
913XLINE
9141.
915encap only
916source: user
917parameters: duration, mask, reason
918
919Sets an X:line (ban on realname).
920
9212.
922capab: CLUSTER
923source: user
924parameters: target server mask, duration, mask, reason
925
926As form 1, deprecated.
927
928Local only commands (charybdis 3.1):
929
930ACCEPT
931AUTHENTICATE
932CAP
933CHALLENGE
934CHANTRACE
935CLOSE
936CNOTICE
937CPRIVMSG
938DIE
939GET
940HELP
941ISON
942LIST
cdff8b70
JT
943MAP
944MASKTRACE
945MODLIST
946MODLOAD
947MODRELOAD
948MODRESTART
949MODUNLOAD
950MONITOR
951NAMES
952OPER
953POST
954PUT
955RESTART
956SCAN
957SET
958TESTGECOS
959TESTLINE
960TESTMASK
961UHELP
962UNREJECT
963USER
964USERHOST
965WEBIRC
966WHO
967WHOWAS