o
    j.                     @   sH   d dl Z d dlZd dlZdd ZdddZdd Zd	d
 ZdddZdS )    Nc                 C   s^  t | }t }d}| r| d }| dd  } tdD ]}t |}||? d@ s7|| d jddd7 }| dd  } nktd| d d d }t |d }d	}	d
}
|dkra|	dL }	|
d8 }
|dL }|dksQ||	@ d }||
? d }||kr|| d  td	t || d   d  }||d | 7 }n||| | |  7 }| dd  } t | dkr nq| s|S )N   r         little)length	byteorder<H           )len	bytearrayrangeto_bytesstructunpackint)chunksizeoutpow2flagsi	out_startflagposl_masko_shiftr   offsettmp r!   /root/aizidognhua/tmp/workspace/projects/ec89d86c-575f-41c9-af57-ac45cbdbf775/venv/lib/python3.10/site-packages/aiosmb/protocol/compression/lznt1.py_decompress_chunk    s@   ,r#   Tc                 C   s   t  }| rJtdt| d d d }|d@ d }|r)|t| dd  kr)td| dd|  }|d@ r<|t|7 }n||7 }| d| d  } | s|S )Nr   r	   r   r
   r   zinvalid chunk lengthi   )r   r   r   bytesr   
ValueErrorr#   )buflength_checkr   headerr   r   r!   r!   r"   
decompressC   s   r)   c                 C   s   d}d}t d|D ]T}| |d | }|dkr nDt| | }|}||krU| |d  tdt| |d   d  }	t ||d D ]}
|	|d |
 }|dkrR n|
}qA||kr]|}|}q	|dk rddS ||fS )Nr   r   r
   r   )r   r   )r   rfindr   r   )srctargetmax_lenresult_offsetresult_lengthr   r   
tmp_offset
tmp_lengthr    jr!   r!   r"   _findS   s,   (r4   c                 C   s  t  | }d}d}d}d}t|dkrd}d}tdD ]}|dL }|t| t| k rC|dK }|d? d }|d8 }|t| t| k s+t||k rNt|}	n|}	t| d t| t|  ||	\}
}t| d t| t| d  |dd  |	\}}||k rd}|dkr|
d |> |d B }|td	|7 }|d
O }||d  }n|t|d g7 }|dd  }t|dkr nq|td|d| ? 7 }||7 }t|dks|S )N    r   i  r   r   r   r   r   r      B   )copyr   r   r4   r   packr$   )r   blobr   r   l_mask3r   bitsr    r   r.   r   r   offset2length2symbolr!   r!   r"   _compress_chunkk   sH   

$0#rA      c                 C   s   d}| rG| d | }t |}t|t|k r+d}td|t|d B }||| 7 }nd}td|t|d B }||| 7 }| |d  } | s|S )Nr5   i   r   r   i 0  )rA   r   r   r:   )r&   
chunk_sizer   r   
compressedr   r(   r!   r!   r"   compress   s   rE   )T)rB   )r   sysr9   r#   r)   r4   rA   rE   r!   r!   r!   r"   <module>   s   
#+