Ë
    î$f]  ã                   óv   — d dl mZmZ d dlmZ d dlmZ d dlmZ  G d„ dej                  j                  «      Zy)é    )Ú
interfacesÚ	renderers)Úrequirements)Úformat_hints)Úpslistc                   óN   — e Zd ZdZdZed„ «       Zdeddfd„Z	 dde	d	e
fd
„Zd„ Zy)ÚPsTreezLPlugin for listing processes in a tree based on their parent process
    ID.)é   r   r   c           
      ó  — t        j                  ddg d¢¬«      t        j                  dt        j                  d¬«      t        j
                  dd	t        d
¬«      t        j                  ddd
d¬«      t        j                  ddd
d¬«      gS )NÚkernelzLinux kernel)ÚIntel32ÚIntel64ÚAArch64)ÚnameÚdescriptionÚarchitecturesr   )r
   r
   r   )r   ÚpluginÚversionÚpidzFilter on specific process IDsT)r   r   Úelement_typeÚoptionalÚthreadszInclude user threadsF)r   r   r   ÚdefaultÚdecorate_commzXShow `user threads` comm in curly brackets, and `kernel threads` comm in square brackets)r   ÚModuleRequirementÚPluginRequirementr   ÚPsListÚListRequirementÚintÚBooleanRequirement)Úclss    ú\/home/panchajanya/Development/work/volatility3/volatility3/framework/plugins/linux/pstree.pyÚget_requirementszPsTree.get_requirements   s”   € ô ×*Ñ*ØØ*Ú?ôô
 ×*Ñ*Ø¤f§m¡m¸Yôô ×(Ñ(ØØ<Ü Øô	ô ×+Ñ+ØØ2ØØô	ô ×+Ñ+Ø$ØvØØô	ð+
ð 	
ó    r   ÚreturnNc                 ó*  — t        |g«      }d}| j                  j                  |«      }|rÙ|j                  rÍ|j                  j                  |vrµ|j
                  r|j                  j                  }n|j                  }| j                  j                  |t        «       «      }|j                  |j                  «       | j                  j                  |«      }|dz  }|r%|j                  r|j                  j                  |vrŒµ|| j                  |<   y)zFinds how deep the PID is in the tasks hierarchy.

        Args:
            pid: PID to find the level in the hierarchy
        r   é   N)ÚsetÚ_tasksÚgetÚparentr   Úis_thread_group_leaderÚtgidÚ	_childrenÚ
setdefaultÚaddÚ_levels)Úselfr   ÚseenÚlevelÚprocÚ
parent_pidÚ
child_lists          r"   Ú
find_levelzPsTree.find_level1   sÊ   € ô C5‹zˆØˆØ{‰{‰˜sÓ#ˆÙt—{’{ t§{¡{§¡¸dÑ'BØ×*Ò*Ø!Ÿ[™[Ÿ_™_‘
à!ŸY™Y
àŸ™×2Ñ2°:¼s»uÓEˆJØN‰N˜4Ÿ8™8Ô$à—;‘;—?‘? :Ó.ˆDØQ‰JˆEñ t—{’{ t§{¡{§¡¸dÒ'Bð "ˆ‰SÒr$   Útasksr   c              #   óB  ‡ ‡‡K  — i ‰ _         i ‰ _        i ‰ _        |D ]  }|‰ j                   |j                  <   Œ ‰ j                   D ]  }‰ j	                  |«       Œ ˆˆ ˆfd„Š‰ j                  j                  «       D ]  \  }}|dk(  sŒ ‰|«      E d{  –—†  Œ y7 Œ­w)a  Generates the tasks hierarchy tree.

        Args:
            tasks: A list of task objects to be displayed
            decorate_comm: If True, it decorates the comm string of
                            - User threads: in curly brackets,
                            - Kernel threads: in square brackets
                           Defaults to False.
        Yields:
            Each rows
        c              3   óf  •K  — ‰j                   |    }t        j                  j                  |‰«      }t	        j
                  |d   «      f|dd  z   }|j                  }‰j                  |   dz
  |f–— t        ‰j                  j                  |g «      «      D ]  } ‰|«      E d {  –—†  Œ y 7 Œ­w)Nr   r'   )r)   r   r   Úget_task_fieldsr   ÚHexr   r1   Úsortedr.   r*   )r   ÚtaskÚrowÚtidÚ	child_pidr   r2   Úyield_processess        €€€r"   rC   z*PsTree._generator.<locals>.yield_processesd   s§   øè ø€ Ø—;‘;˜sÑ#ˆDä—-‘-×/Ñ/°°mÓDˆCô  ×#Ñ# C¨¡FÓ+Ð-°°A°B°Ñ7ˆCà—(‘(ˆCØ—<‘< Ñ$ qÑ(¨#Ð.Ò.ä# D§N¡N×$6Ñ$6°s¸BÓ$?Ó@ò 6	Ù*¨9Ó5×5Ñ5ñ6Ø5ús   ƒB$B1Â'B/Â(B1r'   N)r)   r1   r.   r   r8   Úitems)r2   r9   r   r5   r   r4   rC   s   ` `   @r"   Ú
_generatorzPsTree._generatorH   sŸ   úè ø€ ð" ˆŒØˆŒØˆŒàò 	)ˆDØ$(ˆDK‰K˜Ÿ™Ò!ð	)ð —;‘;ò 	!ˆCØO‰O˜CÕ ð	!ö	6ð Ÿ,™,×,Ñ,Ó.ò 	0‰JˆCØ˜‹zÙ*¨3Ó/×/Ñ/ñ	0à/ús   …BBÂ
BÂBÂBc                 óø  — t         j                  j                  | j                  j	                  dd «      «      }| j                  j	                  d«      }| j                  j	                  d«      }t        j                  dt        j                  fdt        fdt        fdt        fdt        fg| j                  t         j                  j                  | j                  | j                  d	   ||¬
«      |¬«      «      S )Nr   r   r   z
OFFSET (V)ÚPIDÚTIDÚPPIDÚCOMMr   )Úfilter_funcÚinclude_threads)r   )r   r   Úcreate_pid_filterÚconfigr*   r   ÚTreeGridr   r=   r   ÚstrrE   Ú
list_tasksÚcontext)r2   rK   rL   r   s       r"   Úrunz
PsTree.runv   sÓ   € Ü—m‘m×5Ñ5°d·k±k·o±oÀeÈTÓ6RÓSˆØŸ+™+Ÿ/™/¨)Ó4ˆØŸ™Ÿ™¨Ó8ˆä×!Ñ!àœ|×/Ñ/Ð0ØœØœØœØœðð O‰OÜ—‘×(Ñ(Ø—L‘LØ—K‘K Ñ)Ø +Ø$3ð	 )ó ð ,ð ó ó
ð 	
r$   )F)Ú__name__Ú
__module__Ú__qualname__Ú__doc__Ú_required_framework_versionÚclassmethodr#   r   r8   ÚlistÚboolrE   rS   © r$   r"   r	   r	      sV   „ ñð #,Ðàñ
ó ð
ð>"˜cð " dó "ð4 $ñ,0àð,0ð ó,0ó\
r$   r	   N)Úvolatility3.frameworkr   r   Ú#volatility3.framework.configurationr   Úvolatility3.framework.renderersr   Úvolatility3.plugins.linuxr   ÚpluginsÚPluginInterfacer	   r\   r$   r"   ú<module>rc      s-   ð÷
 8Ý <Ý 8Ý ,ôA
ˆZ×Ñ×/Ñ/õ A
r$   