
    6hF                    *   S SK Jr  S SKrS SKrS SKrS SKrS SKrSSKJr  \R                  r	Sr
SrSrSrS	rS
rSrSrSrSrSrSrSrSr\\4r\rS r\rSrSr S r!S r" " S S5      r#S$S jr$ " S S5      r% " S S5      r&S r'S  r(S! r)S%S" jr*S%S# jr+g)&    )annotationsN   )compat                               	   
         c                6    [        U 5      R                  S5      $ )Nascii)strencode)is    C/usr/lib/python3/dist-packages/hgext/fsmonitor/pywatchman/pybser.pytobytesr   <   s    q6==!!    s        s            c                    SU s=::  a  S::  a   g  SU s=::  a  S::  a   g  SU s=::  a  S::  a   g	  [        S
5      U s=::  a  [        S5      ::  a   g  [        S[        U 5      -   5      e)z5Return the smallest size int that can store the valuei   r   i i     i   i   l         l       zCannot represent value: )longRuntimeErrorr   )xs    r   	_int_sizer$   I   sz    T 	A		 
 		'Z	' 
(	!	"a	C40B+C	C 
D 5A>??r   c                P    X   n[        U[        5      (       d  [        U45      nU$ N)
isinstancebytes)bufposrets      r   _buf_posr,   W   s&    
(Cc5!!SFmJr   c                  2    \ rS rSrS rS rS rS rS rSr	g)	_bser_buffer_   c                   Xl         [        R                  " S5      U l        U R                   S:X  aU  [        R
                  " [        [        [        5      5      S-   U R                  S[        5        [        [        5      U l	        g U R                   S:X  d   e[        R
                  " [        [        [        5      5      S-   U R                  S[        5        [        [        5      U l	        g )Ni    r      sr   r   )bser_versionctypescreate_string_bufferr)   struct	pack_intor   lenEMPTY_HEADERwposEMPTY_HEADER_V2)selfversions     r   __init___bser_buffer.__init__`   s    #..t4!L)*T1488Q L)DI$$)))O,-4	 O,DIr   c                R   [         R                  " U R                  5      U R                  -
  U:  av  [         R                  " U R                  [         R                  " U R                  5      S-  5        [         R                  " U R                  5      U R                  -
  U:  a  Mu  g g )Nr   )r3   sizeofr)   r9   resize)r;   sizes     r   ensure_size_bser_buffer.ensure_sizer   sd    mmDHH%		1D8MM$((FMM$(($;a$?@ mmDHH%		1D8r   c                N   [        U5      nUS-   nU R                  U5        US:X  a3  [        R                  " SU R                  U R
                  [        U5        OUS:X  a3  [        R                  " SU R                  U R
                  [        U5        O}US:X  a3  [        R                  " SU R                  U R
                  [        U5        ODUS:X  a3  [        R                  " SU R                  U R
                  [        U5        O[        S	5      eU =R
                  U-  sl        g )
Nr   s   =cbr   s   =chr   s   =cir    s   =cqz Cannot represent this long value)r$   rC   r5   r6   r)   r9   	BSER_INT8
BSER_INT16
BSER_INT32
BSER_INT64r"   )r;   valrB   to_writes       r   append_long_bser_buffer.append_longv   s    ~!8"19VTXXtyy)SIQYVTXXtyy*cJQYVTXXtyy*cJQYVTXXtyy*cJABB		X	r   c           	     ^   [        U[        5      (       a  UR                  S5      n[        U5      n[	        U5      nSU-   U-   nU R                  U5        US:X  aH  [        R                  " S[        U5      -   S-   U R                  U R                  [        [        UU5        OUS:X  aH  [        R                  " S[        U5      -   S-   U R                  U R                  [        [        UU5        OUS:X  aH  [        R                  " S[        U5      -   S-   U R                  U R                  [        [        UU5        OYUS	:X  aH  [        R                  " S
[        U5      -   S-   U R                  U R                  [        [        UU5        O[!        S5      eU =R                  U-  sl
        g )Nutf-8r   r      =ccbr1      =cchr      =ccir       =ccqz"Cannot represent this string value)r'   unicoder   r7   r$   rC   r5   r6   r   r)   r9   BSER_BYTESTRINGrF   rG   rH   rI   r"   )r;   ss_lenrB   rK   s        r   append_string_bser_buffer.append_string   sn   a!!!AAt8e#"19'%.(4/		 QY'%.(4/		 QY'%.(4/		 QY'%.(4/		 CDD		X	r   c                
   [        U[        5      (       aj  SnU R                  U5        U(       a  [        nO[        n[
        R                  " SU R                  U R                  U5        U =R                  U-  sl        g UcZ  SnU R                  U5        [
        R                  " SU R                  U R                  [        5        U =R                  U-  sl        g [        U[        [        45      (       a  U R                  U5        g [        U[        5      (       a  U R                  U5        g [        U[        5      (       a[  SnU R                  U5        [
        R                  " SU R                  U R                  [         U5        U =R                  U-  sl        g [        U["        R$                  5      (       Ga  [        U["        R&                  5      (       Ga  [)        U5      n[+        U5      nSU-   nU R                  U5        US:X  a8  [
        R                  " SU R                  U R                  [,        [.        U5        OUS:X  a8  [
        R                  " SU R                  U R                  [,        [0        U5        OUS:X  a8  [
        R                  " S	U R                  U R                  [,        [2        U5        OIUS
:X  a8  [
        R                  " SU R                  U R                  [,        [4        U5        O[7        S5      eU =R                  U-  sl        UR9                  5       nU H'  u  pxU R                  U5        U R;                  U5        M)     g [        U["        R<                  5      (       Ga  [        U["        R&                  5      (       Ga_  [)        U5      n[+        U5      nSU-   nU R                  U5        US:X  a8  [
        R                  " SU R                  U R                  [>        [.        U5        OUS:X  a8  [
        R                  " SU R                  U R                  [>        [0        U5        OUS:X  a8  [
        R                  " S	U R                  U R                  [>        [2        U5        OIUS
:X  a8  [
        R                  " SU R                  U R                  [>        [4        U5        O[7        S5      eU =R                  U-  sl        U H  nU R;                  U5        M     g [7        S5      e)Nr   s   =c	   s   =cdr   rP   rQ   r   rR   r    rS   z#Cannot represent this mapping valuez$Cannot represent this sequence valuez#Cannot represent unknown value type) r'   boolrC   	BSER_TRUE
BSER_FALSEr5   r6   r)   r9   	BSER_NULLintr!   rL   STRING_TYPESrX   float	BSER_REALabcMappingSizedr7   r$   BSER_OBJECTrF   rG   rH   rI   r"   itemsappend_recursiveIterable
BSER_ARRAY)	r;   rJ   needed	to_encodeval_lenrB   	iteritemskvs	            r   ri   _bser_buffer.append_recursive   s   c4  FV$%	&	UDHHdiiCIII[FV$UDHHdiiCIIIc4[))S!\**s#U##FV$VTXXtyy)SIIIIS[[))jcii.H.H#hGW%DXFV$qy  HHII   HHII   HHII   HHII ##HIIIII		I!""1%%%a( " S\\**z#syy/I/I#hGW%DXFV$qy  TXXtyy*i   HHII   HHII   HHII ##IJJIII%%a(  DEEr   )r2   r)   r9   N)
__name__
__module____qualname____firstlineno__r=   rC   rL   rX   ri   __static_attributes__ r   r   r.   r.   _   s    -$A 1frFr   r.   c                   [        US9nUR                  U 5        US:X  a@  UR                  [        [        5      -
  n[
        R                  " SUR                  SU5        ObUR                  [        [        5      -
  n[
        R                  " SUR                  SU5        [
        R                  " SUR                  SU5        UR                  R                  S UR                   $ )N)r<   r      =i   r      )
r.   ri   r9   r7   r8   r5   r6   r)   r:   raw)objr<   capabilitiesbser_bufobj_lens        r   dumpsr   .  s    G,Hc"!|--#l"33a9--#o"66a>a9<<Ohmm,,r   c                  0    \ rS rSrSrS rS rS rS rSr	g)_BunserDicti?  _keys_valuesc                    Xl         X l        g r&   r   )r;   keysvaluess      r   r=   _BunserDict.__init__B  s    
r   c                $    U R                  U5      $ r&   )__getitem__)r;   names     r   __getattr___BunserDict.__getattr__F  s    %%r   c                   [        U[        [        45      (       a  U R                  U   $ UR	                  S5      (       a  USS  n U R                  U R
                  R                  U5         $ ! [         a    [        SU-  5      ef = f)Nst_r{   z_BunserDict has no key %s)	r'   r`   r!   r   
startswithr   index
ValueErrorKeyError)r;   keys     r   r   _BunserDict.__getitem__I  s    cC;''<<$$^^E"" ab'C	><<

 0 0 566 	>6<==	>s   'A/ /Bc                ,    [        U R                  5      $ r&   )r7   r   )r;   s    r   __len___BunserDict.__len__U  s    4::r   N)
rs   rt   ru   rv   	__slots__r=   r   r   r   rw   rx   r   r   r   r   ?  s    $I&
>r   r   c                  R    \ rS rSrSS jr\S 5       rS rS rS r	S r
S	 rS
 rSrg)BunseriY  Nc                T    Xl         X l        Uc  S U l        g Uc  SU l        g X0l        g )Nstrictmutablevalue_encodingvalue_errors)r;   r   r   r   s       r   r=   Bunser.__init__Z  s/    ,! $D! (D ,r   c                v    [        X5      nU[        :X  a  SnSnOcU[        :X  a  SnSnOTU[
        :X  a  SnSnOEU[        :X  a  SnS	nO6[        S
[        R                  " U5      R                  S5      < SU< 35      e[        R                  " X@US-   5      S   nXQU-   4$ ! [         a    [        S5      ef = f)Nz+Invalid bser int encoding, pos out of ranger   s   =br{   s   =h   rz   r[   s   =qzInvalid bser int encoding 0xr   z at position r   r   )r,   
IndexErrorr   rF   rG   rH   rI   binasciihexlifydecoder5   unpack_from)r)   r*   int_typerl   fmtint_vals         r   	unser_intBunser.unser_inte  s    	L)H y FC#FC#FC#FC##H-44W=sD  $$SsQw7:v&&)  	LJKK	Ls   B" "B8c                    U R                  XS-   5      u  p2[        R                  " [        U5      S-   X5      S   nUR	                  S5      X#-   4$ )Nr   r1   r   rO   )r   r5   r   r   r   r;   r)   r*   str_lenstr_vals        r   unser_utf8_stringBunser.unser_utf8_string  sM    ~~c73$$WW%5%<cGJw'77r   c                    U R                  XS-   5      u  p2[        R                  " [        U5      S-   X5      S   nU R                  b&  UR                  U R                  U R                  5      nXBU-   4$ )Nr   r1   r   )r   r5   r   r   r   r   r   r   s        r   unser_bytestringBunser.unser_bytestring  sl    ~~c73$$WW%5%<cGJ*nnT%8%8$:K:KLGw''r   c                    U R                  XS-   5      u  p2/ n[        U5       H'  nU R                  X5      u  pbUR                  U5        M)     U R                  (       d  [        U5      nXB4$ Nr   )r   rangeloads_recursiveappendr   tuple)r;   r)   r*   arr_lenarr_arr_items          r   unser_arrayBunser.unser_array  s`    ~~c73wA 00:MHJJx    ||*Cxr   c                   U R                  XS-   5      u  p2U R                  (       a  0 nO/ n/ n[        U5       Hc  nU R                  X5      u  pU R	                  X5      u  pU R                  (       a  U	WU'   MA  WR                  U5        WR                  U	5        Me     U R                  (       d  [        WW5      nWU4$ r   )r   r   r   r   r   r   r   )
r;   r)   r*   r   r~   r   valsr   r   rJ   s
             r   unser_objectBunser.unser_object  s    ~~c73<<CDDwA--c7HC++C5HC||CC C    ||dD)CCxr   c                d   [        XS-   5      nU[        :w  a  [        S5      e[        U R                  SS9nUR                  XS-   5      u  pRU R                  X5      u  pb/ n[        U5       H  nU R                  (       a  0 n	O/ n
[        [        U5      5       H^  n[        X5      [        :X  a  US-  nS nOU R                  X5      u  pU R                  (       a  X[   nUW	U'   MM  W
R                  U5        M`     U R                  (       d  [        UW
5      n	UR                  W	5        M     Xr4$ )Nr   zExpect ARRAY to follow TEMPLATErO   )r   r   )r,   rk   r"   r   r   r   r   r   r7   	BSER_SKIPr   r   r   )r;   r)   r*   val_typekeys_bunserr   nitemsr   r   r~   r   keyidxeler   s                 r   unser_templateBunser.unser_template  s
   Cq)z!@AAT\\'J++Cq9	nnS.vA||D	*C%21HCC#33C=HC<<,C"CHKK$ + <<!$-JJsO- . xr   c                   [        X5      nU[        :X  d  U[        :X  d  U[        :X  d
  U[        :X  a  U R                  X5      $ U[        :X  a#  [        R                  " SXS-   5      S   nXBS-   4$ U[        :X  a  SUS-   4$ U[        :X  a  SUS-   4$ U[        :X  a  S US-   4$ U[        :X  a  U R                  X5      $ U[        :X  a  U R                  X5      $ U[         :X  a  U R#                  X5      $ U[$        :X  a  U R'                  X5      $ U[(        :X  a  U R+                  X5      $ [-        S[.        R0                  " U5      R3                  S5      -  5      e)	Ns   =dr   r   r[   TFzunhandled bser opcode 0x%sr   )r,   rF   rG   rH   rI   r   rc   r5   r   r]   r^   r_   rU   r   BSER_UTF8STRINGr   rk   r   rg   r   BSER_TEMPLATEr   r   r   r   r   )r;   r)   r*   r   rJ   s        r   r   Bunser.loads_recursive  sX   C%	!:%:%:%>>#++"$$UCq9!<Cq>!"#'?"#37##"#'?"(((22())#33###C--$$$S..&&&s00,""8,33G<= r   r   TNN)rs   rt   ru   rv   r=   staticmethodr   r   r   r   r   r   r   rw   rx   r   r   r   r   Y  s:    	- ' '28
(
, D r   r   c                :   U SS [         SS :X  a  SnSn[        R                  U S5      u  p4OkU SS [        SS :X  aP  [	        U 5      S:  a  [        S5      eSn[        R                  " SU S5      S   n[        R                  U S5      u  p4O[        S5      eXX44$ )Nr   r   r   r    zInvalid BSER headerI   )r8   r   r   r:   r7   r   r5   r   )r)   r2   bser_capabilitiesexpected_lenpos2s        r   _pdu_info_helperr     s    
1Qx<!$$#--c15d	Qq_Qq)	)s8a<233"..sC;A>#--c15d.//L>>r   c                @    [        U 5      nUS   US   US   US   -   4$ )Nr   r   r   r{   r   r)   infos     r   pdu_infor     s.    C D7DGT!WtAw...r   c                .    [        U 5      nUS   US   -   $ )Nr   r{   r   r   s     r   pdu_lenr   	  s    C D7T!Wr   c                    [        U 5      nUS   nUS   n[        U 5      XV-   :w  a  [        SXV-   [        U 5      4-  5      e[        UUUS9nUR	                  X5      S   $ )aE  Deserialize a BSER-encoded blob.

@param buf: The buffer to deserialize.
@type buf: bytes

@param mutable: Whether to return mutable results.
@type mutable: bool

@param value_encoding: Optional codec to use to decode values. If
                       unspecified or None, return values as bytestrings.
@type value_encoding: str

@param value_errors: Optional error handler for codec. 'strict' by default.
                     The other most common argument is 'surrogateescape' on
                     Python 3. If value_encoding is None, this is ignored.
@type value_errors: str
r   r{   z!bser data len %d != header len %dr   r   )r   r7   r   r   r   )r)   r   r   r   r   r   r*   bunsers           r   loadsr     s}    & C D7L
q'C
3x<%%/<3Es3x2PP
 	
 %!F !!#+A..r   c                2    SSK Jn  UR                  XX#5      $ )Nr   )load) r   )fpr   r   r   r   s        r   r   r   3  s    99R.??r   )r   r   r   ),
__future__r   r   collectionsr3   r5   sysr   r   rd   rk   rg   rU   rF   rG   rH   rI   rc   r]   r^   r_   r   r   r   r   r(   ra   rT   r   r`   r!   r8   r:   r$   r,   r.   r   r   r   r   r   r   r   r   rx   r   r   <module>r      s   : #     
 oo
	


		
		U|
" 
 /A@LF LF^-" 4W Wt?"/

"/J@r   