o
    àý°j–‘  ã                   @   sR  d dl mZ d dl mZ d dlmZ d dlmZ d dlmZm	Z	 d dl
mZ d dlmZ d dlm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	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 Z0d	Z1d
Z2dZ3dZ4dZ5dZ6dZ7dZ8dZ9dZ:dZ;dZ<dZ=dZ>dZ?dZ@dZAd ZBi e0d!“e1d"“e2d#“e3d$“e4d%“e5d&“e6d'“e7d(“e8d)“e9d*“e:d+“e;d,“e<d-“e=d.“e>d/“e?d0“e@d1“eAd2eBd3i¥ZCi e0d4“e1d5“e2d5“e3d6“e4d7“e5d8“e6d9“e7d:“e8d8“e9d4“e:d4“e;d4“e<d4“e=d4“e>d;“e?d8“e@d<“eAd=eBd4i¥ZDd	ZEd
ZFdZGdZHdZId>ZJd?ZKd@ZLeJdAeKdBeLdCiZMdDd dDd dEœZNG dFdG„ dGeƒZOG dHdI„ dIeƒZPG dJdK„ dKeƒZQG dLdM„ dMeƒZRG dNdO„ dOeƒZSG dPdQ„ dQeƒZTG dRdS„ dSeƒZUG dTdU„ dUeƒZVG dVdW„ dWeƒZWG dXdY„ dYeƒZXG dZd[„ d[eƒZYG d\d]„ d]eƒZZG d^d_„ d_eƒZ[d`da„ Z\G dbdc„ dcƒZ]G ddde„ deƒZ^d4S )fé    )Údivision)Úprint_function)ÚLOG)ÚOrderedDict)Ú	StructureÚhexdump)Úunpack)Úhexlify)Úbé   é   é   é   é   é   é    é@   é€   é    iÿ  é   é   é   é   é	   é
   é   é   é   é   é   é   é   ÚNULLÚBooleanzSigned bytezSigned shortzSigned longÚCurrencyzSingle precision FPzDouble precision FPÚDateTimeÚBinaryÚTextzLong Binaryz	Long TextÚObsoletezUnsigned longz	Long longÚGUIDzUnsigned shortÚMaxN)r   ÚB)r   z<h)r   z<l)r   z<Q)r   z<f)r   z<d)r   z<L)r   Ú16s)r   ú<Hi°  iŸN  iä  zutf-16leÚasciiÚcp1252ó    )Ú	TableDataÚFatherDataPageNumberÚCurrentPageDataÚ
CurrentTagc                   @   ó   e Zd ZdZdS )ÚESENT_JET_SIGNATURE))ÚRandomú<L=0)ÚCreationTimeú<Q=0)ÚNetBiosNameú16s=b""N©Ú__name__Ú
__module__Ú__qualname__Ú	structure© rB   rB   ú/root/aizidognhua/tmp/workspace/projects/ec89d86c-575f-41c9-af57-ac45cbdbf775/venv/lib/python3.10/site-packages/impacket/ese.pyr6   ´   ó    r6   c                   @   sþ   e Zd Zg d‘d‘d‘d‘d‘ddef‘d‘d	‘d
‘d‘d‘d‘d‘ddef‘d‘d‘d‘d‘d‘d‘d‘d‘d‘d‘d‘d‘d‘d‘d‘d‘d ‘d!‘d"‘d#‘d$‘d%‘d&‘d'‘d(‘d)‘d*‘d+‘d,‘d-‘d.‘d/‘d0‘d1‘d2‘d3‘d4‘d5‘d6‘d7‘d8‘d9‘R Zd:S );ÚESENT_DB_HEADER©ÚCheckSumr8   )Ú	Signatureu	   "Ã¯Ã�Â«Â‰)ÚVersionr8   )ÚFileTyper8   )ÚDBTimer:   ÚDBSignatureú:)ÚDBStater8   )ÚConsistentPositionr:   )ÚConsistentTimer:   )Ú
AttachTimer:   )ÚAttachPositionr:   )Ú
DetachTimer:   )ÚDetachPositionr:   ÚLogSignature)ÚUnknownr8   )ÚPreviousBackupú24s=b"")ÚPreviousIncBackuprX   )ÚCurrentFullBackuprX   )ÚShadowingDisablesr8   )ÚLastObjectIDr8   )ÚWindowsMajorVersionr8   )ÚWindowsMinorVersionr8   )ÚWindowsBuildNumberr8   )ÚWindowsServicePackNumberr8   )ÚFileFormatRevisionr8   )ÚPageSizer8   )ÚRepairCountr8   )Ú
RepairTimer:   )ÚUnknown2z28s=b"")Ú	ScrubTimer:   )ÚRequiredLogr:   )ÚUpgradeExchangeFormatr8   )ÚUpgradeFreePagesr8   )ÚUpgradeSpaceMapPagesr8   )ÚCurrentShadowBackuprX   )ÚCreationFileFormatVersionr8   )ÚCreationFileFormatRevisionr8   )ÚUnknown3r<   )ÚOldRepairCountr8   )ÚECCCountr8   )ÚLastECCTimer:   )ÚOldECCFixSuccessCountr8   )ÚECCFixErrorCountr8   )ÚLastECCFixErrorTimer:   )ÚOldECCFixErrorCountr8   )ÚBadCheckSumErrorCountr8   )ÚLastBadCheckSumTimer:   )ÚOldCheckSumErrorCountr8   )ÚCommittedLogr8   )ÚPreviousShadowCopyrX   )ÚPreviousDifferentialBackuprX   )ÚUnknown4z40s=b"")ÚNLSMajorVersionr8   )ÚNLSMinorVersionr8   )ÚUnknown5z148s=b"")ÚUnknownFlagsr8   N)r>   r?   r@   r6   rA   rB   rB   rB   rC   rE   »   sä    ÿþýüûúùø	÷
öõôóòñðïîíìëêéèçæåäãâá à!ß"Þ#Ý$Ü%Û&Ú'Ù(Ø)×*Ö+Õ,Ô-Ó.Ò/Ñ0Ð1Ï2Î3Í4Ì5Ë6Ê7É8
ÈrE   c                   @   s*   e Zd ZdZdZdZdZdZd
dd	„ZdS )ÚESENT_PAGE_HEADER)rF   )Ú
PageNumberr8   )rF   )ÚECCCheckSumr8   ))rG   r:   )	)ÚLastModificationTimer:   )ÚPreviousPageNumberr8   )ÚNextPageNumberr8   )ÚFatherDataPager8   )ÚAvailableDataSizeú<H=0)ÚAvailableUncommittedDataSizer‰   )ÚFirstAvailableDataOffsetr‰   )ÚFirstAvailablePageTagr‰   )Ú	PageFlagsr8   ))ÚExtendedCheckSum1r:   )ÚExtendedCheckSum2r:   )ÚExtendedCheckSum3r:   )r‚   r:   ©rV   r:   r   Nc                 C   s~   |dk s|dkr|dk r| j | j | _n#|dkr$|dk r$| j| j | _n| j| j | _|dkr7|  j| j7  _t | |¡ d S )Né   r   r    r   )Ústructure_2003_SP0ÚcommonrA   Ústructure_0x620_0x0bÚstructure_win7Úextended_win7r   Ú__init__)ÚselfÚversionÚrevisionÚpageSizeÚdatarB   rB   rC   r˜     s   zESENT_PAGE_HEADER.__init__)r   N)	r>   r?   r@   r“   r•   r–   r”   r—   r˜   rB   rB   rB   rC   r�   ÷   s    r�   c                   @   r5   )ÚESENT_ROOT_HEADER))ÚInitialNumberOfPagesr8   )ÚParentFatherDataPager8   )ÚExtentSpacer8   )ÚSpaceTreePageNumberr8   Nr=   rB   rB   rB   rC   rž   $  rD   rž   c                   @   r5   )ÚESENT_BRANCH_HEADER©)ÚCommonPageKeyrM   Nr=   rB   rB   rB   rC   r£   ,  rD   r£   c                   @   ó   e Zd ZdZdZddd„ZdS )ÚESENT_BRANCH_ENTRY©)ÚCommonPageKeySizer‰   )©ÚLocalPageKeySizer‰   ©Ú_LocalPageKeyz_-LocalPageKeyzself["LocalPageKeySize"]©ÚLocalPageKeyrM   )ÚChildPageNumberr8   Nc                 C   ó*   |t @ dkr| j| j | _t | |¡ d S ©Nr   ©Ú
TAG_COMMONr”   rA   r   r˜   ©r™   Úflagsr�   rB   rB   rC   r˜   ;  ó   zESENT_BRANCH_ENTRY.__init__©N©r>   r?   r@   r”   rA   r˜   rB   rB   rB   rC   r§   1  ó    r§   c                   @   r5   )ÚESENT_LEAF_HEADERr¤   Nr=   rB   rB   rB   rC   r»   A  rD   r»   c                   @   r¦   )ÚESENT_LEAF_ENTRYr¨   )rª   r¬   r®   )Ú	EntryDatarM   Nc                 C   r±   r²   r³   rµ   rB   rB   rC   r˜   P  r·   zESENT_LEAF_ENTRY.__init__r¸   r¹   rB   rB   rB   rC   r¼   F  rº   r¼   c                   @   r5   )ÚESENT_SPACE_TREE_HEADER)r‘   Nr=   rB   rB   rB   rC   r¾   V  rD   r¾   c                   @   r5   )ÚESENT_SPACE_TREE_ENTRY))ÚPageKeySizer‰   )ÚLastPageNumberr8   )ÚNumberOfPagesr8   Nr=   rB   rB   rB   rC   r¿   [  rD   r¿   c                   @   r5   )ÚESENT_INDEX_ENTRY))ÚRecordPageKeyrM   Nr=   rB   rB   rB   rC   rÃ   b  rD   rÃ   c                   @   r5   )ÚESENT_DATA_DEFINITION_HEADER))ÚLastFixedSizeú<B=0)ÚLastVariableDataTyperÇ   )ÚVariableSizeOffsetr‰   Nr=   rB   rB   rB   rC   rÅ   g  rD   rÅ   c                   @   s0   e Zd ZdZdZdZdZdZdZdZ	dd„ Z
d	S )
Ú#ESENT_CATALOG_DATA_DEFINITION_ENTRY))ÚFatherDataPageIDr8   )ÚTyper‰   )Ú
Identifierr8   ))Ú
ColumnTyper8   ©Ú
SpaceUsager8   )ÚColumnFlagsr8   )ÚCodePager8   ))r2   r8   )rÏ   )rÏ   )Ú
IndexFlagsr8   )ÚLocaler8   ))ÚTrailingrM   c                 C   sð   t d|dd … d d… ƒd }| j| _|tkr#|  j| j| j 7  _nE|tkr0|  j| j7  _n8|tkr@|  j| j| j	 7  _n(|t
krP|  j| j| j 7  _n|tkrXtdƒ‚t d| ¡ d| _t | |¡ |  j| j7  _t | |¡ d S )Nr-   r   r   r   zCallBack types not supported!zUnknown catalog type 0x%xrB   )r   ÚfixedrA   ÚCATALOG_TYPE_TABLEÚotherÚtable_stuffÚCATALOG_TYPE_COLUMNÚcolumn_stuffÚCATALOG_TYPE_INDEXÚindex_stuffÚCATALOG_TYPE_LONG_VALUEÚlv_stuffÚCATALOG_TYPE_CALLBACKÚ	Exceptionr   Úerrorr   r˜   r”   )r™   r�   ÚdataTyperB   rB   rC   r˜   ™  s"   z,ESENT_CATALOG_DATA_DEFINITION_ENTRY.__init__N)r>   r?   r@   rÖ   rÛ   rØ   rÙ   rÝ   rß   r”   r˜   rB   rB   rB   rC   rÊ   n  s    rÊ   c                 C   s   | d8 } | d } | S )Nl     }*{Gíi€–˜ rB   )ÚtrB   rB   rC   ÚgetUnixTime²  s   rå   c                   @   s6   e Zd Zddd„Zdd„ Zdd„ Zdd	„ Zd
d„ ZdS )Ú
ESENT_PAGENc                 C   sÀ   || _ || _d | _d| _d| _d| _|d ur^t| j d | j d | j d |ƒ| _| jd | _| j d dkrT| j d dkrT| j d d	krT| jd t? pJd| _| jd t@ | _t	| j| jƒ| _d S d S )
Nr   r   rI   ra   rb   rŒ   r’   r    r   )
Ú_ESENT_PAGE__DBHeaderr�   ÚrecordÚtagCountÚtagReservedÚfirstDataTagr�   Ú'FIRST_AVAILABLE_PAGE_TAG_RESERVED_SHIFTÚFIRST_AVAILABLE_PAGE_TAG_MASKÚmin)r™   Údbr�   rB   rB   rC   r˜   ¸  s   "*úzESENT_PAGE.__init__c                 C   s   t | j| jƒS r¸   )Úrangerë   ré   ©r™   rB   rB   rC   ÚiterDataTagNumsÇ  ó   zESENT_PAGE.iterDataTagNumsc                 C   s¬   | j d }|t@ rtdƒ |t@ rtdƒ |t@ rtdƒ ntdƒ |t@ r*tdƒ |t@ r2tdƒ |t@ r:tdƒ |t@ rBtd	ƒ |t	@ rJtd
ƒ |t
@ rTtdƒ d S d S )Nr�   z	Emptyz	Indexz	Leafz	Branchz	Long Valuez	New Checksumz	New Formatz	Parentz	Rootz	Space Tree)rè   ÚFLAGS_EMPTYÚprintÚFLAGS_INDEXÚ
FLAGS_LEAFÚFLAGS_LONG_VALUEÚFLAGS_NEW_CHECKSUMÚFLAGS_NEW_FORMATÚFLAGS_PARENTÚ
FLAGS_ROOTÚFLAGS_SPACE_TREE)r™   r¶   rB   rB   rC   Ú
printFlagsÊ  s*   

ÿzESENT_PAGE.printFlagsc                 C   s  t | jƒ}| j ¡  | jd| j d … }tdƒ |  ¡  tƒ  t| jƒD ]�}|dd … }| jd dkrz| jd dkrz| jd dkrzt	d	|d d
… ƒd d@ }t	d	|d
d … ƒd d@ }t
| j|| d … d d… ƒ t| j|| d … d ƒd? }n)t	d	|d d
… ƒd d@ }t	d	|d
d … ƒd d@ d? }t	d	|d
d … ƒd d@ }td||||f ƒ |d d… }q$| jd t@ dkrËt|  d¡d ƒ}| ¡  n:| jd t@ dkrä|  d¡\}	}
t|
ƒ}| ¡  n!|  d¡\}	}
| jd t@ dkrýt|
ƒ}| ¡  nt|
ƒ}| ¡  |  ¡ D ]|}|  |¡\}	}
| jd t@ dk�r't|	|
ƒ}| ¡  �q	| jd t@ dk�r„| jd t@ dk�rAt|
ƒ}�q	| jd t@ dk�rQt|
ƒ}�q	| jd t@ dk�r_tdƒ‚t|	|
ƒ}t|d ƒ}| ¡  t|d t |ƒd … ƒ}| ¡  t
|d ƒ �q	d S )NéüÿÿÿzFLAGS: rI   r’   ra   r   rb   r   r-   r   r   éÿ  r   r   r   éÿ  é à  r   z2TAG %-8d offset:0x%-6x flags:0x%-4x valueSize:0x%xr�   zLong value still not supportedr½   )Úlenrè   Údumpr�   ré   rõ   rþ   rð   rç   r   r   Úordrü   rž   ÚgetTagr÷   r£   rý   r¾   r»   rò   r§   r¿   rö   rÃ   rø   rá   r¼   rÅ   rÊ   )r™   Ú
baseOffsetÚtagsÚiÚtagÚ	valueSizeÚvalueOffsetÚ	pageFlagsÚ
rootHeaderr¶   r�   ÚbranchHeaderÚspaceTreeHeaderÚ
leafHeaderÚtagNumÚbranchEntryÚspaceTreeEntryÚ
indexEntryÚ	leafEntryÚdataDefinitionHeaderÚcatalogEntryrB   rB   rC   r  á  sf   

* 




€åzESENT_PAGE.dumpc                 C   s‚  | j |krtd| ƒ‚| jd| j  d … }t| jƒ}t|ƒD ]}|d d… }q|dd … }| jd dkr‡| jd dkr‡| jd dkr‡td	|d d
… ƒd d@ }td	|d
d … ƒd d@ }t| j|| d … d |… ƒ}|d d? }	|dd
… d d@ |d< t	|ƒ}|}
|	|
fS td	|d d
… ƒd d@ }td	|d
d … ƒd d@ d? }	td	|d
d … ƒd d@ }| j|| d … d |… }
|	|
fS )Nz"Trying to grab an unknown tag 0x%xrÿ   rI   r’   ra   r    rb   r   r-   r   r   r   r   r   é   r  r  r   )
ré   rá   r�   r  rè   rð   rç   r   Ú	bytearrayÚbytes)r™   r  r  r  r	  r
  r  r  ÚtmpDatar  ÚtagDatarB   rB   rC   r  .  s*   

*úzESENT_PAGE.getTagr¸   )r>   r?   r@   r˜   rò   rþ   r  r  rB   rB   rB   rC   ræ   ·  s    
Mræ   c                   @   sŠ   e Zd Zd"dd„Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ Zd#dd„Zd#d d!„ZdS )$ÚESENT_DBr   Fc                 C   s>   || _ || _d | _d | _d | _tƒ | _d | _|| _|  	¡  d S r¸   )
Ú_ESENT_DB__fileNameÚ_ESENT_DB__pageSizeÚ_ESENT_DB__DBÚ_ESENT_DB__DBHeaderÚ_ESENT_DB__totalPagesr   Ú_ESENT_DB__tablesÚ_ESENT_DB__currentTableÚ_ESENT_DB__isRemoteÚmountDB)r™   ÚfileNamerœ   ÚisRemoterB   rB   rC   r˜   K  s   zESENT_DB.__init__c                 C   sÆ   t  d¡ | jdu r| j| _| j ¡  nt| jdƒ| _|  d¡}t|ƒ| _| jd | _	| j 
dd¡ | j ¡ | j	 d | _t  d| jd	 | jd
 f ¡ t  d| j	 ¡ t  d| j ¡ |  t¡ d S )NzMounting DB...TÚrbéÿÿÿÿrb   r   r   z$Database Version:0x%x, Revision:0x%xrI   ra   zPage Size: %dzTotal Pages in file: %d)r   Údebugr&  r  r!  ÚopenÚgetPagerE   r"  r   ÚseekÚtellr#  ÚparseCatalogÚCATALOG_PAGE_NUMBER)r™   Ú
mainHeaderrB   rB   rC   r'  V  s   



zESENT_DB.mountDBc              
   C   s,  d}t d| jd | jd f ƒ t d| j ƒ t d| j ƒ t ƒ  t d| j ƒ t| j ¡ ƒD ]d}t d| d	¡ ƒ t d
| ƒ t| j| d  ¡ ƒD ]"}| j| d | d }t d|d |d | d¡t	|d  f ƒ qKt d| ƒ t| j| d  ¡ ƒD ]}t d|d | d¡f ƒ qt dƒ q/d S )Nz    zDatabase version: 0x%x, 0x%xrI   ra   zPage size: %d zNumber of pages: %dzCatalog for %sz[%s]Úutf8z
%sColumns ÚColumnsÚRecordz%s%-5d%-30s%sr   rÍ   zutf-8rÎ   z	%sIndexesÚIndexesz%s%sÚ )
rõ   r"  r   r#  r  Úlistr$  ÚkeysÚdecodeÚColumnTypeToName)r™   ÚindentÚtableÚcolumnrè   ÚindexrB   rB   rC   ÚprintCatalogg  s"   ,
÷zESENT_DB.printCatalogc                 C   s0  t |d ƒ}t|d t|ƒd … ƒ}|  |¡}|d tkrGtƒ | j|< || j| d< tƒ | j| d< tƒ | j| d< tƒ | j| d< || _d S |d tkrq|| j| j d |< || j| j d | d< || j| j d | d< d S |d t	krƒ|| j| j d |< d S |d t
kr�|  |¡ d S td	|d  ƒ‚)
Nr½   rÌ   Ú
TableEntryr5  r7  Ú
LongValuesÚHeaderr6  zUnknown type 0x%x)rÅ   rÊ   r  Ú_ESENT_DB__parseItemNamer×   r   r$  r%  rÚ   rÜ   rÞ   Ú_ESENT_DB__addLongValuerá   )r™   Úentryr  r  ÚitemNamerB   rB   rC   Ú	__addItemz  s&   

zESENT_DB.__addItemc                 C   s€   t |d ƒ}|d dkr|d d }n|d }td|d |d d … d d… ƒd }|d |d d … d| d … d |… }|S )Nr½   rÈ   é   r-   rÉ   r   r   )rÅ   r   )r™   rG  r  Ú
numEntriesÚitemLenrH  rB   rB   rC   Ú__parseItemName‘  s   &(zESENT_DB.__parseItemNamec                 C   sn   t |d ƒ}td|d |d d … d d… ƒd }|d |d d … dd … d |… }|| j| j d |< d S )Nr½   r-   rÉ   r   r   r   rC  )rÅ   r   r$  r%  )r™   rG  r  ÚlvLenÚlvNamerB   rB   rC   Ú__addLongValue�  s   &$zESENT_DB.__addLongValuec                 C   s‚   |  ¡ D ]:}| |¡\}}|jd t@ dkr>|jd t@ dkr q|jd t@ dkr*q|jd t@ dkr4qt||ƒ}|  |¡ qd S )Nr�   r   )	rò   r  rè   r÷   rý   rö   rø   r¼   Ú_ESENT_DB__addItem)r™   Úpager  r¶   r�   r  rB   rB   rC   Ú	parsePage£  s   

€ózESENT_DB.parsePagec                 C   s^   |   |¡}|  |¡ | ¡ D ]}| |¡\}}|jd t@ dkr,t||ƒ}|  |d ¡ qd S )Nr�   r   r°   )r.  rS  rò   r  rè   r÷   r§   r1  )r™   ÚpageNumrR  r	  r¶   r�   r  rB   rB   rC   r1  ´  s   


€ûzESENT_DB.parseCatalogc                 C   s   t  d| j ¡ d S )NzReading Boot Sector for %s)r   r,  Ú_ESENT_DB__volumeNamerñ   rB   rB   rC   Ú
readHeaderÁ  s   zESENT_DB.readHeaderc                 C   s”   t  d||d | j f ¡ | j |d | j d¡ | j | j¡}t|ƒ| jk r>| jt|ƒ }|| j |¡7 }t|ƒ| jk s(|dkrD|S t| j|ƒS )NzTrying to fetch page %d (0x%x)r   r   )	r   r,  r   r!  r/  Úreadr  ræ   r"  )r™   rT  r�   Ú	remainingrB   rB   rC   r.  Ä  s   þzESENT_DB.getPagec                 C   s   | j  ¡  d S r¸   )r!  Úcloserñ   rB   rB   rC   rY  Ñ  ró   zESENT_DB.closec                 C   s  t |tƒdurt|ƒ}|| jv r„| j| d }t|d ƒ}t|d t|ƒd … ƒ}|d }d}|du rh|  |¡}|j|j	kr@d}| 
¡ D ]}| |¡\}	}
|jd t@ dkrat|	|
ƒ}|d } nd} |du s3t}| j| |d	< |d |d< ||d
< |j	d |d< |S d S )NTrB  r½   r2   Fr�   r   r°   r1   r3   r   r4   )Ú
isinstancer  r
   r$  rÅ   rÊ   r  r.  ré   rë   rò   r  rè   r÷   r§   ÚTABLE_CURSOR)r™   Ú	tableNamerG  r  r  rT  ÚdonerR  r	  r¶   r�   r  ÚcursorrB   rB   rC   Ú	openTableÔ  s8   


òzESENT_DB.openTablec                 C   sž   |d }|d |j krd S | |d ¡\}}|jd t@ dkrM|jd t@ dkr,tdƒ‚|jd t@ dkr9tdƒ‚|jd t@ dkrFtdƒ‚t||ƒ}|S d S )Nr3   r4   r�   r   zFLAGS_SPACE_TREE > 0zFLAGS_INDEX > 0zFLAGS_LONG_VALUE > 0)	ré   r  rè   r÷   rý   rá   rö   rø   r¼   )r™   r^  rR  r¶   r�   r  rB   rB   rC   Ú__getNextTagû  s   
zESENT_DB.__getNextTagNc                 C   s„   |d  d7  < |   |¡}|d u r8|d }|jd dkrd S |  |jd ¡|d< |d jd |d< | j||d�S | j||d |d�S )Nr4   r   r3   r†   r   )Úfilter_tablesr½   )Ú_ESENT_DB__getNextTagrè   r.  rë   Ú
getNextRowÚ_ESENT_DB__tagToRecord)r™   r^  ra  r
  rR  rB   rB   rC   rc    s   
zESENT_DB.getNextRowc           %      C   sH  t ƒ }t ƒ }d}t|ƒ}|d d d }d}	t|ƒ}
t|ƒ}|d }|d d }t| ¡ ƒD �]r}|d ur:||vr:q.|| d	 }|d
 |d kr^||d … d |d … ||< ||d 7 }�n§d|d
   k rl|d kr°n nB|d
 d d }td|||d  d … d d… ƒd }|d@ r”|	}d ||< n||| d … d ||	 … }|||< |||	 7 }|}	�nU|d
 dk�r|du �r…|| |
k �r…|| }| j}td||d d … d d… ƒd d@ | | }	 td||d … d d… ƒd }|d7 }td||d … d d… ƒd d@ }| jd dk�r!| jd dk�r!| jd dk�r!d}ntd||d … d d… ƒd d@ }|d7 }||k �r=|}||
|f||< ||k�rJnqât| ¡ ƒd }tdt|ƒƒD ](}|| \}}}t| 	¡ ƒ| d \}}}||| |f||< t| ¡ ƒ| }�qZd}|d
 |v �rü|| ||d
  d  }||d
  d } ||d
  d dk�r¾t
|||d … ƒ}!|d7 }| d8 } nd}!|!t@ �rÓt d||!f ¡ d ||< n2|!t@ �rït d| ¡ t||d … d | … ƒf||< n||d … d | … ||< n	d ||< nd ||< t|| ƒtu �r|| d ||< q.|d tk�s%|d tk�rw|| d u�rv|d tv�r;td|d  ƒ‚t|d  }"z||  |"¡||< W q. t�yu   tjddd � t d!||d || f ¡ ||  |"d"¡||< Y q.w q.t|d  }#|| d u�r¡|#d u �r’t|| ƒ||< q.|#d }$t|$|| ƒd ||< q.|S )#NFrÈ   rJ  r   r   rÉ   r1   r5  r6  rÍ   rÆ   rÐ   r   r-   i €  éÿ   iÿ?  TrI   r’   ra   r    rb   r   i @  z%Unsupported tag column: %s, flag:0x%xz7Multivalue detected in column %s, returning raw resultsrÎ   rÒ   zUnknown codepage 0x%xz
Exception:)Úexc_infozFixing Record[%r][%d]: %rÚreplace)r   rÅ   r  r9  r:  r   r   r"  rð   Úitemsr  ÚTAGGED_DATA_TYPE_COMPRESSEDr   râ   ÚTAGGED_DATA_TYPE_MULTI_VALUEr,  r	   ÚtypeÚtupleÚJET_coltypTextÚJET_coltypLongTextÚStringCodePagesrá   r;  ÚColumnTypeSize)%r™   r^  r
  ra  rè   ÚtaggedItemsÚtaggedItemsParsedr  ÚvariableDataBytesProcessedÚprevItemLenÚtagLenÚfixedSizeOffsetÚvariableSizeOffsetÚcolumnsr?  ÚcolumnRecordr@  rL  Ú	itemValueÚendOfVSÚfirstOffsetTagÚtaggedIdentifierÚtaggedOffsetÚflagsPresentÚprevKeyr	  Úoffset0Úlengthr¶   ÚoffsetÚ_Ú
offsetItemÚitemSizeÚitemFlagÚstringDecoderÚ
unpackDataÚ	unpackStrrB   rB   rC   Ú__tagToRecord%  s¾    &
."0"

ï



 
üù
€zESENT_DB.__tagToRecord)r   Fr¸   )r>   r?   r@   r˜   r'  rA  rQ  rE  rF  rS  r1  rV  r.  rY  r_  rb  rc  rd  rB   rB   rB   rC   r  J  s     
'
r  )_Ú
__future__r   r   Úimpacketr   Úcollectionsr   Úimpacket.structurer   r   Ústructr   Úbinasciir	   Úsixr
   ÚFILE_TYPE_DATABASEÚFILE_TYPE_STREAMING_FILEÚJET_dbstateJustCreatedÚJET_dbstateDirtyShutdownÚJET_dbstateCleanShutdownÚJET_dbstateBeingConvertedÚJET_dbstateForceDetachrü   r÷   rû   rô   rý   rö   rø   rú   rù   rí   rì   ÚTAG_UNKNOWNÚTAG_DEFUNCTr´   ÚDATABASE_PAGE_NUMBERr2  ÚCATALOG_BACKUP_PAGE_NUMBERÚDATABASE_FDPÚCATALOG_FDPÚCATALOG_BACKUP_FDPr×   rÚ   rÜ   rÞ   rà   ÚJET_coltypNilÚJET_coltypBitÚJET_coltypUnsignedByteÚJET_coltypShortÚJET_coltypLongÚJET_coltypCurrencyÚJET_coltypIEEESingleÚJET_coltypIEEEDoubleÚJET_coltypDateTimeÚJET_coltypBinaryrm  ÚJET_coltypLongBinaryrn  ÚJET_coltypSLVÚJET_coltypUnsignedLongÚJET_coltypLongLongÚJET_coltypGUIDÚJET_coltypUnsignedShortÚJET_coltypMaxr<  rp  ÚTAGGED_DATA_TYPE_VARIABLE_SIZEri  ÚTAGGED_DATA_TYPE_STOREDrj  ÚTAGGED_DATA_TYPE_WHO_KNOWSÚCODEPAGE_UNICODEÚCODEPAGE_ASCIIÚCODEPAGE_WESTERNro  r[  r6   rE   r�   rž   r£   r§   r»   r¼   r¾   r¿   rÃ   rÅ   rÊ   rå   ræ   r  rB   rB   rB   rC   Ú<module>   sR  ÿþýüûúùø	÷
öõôóòñðïíÿþýüûúùø	÷
öõôóòñðïíý	ü<-D 