+
    Dfj&                     `   R t ^ RIHtHt ^ RIHt ^ RIHt ^ RIHtH	t
Ht ^ RIHtHt ^ RIHtHtHt ^ RIHt ^ RIHt ^ R	IHtHt ^ R
IHt ]! ]P8                  4       ! R R4      4       t]! ]P<                  4       ! R R4      4       tRt ]! ]PB                  4       ! R R]PD                  4      4       t# ! R R]PH                  4      t% ! R R]PL                  4      t']! ]PB                  4       ! R R]PP                  4      4       t)]PT                  ! ]'])4        ! R R]PL                  4      t+]! ]P8                  4       ! R R]PP                  4      4       t,]PT                  ! ]+],4        ! R R]PL                  4      t-]! ]PB                  4       ! R R]PL                  4      4       t.]! ].]P<                  ]P^                  4        ! R  R!]PP                  4      t0]PT                  ! ].]04       ]! ]Pb                  ]Pd                  4       ! R" R#4      4       t3 ! R$ R%]34      t4. R'Ot5R&# )(a  
A module that needs a better name.

Implements new cred things for words.

How does this thing work?

  - Network connection on some port expecting to speak some protocol

  - Protocol-specific authentication, resulting in some kind of credentials object

  - twisted.cred.portal login using those credentials for the interface
    IUser and with something implementing IChatClient as the mind

  - successful login results in an IUser avatar the protocol can call
    methods on, and state added to the realm such that the mind will have
    methods called on it as is necessary

  - protocol specific actions lead to calls onto the avatar; remote events
    lead to calls onto the mind

  - protocol specific hangup, realm is notified, user is removed from active
    play, the end.
)ctimetime)implementer)	copyright)credentialserrorportal)deferprotocol)failurelogreflect)registerAdapter)pb)ewordsiwords)ircc                   Z   a  ] tR t^,t o R tR tR tR tRR ltR t	R t
R	 tR
 tRtV tR# )Groupc                6    Wn         / V n        R RRR/V n        R# )topic topic_authorN)nameusersmetaselfr   s   &&7/usr/lib/python3/dist-packages/twisted/words/service.py__init__Group.__init__.   s!    	
RB
	    c                @    \         P                  ! \        W!4      4      # N)r   Failure	Exception)r   errps   &&&r   _ebUserCallGroup._ebUserCall6   s    y011r!   c                    V F<  w  r#V'       d   K  VP                   w  rEV P                  WEP                  4       4       K>  	  R # r#   )valueremovegetErrorMessage)r   resultssuccessresultuserr&   s   &&    r   _cbUserCallGroup._cbUserCall9   s3    &OG7"LL	D"5"5"78  'r!   c                Z   \         P                  P                  V4      '       g   Q R P                  V4      4       hVP                  V P
                  9  d   . pWP
                  VP                  &   V P
                  P                  4        FY  pW1Jg   K
  \        P                  ! VP                  W4      pVP                  V P                  VR7       VP                  V4       K[  	  \        P                  ! V4      P                  V P                  4       \        P                   ! R4      # )z{!r} is not a chat clientr'   N)r   IChatClient
providedByformatr   r   valuesr	   maybeDeferred
userJoined
addErrbackr(   appendDeferredListaddCallbackr2   succeed)r   r1   	additionsr'   ds   &&   r   add	Group.add?   s    !!,,T22 	
4O4V4V5
 	
2 99DJJ&I$(JJtyy!ZZ&&(=++ALL$EALL!1!1QL7$$Q'	 )
 y)55d6F6FG}}T""r!   Nc                    V P                   VP                   . pV P                   P                  4        FZ  pWAJg   K
  \        P                  ! VP
                  WV4      pVP                  V P                  VR 7       VP                  V4       K\  	  \        P                  ! V4      P                  V P                  4       \        P                  ! R4      #   \         d     L#i ; ir5   N)r   r   r9   r	   r:   userLeftr<   r(   r=   r>   r?   r2   KeyErrorr@   )r   r1   reasonremovalsr'   rB   s   &&&   r   r,   Group.removeN   s    	G

499% HZZ&&(=++AJJFKALL!1!1QL7OOA&	 )
 x(44T5E5EF}}T""  		s   C C&%C&c                T    \         P                  ! \        V P                  4      4      # r#   )r	   r@   lenr   r   s   &r   size
Group.size]   s    }}S_--r!   c                   W J g   Q h. pV P                   P                  4        FZ  pWQJg   K
  \        P                  ! VP                  WV4      pVP                  V P                  VR 7       VP                  V4       K\  	  \        P                  ! V4      P                  V P                  4       \        P                  ! R4      # rF   )r   r9   r	   r:   receiver<   r(   r=   r>   r?   r2   r@   )r   sender	recipientmessagereceivesr'   rB   s   &&&&   r   rR   Group.receive`   s       ""$A''		6IT--3"	 %
 	8$001A1AB}}T""r!   c                |   Wn         . pV P                  P                  4        FR  p\        P                  ! VP
                  W4      pVP                  V P                  VR 7       VP                  V4       KT  	  \        P                  ! V4      P                  V P                  4       \        P                  ! R4      # rF   )r   r   r9   r	   r:   groupMetaUpdater<   r(   r=   r>   r?   r2   r@   )r   r   setsr'   rB   s   &&   r   setMetadataGroup.setMetadatak   s    	""$A##A$5$5tBALL))QL/KKN % 	4 ,,T-=-=>}}T""r!   c                H    \        V P                  P                  4       4      # r#   )iterr   r9   rN   s   &r   	iterusersGroup.iterusersu   s    DJJ%%'((r!   )r   r   r   r#   )__name__
__module____qualname____firstlineno__r   r(   r2   rC   r,   rO   rR   r[   r_   __static_attributes____classdictcell____classdict__s   @r   r   r   ,   s7     
29##.	##) )r!   r   c                   V   a  ] tR t^zt o RtRtR tR tR tR
R lt	R t
R tR tR	tV tR# )UserNc                >    Wn         . V n        \        4       V n        R # r#   )r   groupsr   lastMessager   s   &&r   r   User.__init__   s    	6r!   c                <    Wn         W n        \        4       V n        R # r#   )realmmindr   signOn)r   rp   rq   s   &&&r   loggedInUser.loggedIn   s    
	fr!   c                h   a a VV 3R  lpSP                  S P                  4      P                  V4      # )c                 >   < SP                   P                  S4       V # r#   )rl   r=   r0   groupr   s   &r   cbJoinUser.join.<locals>.cbJoin       KKu%Mr!   )rC   rq   r?   )r   rx   ry   s   ff r   join	User.join   s(    	 yy#//77r!   c                j   a a VV 3R  lpSP                  S P                  V4      P                  V4      # )c                 >   < SP                   P                  S4       V # r#   )rl   r,   rw   s   &r   cbLeaveUser.leave.<locals>.cbLeave   r{   r!   )r,   rq   r?   )r   rx   rI   r   s   ff& r   leave
User.leave   s*    	 ||DIIv.::7CCr!   c                X    \        4       V n        VP                  V P                  W4      # r#   )r   rm   rR   rq   )r   rT   rU   s   &&&r   send	User.send   s#    6  I??r!   c                ,    \        V P                  4      # r#   )r^   rl   rN   s   &r   
itergroupsUser.itergroups   s    DKK  r!   c                \    V P                   R ,           F  pV P                  V4       K  	  R# ):NNNN)rl   r   )r   gs   & r   logoutUser.logout   s!    QAJJqM  r!   )rl   rm   rq   r   rp   rr   r#   )ra   rb   rc   rd   rp   rq   r   rs   r|   r   r   r   r   re   rf   rg   s   @r   rj   rj   z   s9     ED"

8D@! r!   rj   zNickServ!NickServ@servicesc                     a  ] tR t^t o RtRtRtRtRtRt	R t
R tR tR tR.R ltR	 tR
 tRtRtR tR tR tR tR t]P2                  R3]P4                  R3]P6                  R3]P8                  R3.t]P<                  R3]P>                  R3.t R t!R t"R t#R t$R.R lt%R.R lt&R t'R t(R t)R t*R  t+R! t,R" t-R# t.R$ t/R% t0R& t1R' t2R( t3R) t4R* t5R+ t6R, t7R-t8V t9R# )/IRCUserzE
Protocol instance representing an IRC user connected to the server.
Nutf-8c                    V P                   V n        V P                  P                  V n        V P                  P                  V n        R # r#   )irc_NICKSERV_PRIVMSGirc_PRIVMSGfactoryrp   r   hostnamerN   s   &r   connectionMadeIRCUser.connectionMade   s0    44\\''


r!   c                T    V P                   e   V P                  4        R V n        R # R # r#   )r   avatarr   rI   s   &&r   connectionLostIRCUser.connectionLost   s!    ;;"KKMDK #r!   c                   R V9  d   V P                   VR &   RV9  d)   V P                  P                  V P                  4      VR&   WVR,          .\	        V4      ,           p. pV F;  p\        V\        4      '       d   VP                  R4      pVP                  V4       K=  	  \        P                  P                  ! V/ VB  R# )prefixtor   N)r   r   encodeencodinglist
isinstancebytesdecoder=   r   IRCsendMessage)r   commandparameter_listkwarglistarglistUnicodeargs   &&*,   r   r   IRCUser.sendMessage   s    2==BxLr>yy''6BtH"T(+d>.BBC#u%%jj)!!#&  	^2r2r!   c                    V P                  VP                   R VP                   RV P                   2RVP                  ,           4       R# )!@#N)r|   r   r   r   rx   r1   s   &&&r   r;   IRCUser.userJoined   s6    		TYYKq1T]]O<cEJJ>NOr!   c                    T P                  VP                   R VP                   RV P                   2RVP                  ,           T;'       g    R4       R# )r   r   r   leavingN)partr   r   r   rx   r1   rI   s   &&&&r   rG   IRCUser.userLeft   sE    		yyk499+Qt}}o6%**  y	
r!   c                T   \         P                  P                  V4      '       d   R VP                  ,           pMVP                  pVP	                  RR4      pVP                  4        F<  pV P                  VP                   RVP                   RV P                   2VV4       K>  	  R# )r   textz<an unrepresentable message>r   r   N)r   IGroupr7   r   get
splitlinesprivmsgr   )r   rS   rT   rU   recipientNamer   Ls   &&&&   r   rR   IRCUser.receive   s     ==##I..)..0M%NNM{{6#AB"ALL;;-qQt}}o> #r!   c           
         R V9   d_   VR ,          pVP                  RR4      pV P                  V P                  RVP                  ,           VV RV RV P                   24       R# R# )r   r   r   r   r   r   N)r   r   r   r   )r   rx   r   r   authors   &&&  r   rY   IRCUser.groupMetaUpdate   sa    d?MEXXnb1FJJ		ejj (!F81T]]O4	 r!   c                "    VR,          V n         R# )z
Password message -- Register a password.

Parameters: <password>

[REQUIRED]

Note that IRC requires the client send this *before* NICK
and USER.
N)passwordr   r   paramss   &&&r   irc_PASSIRCUser.irc_PASS   s     r
r!   c                D   V^ ,          p \        V\        4      '       d   VP                  V P                  4      pY0n
        Y0n        T P                   F1  w  rET P                  YET P                  P                  ,          4       K3  	  T P                   f   T P                  \        TR4       R# T P                   pRT n        T P#                  Y64       R#   \         d?    T P                  \        \        T4      R4       T P                  P                  4         R# i ; i)zH
Nick message -- Set your nickname.

Parameters: <nickname>

[REQUIRED]
z;Your nickname cannot be decoded. Please use ASCII or UTF-8.Nz	Password?)r   r   r   r   UnicodeDecodeErrorr   NICKSERVrepr	transportloseConnectionnicknamer   _motdMessagesr   r   _serverInfor   logInAs)r   r   r   r   coder   r   s   &&&    r   irc_NICKIRCUser.irc_NICK  s     !9
	(E**#??4==9 !	,,JDT$,,*B*B#BC - == LL8[9}}H DMLL,) " 	LLXM
 NN))+	s   1C ADDc                "    VR,          V n         R# )zS
User message -- Set your realname.

Parameters: <user> <mode> <unused> <realname>
Nr   )realnamer   s   &&&r   irc_USERIRCUser.irc_USER/  s     r
r!   c                6   V^ ,          pVR,          pV P                   f   V P                  P                  4        R# VP                  4       R8w  d$   V P	                  \
        V P                   R4       R# V P                   pRV n         V P                  WT4       R# )F
Send a (private) message.

Parameters: <msgtarget> <text to be sent>
Nnickservz1Denied.  Please send me (NickServ) your password.r   )r   r   r   lowerr   r   r   )r   r   r   targetr   r   s   &&&   r   r   IRCUser.irc_NICKSERV_PRIVMSG:  su     ":== NN))+\\^z)LLC }}H DMLL,r!   c                    V P                   P                  P                  \        P                  ! W4      V \
        P                  4      pVP                  V P                  V P                  V3R 7       R# ))errbackArgsN)
r   r   loginr   UsernamePasswordr   IUseraddCallbacks_cbLogin_ebLogin)r   r   r   rB   s   &&& r   r   IRCUser.logInAsQ  sP    LL%%((<dFLL
 	
t}}dmm(Mr!   z:connected to Twisted IRCzA:Your host is %(serviceName)s, running version %(serviceVersion)sz,:This server was created on %(creationDate)sz&%(serviceName)s %(serviceVersion)s w nz(:- %(serviceName)s Message of the Day - z:End of /MOTD command.c                    Vw  r#pV\         P                  J g   Q R V: 24       hV =W0n        W@n        V P
                   F1  w  rVV P                  WVV P                  P                  ,          4       K3  	  R# )zRealm is buggy, got N)	r   r   r   r   r   _welcomeMessagesr   r   r   )r   r0   ifacer   r   r   r   s   &&     r   r   IRCUser._cbLoginn  sl    "($F(<UI&FF$ //JDT$,,*B*B#BC 0r!   c                   VP                  \        P                  4      '       d   V P                  \        VR 4       MVP                  \
        P                  4      '       d   V P                  \        VR4       MC\        P                  ! R4       \        P                  ! V4       V P                  \        VR4       V P                  P                  4        R# )z*Already logged in.  No pod people allowed!zLogin failed.  Goodbye.zUnhandled error during login:z"Server error during login.  Sorry.N)checkr   AlreadyLoggedInr   r   ecredUnauthorizedLoginr   msgr&   r   r   )r   r&   r   s   &&&r   r   IRCUser._ebLoginz  s    99V++,,LL($P YYu..//LL8-FGGG34GGCLLL8-QR%%'r!   c                ^    V P                   e   V P                  RV P                  4       R# R# )z3
Ping message

Parameters: <server1> [ <server2> ]
NPONG)rp   r   r   r   s   &&&r   irc_PINGIRCUser.irc_PING  s'     ::!VT]]3 "r!   c                :    V P                   P                  4        R# )z&
Quit

Parameters: [ <Quit Message> ]
N)r   r   r   s   &&&r   irc_QUITIRCUser.irc_QUIT  s     	%%'r!   c                    V'       d#   V P                  \        P                  R 4       R# V P                  V P                  RVP                  ,           R4       R# ):Unknown MODE flag.r   +N)r   r   ERR_UNKNOWNMODEchannelModer   )r   rx   modesargss   &&&*r   _channelModeIRCUser._channelMode  s;    S002GHTYYejj(8#>r!   c                    V'       d#   V P                  \        P                  R 4       R# WP                  J d#   V P                  \        P                  R4       R# V P                  \        P
                  R4       R# )r   r  z(:You can't look at someone else's modes.N)r   r   r  r   RPL_UMODEISERR_USERSDONTMATCH)r   r1   r  s   &&&r   	_userModeIRCUser._userMode  sT    S002GH[[ S__c2&&(Rr!   c                r  a a  S^ ,          p\        V\        4      '       d   VP                  S P                  4      pTP                  R4      '       dZ   TT 3R lpS P                  P                  TR,          4      pTP                  S P                  T\        SR,          4      R7       R# T 3R lpS P                  P                  T4      pTP                  S P                  T\        SR,          4      R7       R#   \         d-    S P                  \        P                  S^ ,          R4        R# i ; i)z`
User mode message

Parameters: <nickname>
*( ( "+" / "-" ) *( "i" / "w" / "o" / "O" / "r" ) )

z2:No such nickname (could not decode your unicode!)Nr   c                    < V P                  \        P                  4       SP                  \        P
                  S^ ,          R4       R# )    :That channel doesn't exist.Ntrapr   NoSuchGroupr   r   ERR_NOSUCHCHANNELr&   r   r   s   &r   ebGroup!IRCUser.irc_MODE.<locals>.ebGroup  s5    ++,  ))6!96Tr!      NN)callbackArgsc                 H   < SP                  \        P                  R 4       R# )z:No such nickname.Nr   r   ERR_NOSUCHNICK)r&   r   s   &r   ebUser IRCUser.irc_MODE.<locals>.ebUser  s      !3!35IJr!   )r   r   r   r   r   r   r   r  
startswithrp   lookupGroupr   r  tuple
lookupUserr  )r   r   r   channelOrUserr  rB   r  s   f&f    r   irc_MODEIRCUser.irc_MODE  s    
	"1IM-// - 4 4T]] C ##C(( 

&&}R'89ANN4,,gE&QS*DUNVK 

%%m4ANN4>>6fRj@QNR1 " 	""q	D
 	s   C? C? ?3D65D6c                    R# )zL
Userhost message

Parameters: <nickname> *( SPACE <nickname> )

[Optional]
N r   s   &&&r   irc_USERHOSTIRCUser.irc_USERHOST  s     	r!   c                  a aa  V^ ,          o\        S\        4      '       d   SP                  S P                  4      oTR,          oSP                  R4      '       d$   S P                  P                  SR,          4      pM+S P                  P                  S4      P                  R 4      pTT 3R lpT T3R lpTP                  YE4       R#   \         d-    S P                  \        P                  T^ ,          R4        R# i ; i)	r   z6:No such nick/channel (could not decode your unicode!)Nr   r  c                     V P                   # r#   )rq   )r1   s   &r   <lambda>%IRCUser.irc_PRIVMSG.<locals>.<lambda>  s    TYYr!   c                 L   < V e   SP                   P                  V RS/4      # R # )Nr   )r   r   )targmessageTextr   s   &r   cbTarget%IRCUser.irc_PRIVMSG.<locals>.cbTarget  s*    {{''v{.CDD  r!   c                 J   < SP                  \        P                  SR 4       R# )z:No such nick/channel.Nr  )r&   r   
targetNames   &r   ebTarget%IRCUser.irc_PRIVMSG.<locals>.ebTarget  s    S//=UVr!   r   )r   r   r   r   r   r   r   r  r   rp   r!  r#  r?   r   )r   r   r   r   r2  r6  r1  r5  s   f&&   @@r   r   IRCUser.irc_PRIVMSG  s    
	J*e,,'..t}}=
 Rj  %%ZZ++JrN;FZZ**:6BB&F	E	W 	H// " 	""q	H
 	s   C C 3DDc                  a a  V^ ,          o\        S\        4      '       d   SP                  S P                  4      oSP                  R4      '       d
   SR,          oT 3R lpTT 3R lpS P                  P                  S4      P                  Y44       R#   \         d-    S P                  \        P                  T^ ,          R4        R# i ; i)zU
Join message

Parameters: ( <channel> *( "," <channel> ) [ <key> *( "," <key> ) ] )
1:No such channel (could not decode your unicode!)Nr   r  c                 h   <a  V V3R  lpSP                   P                  S 4      P                  V4      # )c                   < SP                  SS4       SP                  SP                  R SP                  ,           SP                  4        Uu. uF  qP                  NK  	  up4       SP	                  S4       R# u upi r   N)r;   namesr   r_   
_sendTopic)ignr1   rx   r   s   & r   ry   1IRCUser.irc_JOIN.<locals>.cbGroup.<locals>.cbJoin  s`    t,

II%**$+0??+<=+<4YY+<=
 & >s   A<r   r|   r?   )rx   ry   r   s   f r   cbGroup!IRCUser.irc_JOIN.<locals>.cbGroup  s*    ' ;;##E*66v>>r!   c                 X   < SP                  \        P                  R S,           R4       R# )r   z:No such channel.N)r   r   r  r&   	groupNamer   s   &r   r  !IRCUser.irc_JOIN.<locals>.ebGroup  s#    %%sY8Kr!   )r   r   r   r   r   r   r   r  r   rp   getGroupr   )r   r   r   rC  r  rG  s   f&&  @r   irc_JOINIRCUser.irc_JOIN  s    
	q	I)U++%,,T]];	 $$!"I
	?	
 	

I&33GE9 " 	%%q	C
 	   B B 3CCc                H  a aa  V^ ,          o\        V^ ,          \        4      '       d#   V^ ,          P                  S P                  4      oSP                  R4      '       d
   SR,          o\        T4      ^8  d2   T^,          o\        S\        4      '       d   SP                  R4      oMRoTT 3R lpTT 3R lpS P                  P                  S4      P                  Y44       R#   \         d-    S P                  \        P                  T^ ,          R4        R# i ; i)zK
Part message

Parameters: <channel> *( "," <channel> ) [ <Part Message> ]
z:Could not decode your unicode!Nr   r  r   c                 l   <a  V VV3R  lpSP                   P                  S S4      P                  V4      # )c                 .   < SP                  SSS4       R # r#   rG   )r0   rx   rI   r   s   &r   r   2IRCUser.irc_PART.<locals>.cbGroup.<locals>.cbLeave@  s    eT62r!   )r   r   r?   )rx   r   rI   r   s   f r   rC  !IRCUser.irc_PART.<locals>.cbGroup?  s,    3 ;;$$UF3??HHr!   c                    < V P                  \        P                  4       SP                  \        P
                  R S,           RV P                  4       ,           4       R# )r   :N)r  r   r  r   r   ERR_NOTONCHANNELr-   rF  s   &r   r  !IRCUser.irc_PART.<locals>.ebGroupE  sB    HHV''($$cIosS=P=P=R7Rr!   )r   r   r   r   r   r   r   rU  r   rM   rp   r!  r   )r   r   r   rC  r  rG  rI   s   f&&  @@r   irc_PARTIRCUser.irc_PART%  s    	q	I&)U++"1I,,T]];	 $$!"Iv;?AYF&%((w/F	I	 	

y)66wH9 " 	$$fQi1R 		s   %C* "C* *3D! D!c                  a a  VR,          o\        S\        4      '       d   SP                  S P                  4      oSP                  R4      '       d
   SR,          oT 3R lpTT 3R lpS P                  P                  S4      P                  Y44       R#   \         d-    S P                  \        P                  TR,          R4        R# i ; i)zJ
Names message

Parameters: [ <channel> *( "," <channel> ) [ <target> ] ]
r:  Nr   r  c                    < SP                  SP                  R V P                  ,           V P                  4        Uu. uF  qP                  NK  	  up4       R# u upi r=  )r>  r   r_   )rx   r1   r   s   & r   rC  "IRCUser.irc_NAMES.<locals>.cbGroupe  s@    JJ		3+EOODU-VDUDiiDU-V-Vs   Ac                    < V P                  \        P                  4       SP                  SP                  R S,           . 4       R# r=  )r  r   r  r>  r   r&   channelr   s   &r   r  "IRCUser.irc_NAMES.<locals>.ebGroupj  s-    HHV''(JJtyy#-4r!   r   )r   r   r   r   r   r   r   r  r   rp   r!  r   )r   r   r   rC  r  r^  s   f&&  @r   	irc_NAMESIRCUser.irc_NAMESM  s    
	RjG'5))!..7 c""bkG	
	5
 	

w'44WF+ " 	%%r
C
 	rL  c                    V^ ,          p\        V^ ,          \        4      '       d   VP                  V P                  4      pTP                  R4      '       d
   TR,          p\        T4      ^8  d   T P                  Y2^,          4       R# T P                  T4       R#   \         d%    T P                  \        P                  R4        R# i ; i)z2
Topic message

Parameters: <channel> [ <topic> ]
z<:That channel doesn't exist (could not decode your unicode!)Nr   r  )r   r   r   r   r   r   r   r  r   rM   	_setTopic	_getTopic)r   r   r   r^  s   &&& r   	irc_TOPICIRCUser.irc_TOPICq  s    		QiG&)U++!..7 c""bkGv;?NN71I.NN7# " 	%%N 	s   AB   +CCc                   VP                   P                  R4      pV'       d   VP                   P                  R4      ;'       g    RpVP                   P                  R^ 4      pV P                  V P                  RVP                  ,           V4       V P	                  V P                  RVP                  ,           W44       R# R# )z@
Send the topic of the given group to this user, if it has one.
r   r   z<noone>
topic_dater   N)r   r   r   r   topicAuthor)r   rx   r   r   dates   &&   r   r?  IRCUser._sendTopic  s     

w'ZZ^^N3@@yF::>>,2DJJtyy#

"2E:TYYejj(8&G	 r!   c                   a a VV 3R  lpS P                   P                  S4      P                  S P                  V4       R# )c                    < V P                  \        P                  4       SP                  \        P
                  R SR4       R# =r  Nr  r]  s   &r   r  "IRCUser._getTopic.<locals>.ebGroup  3    HHV''(%%sG5Sr!   N)rp   r!  r   r?  )r   r^  r  s   ff r   rd  IRCUser._getTopic  s-    	 	

w'44T__gNr!   c                |   a aa V V3R  lpVV 3R lpS P                   P                  S4      P                  W44       R# )c                    <a  S P                   P                  4       pSVR &   SP                  VR&   \        \	        4       4      VR&   V V3R lpS P                  V4      P                  V4      # )r   r   rh  c                 l   < SP                  \        P                  R SP                  ,           R4       R# )r   z.:You need to be a channel operator to do that.N)r   r   ERR_CHANOPRIVSNEEDEDr   )r&   rx   r   s   &r   ebSet1IRCUser._setTopic.<locals>.cbGroup.<locals>.ebSet  s)      ,,%**$Dr!   )r   copyr   intr   r[   r<   )rx   newMetarw  r   r   s   f  r   rC  "IRCUser._setTopic.<locals>.cbGroup  s^    jjoo'G$GG&*iiGN#$'KGL! $$W-88??r!   c                    < V P                  \        P                  4       SP                  \        P
                  R SR4       R# rn  r  r]  s   &r   r  "IRCUser._setTopic.<locals>.ebGroup  rq  r!   N)rp   r!  r   )r   r^  r   rC  r  s   fff  r   rc  IRCUser._setTopic  s-    	@	 	

w'44WFr!   c                    V F8  w  r#pV P                  \        P                  V\        V4      RV,           4       K:  	  V P                  \        P                  R4       R# )z
Send a group of LIST response lines

@type channels: C{list} of C{(str, int, str)}
@param channels: Information about the channels being sent:
    their name, the number of participants, and their topic.
rT  z:End of /LISTN)r   r   RPL_LISTstrRPL_LISTEND)r   channelsr   rO   r   s   &&   r   r   IRCUser.list  sG     "*DS\\4TC%KH "*/:r!   c                  a  V'       d    V^ ,          p\        V\        4      '       d   VP                  S P                  4      pVP	                  R4      p. pT FM  pTP                  R4      '       d
   TR,          pTP                  S P                  P                  T4      4       KO  	  \        P                  ! TRR7      pTP                  R 4       MS P                  P!                  4       pV 3R	 lpVP                  V4       R#   \
         d-    S P                  \        P                  T^ ,          R4        R# i ; i)
z
List query

Return information about the indicated channels, or about all
channels if none are specified.

Parameters: [ <channel> *( "," <channel> ) [ <target> ] ]
,r:  Nr   r  T)consumeErrorsc                 N    V  UUu. uF  w  rV'       g   K  VNK  	  upp# u uppi r#   r(  )gssrs   &  r   r-  "IRCUser.irc_LIST.<locals>.<lambda>  s    2*C2!112*C*Cs   !!c           	         < R  p\         P                  ! V  Uu. uF!  q"P                  4       P                  W4      NK#  	  up4      pVP                  V3R l4       V# u upi )c                 P    VP                   WP                  P                  R 4      3# )r   )r   r   r   )rO   rx   s   &&r   gotSize3IRCUser.irc_LIST.<locals>.cbGroups.<locals>.gotSize  s    zz4)@@@r!   c                 n   < SP                  V  UUu. uF  w  rV'       g   K  VNK  	  upp4      # u uppi r#   )r   )r.   r  r  r   s   &  r   r-  4IRCUser.irc_LIST.<locals>.cbGroups.<locals>.<lambda>  s'    $))W4RW6APQQQW4R*S4Rs   1
1
)r	   r>   rO   r?   )rl   r  rx   rB   r   s   &   r   cbGroups"IRCUser.irc_LIST.<locals>.cbGroups  sV    A ""GMNve))'9vNA MMSTH Os   'A)r   r   r   r   splitr   r   r   r  r   r=   rp   r!  r	   r>   r?   r   )r   r   r   allChannelsr  rl   chr  s   f&&     r   irc_LISTIRCUser.irc_LIST  s    $Qik511"-"4"4T]]"CK&,,S1 F==%%BBdjj44R89 
 ''dCFCD ZZ**,F	 	8$= &   ))1IG
 s   AD	 	3E ?E c                .   T P                  V P                  R VP                  ,           VP                  4        Uu. uFH  pVP                  V P                  V P                  P                  VP                  R^ VP                  3NKJ  	  up4       R# u upi )r   HN)whor   r_   r   rp   )r   rx   ms   && r   _channelWhoIRCUser._channelWho  sq    II%** **A 

aP*	
s   ABc                F    V P                  \        P                  R 4       R# )z:User /WHO not implementedN)r   r   RPL_ENDOFWHOr   r1   s   &&r   _userWhoIRCUser._userWho  s    ))+GHr!   c                  a a V'       g#   S P                  \        P                  R4       R#  V^ ,          o\        S\        4      '       d   SP                  S P                  4      oSP                  R4      '       dH   TT 3R lpS P                  P                  SR,          4      pTP                  S P                  T4       R# TT 3R lpS P                  P                  S4      pTP                  S P                  T4       R#   \         d-    S P                  \        P                  T^ ,          R4        R# i ; i)z+
Who query

Parameters: [ <mask> [ "o" ] ]
z:/WHO not supported.Nz2:End of /WHO list (could not decode your unicode!)r   c                    < V P                  \        P                  4       SP                  \        P
                  SR 4       R# z:End of /WHO list.N)r  r   r  r   r   r  r&   r$  r   s   &r   r   IRCUser.irc_WHO.<locals>.ebGroup*  s.    ++,  !1!1=BVWr!   r  c                    < V P                  \        P                  4       SP                  \        P
                  SR 4       R# r  )r  r   
NoSuchUserr   r   r  r  s   &r   r  IRCUser.irc_WHO.<locals>.ebUser2  s.    **+  !1!1=BVWr!   )r   r   r  r   r   r   r   r   r   rp   r!  r   r  r#  r  )r   r   r   r  rB   r  r$  s   f&&   @r   irc_WHOIRCUser.irc_WHO	  s     S--/EF
	"1IM-// - 4 4T]] C ##C((X 

&&}R'89ANN4++W5X 

%%m4ANN4==&1/ " 	  q	D
 	s   :D 3D=<D=c                b  a a V 3R lpVV 3R lp S^ ,          p\        V\        4      '       d   VP                  S P                  4      pS P                  P                  T4      P                  Y44       R#   \         d-    S P                  \        P                  S^ ,          R4        R# i ; i)z>
Whois query

Parameters: [ <target> ] <mask> *( "," <mask> )
c                   < SP                  SP                  V P                  V P                  SP                  P                  V P                  SP                  P                  R R\        \	        4       V P
                  ,
          4      V P                  V P                  4        Uu. uF  pRVP                  ,           NK  	  up4       R# u upi )zHi mom!Fr   N)whoisr   rp   rz  r   rm   rr   r   )r1   rx   r   s   & r   cbUser!IRCUser.irc_WHOIS.<locals>.cbUser@  s    JJ						

		

DFT---./3/@A/@euzz!!/@A Bs   %C
c                    < V P                  \        P                  4       SP                  \        P
                  S^ ,          R4       R# )r  :No such nick/channelN)r  r   r  r   r   r  r  s   &r   r  !IRCUser.irc_WHOIS.<locals>.ebUserO  s2    HHV&&'S//<STr!   r  N)r   r   r   r   r   r   r   r  rp   r#  r   )r   r   r   r  r  r1   s   f&f   r   	irc_WHOISIRCUser.irc_WHOIS9  s    		U	!9D$&&{{4==1
 	

d#00@	 " 	S//<ST	s   A7 A7 73B.-B.c                F    V P                  \        P                  R4       R# )z-
Oper message

Parameters: <name> <password>
z:O-lines not applicableN)r   r   ERR_NOOPERHOSTr   s   &&&r   irc_OPERIRCUser.irc_OPER^  s     	++-FGr!   )	r   r   r   r   r   r   r   rp   r   r#   ):ra   rb   rc   rd   __doc__rl   r   r   rp   r   r   r   r   r;   rG   rR   rY   r   r   r   r   r   r   r   r   RPL_WELCOMERPL_YOURHOSTRPL_CREATED
RPL_MYINFOr   RPL_MOTDSTARTRPL_ENDOFMOTDr   r   r   r   r   r  r  r%  r)  r   rJ  rW  r`  re  r?  rd  rc  r   r  r  r  r  r  r  re   rf   rg   s   @r   r   r      su    
 F F F E H(
3P
"	 HH# -D	#-.N 
56O	
 
HI
 NN 5		
& 
		FG			45M

D(4(?$SL!0F&FP&IP"GH$2	H
OG6
;2%h
I.2`"AJH Hr!   r   c                   .   a  ] tR tRt o Rt]tR tRtV t	R# )
IRCFactoryig  a  
IRC server that creates instances of the L{IRCUser} protocol.

@ivar _serverInfo: A dictionary mapping:
    "serviceName" to the name of the server,
    "serviceVersion" to the copyright version,
    "creationDate" to the time that the server was started.
c                    Wn         W n        R V P                   P                  R\        P                  R\        4       /V n        R# )serviceNameserviceVersioncreationDateN)rp   r   r   r   versionr   r   )r   rp   r   s   &&&r   r   IRCFactory.__init__s  s5    
4::??i//EG
r!   )r   r   rp   N)
ra   rb   rc   rd   r  r   r
   r   re   rf   rg   s   @r   r  r  g  s      H
 
r!   r  c                   D   a  ] tR tRt o R tR tR tR tR tR t	Rt
V tR	# )
PBMindi}  c                    R # r#   r(  rN   s   &r   r   PBMind.__init__~      r!   c                    \         P                  ! \        4      p\        V\        4      '       d   VP                  R 4      pW!P                  P                  V 4      3# r   )r   qualr  r   r  r   invokerregisterReferencer   jellierr  s   && r   jellyForPBMind.jellyFor  sC    ||F#dC  ;;w'D__66t<<<r!   c                    R # r#   r(  )r   r1   rx   s   &&&r   remote_userJoinedPBMind.remote_userJoined  r  r!   c                    R # r#   r(  )r   r1   rx   rI   s   &&&&r   remote_userLeftPBMind.remote_userLeft  r  r!   c                    R # r#   r(  r   rS   rT   rU   s   &&&&r   remote_receivePBMind.remote_receive  r  r!   c                    R # r#   r(  r   rx   r   s   &&&r   remote_groupMetaUpdatePBMind.remote_groupMetaUpdate  r  r!   r(  N)ra   rb   rc   rd   r   r  r  r  r  r  re   rf   rg   s   @r   r  r  }  s(     = r!   r  c                   @   a  ] tR tRt o RtR tR tR tR	R ltRt	V t
R# )
PBMindReferencei  r   c                6   \         P                  P                  V4      '       d#   \        V P                  V P
                  V4      pM!\        V P                  V P
                  V4      pV P                  R \        V P                  V P
                  V4      WC4      # )rR   )r   r   r7   PBGrouprp   r   PBUser
callRemote)r   rS   rT   rU   recs   &&&& r   rR   PBMindReference.receive  sl    ==##I..$**dkk9=CT[[)<Cvdjj$++v>
 	
r!   c                f    V P                  R \        V P                  V P                  V4      V4      # )rY   )r  r  rp   r   r  s   &&&r   rY   PBMindReference.groupMetaUpdate  s+    wtzz4;;F
 	
r!   c           	         V P                  R \        V P                  V P                  V4      \	        V P                  V P                  V4      4      # )r;   r  r  rp   r   r  r   s   &&&r   r;   PBMindReference.userJoined  s>    DJJU34::t{{D1
 	
r!   Nc           	         V P                  R \        V P                  V P                  V4      \	        V P                  V P                  V4      V4      # rP  r  r   s   &&&&r   rG   PBMindReference.userLeft  sA    DJJU34::t{{D1	
 	
r!   r(  r#   )ra   rb   rc   rd   r   rR   rY   r;   rG   re   rf   rg   s   @r   r  r    s#     D




 
r!   r  c                   B   a  ] tR tRt o R tR tR tR	R ltR tRt	V t
R# )
r  i  c                *    Wn         W n        W0n        R # r#   )rp   r   rx   )r   rp   r   rx   s   &&&&r   r   PBGroup.__init__  s    

r!   c                    \        V P                  P                  V P                  P                  V P                  P                  34      # r#   )hashrp   r   r   rx   rN   s   &r   processUniqueIDPBGroup.processUniqueID  s.    TZZ__dkk&6&6

HIIr!   c                D   \         P                  ! V P                  4      p\        V\        4      '       d   VP                  R 4      pV P                  P                  p\        V\        4      '       d   VP                  R 4      pW#VP                  P                  V 4      3# r  )
r   r  	__class__r   r  r   rx   r   r  r  )r   r  r  rx   s   &&  r   r  PBGroup.jellyFor  sq    ||DNN+dC  ;;w'D

eS!!LL)EGOO==dCCCr!   Nc                N    V P                   P                  V P                  V4      # r#   )r   r   rx   r   s   &&r   remote_leavePBGroup.remote_leave  s    {{  V44r!   c                N    V P                   P                  V P                  V4      # r#   )r   r   rx   r   rU   s   &&r   remote_sendPBGroup.remote_send  s    {{

G44r!   )r   rx   rp   r#   )ra   rb   rc   rd   r   r  r  r  r  re   rf   rg   s   @r   r  r    s%     
JD55 5r!   r  c                   ^   a  ] tR tRt o R tRR ltR tR tR tR t	RR	 lt
R
 tR tRtV tR# )PBGroupReferencei  c                z    Vw  r4pVP                  R 4      V n        \        P                  P	                  WW5.4      # r  )r   r   r   RemoteReference
unjellyFor)r   	unjellierunjellyListclsNamer   refs   &&&   r   r  PBGroupReference.unjellyFor  s7    (sKK(	!!,,TwnMMr!   Nc                &    V P                  R V4      # )r   r  r   s   &&r   r   PBGroupReference.leave  s    w//r!   c                &    V P                  R V4      # )r   r  r  s   &&r   r   PBGroupReference.send  s    vw//r!   c                    R # r#   r(  r  s   &&r   rC   PBGroupReference.add      r!   c                    R # r#   r(  rN   s   &r   r_   PBGroupReference.iterusers  r  r!   c                    R # r#   r(  r  s   &&&&r   rR   PBGroupReference.receive  r  r!   c                    R # r#   r(  )r   r1   rI   s   &&&r   r,   PBGroupReference.remove  r  r!   c                    R # r#   r(  )r   r   s   &&r   r[   PBGroupReference.setMetadata  r  r!   c                    R # r#   r(  rN   s   &r   rO   PBGroupReference.size  r  r!   r   r#   )ra   rb   rc   rd   r  r   r   rC   r_   rR   r,   r[   rO   re   rf   rg   s   @r   r
  r
    s8     N
00 r!   r
  c                   ,   a  ] tR tRt o R tR tRtV tR# )r  i  c                *    Wn         W n        W0n        R # r#   )rp   r   r1   )r   rp   r   r1   s   &&&&r   r   PBUser.__init__  s    
	r!   c                    \        V P                  P                  V P                  P                  V P                  P                  34      # r#   )r  rp   r   r   r1   rN   s   &r   r  PBUser.processUniqueID  s.    TZZ__dkk&6&6		GHHr!   )r   rp   r1   N)ra   rb   rc   rd   r   r  re   rf   rg   s   @r   r  r    s     
I Ir!   r  c                      a  ] tR tRt o R tR tR t]R 4       t]P                  R 4       tR t
R tR	 tRR ltRtV tR
# )
ChatAvatari  c                    Wn         R # r#   r   )r   r   s   &&r   r   ChatAvatar.__init__  s    r!   c                    \         P                  ! V P                  4      p\        V\        4      '       d   VP                  R 4      pW!P                  P                  V 4      3# r  )r   r  r   r   r  r   r  r  r  s   && r   r  ChatAvatar.jellyFor
  sG    ||DNN+dC  ;;w'D__66t<<<r!   c                   a  V 3R  lpS P                   P                  P                  V4      pVP                  V4       V# )c                 p   <a  V V3R  lpSP                   P                  S 4      pVP                  V4       V# )c                 Z   < \        SP                  P                  SP                  S4      # r#   )r  r   rp   )ignoredrx   r   s   &r   ry   7ChatAvatar.remote_join.<locals>.cbGroup.<locals>.cbJoin  s     t{{00$++uEEr!   rB  )rx   ry   rB   r   s   f  r   rC  'ChatAvatar.remote_join.<locals>.cbGroup  s0    F   'AMM&!Hr!   )r   rp   rI  r?   )r   rG  rC  rB   s   f&  r   remote_joinChatAvatar.remote_join  s5    	 KK&&y1	gr!   c                    R # r#   r(  rN   s   &r   r   ChatAvatar.name       	r!   c                    R # r#   r(  )r   r+   s   &&r   r   r;  "  r<  r!   c                    R # r#   r(  r  s   &&&r   rY   ChatAvatar.groupMetaUpdate'  r  r!   c                    R # r#   r(  r  s   &&&&r   rR   ChatAvatar.receive+  r  r!   c                    R # r#   r(  r   s   &&&r   r;   ChatAvatar.userJoined/  r  r!   Nc                    R # r#   r(  r   s   &&&&r   rG   ChatAvatar.userLeft3  r  r!   r.  r#   )ra   rb   rc   rd   r   r  r8  propertyr   setterrY   rR   r;   rG   re   rf   rg   s   @r   r,  r,    sY     =   
[[  r!   r,  c                   ,   a  ] tR tRt o R tR tRtV tR# )AvatarReferencei;  c                &    V P                  R V4      # )r|   r  )r   rG  s   &&r   r|   AvatarReference.join<  s    vy11r!   c                   a \         P                  ! 4       oV P                  P                  V3R  l4       V P                  P                  P                  4        S# )c                  &   < S P                  R 4      # r#   )callback)rB   s   r   r-  &AvatarReference.quit.<locals>.<lambda>A  s    qzz$/?r!   )r	   DeferredbrokernotifyOnDisconnectr   r   )r   rB   s   &@r   quitAvatarReference.quit?  s=    NN&&'?@,,.r!   r(  N)ra   rb   rc   rd   r|   rS  re   rf   rg   s   @r   rI  rI  ;  s     2 r!   rI  c                      a  ] tR tRt o RtR tR tR tR tR t	R t
R	tR
tR tR tR tR tR tR tR tR tRtV tR# )
WordsRealmiI  r   c                    Wn         R # r#   r%  r   s   &&r   r   WordsRealm.__init__M  s    	r!   c                    \        V4      # r#   )rj   r   s   &&r   userFactoryWordsRealm.userFactoryP  s    Dzr!   c                    \        V4      # r#   )r   r   s   &&r   groupFactoryWordsRealm.groupFactoryS  s    T{r!   c                   aa VV3R  lpV# )c                  J   < \        SR R 4      ! 4        R;S n        S n        R# )r   c                      R # r#   r(  r(  r!   r   r-  :WordsRealm.logoutFactory.<locals>.logout.<locals>.<lambda>Y  s    Tr!   N)getattrrp   rq   )r   facets   r   r   (WordsRealm.logoutFactory.<locals>.logoutW  s     E8\24)--FL6;r!   r(  )r   r   rd  r   s   &ff r   logoutFactoryWordsRealm.logoutFactoryV  s    	.
 r!   c                   a aaa \        S\        4      '       d   SP                  S P                  4      oVVVV 3R  lpS P	                  S4      P                  V4      # )c                   < V P                   e   \        P                  ! 4       hS FL  pV! V R 4      pVf   K  V P                  SS4       SSn        SSn         V Sn        WSP                  W4      3u # 	  \        SS4      hr#   )rp   r   r   rs   r   r   rf  NotImplementedError)r   r   rd  avatarId
interfacesrq   r   s   &  r   	gotAvatar+WordsRealm.requestAvatar.<locals>.gotAvatarb  s    ||',,..#fd+$OOD$/ (DI!%DJ"(DK ););F)JJJ $ &dJ77r!   )r   r   r   	_encodinggetUserr?   )r   rk  rq   rl  rm  s   fffj r   requestAvatarWordsRealm.requestAvatar^  sH    h&&t~~6H	8 	8 ||H%11)<<r!   c                    R # r#   r(  rN   s   &r   r   WordsRealm.itergroupsq  r  r!   FTc                    \         hr#   rj  r   s   &&r   r#  WordsRealm.lookupUsery      !!r!   c                    \         hr#   rv  r   rx   s   &&r   r!  WordsRealm.lookupGroup|  rx  r!   c                    \         h)a  
Add the given user to this service.

This is an internal method intended to be overridden by
L{WordsRealm} subclasses, not called by external code.

@type user: L{IUser}

@rtype: L{twisted.internet.defer.Deferred}
@return: A Deferred which fires with L{None} when the user is
added, or which fails with
L{twisted.words.ewords.DuplicateUser} if a user with the
same name exists already.
rv  r  s   &&r   addUserWordsRealm.addUser  s
     "!r!   c                    \         h)a  
Add the given group to this service.

@type group: L{IGroup}

@rtype: L{twisted.internet.defer.Deferred}
@return: A Deferred which fires with L{None} when the group is
added, or which fails with
L{twisted.words.ewords.DuplicateGroup} if a group with the
same name exists already.
rv  rz  s   &&r   addGroupWordsRealm.addGroup  s
     "!r!   c                   a a S P                   '       d(   VV 3R  lpS P                  S4      P                  V4      # S P                  S4      # )c                 d   < V P                  \        P                  4       SP                  S4      # r#   )r  r   DuplicateGroupr!  r&   r   r   s   &r   r  $WordsRealm.getGroup.<locals>.ebGroup  s&    ../''--r!   )createGroupOnRequestcreateGroupr<   r!  )r   r   r  s   ff r   rI  WordsRealm.getGroup  sC    $$$. ##D)44W==%%r!   c                   a a S P                   '       d(   VV 3R  lpS P                  S4      P                  V4      # S P                  S4      # )c                 d   < V P                  \        P                  4       SP                  S4      # r#   )r  r   DuplicateUserr#  r  s   &r   r  "WordsRealm.getUser.<locals>.ebUser  s$    --.t,,r!   )createUserOnRequest
createUserr<   r#  )r   r   r  s   ff r   rp  WordsRealm.getUser  s?    ###- ??4(33F;;t$$r!   c                   a a V3R  lpVV 3R lpSP                  4       oS P                  S4      pVP                  W#4       VP                  S P                  4       V# )c                 X   < \         P                  ! \        P                  ! S4      4      # r#   )r   r$   r   r  )r1   r   s   &r   cbLookup'WordsRealm.createUser.<locals>.cbLookup  s    ??6#7#7#=>>r!   c                 d   < V P                  \        P                  4       SP                  S4      # r#   )r  r   r  rZ  r  s   &r   ebLookup'WordsRealm.createUser.<locals>.ebLookup  s&    HHV&&'##D))r!   )r   r#  r   r?   r}  r   r   r  r  rB   s   ff   r   r  WordsRealm.createUser  sI    	?	* zz|OOD!	x*	dll#r!   c                   a a V3R  lpVV 3R lpSP                  4       oS P                  S4      pVP                  W#4       VP                  S P                  4       V# )c                 X   < \         P                  ! \        P                  ! S4      4      # r#   )r   r$   r   r  )rx   r   s   &r   r  (WordsRealm.createGroup.<locals>.cbLookup  s    ??6#8#8#>??r!   c                 d   < V P                  \        P                  4       SP                  S4      # r#   )r  r   r  r]  r  s   &r   r  (WordsRealm.createGroup.<locals>.ebLookup  s&    HHV''($$T**r!   )r   r!  r   r?   r  r  s   ff   r   r  WordsRealm.createGroup  sL    	@	+ zz|T"	x*	dmm$r!   r%  N)ra   rb   rc   rd   ro  r   rZ  r]  rf  rq  r   r  r  r#  r!  r}  r  rI  rp  r  r  re   rf   rg   s   @r   rV  rV  I  sc     I=&
 !"""""&% r!   rV  c                   P   a a ] tR tRt oV 3R ltR tR tR tR tR t	Rt
VtV ;t# )	InMemoryWordsRealmi  c                D   < \         SV `  ! V/ VB  / V n        / V n        R # r#   )superr   r   rl   )r   ar   r   s   &*,r   r   InMemoryWordsRealm.__init__  s#    !"r"
r!   c                ^    \         P                  ! V P                  P                  4       4      # r#   )r	   r@   rl   r9   rN   s   &r   r   InMemoryWordsRealm.itergroups  s    }}T[[//122r!   c                   VP                   V P                  9   d>   \        P                  ! \        P
                  ! \        P                  ! 4       4      4      # WP                  VP                   &   \        P                  ! V4      # r#   )	r   r   r	   failr   r$   r   r  r@   r  s   &&r   r}  InMemoryWordsRealm.addUser  sR    99

"::goof.B.B.DEFF $

499}}T""r!   c                   VP                   V P                  9   d>   \        P                  ! \        P
                  ! \        P                  ! 4       4      4      # WP                  VP                   &   \        P                  ! V4      # r#   )	r   rl   r	   r  r   r$   r   r  r@   rz  s   &&r   r  InMemoryWordsRealm.addGroup  sR    ::$::goof.C.C.EFGG"'EJJ}}U##r!   c                   VP                  4       p V P                  V,          p\        P                  ! V4      #   \         dB    \        P
                  ! \        P                  ! \        P                  ! T4      4      4      u # i ; ir#   )
r   r   r	   r@   rH   r  r   r$   r   r  )r   r   r1   s   && r   r#  InMemoryWordsRealm.lookupUser  sg    zz|	'::d#D ==&&  	H::goof.?.?.EFGG	H   ; A	BBc                   VP                  4       p V P                  V,          p\        P                  ! V4      #   \         dB    \        P
                  ! \        P                  ! \        P                  ! T4      4      4      u # i ; ir#   )
r   rl   r	   r@   rH   r  r   r$   r   r  )r   r   rx   s   && r   r!  InMemoryWordsRealm.lookupGroup  sg    zz|	(KK%E ==''  	I::goof.@.@.FGHH	Ir  )rl   r   )ra   rb   rc   rd   r   r   r}  r  r#  r!  re   rf   __classcell__)r   rh   s   @@r   r  r    s(     
3#$'( (r!   r  N)r   rj   rV  r  )6r  r   r   zope.interfacer   twistedr   twisted.credr   r   r   r   twisted.internetr	   r
   twisted.pythonr   r   r   twisted.python.componentsr   twisted.spreadr   twisted.wordsr   r   twisted.words.protocolsr   r   r   r   rj   r   r6   r   r   ServerFactoryr  Referenceabler  r  r  setUnjellyableForClassr  r
  r  r,  IPerspectiverI  IRealmIChatServicerV  r  __all__r(  r!   r   <module>r     s!  
2  &  < < , 0 0 5  ( ' V]]J) J) J)Z V\\% % %P ( V }
Hcgg }
H !}
H@
'' 
,R . V 
b(( 
 !
B   &/ 25b 52 V]]"r)) " "J   '#3 4IR I V /!! / !/d 
FLL"// :b((    *o 6 V]]F//0B B 1BJ%( %(Pr!   