§
    Étºf&—  ã                   ó>  — d Z ddlmZmZ ddlmZ ddlmZ ddlmZm	Z
mZ ddlmZmZ ddlmZmZmZ ddlmZ dd	lmZ dd
lmZmZ ddlmZ  eej        ¦  «         G d„ d¦  «        ¦   «         Z eej        ¦  «         G d„ d¦  «        ¦   «         ZdZ  eej!        ¦  «         G d„ dej"        ¦  «        ¦   «         Z# G d„ dej$        ¦  «        Z% G d„ dej&        ¦  «        Z' eej!        ¦  «         G d„ dej(        ¦  «        ¦   «         Z) ej*        e'e)¦  «          G d„ dej&        ¦  «        Z+ eej        ¦  «         G d„ dej(        ¦  «        ¦   «         Z, ej*        e+e,¦  «          G d„ dej&        ¦  «        Z- eej!        ¦  «         G d„ d ej&        ¦  «        ¦   «         Z. ee.ej        ej/        ¦  «          G d!„ d"ej(        ¦  «        Z0 ej*        e.e0¦  «          eej1        ej2        ¦  «         G d#„ d$¦  «        ¦   «         Z3 G d%„ d&e3¦  «        Z4g d'¢Z5d(S ))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                   óF   — e Zd Zd„ Zd„ Zd„ Zd„ Zdd„Zd„ Zd„ Z	d	„ Z
d
„ ZdS )ÚGroupc                 ó6   — || _         i | _        dddœ| _        d S )NÚ )ÚtopicÚtopic_author)ÚnameÚusersÚmeta©Úselfr   s     úT/var/www/surfInsights/venv3-11/lib/python3.11/site-packages/twisted/words/service.pyÚ__init__zGroup.__init__.   s(   € ØˆŒ	ØˆŒ
àØð
ð 
ˆŒ	ˆ	ˆ	ó    c                 óF   — t          j        t          ||¦  «        ¦  «        S ©N)r   ÚFailureÚ	Exception)r   ÚerrÚps      r   Ú_ebUserCallzGroup._ebUserCall6   s   € ÝŒ�y¨¨CÑ0Ô0Ñ1Ô1Ð1r!   c                 ó~   — |D ]9\  }}|s2|j         \  }}|                      ||                     ¦   «         ¦  «         Œ:d S r#   )ÚvalueÚremoveÚgetErrorMessage)r   ÚresultsÚsuccessÚresultÚuserr&   s         r   Ú_cbUserCallzGroup._cbUserCall9   sS   € Ø&ð 	9ð 	9‰OˆG�VØð 9Ø"œL‘	��cØ—’˜D #×"5Ò"5Ñ"7Ô"7Ñ8Ô8Ð8øð	9ð 	9r!   c                 ó  — t           j                             |¦  «        sJ d                     |¦  «        ¦   «         ‚|j        | j        vr©g }|| j        |j        <   | j                             ¦   «         D ]R}||urLt          j        |j	        | |¦  «        }| 
                    | j        |¬¦  «         |                     |¦  «         ŒSt          j        |¦  «                             | j        ¦  «         t          j        d ¦  «        S )Nz{!r} is not a chat client©r'   )r   ÚIChatClientÚ
providedByÚformatr   r   Úvaluesr
   ÚmaybeDeferredÚ
userJoinedÚ
addErrbackr(   ÚappendÚDeferredListÚaddCallbackr1   Úsucceed)r   r0   Ú	additionsr'   Úds        r   Úaddz	Group.add?   s  € ÝÔ!×,Ò,¨TÑ2Ô2ð 	
ð 	
Ð4O×4VÒ4VØñ5
ô 5
ñ 	
ô 	
ð 	
ð Œ9˜DœJÐ&Ð&ØˆIØ$(ˆDŒJ�t”yÑ!Ø”Z×&Ò&Ñ(Ô(ð (ð (�Ø˜D�=�=ÝÔ+¨A¬L¸$ÀÑEÔE�AØ—L’L Ô!1°Q�LÑ7Ô7Ð7Ø×$Ò$ QÑ'Ô'Ð'øÝÔ˜yÑ)Ô)×5Ò5°dÔ6FÑGÔGÐGÝŒ}˜TÑ"Ô"Ð"r!   Nc                 óž  — 	 | j         |j        = g }| j                              ¦   «         D ]S}||urMt          j        |j        | ||¦  «        }|                     | j        |¬¦  «         |                     |¦  «         ŒTt          j	        |¦  «         
                    | j        ¦  «         n# t          $ r Y nw xY wt          j        d ¦  «        S ©Nr3   )r   r   r7   r
   r8   ÚuserLeftr:   r(   r;   r<   r=   r1   ÚKeyErrorr>   )r   r0   ÚreasonÚremovalsr'   r@   s         r   r+   zGroup.removeN   sÞ   € ð	GØ”
˜4œ9Ð%ð ˆHØ”Z×&Ò&Ñ(Ô(ð 'ð '�Ø˜D�=�=ÝÔ+¨A¬J¸¸dÀFÑKÔK�AØ—L’L Ô!1°Q�LÑ7Ô7Ð7Ø—O’O AÑ&Ô&Ð&øÝÔ˜xÑ(Ô(×4Ò4°TÔ5EÑFÔFÐFÐFøõ ð 	ð 	ð 	ØˆDð	øøøõ Œ}˜TÑ"Ô"Ð"s   ‚B+ Â+
B8Â7B8c                 óN   — t          j        t          | j        ¦  «        ¦  «        S r#   )r
   r>   Úlenr   ©r   s    r   Úsizez
Group.size]   s   € ÝŒ}�S ¤™_œ_Ñ-Ô-Ð-r!   c                 ól  — || u sJ ‚g }| j                              ¦   «         D ]S}||urMt          j        |j        || |¦  «        }|                     | j        |¬¦  «         |                     |¦  «         ŒTt          j        |¦  «         	                    | j
        ¦  «         t          j        d ¦  «        S rC   )r   r7   r
   r8   Úreceiver:   r(   r;   r<   r=   r1   r>   )r   ÚsenderÚ	recipientÚmessageÚreceivesr'   r@   s          r   rM   zGroup.receive`   s´   € Ø˜DÐ Ð Ð Ð ØˆØ”×"Ò"Ñ$Ô$ð 	#ð 	#ˆAØ˜ˆˆÝÔ'¨¬	°6¸4ÀÑIÔI�Ø—’˜TÔ-°�Ñ3Ô3Ð3Ø—’ Ñ"Ô"Ð"øÝÔ˜8Ñ$Ô$×0Ò0°Ô1AÑBÔBÐBÝŒ}˜TÑ"Ô"Ð"r!   c                 ód  — || _         g }| j                             ¦   «         D ]N}t          j        |j        | |¦  «        }|                     | j        |¬¦  «         |                     |¦  «         ŒOt          j	        |¦  «         
                    | j        ¦  «         t          j        d ¦  «        S rC   )r   r   r7   r
   r8   ÚgroupMetaUpdater:   r(   r;   r<   r=   r1   r>   )r   r   Úsetsr'   r@   s        r   ÚsetMetadatazGroup.setMetadatak   sž   € ØˆŒ	ØˆØ”×"Ò"Ñ$Ô$ð 	ð 	ˆAÝÔ# AÔ$5°t¸TÑBÔBˆAØ�LŠL˜Ô)¨QˆLÑ/Ô/Ð/Ø�KŠK˜‰NŒNˆNˆNÝÔ˜4Ñ Ô ×,Ò,¨TÔ-=Ñ>Ô>Ð>ÝŒ}˜TÑ"Ô"Ð"r!   c                 óN   — t          | j                             ¦   «         ¦  «        S r#   )Úiterr   r7   rJ   s    r   Ú	iteruserszGroup.iterusersu   s   € å�D”J×%Ò%Ñ'Ô'Ñ(Ô(Ð(r!   r#   )Ú__name__Ú
__module__Ú__qualname__r    r(   r1   rA   r+   rK   rM   rU   rX   © r!   r   r   r   ,   s    € € € € € ð
ð 
ð 
ð2ð 2ð 2ð9ð 9ð 9ð#ð #ð #ð#ð #ð #ð #ð.ð .ð .ð	#ð 	#ð 	#ð#ð #ð #ð)ð )ð )ð )ð )r!   r   c                   óB   — e Zd ZdZdZd„ Zd„ Zd„ Zd	d„Zd„ Z	d„ Z
d„ ZdS )
ÚUserNc                 óH   — || _         g | _        t          ¦   «         | _        d S r#   )r   Úgroupsr   ÚlastMessager   s     r   r    zUser.__init__   s"   € ØˆŒ	ØˆŒÝ™6œ6ˆÔÐÐr!   c                 óH   — || _         || _        t          ¦   «         | _        d S r#   )ÚrealmÚmindr   ÚsignOn)r   rc   rd   s      r   ÚloggedInzUser.loggedIn„   s   € ØˆŒ
ØˆŒ	Ý‘f”fˆŒˆˆr!   c                 ól   ‡ ‡— ˆˆ fd„}‰                      ‰ j        ¦  «                             |¦  «        S )Nc                 ó<   •— ‰j                              ‰¦  «         | S r#   )r`   r;   ©r/   Úgroupr   s    €€r   ÚcbJoinzUser.join.<locals>.cbJoinŠ   ó   ø€ ØŒK×Ò˜uÑ%Ô%Ð%ØˆMr!   )rA   rd   r=   )r   rj   rk   s   `` r   Újoinz	User.join‰   sF   øø€ ð	ð 	ð 	ð 	ð 	ð 	ð �yŠy˜œÑ#Ô#×/Ò/°Ñ7Ô7Ð7r!   c                 ón   ‡ ‡— ˆˆ fd„}‰                      ‰ j        |¦  «                             |¦  «        S )Nc                 ó<   •— ‰j                              ‰¦  «         | S r#   )r`   r+   ri   s    €€r   ÚcbLeavezUser.leave.<locals>.cbLeave‘   rl   r!   )r+   rd   r=   )r   rj   rF   rp   s   ``  r   Úleavez
User.leave�   sH   øø€ ð	ð 	ð 	ð 	ð 	ð 	ð �|Š|˜DœI vÑ.Ô.×:Ò:¸7ÑCÔCÐCr!   c                 ó`   — t          ¦   «         | _        |                     | j        ||¦  «        S r#   )r   ra   rM   rd   )r   rO   rP   s      r   Úsendz	User.send—   s(   € Ý™6œ6ˆÔØ× Ò  ¤¨I°wÑ?Ô?Ð?r!   c                 ó*   — t          | j        ¦  «        S r#   )rW   r`   rJ   s    r   Ú
itergroupszUser.itergroups›   s   € Ý�D”KÑ Ô Ð r!   c                 óT   — | j         d d …         D ]}|                      |¦  «         Œd S r#   )r`   rq   )r   Úgs     r   ÚlogoutzUser.logoutž   s6   € Ø”˜Q˜Q˜Q”ð 	ð 	ˆAØ�JŠJ�q‰MŒMˆMˆMð	ð 	r!   r#   )rY   rZ   r[   rc   rd   r    rf   rm   rq   rs   ru   rx   r\   r!   r   r^   r^   z   s“   € € € € € à€EØ€Dð"ð "ð "ð
ð ð ð
8ð 8ð 8ðDð Dð Dð Dð@ð @ð @ð!ð !ð !ðð ð ð ð r!   r^   zNickServ!NickServ@servicesc                   ón  — e Zd ZdZdZdZdZdZdZd„ Z	d„ Z
d„ Zd„ Zd-d„Zd	„ Zd
„ ZdZdZd„ Zd„ Zd„ Zd„ Zd„ Zej        dfej        dfej        dfej        dfgZej        dfej        dfgZd„ Z d„ Z!d„ Z"d„ Z#d-d„Z$d-d„Z%d„ Z&d„ Z'd„ Z(d„ Z)d „ Z*d!„ Z+d"„ Z,d#„ Z-d$„ Z.d%„ Z/d&„ Z0d'„ Z1d(„ Z2d)„ Z3d*„ Z4d+„ Z5d,„ Z6dS ).ÚIRCUserzM
    Protocol instance representing an IRC user connected to the server.
    Núutf-8c                 ób   — | j         | _        | j        j        | _        | j        j        | _        d S r#   )Úirc_NICKSERV_PRIVMSGÚirc_PRIVMSGÚfactoryrc   r   ÚhostnamerJ   s    r   ÚconnectionMadezIRCUser.connectionMade¼   s(   € ØÔ4ˆÔØ”\Ô'ˆŒ
Øœ
œˆŒˆˆr!   c                 óN   — | j         �|                       ¦   «          d | _        d S d S r#   )rx   Úavatar©r   rF   s     r   ÚconnectionLostzIRCUser.connectionLostÁ   s*   € ØŒ;Ð"Ø�KŠK‰MŒMˆMØˆDŒKˆKˆKð #Ð"r!   c                 ó\  — d|vr
| j         |d<   d|vr"| j                             | j        ¦  «        |d<   | ||d         gt	          |¦  «        z   }g }|D ]A}t          |t          ¦  «        r|                     d¦  «        }|                     |¦  «         ŒBt          j
        j        |i |¤Ž d S )NÚprefixÚtor{   )r€   r   ÚencodeÚencodingÚlistÚ
isinstanceÚbytesÚdecoder;   r   ÚIRCÚsendMessage)r   ÚcommandÚparameter_listÚkwÚarglistÚarglistUnicodeÚargs          r   r�   zIRCUser.sendMessageÇ   sÅ   € Ø˜2ÐÐØœ=ˆBˆx‰LØ�rˆ>ˆ>Ø”y×'Ò'¨¬Ñ6Ô6ˆBˆt‰Hà˜ " T¤(Ð+­d°>Ñ.BÔ.BÑBˆØˆØð 	'ð 	'ˆCÝ˜#�uÑ%Ô%ð *Ø—j’j Ñ)Ô)�Ø×!Ò! #Ñ&Ô&Ð&Ð&ÝŒÔ˜^Ð2¨rÐ2Ð2Ð2Ð2Ð2r!   c                 óp   — |                       |j        › d|j        › d| j        › �d|j        z   ¦  «         d S )Nú!ú@ú#)rm   r   r€   ©r   rj   r0   s      r   r9   zIRCUser.userJoinedÖ   s?   € Ø�	Š	�T”YÐ<Ð< ¤Ð<Ð<¨T¬]Ð<Ð<¸cÀEÄJÑ>NÑOÔOÐOÐOÐOr!   c                 óv   — |                       |j        › d|j        › d| j        › �d|j        z   |pd¦  «         d S )Nr˜   r™   rš   Úleaving)Úpartr   r€   ©r   rj   r0   rF   s       r   rD   zIRCUser.userLeftÙ   sS   € Ø�	Š	ØŒyÐ6Ð6˜4œ9Ð6Ð6 t¤}Ð6Ð6Ø�%”*ÑØÐ �yñ	
ô 	
ð 	
ð 	
ð 	
r!   c                 ó  — t           j                             |¦  «        rd|j        z   }n|j        }|                     dd¦  «        }|                     ¦   «         D ]0}|                      |j        › d|j        › d| j        › �||¦  «         Œ1d S )Nrš   Útextz<an unrepresentable message>r˜   r™   )r   ÚIGroupr5   r   ÚgetÚ
splitlinesÚprivmsgr€   )r   rN   rO   rP   ÚrecipientNamer¡   ÚLs          r   rM   zIRCUser.receiveà   s¨   € õ Œ=×#Ò# IÑ.Ô.ð 	+Ø )¤.Ñ0ˆMˆMà%œNˆMà�{Š{˜6Ð#AÑBÔBˆØ—’Ñ"Ô"ð 	ð 	ˆAØ�LŠLØ”;Ð>Ð> ¤Ð>Ð>¨t¬}Ð>Ð>ØØñô ð ð ð	ð 	r!   c           
      ó²   — d|v rR|d         }|                      dd¦  «        }|                      | j        d|j        z   ||› d|› d| j        › �¦  «         d S d S )Nr   r   r   rš   r˜   r™   )r£   r   r   r€   )r   rj   r   r   Úauthors        r   rS   zIRCUser.groupMetaUpdateñ   s{   € Ø�dˆ?ˆ?Ø˜”MˆEØ—X’X˜n¨bÑ1Ô1ˆFØ�JŠJØ”	Ø�e”jÑ ØØÐ4Ð4˜FÐ4Ð4 T¤]Ð4Ð4ñ	ô ð ð ð ð ˆ?r!   c                 ó    — |d         | _         dS )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_PASSzIRCUser.irc_PASS   s   € ð ˜rœ
ˆŒˆˆr!   c                 ó,  — |d         }	 t          |t          ¦  «        r|                     | j        ¦  «        }nS# t          $ rF |                      t          t          |¦  «        d¦  «         | j         	                    ¦   «          Y dS w xY w|| _
        || _        | j        D ](\  }}|                      ||| j        j        z  ¦  «         Œ)| j        €|                      t          |d¦  «         dS | j        }d| _        |                      ||¦  «         dS )zh
        Nick message -- Set your nickname.

        Parameters: <nickname>

        [REQUIRED]
        r   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_NICKzIRCUser.irc_NICK  s,  € ð ˜!”9ˆð
	Ý˜(¥EÑ*Ô*ð :Ø#Ÿ?š?¨4¬=Ñ9Ô9�øøÝ!ð 	ð 	ð 	Ø�LŠLÝÝ�X‘”ØMñô ð ð
 ŒN×)Ò)Ñ+Ô+Ð+ØˆFˆFð	øøøð !ˆŒØˆŒ	àÔ,ð 	Dð 	D‰JˆD�$Ø×Ò˜T 4¨$¬,Ô*BÑ#BÑCÔCÐCÐCàŒ=Ð Ø�LŠL� 8¨[Ñ9Ô9Ð9Ð9Ð9à”}ˆHØ ˆDŒMØ�LŠL˜ 8Ñ,Ô,Ð,Ð,Ð,s   Š/: ºAB
Â	B
c                 ó    — |d         | _         dS )zk
        User message -- Set your realname.

        Parameters: <user> <mode> <unused> <realname>
        r«   N)Úrealnamer­   s      r   Úirc_USERzIRCUser.irc_USER/  s   € ð ˜rœ
ˆŒˆˆr!   c                 ó(  — |d         }|d         }| j         €| j                             ¦   «          dS |                     ¦   «         dk    r#|                      t
          | j         d¦  «         dS | j         }d| _         |                      ||¦  «         dS )ú^
        Send a (private) message.

        Parameters: <msgtarget> <text to be sent>
        r   r«   NÚnickservz1Denied.  Please send me (NickServ) your password.)r¶   r´   rµ   Úlowerr¥   r²   r¹   )r   r‡   r®   Útargetr¬   r¶   s         r   r}   zIRCUser.irc_NICKSERV_PRIVMSG:  s    € ð ˜”ˆØ˜"”:ˆàŒ=Ð àŒN×)Ò)Ñ+Ô+Ð+Ð+Ð+Ø�\Š\‰^Œ^˜zÒ)Ð)Ø�LŠLÝØ”ØCñô ð ð ð ð ”}ˆHØ ˆDŒMØ�LŠL˜ 8Ñ,Ô,Ð,Ð,Ð,r!   c                 óÈ   — | j         j                             t          j        ||¦  «        | t
          j        ¦  «        }|                     | j        | j	        |f¬¦  «         d S )N)ÚerrbackArgs)
r   r	   Úloginr   ÚUsernamePasswordr   ÚIUserÚaddCallbacksÚ_cbLoginÚ_ebLogin)r   r¶   r¬   r@   s       r   r¹   zIRCUser.logInAsQ  sX   € ØŒLÔ×%Ò%ÝÔ(¨°8Ñ<Ô<¸dÅFÄLñ
ô 
ˆð 	
�Š�t”} d¤mÀ(ÀˆÑMÔMÐMÐMÐ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                 óÈ   — |\  }}}|t           j        u sJ d|›�¦   «         ‚| `|| _        || _        | j        D ](\  }}|                      ||| j        j        z  ¦  «         Œ)d S )NzRealm is buggy, got )	r   rÈ   r~   rƒ   rx   Ú_welcomeMessagesr�   r   r¸   )r   r/   Úifacerƒ   rx   rº   r¡   s          r   rÊ   zIRCUser._cbLoginn  s�   € Ø"(Ñˆ�˜Ø�œÐ$Ð$Ð$Ð&F¸UÐ&FÐ&FÑ$Ô$Ð$ð ÐàˆŒØˆŒØÔ/ð 	Dð 	D‰JˆD�$Ø×Ò˜T 4¨$¬,Ô*BÑ#BÑCÔCÐCÐCð	Dð 	Dr!   c                 ó°  — |                      t          j        ¦  «        r|                      t          |d¦  «         n€|                      t
          j        ¦  «        r|                      t          |d¦  «         nDt          j        d¦  «         t          j	        |¦  «         |                      t          |d¦  «         | j
                             ¦   «          d S )Nz*Already logged in.  No pod people allowed!zLogin failed.  Goodbye.zUnhandled error during login:z"Server error during login.  Sorry.)Úcheckr   ÚAlreadyLoggedInr¥   r²   ÚecredÚUnauthorizedLoginr   Úmsgr&   r´   rµ   )r   r&   r¶   s      r   rË   zIRCUser._ebLoginz  sÀ   € Ø�9Š9•VÔ+Ñ,Ô,ð 		SØ�LŠLÝ˜(Ð$Pñô ð ð ð �YŠY•uÔ.Ñ/Ô/ð 	SØ�LŠL� 8Ð-FÑGÔGÐGÐGåŒGÐ3Ñ4Ô4Ð4ÝŒG�C‰LŒLˆLØ�LŠL� 8Ð-QÑRÔRÐRØŒ×%Ò%Ñ'Ô'Ð'Ð'Ð'r!   c                 óN   — | j         �|                      d| j        ¦  «         dS dS )zK
        Ping message

        Parameters: <server1> [ <server2> ]
        NÚPONG)rc   r�   r€   r­   s      r   Úirc_PINGzIRCUser.irc_PING‰  s2   € ð Œ:Ð!Ø×Ò˜V T¤]Ñ3Ô3Ð3Ð3Ð3ð "Ð!r!   c                 ó8   — | j                              ¦   «          dS )z>
        Quit

        Parameters: [ <Quit Message> ]
        N)r´   rµ   r­   s      r   Úirc_QUITzIRCUser.irc_QUIT’  s   € ð 	Œ×%Ò%Ñ'Ô'Ð'Ð'Ð'r!   c                 ó–   — |r"|                       t          j        d¦  «         d S |                      | j        d|j        z   d¦  «         d S )Nú:Unknown MODE flag.rš   ú+)r�   r   ÚERR_UNKNOWNMODEÚchannelModer   )r   rj   ÚmodesÚargss       r   Ú_channelModezIRCUser._channelModeš  sQ   € Øð 	?Ø×Ò�SÔ0Ð2GÑHÔHÐHÐHÐHà×Ò˜TœY¨¨e¬jÑ(8¸#Ñ>Ô>Ð>Ð>Ð>r!   c                 óä   — |r"|                       t          j        d¦  «         d S || j        u r"|                       t          j        d¦  «         d S |                       t          j        d¦  «         d S )NrÛ   rÜ   z(:You can't look at someone else's modes.)r�   r   rÝ   rƒ   ÚRPL_UMODEISÚERR_USERSDONTMATCH)r   r0   rß   s      r   Ú	_userModezIRCUser._userMode   s€   € Øð 	Ø×Ò�SÔ0Ð2GÑHÔHÐHÐHÐHØ�T”[Ð Ð Ø×Ò�Sœ_¨cÑ2Ô2Ð2Ð2Ð2à×ÒÝÔ&Ð(Rñô ð ð ð r!   c           	      óp  ‡ ‡— 	 ‰d         }t          |t          ¦  «        r|                     ‰ j        ¦  «        }n8# t          $ r+ ‰                      t          j        ‰d         d¦  «         Y dS w xY w|                     d¦  «        r\ˆˆ fd„}‰ j	         
                    |dd…         ¦  «        }|                     ‰ j        |t          ‰dd…         ¦  «        ¬¦  «         dS ˆ fd„}‰ j	                             |¦  «        }|                     ‰ j        |t          ‰dd…         ¦  «        ¬¦  «         dS )	z€
        User mode message

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

        r   z2:No such nickname (could not decode your unicode!)Nrš   c                 ó”   •— |                       t          j        ¦  «         ‰                     t          j        ‰d         d¦  «         d S )Nr   ú:That channel doesn't exist.©Útrapr   ÚNoSuchGroupr�   r   ÚERR_NOSUCHCHANNEL©r&   r®   r   s    €€r   ÚebGroupz!IRCUser.irc_MODE.<locals>.ebGroupÀ  sI   ø€ Ø—’�Ô+Ñ,Ô,Ð,Ø× Ò ÝÔ)¨6°!¬9Ð6Tñô ð ð ð r!   é   )ÚcallbackArgsc                 óH   •— ‰                      t          j        d¦  «         d S )Nz:No such nickname.©r�   r   ÚERR_NOSUCHNICK)r&   r   s    €r   ÚebUserz IRCUser.irc_MODE.<locals>.ebUserÊ  s#   ø€ Ø× Ò ¥Ô!3Ð5IÑJÔJÐJÐJÐJr!   )rŒ   r�   rŽ   rŠ   r±   r�   r   ró   Ú
startswithrc   ÚlookupGrouprÉ   rá   ÚtupleÚ
lookupUserrå   )r   r‡   r®   ÚchannelOrUserrî   r@   rô   s   ` `    r   Úirc_MODEzIRCUser.irc_MODEª  sw  øø€ ð
	Ø" 1œIˆMÝ˜-­Ñ/Ô/ð DØ -× 4Ò 4°T´]Ñ CÔ C�øøÝ!ð 	ð 	ð 	Ø×ÒÝÔ"Ø�q”	ØDñô ð ð
 ˆFˆFð	øøøð ×#Ò# CÑ(Ô(ð 	Sðð ð ð ð ð ð ”
×&Ò& }°Q°R°RÔ'8Ñ9Ô9ˆAØ�NŠN˜4Ô,¨gÅEÈ&ÐQRÐQSÐQSÌ*ÑDUÔDUˆNÑVÔVÐVÐVÐVðKð Kð Kð Kð Kð ”
×%Ò% mÑ4Ô4ˆAØ�NŠN˜4œ>¨6ÅÀfÈQÈRÈRÄjÑ@QÔ@QˆNÑRÔRÐRÐRÐRó   „7< ¼1A1Á0A1c                 ó   — dS )zl
        Userhost message

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

        [Optional]
        Nr\   r­   s      r   Úirc_USERHOSTzIRCUser.irc_USERHOSTÐ  s	   € ð 	ˆr!   c                 ó  ‡ ‡‡— 	 |d         Št          ‰t          ¦  «        r‰                     ‰ j        ¦  «        Šn8# t          $ r+ ‰                      t          j        |d         d¦  «         Y dS w xY w|d         Š‰                     d¦  «        r#‰ j	         
                    ‰dd…         ¦  «        }n.‰ j	                             ‰¦  «                             d„ ¦  «        }ˆˆ fd„}ˆ ˆfd	„}|                     ||¦  «         dS )
rÀ   r   z6:No such nick/channel (could not decode your unicode!)Nr«   rš   rï   c                 ó   — | j         S r#   )rd   )r0   s    r   ú<lambda>z%IRCUser.irc_PRIVMSG.<locals>.<lambda>ñ  s   € ˜TœY€ r!   c                 óF   •— | �‰j                              | d‰i¦  «        S d S )Nr¡   )rƒ   rs   )ÚtargÚmessageTextr   s    €€r   ÚcbTargetz%IRCUser.irc_PRIVMSG.<locals>.cbTargetô  s.   ø€ ØÐØ”{×'Ò'¨¨v°{Ð.CÑDÔDÐDð  Ðr!   c                 óJ   •— ‰                      t          j        ‰d¦  «         d S )Nz:No such nick/channel.rò   )r&   r   Ú
targetNames    €€r   ÚebTargetz%IRCUser.irc_PRIVMSG.<locals>.ebTargetø  s%   ø€ Ø×Ò�SÔ/°Ð=UÑVÔVÐVÐVÐVr!   )rŒ   r�   rŽ   rŠ   r±   r�   r   ró   rõ   rc   rö   rø   r=   rÉ   )r   r‡   r®   rÃ   r  r  r  r  s   `     @@r   r~   zIRCUser.irc_PRIVMSGÚ  sX  øøø€ ð
	Ø œˆJÝ˜*¥eÑ,Ô,ð >Ø'×.Ò.¨t¬}Ñ=Ô=�
øøÝ!ð 	ð 	ð 	Ø×ÒÝÔ"Ø�q”	ØHñô ð ð
 ˆFˆFð	øøøð ˜R”jˆØ× Ò  Ñ%Ô%ð 	Ø”Z×+Ò+¨J°q°r°r¬NÑ;Ô;ˆFˆFà”Z×*Ò*¨:Ñ6Ô6×BÒBØ&Ð&ñô ˆFð	Eð 	Eð 	Eð 	Eð 	Eð 	Eð	Wð 	Wð 	Wð 	Wð 	Wð 	Wð 	×Ò˜H hÑ/Ô/Ð/Ð/Ð/s   …7= ½1A2Á1A2c                 óœ  ‡ ‡— 	 |d         Št          ‰t          ¦  «        r‰                     ‰ j        ¦  «        Šn8# t          $ r+ ‰                      t          j        |d         d¦  «         Y dS w xY w‰                     d¦  «        r
‰dd…         Šˆ fd„}ˆˆ fd„}‰ j	         
                    ‰¦  «                             ||¦  «         dS )zm
        Join message

        Parameters: ( <channel> *( "," <channel> ) [ <key> *( "," <key> ) ] )
        r   ú1:No such channel (could not decode your unicode!)Nrš   rï   c                 ól   •‡ — ˆ ˆfd„}‰j                              ‰ ¦  «                             |¦  «        S )Nc                 óÞ   •— ‰                      ‰‰¦  «         ‰                     ‰j        d‰j        z   d„ ‰                     ¦   «         D ¦   «         ¦  «         ‰                     ‰¦  «         d S )Nrš   c                 ó   — g | ]	}|j         ‘Œ
S r\   ©r   ©Ú.0r0   s     r   ú
<listcomp>zEIRCUser.irc_JOIN.<locals>.cbGroup.<locals>.cbJoin.<locals>.<listcomp>  s   € Ð=Ð=Ð= 4�T”YÐ=Ð=Ð=r!   )r9   Únamesr   rX   Ú
_sendTopic)Úignrj   r   s    €€r   rk   z1IRCUser.irc_JOIN.<locals>.cbGroup.<locals>.cbJoin  sq   ø€ Ø—’  tÑ,Ô,Ð,Ø—
’
Ø”IØ˜%œ*Ñ$Ø=Ð=¨5¯?ª?Ñ+<Ô+<Ð=Ñ=Ô=ñô ð ð
 —’ Ñ&Ô&Ð&Ð&Ð&r!   ©rƒ   rm   r=   )rj   rk   r   s   ` €r   ÚcbGroupz!IRCUser.irc_JOIN.<locals>.cbGroup  sH   øø€ ð'ð 'ð 'ð 'ð 'ð 'ð ”;×#Ò# EÑ*Ô*×6Ò6°vÑ>Ô>Ð>r!   c                 óP   •— ‰                      t          j        d‰z   d¦  «         d S )Nrš   z:No such channel.)r�   r   rì   ©r&   Ú	groupNamer   s    €€r   rî   z!IRCUser.irc_JOIN.<locals>.ebGroup  s4   ø€ Ø×ÒÝÔ% s¨Y¡Ð8Kñô ð ð ð r!   )rŒ   r�   rŽ   rŠ   r±   r�   r   rì   rõ   rc   ÚgetGrouprÉ   )r   r‡   r®   r  rî   r  s   `    @r   Úirc_JOINzIRCUser.irc_JOINý  s  øø€ ð
	Ø˜qœ	ˆIÝ˜)¥UÑ+Ô+ð <Ø%×,Ò,¨T¬]Ñ;Ô;�	øøÝ!ð 	ð 	ð 	Ø×ÒÝÔ%Ø�q”	ØCñô ð ð
 ˆFˆFð	øøøð ×Ò Ñ$Ô$ð 	&Ø! ! " "œˆIð
	?ð 
	?ð 
	?ð 
	?ð 
	?ð	ð 	ð 	ð 	ð 	ð 	ð
 	Œ
×Ò˜IÑ&Ô&×3Ò3°G¸WÑEÔEÐEÐEÐErû   c                 óH  ‡ ‡‡— 	 |d         Št          |d         t          ¦  «        r |d                              ‰ j        ¦  «        Šn8# t          $ r+ ‰                      t          j        |d         d¦  «         Y dS w xY w‰                     d¦  «        r
‰dd…         Št          |¦  «        dk    r3|d         Št          ‰t          ¦  «        r‰                     d¦  «        ŠndŠˆˆ fd„}ˆˆ fd„}‰ j
                             ‰¦  «                             ||¦  «         dS )	zc
        Part message

        Parameters: <channel> *( "," <channel> ) [ <Part Message> ]
        r   z:Could not decode your unicode!Nrš   rï   r{   c                 óp   •‡ — ˆ ˆˆfd„}‰j                              ‰ ‰¦  «                             |¦  «        S )Nc                 ó6   •— ‰                      ‰‰‰¦  «         d S r#   )rD   )r/   rj   rF   r   s    €€€r   rp   z2IRCUser.irc_PART.<locals>.cbGroup.<locals>.cbLeave@  s   ø€ Ø—’˜e T¨6Ñ2Ô2Ð2Ð2Ð2r!   )rƒ   rq   r=   )rj   rp   rF   r   s   ` €€r   r  z!IRCUser.irc_PART.<locals>.cbGroup?  sO   øø€ ð3ð 3ð 3ð 3ð 3ð 3ð 3ð ”;×$Ò$ U¨FÑ3Ô3×?Ò?ÀÑHÔHÐHr!   c                 ó¸   •— |                       t          j        ¦  «         ‰                     t          j        d‰z   d|                      ¦   «         z   ¦  «         d S )Nrš   ú:)rê   r   rë   r�   r   ÚERR_NOTONCHANNELr,   r  s    €€r   rî   z!IRCUser.irc_PART.<locals>.ebGroupE  sY   ø€ Ø�HŠH•VÔ'Ñ(Ô(Ð(Ø×ÒÝÔ$ c¨I¡o°s¸S×=PÒ=PÑ=RÔ=RÑ7Rñô ð ð ð r!   )rŒ   r�   rŽ   rŠ   r±   r�   r   r   rõ   rI   rc   rö   rÉ   )r   r‡   r®   r  rî   r  rF   s   `    @@r   Úirc_PARTzIRCUser.irc_PART%  sd  øøø€ ð	Ø˜qœ	ˆIÝ˜& œ)¥UÑ+Ô+ð <Ø" 1œI×,Ò,¨T¬]Ñ;Ô;�	øøÝ!ð 	ð 	ð 	Ø×ÒÝÔ$ f¨Q¤iÐ1Rñô ð ð ˆFˆFð		øøøð ×Ò Ñ$Ô$ð 	&Ø! ! " "œˆIåˆv‰;Œ;˜Š?ˆ?Ø˜A”YˆFÝ˜&¥%Ñ(Ô(ð 0ØŸš wÑ/Ô/�øàˆFð	Ið 	Ið 	Ið 	Ið 	Ið 	Ið	ð 	ð 	ð 	ð 	ð 	ð 	Œ
×Ò˜yÑ)Ô)×6Ò6°wÀÑHÔHÐHÐHÐHs   …AA	 Á	1A>Á=A>c                 óœ  ‡ ‡— 	 |d         Št          ‰t          ¦  «        r‰                     ‰ j        ¦  «        Šn8# t          $ r+ ‰                      t          j        |d         d¦  «         Y dS w xY w‰                     d¦  «        r
‰dd…         Šˆ fd„}ˆˆ fd„}‰ j	         
                    ‰¦  «                             ||¦  «         dS )zb
        Names message

        Parameters: [ <channel> *( "," <channel> ) [ <target> ] ]
        r«   r	  Nrš   rï   c                 óˆ   •— ‰                      ‰j        d| j        z   d„ |                      ¦   «         D ¦   «         ¦  «         d S )Nrš   c                 ó   — g | ]	}|j         ‘Œ
S r\   r  r  s     r   r  z6IRCUser.irc_NAMES.<locals>.cbGroup.<locals>.<listcomp>g  s   € Ð-VÐ-VÐ-V¸D¨d¬iÐ-VÐ-VÐ-Vr!   )r  r   rX   )rj   r   s    €r   r  z"IRCUser.irc_NAMES.<locals>.cbGroupe  sL   ø€ Ø�JŠJØ”	˜3 ¤Ñ+Ð-VÐ-VÀEÇOÂOÑDUÔDUÐ-VÑ-VÔ-Vñô ð ð ð r!   c                 ó„   •— |                       t          j        ¦  «         ‰                     ‰j        d‰z   g ¦  «         d S )Nrš   )rê   r   rë   r  r   ©r&   Úchannelr   s    €€r   rî   z"IRCUser.irc_NAMES.<locals>.ebGroupj  s:   ø€ Ø�HŠH•VÔ'Ñ(Ô(Ð(à�JŠJ�t”y #¨¡-°Ñ4Ô4Ð4Ð4Ð4r!   )rŒ   r�   rŽ   rŠ   r±   r�   r   rì   rõ   rc   rö   rÉ   )r   r‡   r®   r  rî   r'  s   `    @r   Ú	irc_NAMESzIRCUser.irc_NAMESM  s  øø€ ð
	Ø˜R”jˆGÝ˜'¥5Ñ)Ô)ð 8Ø!Ÿ.š.¨¬Ñ7Ô7�øøÝ!ð 	ð 	ð 	Ø×ÒÝÔ%Ø�r”
ØCñô ð ð
 ˆFˆFð	øøøð ×Ò˜cÑ"Ô"ð 	"Ø˜a˜b˜b”kˆGð	ð 	ð 	ð 	ð 	ð
	5ð 	5ð 	5ð 	5ð 	5ð 	5ð
 	Œ
×Ò˜wÑ'Ô'×4Ò4°W¸gÑFÔFÐFÐFÐFrû   c                 ó°  — 	 |d         }t          |d         t          ¦  «        r|                     | j        ¦  «        }n1# t          $ r$ |                      t          j        d¦  «         Y dS w xY w|                     d¦  «        r
|dd…         }t          |¦  «        dk    r|  
                    ||d         ¦  «         dS |                      |¦  «         dS )zJ
        Topic message

        Parameters: <channel> [ <topic> ]
        r   z<:That channel doesn't exist (could not decode your unicode!)Nrš   rï   )rŒ   r�   rŽ   rŠ   r±   r�   r   rì   rõ   rI   Ú	_setTopicÚ	_getTopic)r   r‡   r®   r'  s       r   Ú	irc_TOPICzIRCUser.irc_TOPICq  sé   € ð		Ø˜Q”iˆGÝ˜& œ)¥UÑ+Ô+ð 8Ø!Ÿ.š.¨¬Ñ7Ô7�øøÝ!ð 	ð 	ð 	Ø×ÒÝÔ%ØNñô ð ð ˆFˆFð	øøøð ×Ò˜cÑ"Ô"ð 	"Ø˜a˜b˜b”kˆGåˆv‰;Œ;˜Š?ˆ?Ø�NŠN˜7 F¨1¤IÑ.Ô.Ð.Ð.Ð.à�NŠN˜7Ñ#Ô#Ð#Ð#Ð#s   ‚=A  Á *A.Á-A.c                 óB  — |j                              d¦  «        }|r‚|j                              d¦  «        pd}|j                              dd¦  «        }|                      | j        d|j        z   |¦  «         |                      | j        d|j        z   ||¦  «         dS dS )zP
        Send the topic of the given group to this user, if it has one.
        r   r   z<noone>Ú
topic_dater   rš   N)r   r£   r   r   ÚtopicAuthor)r   rj   r   r©   Údates        r   r  zIRCUser._sendTopicŠ  s¡   € ð ”
—’˜wÑ'Ô'ˆØð 	HØ”Z—^’^ NÑ3Ô3Ð@°yˆFØ”:—>’> ,°Ñ2Ô2ˆDØ�JŠJ�t”y #¨¬
Ñ"2°EÑ:Ô:Ð:Ø×Ò˜TœY¨¨e¬jÑ(8¸&À$ÑGÔGÐGÐGÐGð		Hð 	Hr!   c                 ó|   ‡ ‡— ˆˆ fd„}‰ j                              ‰¦  «                             ‰ j        |¦  «         d S )Nc                 óŠ   •— |                       t          j        ¦  «         ‰                     t          j        d‰d¦  «         d S ©Nú=rè   ré   r&  s    €€r   rî   z"IRCUser._getTopic.<locals>.ebGroup™  óG   ø€ Ø�HŠH•VÔ'Ñ(Ô(Ð(Ø×ÒÝÔ% s¨GÐ5Sñô ð ð ð r!   )rc   rö   rÉ   r  )r   r'  rî   s   `` r   r+  zIRCUser._getTopic•  sR   øø€ ð	ð 	ð 	ð 	ð 	ð 	ð 	Œ
×Ò˜wÑ'Ô'×4Ò4°T´_ÀgÑNÔNÐNÐNÐNr!   c                 ó€   ‡ ‡‡— ˆ ˆfd„}ˆˆ fd„}‰ j                              ‰¦  «                             ||¦  «         d S )Nc                 óî   •‡ — ‰ j                              ¦   «         }‰|d<   ‰j        |d<   t          t	          ¦   «         ¦  «        |d<   ˆ ˆfd„}‰                      |¦  «                             |¦  «        S )Nr   r   r.  c                 óZ   •— ‰                      t          j        d‰j        z   d¦  «         d S )Nrš   z.:You need to be a channel operator to do that.)r�   r   ÚERR_CHANOPRIVSNEEDEDr   )r&   rj   r   s    €€r   ÚebSetz1IRCUser._setTopic.<locals>.cbGroup.<locals>.ebSet«  s8   ø€ Ø× Ò ÝÔ,Ø˜%œ*Ñ$ØDñô ð ð ð r!   )r   Úcopyr   Úintr   rU   r:   )rj   ÚnewMetar:  r   r   s   `  €€r   r  z"IRCUser._setTopic.<locals>.cbGroup¥  s�   øø€ Ø”j—o’oÑ'Ô'ˆGØ$ˆG�GÑØ&*¤iˆG�NÑ#Ý$'­©¬¡K¤KˆG�LÑ!ðð ð ð ð ð ð ×$Ò$ WÑ-Ô-×8Ò8¸Ñ?Ô?Ð?r!   c                 óŠ   •— |                       t          j        ¦  «         ‰                     t          j        d‰d¦  «         d S r3  ré   r&  s    €€r   rî   z"IRCUser._setTopic.<locals>.ebGroup´  r5  r!   )rc   rö   rÉ   )r   r'  r   r  rî   s   ```  r   r*  zIRCUser._setTopic¡  su   øøø€ ð	@ð 	@ð 	@ð 	@ð 	@ð 	@ð	ð 	ð 	ð 	ð 	ð 	ð 	Œ
×Ò˜wÑ'Ô'×4Ò4°W¸gÑFÔFÐFÐFÐFr!   c                 ó¼   — |D ]8\  }}}|                       t          j        |t          |¦  «        d|z   ¦  «         Œ9|                       t          j        d¦  «         dS )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.
        r  z:End of /LISTN)r�   r   ÚRPL_LISTÚstrÚRPL_LISTEND)r   Úchannelsr   rK   r   s        r   r‹   zIRCUser.list¼  sc   € ð "*ð 	Ið 	IÑˆD�$˜Ø×Ò�Sœ\¨4µ°T±´¸CÀ%¹KÑHÔHÐHÐHØ×Ò�œ¨/Ñ:Ô:Ð:Ð:Ð:r!   c                 ó€  ‡ — |�r	 |d         }t          |t          ¦  «        r|                     ‰ j        ¦  «        }|                     d¦  «        }n8# t
          $ r+ ‰                      t          j        |d         d¦  «         Y dS w xY wg }|D ]N}| 	                    d¦  «        r
|dd…         }| 
                    ‰ j                             |¦  «        ¦  «         ŒOt          j        |d¬¦  «        }|                     d	„ ¦  «         n‰ j                             ¦   «         }ˆ fd
„}|                     |¦  «         dS )zÎ
        List query

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

        Parameters: [ <channel> *( "," <channel> ) [ <target> ] ]
        r   ú,r	  Nrš   rï   T)ÚconsumeErrorsc                 ó   — d„ | D ¦   «         S )Nc                 ó   — g | ]	\  }}|¯|‘Œ
S r\   r\   ©r  ÚsÚrs      r   r  z6IRCUser.irc_LIST.<locals>.<lambda>.<locals>.<listcomp>ë  s!   € Ð*CÐ*CÐ*C±°!°QÀÐ*C¨1Ð*CÐ*CÐ*Cr!   r\   )Úgss    r   r   z"IRCUser.irc_LIST.<locals>.<lambda>ë  s   € Ð*CÐ*C¸2Ð*CÑ*CÔ*C€ r!   c                 ó€   •‡— d„ Št          j        ˆfd„| D ¦   «         ¦  «        }|                     ˆfd„¦  «         |S )Nc                 óF   — |j         | |j                             d¦  «        fS )Nr   )r   r   r£   )rK   rj   s     r   ÚgotSizez3IRCUser.irc_LIST.<locals>.cbGroups.<locals>.gotSizeñ  s   € Ø”z 4¨¬¯ª¸Ñ)@Ô)@Ð@Ð@r!   c                 ó`   •— g | ]*}|                      ¦   «                              ‰|¦  «        ‘Œ+S r\   )rK   r=   )r  rj   rO  s     €r   r  z6IRCUser.irc_LIST.<locals>.cbGroups.<locals>.<listcomp>õ  s1   ø€ ÐNÐNÐN¸e�—’‘”×)Ò)¨'°5Ñ9Ô9ÐNÐNÐNr!   c                 óB   •— ‰                      d„ | D ¦   «         ¦  «        S )Nc                 ó   — g | ]	\  }}|¯|‘Œ
S r\   r\   rI  s      r   r  zHIRCUser.irc_LIST.<locals>.cbGroups.<locals>.<lambda>.<locals>.<listcomp>÷  s"   € Ð4RÐ4RÐ4R¹6¸A¸qÐPQÐ4R°QÐ4RÐ4RÐ4Rr!   )r‹   )r-   r   s    €r   r   z4IRCUser.irc_LIST.<locals>.cbGroups.<locals>.<lambda>÷  s"   ø€ ¨$¯)ª)Ð4RÐ4RÀWÐ4RÑ4RÔ4RÑ*SÔ*S€ r!   )r
   r<   r=   )r`   r@   rO  r   s     @€r   ÚcbGroupsz"IRCUser.irc_LIST.<locals>.cbGroupsð  sd   øø€ ðAð Að Aõ Ô"ØNÐNÐNÐNÀvÐNÑNÔNñô ˆAð �MŠMÐSÐSÐSÐSÑTÔTÐTØˆHr!   )rŒ   r�   rŽ   rŠ   Úsplitr±   r�   r   rì   rõ   r;   rc   rö   r
   r<   r=   ru   )r   r‡   r®   ÚallChannelsrC  r`   ÚchrS  s   `       r   Úirc_LISTzIRCUser.irc_LISTÈ  sz  ø€ ð ñ 	-ðØ$ Qœi�Ý˜k­5Ñ1Ô1ð DØ"-×"4Ò"4°T´]Ñ"CÔ"C�KØ&×,Ò,¨SÑ1Ô1��øÝ%ð ð ð Ø× Ò ÝÔ)Ø˜1”IØGñô ð ð
 ��ðøøøð ˆFØð :ð :�Ø—=’= Ñ%Ô%ð  Ø˜A˜B˜Bœ�BØ—’˜dœj×4Ò4°RÑ8Ô8Ñ9Ô9Ð9Ð9åÔ'¨¸dÐCÑCÔCˆFØ×ÒÐCÐCÑDÔDÐDÐDð ”Z×*Ò*Ñ,Ô,ˆFð	ð 	ð 	ð 	ð 	ð 	×Ò˜8Ñ$Ô$Ð$Ð$Ð$s   †AA Á1BÂBc                 óŒ   ‡ — ‰                       ‰ j        d|j        z   ˆ fd„|                     ¦   «         D ¦   «         ¦  «         d S )Nrš   c           	      ó^   •— g | ])}|j         ‰j        ‰j        j         |j         d d|j         f‘Œ*S )ÚHr   )r   r€   rc   )r  Úmr   s     €r   r  z'IRCUser._channelWho.<locals>.<listcomp>   sD   ø€ ð ð ð àð ”˜œ¨¬
¬¸¼ÀÀaÈÌÐPðð ð r!   )Úwhor   rX   ©r   rj   s   ` r   Ú_channelWhozIRCUser._channelWhoü  sb   ø€ Ø�ŠØŒIØ�%”*Ñðð ð ð àŸšÑ*Ô*ðñ ô ñ	
ô 	
ð 	
ð 	
ð 	
r!   c                 óF   — |                       t          j        d¦  «         d S )Nz:User /WHO not implemented)r�   r   ÚRPL_ENDOFWHO©r   r0   s     r   Ú_userWhozIRCUser._userWho  s"   € Ø×Ò�Ô)Ð+GÑHÔHÐHÐHÐHr!   c                 ó^  ‡ ‡— |s"‰                       t          j        d¦  «         dS 	 |d         Št          ‰t          ¦  «        r‰                     ‰ j        ¦  «        Šn8# t          $ r+ ‰                       t          j        |d         d¦  «         Y dS w xY w‰                     d¦  «        rEˆˆ fd„}‰ j	         
                    ‰dd…         ¦  «        }|                     ‰ j        |¦  «         dS ˆˆ fd„}‰ j	                             ‰¦  «        }|                     ‰ j        |¦  «         dS )	zC
        Who query

        Parameters: [ <mask> [ "o" ] ]
        z:/WHO not supported.Nr   z2:End of /WHO list (could not decode your unicode!)rš   c                 óˆ   •— |                       t          j        ¦  «         ‰                     t          j        ‰d¦  «         d S ©Nz:End of /WHO list.)rê   r   rë   r�   r   r`  ©r&   rù   r   s    €€r   rî   z IRCUser.irc_WHO.<locals>.ebGroup*  s:   ø€ Ø—’�Ô+Ñ,Ô,Ð,Ø× Ò ¥Ô!1°=ÐBVÑWÔWÐWÐWÐWr!   rï   c                 óˆ   •— |                       t          j        ¦  «         ‰                     t          j        ‰d¦  «         d S re  )rê   r   Ú
NoSuchUserr�   r   r`  rf  s    €€r   rô   zIRCUser.irc_WHO.<locals>.ebUser2  s:   ø€ Ø—’�Ô*Ñ+Ô+Ð+Ø× Ò ¥Ô!1°=ÐBVÑWÔWÐWÐWÐWr!   )r�   r   r`  rŒ   r�   rŽ   rŠ   r±   rõ   rc   rö   rÉ   r^  rø   rb  )r   r‡   r®   rî   r@   rô   rù   s   `     @r   Úirc_WHOzIRCUser.irc_WHO	  s€  øø€ ð ð 	Ø×Ò�SÔ-Ð/EÑFÔFÐFØˆFð
	Ø" 1œIˆMÝ˜-­Ñ/Ô/ð DØ -× 4Ò 4°T´]Ñ CÔ C�øøÝ!ð 	ð 	ð 	Ø×ÒÝÔ Ø�q”	ØDñô ð ð
 ˆFˆFð	øøøð ×#Ò# CÑ(Ô(ð 	2ðXð Xð Xð Xð Xð Xð ”
×&Ò& }°Q°R°RÔ'8Ñ9Ô9ˆAØ�NŠN˜4Ô+¨WÑ5Ô5Ð5Ð5Ð5ðXð Xð Xð Xð Xð Xð ”
×%Ò% mÑ4Ô4ˆAØ�NŠN˜4œ=¨&Ñ1Ô1Ð1Ð1Ð1s   ¨7A  Á 1BÂBc                 ó^  ‡ ‡— ˆ fd„}ˆˆ fd„}	 ‰d         }t          |t          ¦  «        r|                     ‰ j        ¦  «        }n8# t          $ r+ ‰                      t          j        ‰d         d¦  «         Y dS w xY w‰ j         	                    |¦  «         
                    ||¦  «         dS )zV
        Whois query

        Parameters: [ <target> ] <mask> *( "," <mask> )
        c                 ó  •— ‰                      ‰j        | j        | j        ‰j        j        | j        ‰j        j        ddt          t	          ¦   «         | j        z
  ¦  «        | j        d„ |                      ¦   «         D ¦   «         ¦  «         d S )NzHi mom!Fc                 ó"   — g | ]}d |j         z   ‘ŒS )rš   r  )r  rj   s     r   r  z5IRCUser.irc_WHOIS.<locals>.cbUser.<locals>.<listcomp>L  s   € ÐAÐAÐA e��u”zÑ!ÐAÐAÐAr!   )Úwhoisr   rc   r<  r   ra   re   ru   )r0   r   s    €r   ÚcbUserz!IRCUser.irc_WHOIS.<locals>.cbUser@  s‚   ø€ Ø�JŠJØ”	Ø”	Ø”	Ø”
”Ø”	Ø”
”ØØÝ•D‘F”F˜TÔ-Ñ-Ñ.Ô.Ø”ØAÐA¨t¯ªÑ/@Ô/@ÐAÑAÔAñô ð ð ð r!   c                 ó”   •— |                       t          j        ¦  «         ‰                     t          j        ‰d         d¦  «         d S )Nr   ú:No such nick/channel)rê   r   rh  r�   r   ró   rí   s    €€r   rô   z!IRCUser.irc_WHOIS.<locals>.ebUserO  s>   ø€ Ø�HŠH•VÔ&Ñ'Ô'Ð'Ø×Ò�SÔ/°¸´Ð<SÑTÔTÐTÐTÐTr!   r   rp  N)rŒ   r�   rŽ   rŠ   r±   r�   r   ró   rc   rø   rÉ   )r   r‡   r®   rn  rô   r0   s   ` `   r   Ú	irc_WHOISzIRCUser.irc_WHOIS9  så   øø€ ð	ð 	ð 	ð 	ð 	ð	Uð 	Uð 	Uð 	Uð 	Uð 	Uð	Ø˜!”9ˆDÝ˜$¥Ñ&Ô&ð 2Ø—{’{ 4¤=Ñ1Ô1�øøÝ!ð 	ð 	ð 	Ø×Ò�SÔ/°¸´Ð<SÑTÔTÐTØˆFˆFð	øøøð 	Œ
×Ò˜dÑ#Ô#×0Ò0°¸Ñ@Ô@Ð@Ð@Ð@s   �7A Á1A<Á;A<c                 óF   — |                       t          j        d¦  «         dS )zE
        Oper message

        Parameters: <name> <password>
        z:O-lines not applicableN)r�   r   ÚERR_NOOPERHOSTr­   s      r   Úirc_OPERzIRCUser.irc_OPER^  s$   € ð 	×Ò�Ô+Ð-FÑGÔGÐGÐGÐGr!   r#   )7rY   rZ   r[   Ú__doc__r`   rx   rƒ   rc   rŠ   r�   r…   r�   r9   rD   rM   rS   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~   r  r!  r(  r,  r  r+  r*  r‹   rW  r^  rb  ri  rq  rt  r\   r!   r   rz   rz   ¦   sý  € € € € € ðð ð
 €Fð €Fð €Fð €Eð €Hð(ð (ð (ð
ð ð ð3ð 3ð 3ðPð Pð Pð
ð 
ð 
ð 
ðð ð ð"	ð 	ð 	ð €HØ€Hð#ð #ð #ð -ð  -ð  -ðD	#ð 	#ð 	#ð-ð -ð -ð.Nð Nð Nð 
ŒÐ5Ð6àÔØOð	
ð 
ŒÐHÐIð
 ŒNð 5ð		
ðÐð& 
Ô	ÐFÐGØ	Ô	Ð4Ð5ð€Mð

Dð 
Dð 
Dð(ð (ð (ð4ð 4ð 4ð(ð (ð (ð?ð ?ð ?ð ?ðð ð ð ð$Sð $Sð $SðLð ð ð!0ð !0ð !0ðF&Fð &Fð &FðP&Ið &Ið &IðP"Gð "Gð "GðH$ð $ð $ð2	Hð 	Hð 	Hð
Oð 
Oð 
OðGð Gð Gð6
;ð 
;ð 
;ð2%ð 2%ð 2%ðh
ð 
ð 
ðIð Ið Ið.2ð .2ð .2ð`"Að "Að "AðJHð Hð Hð Hð Hr!   rz   c                   ó   — e Zd ZdZeZd„ ZdS )Ú
IRCFactorya  
    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                 óx   — || _         || _        | j         j        t          j        t          ¦   «         dœ| _        d S )N)ÚserviceNameÚserviceVersionÚcreationDate)rc   r	   r   r   Úversionr   r¸   )r   rc   r	   s      r   r    zIRCFactory.__init__s  s9   € ØˆŒ
ØˆŒàœ:œ?Ý'Ô/Ý!™GœGð
ð 
ˆÔÐÐr!   N)rY   rZ   r[   ru  rz   r   r    r\   r!   r   r}  r}  g  s4   € € € € € ðð ð €Hð
ð 
ð 
ð 
ð 
r!   r}  c                   ó2   — e Zd Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ ZdS )ÚPBMindc                 ó   — d S r#   r\   rJ   s    r   r    zPBMind.__init__~  ó   € Øˆr!   c                 óÀ   — t          j        t          ¦  «        }t          |t          ¦  «        r|                     d¦  «        }||j                             | ¦  «        fS ©Nr{   )r   Úqualr„  rŒ   rA  r‰   ÚinvokerÚregisterReference©r   Újellierr‰  s      r   ÚjellyForzPBMind.jellyFor�  sO   € ÝŒ|�FÑ#Ô#ˆÝ�d�CÑ Ô ð 	(Ø—;’;˜wÑ'Ô'ˆDØ�W”_×6Ò6°tÑ<Ô<Ð<Ð<r!   c                 ó   — d S r#   r\   )r   r0   rj   s      r   Úremote_userJoinedzPBMind.remote_userJoined‡  r†  r!   c                 ó   — d S r#   r\   )r   r0   rj   rF   s       r   Úremote_userLeftzPBMind.remote_userLeftŠ  r†  r!   c                 ó   — d S r#   r\   ©r   rN   rO   rP   s       r   Úremote_receivezPBMind.remote_receive�  r†  r!   c                 ó   — d S r#   r\   ©r   rj   r   s      r   Úremote_groupMetaUpdatezPBMind.remote_groupMetaUpdate�  r†  r!   N)	rY   rZ   r[   r    rŽ  r�  r’  r•  r˜  r\   r!   r   r„  r„  }  sn   € € € € € ðð ð ð=ð =ð =ðð ð ðð ð ðð ð ðð ð ð ð r!   r„  c                   ó,   — e Zd ZdZd„ Zd„ Zd„ Zdd„ZdS )ÚPBMindReferencer   c                 ó  — t           j                             |¦  «        rt          | j        | j        |¦  «        }nt          | j        | j        |¦  «        }|                      dt          | j        | j        |¦  «        ||¦  «        S )NrM   )r   r¢   r5   ÚPBGrouprc   rƒ   ÚPBUserÚ
callRemote)r   rN   rO   rP   Úrecs        r   rM   zPBMindReference.receive˜  su   € ÝŒ=×#Ò# IÑ.Ô.ð 	=Ý˜$œ* d¤k°9Ñ=Ô=ˆCˆCå˜œ T¤[°)Ñ<Ô<ˆCØ�ŠØ•v˜dœj¨$¬+°vÑ>Ô>ÀÀWñ
ô 
ð 	
r!   c                 ób   — |                       dt          | j        | j        |¦  «        |¦  «        S )NrS   )rž  rœ  rc   rƒ   r—  s      r   rS   zPBMindReference.groupMetaUpdate¡  s/   € Ø�ŠØ�w t¤z°4´;ÀÑFÔFÈñ
ô 
ð 	
r!   c           	      ó”   — |                       dt          | j        | j        |¦  «        t	          | j        | j        |¦  «        ¦  «        S )Nr9   ©rž  rœ  rc   rƒ   r�  r›   s      r   r9   zPBMindReference.userJoined¦  sA   € Ø�ŠØÝ�D”J ¤¨UÑ3Ô3Ý�4”:˜tœ{¨DÑ1Ô1ñ
ô 
ð 	
r!   Nc           	      ó–   — |                       dt          | j        | j        |¦  «        t	          | j        | j        |¦  «        |¦  «        S )NrD   r¢  rŸ   s       r   rD   zPBMindReference.userLeft­  sD   € Ø�ŠØÝ�D”J ¤¨UÑ3Ô3Ý�4”:˜tœ{¨DÑ1Ô1Øñ	
ô 
ð 	
r!   r#   )rY   rZ   r[   r   rM   rS   r9   rD   r\   r!   r   rš  rš  ”  sZ   € € € € € à€Dð
ð 
ð 
ð
ð 
ð 
ð

ð 
ð 
ð
ð 
ð 
ð 
ð 
ð 
r!   rš  c                   ó.   — e Zd Zd„ Zd„ Zd„ Zdd„Zd„ ZdS )rœ  c                 ó0   — || _         || _        || _        d S r#   )rc   rƒ   rj   )r   rc   rƒ   rj   s       r   r    zPBGroup.__init__º  s   € ØˆŒ
ØˆŒØˆŒ
ˆ
ˆ
r!   c                 ób   — t          | j        j        | j        j        | j        j        f¦  «        S r#   )Úhashrc   r   rƒ   rj   rJ   s    r   ÚprocessUniqueIDzPBGroup.processUniqueID¿  s$   € Ý�T”Z”_ d¤kÔ&6¸¼
¼ÐHÑIÔIÐIr!   c                 ó.  — t          j        | j        ¦  «        }t          |t          ¦  «        r|                     d¦  «        }| j        j        }t          |t          ¦  «        r|                     d¦  «        }|||j         	                    | ¦  «        fS rˆ  )
r   r‰  Ú	__class__rŒ   rA  r‰   rj   r   rŠ  r‹  )r   r�  r‰  rj   s       r   rŽ  zPBGroup.jellyForÂ  s   € ÝŒ|˜DœNÑ+Ô+ˆÝ�d�CÑ Ô ð 	(Ø—;’;˜wÑ'Ô'ˆDØ”
”ˆÝ�e�SÑ!Ô!ð 	*Ø—L’L Ñ)Ô)ˆEØ�U˜GœO×=Ò=¸dÑCÔCÐCÐCr!   Nc                 óB   — | j                              | j        |¦  «        S r#   )rƒ   rq   rj   r„   s     r   Úremote_leavezPBGroup.remote_leaveË  s   € ØŒ{× Ò  ¤¨VÑ4Ô4Ð4r!   c                 óB   — | j                              | j        |¦  «        S r#   )rƒ   rs   rj   ©r   rP   s     r   Úremote_sendzPBGroup.remote_sendÎ  s   € ØŒ{×Ò ¤
¨GÑ4Ô4Ð4r!   r#   )rY   rZ   r[   r    r¨  rŽ  r¬  r¯  r\   r!   r   rœ  rœ  ¹  sj   € € € € € ðð ð ð
Jð Jð JðDð Dð Dð5ð 5ð 5ð 5ð5ð 5ð 5ð 5ð 5r!   rœ  c                   óH   — e Zd Zd„ Zdd„Zd„ Zd„ Zd„ Zd„ Zdd„Z	d	„ Z
d
„ ZdS )ÚPBGroupReferencec                 óˆ   — |\  }}}|                      d¦  «        | _        t          j                             | |||g¦  «        S rˆ  )rŽ   r   r   ÚRemoteReferenceÚ
unjellyFor)r   Ú	unjellierÚunjellyListÚclsNamer   Úrefs         r   r´  zPBGroupReference.unjellyForÔ  s@   € Ø(Ñˆ��sØ—K’K Ñ(Ô(ˆŒ	ÝÔ!×,Ò,¨T°9¸wÈ¸nÑMÔMÐMr!   Nc                 ó.   — |                       d|¦  «        S )Nrq   ©rž  r„   s     r   rq   zPBGroupReference.leaveÙ  s   € Ø�Š˜w¨Ñ/Ô/Ð/r!   c                 ó.   — |                       d|¦  «        S )Nrs   rº  r®  s     r   rs   zPBGroupReference.sendÜ  s   € Ø�Š˜v wÑ/Ô/Ð/r!   c                 ó   — d S r#   r\   ra  s     r   rA   zPBGroupReference.addß  ó   € àˆr!   c                 ó   — d S r#   r\   rJ   s    r   rX   zPBGroupReference.iterusersã  r½  r!   c                 ó   — d S r#   r\   r”  s       r   rM   zPBGroupReference.receiveç  r½  r!   c                 ó   — d S r#   r\   )r   r0   rF   s      r   r+   zPBGroupReference.removeë  r½  r!   c                 ó   — d S r#   r\   )r   r   s     r   rU   zPBGroupReference.setMetadataï  r½  r!   c                 ó   — d S r#   r\   rJ   s    r   rK   zPBGroupReference.sizeó  r½  r!   r#   )rY   rZ   r[   r´  rq   rs   rA   rX   rM   r+   rU   rK   r\   r!   r   r±  r±  Ò  s¨   € € € € € ðNð Nð Nð
0ð 0ð 0ð 0ð0ð 0ð 0ðð ð ðð ð ðð ð ðð ð ð ðð ð ðð ð ð ð r!   r±  c                   ó   — e Zd Zd„ Zd„ ZdS )r�  c                 ó0   — || _         || _        || _        d S r#   )rc   rƒ   r0   )r   rc   rƒ   r0   s       r   r    zPBUser.__init__ü  s   € ØˆŒ
ØˆŒØˆŒ	ˆ	ˆ	r!   c                 ób   — t          | j        j        | j        j        | j        j        f¦  «        S r#   )r§  rc   r   rƒ   r0   rJ   s    r   r¨  zPBUser.processUniqueID  s$   € Ý�T”Z”_ d¤kÔ&6¸¼	¼ÐGÑHÔHÐHr!   N)rY   rZ   r[   r    r¨  r\   r!   r   r�  r�  û  s7   € € € € € ðð ð ð
Ið Ið Ið Ið Ir!   r�  c                   óp   — e Zd Zd„ Zd„ Zd„ Zed„ ¦   «         Zej        d„ ¦   «         Zd„ Z	d„ Z
d„ Zdd
„Zd	S )Ú
ChatAvatarc                 ó   — || _         d S r#   )rƒ   )r   rƒ   s     r   r    zChatAvatar.__init__  s   € ØˆŒˆˆr!   c                 óÀ   — t          j        | j        ¦  «        }t          |t          ¦  «        r|                     d¦  «        }||j                             | ¦  «        fS rˆ  )r   r‰  rª  rŒ   rA  r‰   rŠ  r‹  rŒ  s      r   rŽ  zChatAvatar.jellyFor
  sQ   € ÝŒ|˜DœNÑ+Ô+ˆÝ�d�CÑ Ô ð 	(Ø—;’;˜wÑ'Ô'ˆDØ�W”_×6Ò6°tÑ<Ô<Ð<Ð<r!   c                 óz   ‡ — ˆ fd„}‰ j         j                             |¦  «        }|                     |¦  «         |S )Nc                 ót   •‡ — ˆ ˆfd„}‰j                              ‰ ¦  «        }|                     |¦  «         |S )Nc                 óD   •— t          ‰j        j        ‰j        ‰¦  «        S r#   )rœ  rƒ   rc   )Úignoredrj   r   s    €€r   rk   z7ChatAvatar.remote_join.<locals>.cbGroup.<locals>.cbJoin  s   ø€ Ý˜tœ{Ô0°$´+¸uÑEÔEÐEr!   r  )rj   rk   r@   r   s   `  €r   r  z'ChatAvatar.remote_join.<locals>.cbGroup  sV   øø€ ðFð Fð Fð Fð Fð Fð ”× Ò  Ñ'Ô'ˆAØ�MŠM˜&Ñ!Ô!Ð!ØˆHr!   )rƒ   rc   r  r=   )r   r  r  r@   s   `   r   Úremote_joinzChatAvatar.remote_join  sM   ø€ ð	ð 	ð 	ð 	ð 	ð ŒKÔ×&Ò& yÑ1Ô1ˆØ	�Š�gÑÔÐØˆr!   c                 ó   — d S r#   r\   rJ   s    r   r   zChatAvatar.name  ó	   € ð 	ˆr!   c                 ó   — d S r#   r\   )r   r*   s     r   r   zChatAvatar.name"  rÐ  r!   c                 ó   — d S r#   r\   r—  s      r   rS   zChatAvatar.groupMetaUpdate'  r½  r!   c                 ó   — d S r#   r\   r”  s       r   rM   zChatAvatar.receive+  r½  r!   c                 ó   — d S r#   r\   r›   s      r   r9   zChatAvatar.userJoined/  r½  r!   Nc                 ó   — d S r#   r\   rŸ   s       r   rD   zChatAvatar.userLeft3  r½  r!   r#   )rY   rZ   r[   r    rŽ  rÎ  Úpropertyr   ÚsetterrS   rM   r9   rD   r\   r!   r   rÇ  rÇ    sº   € € € € € ðð ð ð=ð =ð =ðð ð ð ðð ñ „Xðð 
„[ðð ñ „[ððð ð ðð ð ðð ð ðð ð ð ð ð r!   rÇ  c                   ó   — e Zd Zd„ Zd„ ZdS )ÚAvatarReferencec                 ó.   — |                       d|¦  «        S )Nrm   rº  )r   r  s     r   rm   zAvatarReference.join<  s   € Ø�Š˜v yÑ1Ô1Ð1r!   c                 ó¤   ‡— t          j        ¦   «         Š| j                             ˆfd„¦  «         | j        j                             ¦   «          ‰S )Nc                  ó.   •— ‰                       d ¦  «        S r#   )Úcallback)r@   s   €r   r   z&AvatarReference.quit.<locals>.<lambda>A  s   ø€ ¨q¯zªz¸$Ñ/?Ô/?€ r!   )r
   ÚDeferredÚbrokerÚnotifyOnDisconnectr´   rµ   )r   r@   s    @r   ÚquitzAvatarReference.quit?  sL   ø€ ÝŒNÑÔˆØŒ×&Ò&Ð'?Ð'?Ð'?Ð'?Ñ@Ô@Ð@ØŒÔ×,Ò,Ñ.Ô.Ð.Øˆr!   N)rY   rZ   r[   rm   rá  r\   r!   r   rÙ  rÙ  ;  s2   € € € € € ð2ð 2ð 2ðð ð ð ð r!   rÙ  c                   ón   — e Zd ZdZd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	dZ
d	Zd
„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ ZdS )Ú
WordsRealmr{   c                 ó   — || _         d S r#   r  r   s     r   r    zWordsRealm.__init__M  s   € ØˆŒ	ˆ	ˆ	r!   c                 ó    — t          |¦  «        S r#   )r^   r   s     r   ÚuserFactoryzWordsRealm.userFactoryP  s   € Ý�D‰zŒzÐr!   c                 ó    — t          |¦  «        S r#   )r   r   s     r   ÚgroupFactoryzWordsRealm.groupFactoryS  s   € Ý�T‰{Œ{Ðr!   c                 ó   ‡‡— ˆˆfd„}|S )Nc                  óX   •—  t          ‰dd„ ¦  «        ¦   «          d x‰ _        ‰ _        d S )Nrx   c                  ó   — d S r#   r\   r\   r!   r   r   z:WordsRealm.logoutFactory.<locals>.logout.<locals>.<lambda>Y  s   € ¨T€ r!   )Úgetattrrc   rd   )rƒ   Úfacets   €€r   rx   z(WordsRealm.logoutFactory.<locals>.logoutW  s1   ø€ à2�G�E˜8 \ \Ñ2Ô2Ñ4Ô4Ð4Ø)-Ð-ˆFŒL˜6œ;˜;˜;r!   r\   )r   rƒ   rí  rx   s    `` r   ÚlogoutFactoryzWordsRealm.logoutFactoryV  s)   øø€ ð	.ð 	.ð 	.ð 	.ð 	.ð 	.ð
 ˆr!   c                 óÈ   ‡ ‡‡‡— t          ‰t          ¦  «        r‰                     ‰ j        ¦  «        Šˆˆˆˆ fd„}‰                      ‰¦  «                             |¦  «        S )Nc                 ó
  •— | j         �t          j        ¦   «         ‚‰D ]V} || d ¦  «        }|�F|                      ‰‰¦  «         ‰‰_        ‰‰_         | ‰_        ||‰                     | |¦  «        fc S ŒWt          ‰‰¦  «        ‚r#   )rc   r   rÑ   rf   r   rƒ   rî  ÚNotImplementedError)rƒ   rÎ   rí  ÚavatarIdÚ
interfacesrd   r   s      €€€€r   Ú	gotAvatarz+WordsRealm.requestAvatar.<locals>.gotAvatarb  s¥   ø€ ØŒ|Ð'ÝÔ,Ñ.Ô.Ð.Ø#ð Kð K�Ø˜˜f dÑ+Ô+�ØÐ$Ø—O’O D¨$Ñ/Ô/Ð/Ø (�D”IØ!%�D”JØ"(�D”KØ  %¨×);Ò);¸FÀEÑ)JÔ)JÐJÐJÐJÐJð %õ & d¨JÑ7Ô7Ð7r!   )rŒ   r�   rŽ   Ú	_encodingÚgetUserr=   )r   rò  rd   ró  rô  s   ```` r   ÚrequestAvatarzWordsRealm.requestAvatar^  su   øøøø€ Ý�h¥Ñ&Ô&ð 	7Ø—’ t¤~Ñ6Ô6ˆHð	8ð 	8ð 	8ð 	8ð 	8ð 	8ð 	8ð 	8ð �|Š|˜HÑ%Ô%×1Ò1°)Ñ<Ô<Ð<r!   c                 ó   — d S r#   r\   rJ   s    r   ru   zWordsRealm.itergroupsq  r½  r!   FTc                 ó   — t           ‚r#   ©rñ  r   s     r   rø   zWordsRealm.lookupUsery  ó   € Ý!Ð!r!   c                 ó   — t           ‚r#   rú  r]  s     r   rö   zWordsRealm.lookupGroup|  rû  r!   c                 ó   — t           ‚)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.
        rú  ra  s     r   ÚaddUserzWordsRealm.addUser  s
   € õ "Ð!r!   c                 ó   — t           ‚)aY  
        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.
        rú  r]  s     r   ÚaddGroupzWordsRealm.addGroup�  s
   € õ "Ð!r!   c                 óš   ‡ ‡— ‰ j         r.ˆˆ fd„}‰                      ‰¦  «                             |¦  «        S ‰                      ‰¦  «        S )Nc                 ól   •— |                       t          j        ¦  «         ‰                     ‰¦  «        S r#   )rê   r   ÚDuplicateGrouprö   ©r&   r   r   s    €€r   rî   z$WordsRealm.getGroup.<locals>.ebGroup¡  s,   ø€ Ø—’�Ô.Ñ/Ô/Ð/Ø×'Ò'¨Ñ-Ô-Ð-r!   )ÚcreateGroupOnRequestÚcreateGroupr:   rö   )r   r   rî   s   `` r   r  zWordsRealm.getGroupž  se   øø€ ØÔ$ð 	>ð.ð .ð .ð .ð .ð .ð ×#Ò# DÑ)Ô)×4Ò4°WÑ=Ô=Ð=Ø×Ò Ñ%Ô%Ð%r!   c                 óš   ‡ ‡— ‰ j         r.ˆˆ fd„}‰                      ‰¦  «                             |¦  «        S ‰                      ‰¦  «        S )Nc                 ól   •— |                       t          j        ¦  «         ‰                     ‰¦  «        S r#   )rê   r   ÚDuplicateUserrø   r  s    €€r   rô   z"WordsRealm.getUser.<locals>.ebUser«  s*   ø€ Ø—’�Ô-Ñ.Ô.Ð.Ø—’ tÑ,Ô,Ð,r!   )ÚcreateUserOnRequestÚ
createUserr:   rø   )r   r   rô   s   `` r   rö  zWordsRealm.getUser¨  sa   øø€ ØÔ#ð 	<ð-ð -ð -ð -ð -ð -ð —?’? 4Ñ(Ô(×3Ò3°FÑ;Ô;Ð;Ø�Š˜tÑ$Ô$Ð$r!   c                 óÒ   ‡ ‡— ˆfd„}ˆˆ fd„}‰                      ¦   «         Š‰                      ‰¦  «        }|                     ||¦  «         |                     ‰ j        ¦  «         |S )Nc                 óP   •— t          j        t          j        ‰¦  «        ¦  «        S r#   )r   r$   r   r	  )r0   r   s    €r   ÚcbLookupz'WordsRealm.createUser.<locals>.cbLookup³  s   ø€ Ý”?¥6Ô#7¸Ñ#=Ô#=Ñ>Ô>Ð>r!   c                 ól   •— |                       t          j        ¦  «         ‰                     ‰¦  «        S r#   )rê   r   rh  ræ  r  s    €€r   ÚebLookupz'WordsRealm.createUser.<locals>.ebLookup¶  s,   ø€ Ø�HŠH•VÔ&Ñ'Ô'Ð'Ø×#Ò# DÑ)Ô)Ð)r!   )rÂ   rø   rÉ   r=   rþ  ©r   r   r  r  r@   s   ``   r   r  zWordsRealm.createUser²  sˆ   øø€ ð	?ð 	?ð 	?ð 	?ð 	?ð	*ð 	*ð 	*ð 	*ð 	*ð 	*ð �zŠz‰|Œ|ˆØ�OŠO˜DÑ!Ô!ˆØ	�Š�x Ñ*Ô*Ð*Ø	�Š�d”lÑ#Ô#Ð#Øˆr!   c                 óÒ   ‡ ‡— ˆfd„}ˆˆ fd„}‰                      ¦   «         Š‰                      ‰¦  «        }|                     ||¦  «         |                     ‰ j        ¦  «         |S )Nc                 óP   •— t          j        t          j        ‰¦  «        ¦  «        S r#   )r   r$   r   r  )rj   r   s    €r   r  z(WordsRealm.createGroup.<locals>.cbLookupÁ  s   ø€ Ý”?¥6Ô#8¸Ñ#>Ô#>Ñ?Ô?Ð?r!   c                 ól   •— |                       t          j        ¦  «         ‰                     ‰¦  «        S r#   )rê   r   rë   rè  r  s    €€r   r  z(WordsRealm.createGroup.<locals>.ebLookupÄ  s,   ø€ Ø�HŠH•VÔ'Ñ(Ô(Ð(Ø×$Ò$ TÑ*Ô*Ð*r!   )rÂ   rö   rÉ   r=   r   r  s   ``   r   r  zWordsRealm.createGroupÀ  s�   øø€ ð	@ð 	@ð 	@ð 	@ð 	@ð	+ð 	+ð 	+ð 	+ð 	+ð 	+ð �zŠz‰|Œ|ˆØ×Ò˜TÑ"Ô"ˆØ	�Š�x Ñ*Ô*Ð*Ø	�Š�d”mÑ$Ô$Ð$Øˆr!   N)rY   rZ   r[   rõ  r    ræ  rè  rî  r÷  ru   r  r
  rø   rö   rþ  r   r  rö  r  r  r\   r!   r   rã  rã  I  sù   € € € € € à€Iðð ð ðð ð ðð ð ðð ð ð=ð =ð =ð&ð ð ð
 !ÐØÐð"ð "ð "ð"ð "ð "ð"ð "ð "ð""ð "ð "ð&ð &ð &ð%ð %ð %ðð ð ðð ð ð ð r!   rã  c                   ó<   ‡ — e Zd Zˆ fd„Zd„ Zd„ Zd„ Zd„ Zd„ Zˆ xZ	S )ÚInMemoryWordsRealmc                 óV   •—  t          ¦   «         j        |i |¤Ž i | _        i | _        d S r#   )Úsuperr    r   r`   )r   Úar“   rª  s      €r   r    zInMemoryWordsRealm.__init__Ð  s1   ø€ Ø�‰ŒÔ˜!Ð"˜rÐ"Ð"Ð"ØˆŒ
ØˆŒˆˆr!   c                 óX   — t          j        | j                             ¦   «         ¦  «        S r#   )r
   r>   r`   r7   rJ   s    r   ru   zInMemoryWordsRealm.itergroupsÕ  s    € ÝŒ}˜Tœ[×/Ò/Ñ1Ô1Ñ2Ô2Ð2r!   c                 óÒ   — |j         | j        v r7t          j        t	          j        t          j        ¦   «         ¦  «        ¦  «        S || j        |j         <   t          j        |¦  «        S r#   )	r   r   r
   Úfailr   r$   r   r	  r>   ra  s     r   rþ  zInMemoryWordsRealm.addUserØ  sR   € ØŒ9˜œ
Ð"Ð"Ý”:�gœo­fÔ.BÑ.DÔ.DÑEÔEÑFÔFÐFØ $ˆŒ
�4”9ÑÝŒ}˜TÑ"Ô"Ð"r!   c                 óÒ   — |j         | j        v r7t          j        t	          j        t          j        ¦   «         ¦  «        ¦  «        S || j        |j         <   t          j        |¦  «        S r#   )	r   r`   r
   r  r   r$   r   r  r>   r]  s     r   r   zInMemoryWordsRealm.addGroupÞ  sR   € ØŒ:˜œÐ$Ð$Ý”:�gœo­fÔ.CÑ.EÔ.EÑFÔFÑGÔGÐGØ"'ˆŒ�E”JÑÝŒ}˜UÑ#Ô#Ð#r!   c                 óþ   — |                      ¦   «         }	 | j        |         }t          j        |¦  «        S # t          $ r; t          j        t          j        t          j	        |¦  «        ¦  «        ¦  «        cY S w xY wr#   )
rÂ   r   r
   r>   rE   r  r   r$   r   rh  )r   r   r0   s      r   rø   zInMemoryWordsRealm.lookupUserä  s~   € Ø�zŠz‰|Œ|ˆð	'Ø”:˜dÔ#ˆDõ ”= Ñ&Ô&Ð&øõ ð 	Hð 	Hð 	HÝ”:�gœo­fÔ.?ÀÑ.EÔ.EÑFÔFÑGÔGÐGÐGÐGð	Høøøó   –7 ·AA<Á;A<c                 óþ   — |                      ¦   «         }	 | j        |         }t          j        |¦  «        S # t          $ r; t          j        t          j        t          j	        |¦  «        ¦  «        ¦  «        cY S w xY wr#   )
rÂ   r`   r
   r>   rE   r  r   r$   r   rë   )r   r   rj   s      r   rö   zInMemoryWordsRealm.lookupGroupí  s~   € Ø�zŠz‰|Œ|ˆð	(Ø”K Ô%ˆEõ ”= Ñ'Ô'Ð'øõ ð 	Ið 	Ið 	IÝ”:�gœo­fÔ.@ÀÑ.FÔ.FÑGÔGÑHÔHÐHÐHÐHð	Iøøør  )
rY   rZ   r[   r    ru   rþ  r   rø   rö   Ú__classcell__)rª  s   @r   r  r  Ï  sƒ   ø€ € € € € ðð ð ð ð ð
3ð 3ð 3ð#ð #ð #ð$ð $ð $ð'ð 'ð 'ð(ð (ð (ð (ð (ð (ð (r!   r  )r   r^   rã  r  N)6ru  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È   r^   r²   r4   r�   rz   ÚServerFactoryr}  ÚReferenceabler„  r³  rš  ÚsetUnjellyableForClassrœ  r±  r�  rÇ  ÚIPerspectiverÙ  ÚIRealmÚIChatServicerã  r  Ú__all__r\   r!   r   ú<module>r2     sˆ  ðð
ð ð2 Ð Ð Ð Ð Ð Ð Ð à &Ð &Ð &Ð &Ð &Ð &à Ð Ð Ð Ð Ð Ø <Ð <Ð <Ð <Ð <Ð <Ð <Ð <Ð <Ð <Ø ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ø 0Ð 0Ð 0Ð 0Ð 0Ð 0Ð 0Ð 0Ð 0Ð 0Ø 5Ð 5Ð 5Ð 5Ð 5Ð 5Ø Ð Ð Ð Ð Ð Ø (Ð (Ð (Ð (Ð (Ð (Ð (Ð (Ø 'Ð 'Ð 'Ð 'Ð 'Ð 'ð €ˆVŒ]ÑÔðJ)ð J)ð J)ð J)ð J)ñ J)ô J)ñ ÔðJ)ðZ €ˆVŒ\ÑÔð%ð %ð %ð %ð %ñ %ô %ñ Ôð%ðP (€ð €ˆVÔÑ Ô ð}
Hð }
Hð }
Hð }
Hð }
HˆcŒgñ }
Hô }
Hñ !Ô ð}
Hð@
ð 
ð 
ð 
ð 
�Ô'ñ 
ô 
ð 
ð,ð ð ð ð ˆRÔñ ô ð ð. €ˆVÔÑ Ô ð
ð 
ð 
ð 
ð 
�bÔ(ñ 
ô 
ñ !Ô ð
ðB €Ô ˜& /Ñ 2Ô 2Ð 2ð5ð 5ð 5ð 5ð 5ˆbÔñ 5ô 5ð 5ð2 €ˆVŒ]ÑÔð"ð "ð "ð "ð "�rÔ)ñ "ô "ñ Ôð"ðJ €Ô ˜'Ð#3Ñ 4Ô 4Ð 4ðIð Ið Ið Ið IˆRÔñ Iô Ið Ið €ˆVÔÑ Ô ð/ð /ð /ð /ð /�Ô!ñ /ô /ñ !Ô ð/ðd €�
˜FœL¨"¬/Ñ :Ô :Ð :ðð ð ð ð �bÔ(ñ ô ð ð €Ô ˜* oÑ 6Ô 6Ð 6ð €ˆVŒ]˜FÔ/Ñ0Ô0ðBð Bð Bð Bð Bñ Bô Bñ 1Ô0ðBðJ%(ð %(ð %(ð %(ð %(˜ñ %(ô %(ð %(ðPð ð €€€r!   