� c��j|�� ��� dZdZddlZddlZddlZddlZddlZddlZddddddddd d d � Zd �Z dFd �Z dGd�Z dHd�Z ddl Z d�Zgd�Zgd�Zd�Zd�Zd�ZdId�Zd�ZdJd�Zd�ZdKd�Zd�Zd�ZdGd�Zd �ZdGd!�Zd"d#d$d�Zej@d d fd%�Z!d&�Z"Gd'�d(�Z#d)�Z$Gd*�d+ejJd,d-��Z&da'd.�Z(d/�Z)d0�Z*d1�Z+d2�Z,d3�Z-d4�Z.iZ/dLd5�Z0d6�Z1d7�Z2d8�Z3d9�Z4d:�Z5d;�Z6d<�Z7iZ8dMd=�Z9d>Z:da;d?�ZdAk(r^dBej~vxsdCej~vZ@dDej~vxrdEej~vZAeBe9eAe@��ej�d�yy#e$rd�ZY��(wxYw)Na Copyright (c) 1999-2000, Marc-Andre Lemburg; mailto:[email protected] Copyright (c) 2000-2010, eGenix.com Software GmbH; mailto:[email protected] Permission to use, copy, modify, and distribute this software and its documentation for any purpose and without fee or royalty is hereby granted, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation or portions thereof, including modifications, that you make. EGENIX.COM SOFTWARE GMBH DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE ! z1.0.8�N� ���(�2��) �dev�alpha�a�beta�b�c�RC�rc�pl�pc���tjd�}g}|j|�D])}|dvs� t|d�}d}|j||f��+|S#t$rt j |d�}Y�8wxYw)Nz([0-9]+|[._+-])z._+-r�dr)�re�compile�split�int� ValueError� _ver_stages�get�extend)�version� component_re�result�v�ts �!/usr/lib64/python3.12/platform.py�_comparable_versionr#�s����:�:�0�1�L� �F� � � �� (�� �F�?� *���2�J���� �M�M�1�a�&� !�)� �M��� *��O�O�A�q�)�� *�s�A�A9�8A9�c�r� |sX tjd�}|jd��}t|�dk(r t |�S tj}|s||fStjdtj�}t}tjj|�}t!|d�5}|j#|�} d} | t| �k�r*d| vsd | vr|j%| | �} nd} | r| j'�t| �k(r7|j#|�} | r!| t)| t| �d z �d| z} d} �~| sn�| j+�D� cgc]} | �| j-d �n| ��c} \}}}}}}|r|sd }nY|r|d k7rd }|}nM||�||�kDr<|}n9|r7|d k7r2d }|r|r||�||�kDr|}|r|t|� d|k7r||z}| j'�} | t| �kr��*ddd�||fS#t t tf$rY���wxYwcc} w#1swY||fSxYw)N�CS_GNU_LIBC_VERSION�)�maxsplit�sC(__libc_init)|(GLIBC_([0-9.]+))|(libc(_\w+)?\.so(?:\.(\d[0-9.]*))?)�rbrslibcsGLIBCi��latin1�libc�glibc)�os�confstrr�len�tuple�AttributeErrorr�OSError�sys� executablerr�ASCIIr#�path�realpath�open�read�search�end�max�groups�decode)r5�libr� chunksize�ver�parts� libc_search�V�f�binary�pos�m�chunk�s�libcinitr-� glibcversion�so�threads� soversions r"�libc_verrQ�si�� � � ��*�*�2�3�C��I�I�q�I�)�E��5�z�Q���U�|�#�� �^�^� ����<� ��*�*�B�DF�8�8� M�K� �A����!�!�*�-�J� �j�$� �1���� �"�����C��K���&� �H��$6��&�&�v�s�3���������3�v�;�.����y�)���#�C��S��[�4�-?�$@�$A�B�U�J�F��C��������E%�#�A�'(�m�����"��:�#�E%� A�H�e�\�2�w� �������'�>�!�C�*�G��|�_�q��z�1�*�G���'�>� �C� �'�Q�y�\�A�g�J�5N�"+���7�C��L�=�>�#:�g�#E�")�G�"3���%�%�'�C�?�C��K�� �F ��<���q� �G�4� � � ��JE%�! �F ��<��s1�?H �1B'H*�H%�4BH*� H"�!H"�%H*�*H6c ��� |jd�}|r|j|� ttttt |���}dj|dd�}|S#t $r|}Y�#wxYw)N�.�)r�append�list�map�strrr�join)r�build�l�stringss r"� _norm_versionr]�sr��� � � �c��A� � �������s�3��C�� �,�-���h�h�w�r��{�#�G� �N�� �����s�'A$�$ A2�1A2��win32�win16�dosc ��� tj|vr|||fSddl}dD]/} |j||j|jddd��}n|||fStjd�}|j�}|j|�} | �9| j�\}}}|ddk(r|dd}|ddk(r|dd}t|�}|||fS#t |j f$r }Yd}~��d}~wwxYw) Nr)rBzcommand /c verz cmd /c verT�locale)�stdin�stderr�text�encoding�shellz'(?:([\w ]+) ([\w.]+) .*\[.* ([\d.]+)\])�����rS) r4�platform� subprocess� check_output�DEVNULLr3�CalledProcessErrorrr�strip�matchr>r]) �system�releaser�supported_platformsrk�cmd�info�why� ver_outputrIs r"� _syscmd_verrxs+�� � �|�|�.�.��w��'�'��6�� ��*�*�3�1;�1C�1C�2<�2D�2D�04�4<�15� +�7�D� �7��w��'�'����-�.�J� �:�:�<�D������A��}�#$�8�8�:� ���� �2�;�#� ��c�r�l�G� �2�;�#� ��c�r�l�G� ��(�� �7�G� #�#��3��6�6�7� � �� �s�+C � C+�&C+c����ddd�|}tjdjdj|�|��j d�}d�|D�}|D�cic] }|d|d �� c}��fd �|D�Scc}w) N�Win32_OperatingSystem�Win32_Processor)�OS�CPUzSELECT {} FROM {}�,�c3�>K�|]}|jd����y�w)�=N)� partition)�.0�is r"� z_wmi_query..Ks����5��1�a�k�k�#�&��s�rr)c3�(�K�|] }�|��� y�w�N�)r��k� dict_datas �r"r�z_wmi_query..Ms�����+�d�� �!� �d�s�)�_wmi� exec_query�formatrYr)�table�keys�data� split_datar�r�s @r"� _wmi_queryr�Bs����)�$� � ������2�9�9� �H�H�T�N� � � � �5��;� �6��5� �)3�4��A�Q�q�T�1�Q�4�Z��4� �+�d�+�+��5s�A8c��td��)Nz not supported)r3)r�s r"r�r�?s ���o�&�&�) )�rr'r�post11))rri�U�11)���r�10)�r�rTrz8.1)�r�r)r�8)�r�r'r�7)�r�rr�Vista))�r)i��XP64)�r�r)r�XPMedia))r�r'r�XP)�r�rr�2000) )r��post2025Server))rri�e� 2025Server))rri|O� 2022Server))rricE� 2019Server)r�� 2016Server)r�� 2012ServerR2)r�� 2012Server)r�� 2008ServerR2)r�� 2008Server)r�� 2003Server)r�� 2000Serverc��t�dvS)N)�IoTUAP� NanoServer�WindowsCoreHeadless� IoTEdgeOS)� win32_editionr�r�r"� win32_is_iotr�ls�� �?�Z� Z�Zr�c�� ddl} d}|j|j|�5}|j |d�dcddd�S#t$rddl}Y�MwxYw#1swYnxYw y#t $rYywxYw#t$rYywxYw)Nr�,SOFTWARE\Microsoft\Windows NT\CurrentVersion� EditionId)�winreg� ImportError�_winreg� OpenKeyEx�HKEY_LOCAL_MACHINE� QueryValueExr3)r��cvkey�keys r"r�r�os��� � %� �  �C�E��!�!�&�";�";�U�C�s��*�*�3� �<�Q�?�D�C��� %� $� %��D�C��C� ��� � � � �� � � � � �sP�A�A&�A� A&� A�A5�A�A5�A!�A&�& A2�1A2�5 B�Bc�|� tdddddd�\}}}}}t|�dk(}|r|dk7r d |�d |��}nd |��}||||fS#t$rYnwxYw d d lm}n#t $r |||d fcYSwxYw|�}t |dd�dk(} t�d}tt|jd ��\} } } n9#t$r-|jxs|dd\} } } dj| | | �}YnwxYw|dd| | fk(r< dj|j�}n#t$r|dddk(rd |ddz}YnwxYw d dl} n#t $rd dl} YnwxYw d} | j#| j$| �5}| j'|d�d }ddd�n #1swYnxYwn#t$rYnwxYw#t $rYnwxYw||||fS)Nr|�Version� ProductType� BuildType�ServicePackMajorVersion�ServicePackMinorVersionr'�0�SPrSr)�getwindowsversionT� product_typer)rTz {0}.{1}.{2}zSP{}� z Service Pack r�� CurrentType)r�rr3r4r�r��getattrrxrWrr�platform_versionr��service_pack_majorr2r�r�r�r�r�)r�csd�ptyper��spmajor�spminor� is_clientr��winver�major�minorrZr�r�r�s r"� _win32_verr��s*�� �A� A � A �A�A*�)A*�0B6�63C,�+C,�:D�D2�1D2�7D<�;F)�< E � F)� E � F)�F�.F � F� F�F� F&�%F&�) F5�4F5c����d}t|||�\}}}}|rKttt|j d����|rt nt }t�fd�|D�|�}||||fS)NFrSc3�4�K�|]\}}|�ks� |���y�wr�r�)r�r �r� intversions �r"r�zwin32_ver..�s�����B�h�d�a��!�z�/��h�s� �)r�r1rWrr�_WIN32_CLIENT_RELEASES�_WIN32_SERVER_RELEASES�next)rrrr�r�r��releasesr�s @r"� win32_verr��sh����I�%/���e�%D�"�G�S�%����3�s�G�M�M�#�$6�7�8� �-6�)��>�"� ���� �b�$��1� �]�]�1� �� ��!�"�G��K��h�h�j� � �G��,�,��� �K�� (�(�� ����� ��s�A>�B �> B � B � Bc�*� t�}|�|S|||fSr�)r�)rrr�r�rus r"�mac_verr��s*��� �>�D� ��� � �K�� (�(r�c�`�ddlm} |j|�}|�|S|S#t$r|cYSwxYw)Nr)�System)� java.langr�� getPropertyr2)�name�defaultr��values r"� _java_getpropr��s=�� ���"�"�4�(�� �=��N�� �� �����s��� -�-c�0� ddl}td|�}td|�}|\}}}td|�}td|�}td|�}|||f}|\}} } td| �} td|�}td | �} || | f}||||fS#t$r ||||fcYSwxYw) Nrz java.vendorz java.versionz java.vm.namezjava.vm.vendorzjava.vm.versionz java.os.archz java.os.namezjava.os.version)r�r�r�) rr�vendor�vminfo�osinfo�java�vm_name� vm_release� vm_vendor�os_name� os_version�os_archs r"�java_verr s��� �/���=�&� 1�F��N�G�4�G�%+�"�G�Z���N�G�4�G��.� �:�I��0�*�=�J� �j�)� +�F�#)� �G�Z���N�G�4�G��N�G�4�G��0�*�=�J� �j�'� )�F� �F�F�F� *�*��! �/�����.�.�/�s�B�B�Bc��� |dk(r[|dkr|||fS|jd�}|r3 t|d�}|dz }t|�|d<dj|�}|dkrd}n d}n|dvrd }|||fS#t$rY�!wxYw) N�SunOS�5rSrrT�6�Solaris�r_r`�Windows)rrrXrYr)rqrrrr[r�s r"� system_aliasr#s������� �S�=��7�G�+� +� �M�M�#� �� � &��A�a�D� ���� ���5�z��!���(�(�1�+�� �S�=��F��F� �%� %��� �7�G� #�#��'� �� �s�A-�- A9�8A9c��� djd�tt|�D��}|jdd�}|jdd�}|jdd�}|jdd�}|jdd�}|jd d�}|jd d�}|jd d�}|jd d �} |jdd�}||k(rn|}�|ddk(r|dd}|ddk(r�|S)N�-c3�<K�|]}|j����y�wr�)ro)r��xs r"r�z_platform..Ss����=�+<�a���� �+<�s�� �_�/�\�:�;�"�(�)�unknownr$z--ri)rY�filterr0�replace)�argsrj�cleaneds r"� _platformr%Ms$����x�x�=�6�#�t�+<�=�=�H�����S�)�H�����S�)�H�����c�*�H�����S�)�H�����S�)�H�����S�)�H�����S�)�H�����S�)�H���� �2�.�H� ��"�"�4��-�� �h� � ��� � �2�,�#� ��C�R�=�� �2�,�#� � �Or�c�t� ddl} |j�S#t$r|cYSwxYw#t$r|cYSwxYw�Nr)�socketr�� gethostnamer3)r�r(s r"�_noder*msN�������!�!�#�#�� ������ �����s��)� &�&� 7�7c�� tjj|�}tjj|�r�tjj tjj tjj |�tj|���}tjj|�r��|Sr�)r.r7�abspath�islink�normpathrY�dirname�readlink)�filepaths r"�_follow_symlinksr2|s�����w�w���x�(�H� �'�'�.�.�� "��7�7�#�#� �G�G�L�L�������2�B�K�K��4I� J�L�� �'�'�.�.�� "� �Or�c�L� tjdvr|S ddl}t |�}t t jd��} |jdd|g|j|��}|s|S|jd�S#t$r|cYSwxYw#t|jf$r|cYSwxYw) N)rar_r`r�C)�LC_ALL�filez-b)re�envzlatin-1) r4rjrkr�r2�dictr.�environrlrmr3rnr?)�targetr�rkr7�outputs r"� _syscmd_filer<�s���� �|�|�0�0������f� %�F� �r�z�z�#� &�C���(�(�&�$��)?�0:�0B�0B�-0�)�2�� ��� �=�=�� #�#��# ������ �Z�2�2� 3�����s#�A8�!B �8 B�B� B#�"B#)r$� WindowsPE)r$r)r$�MSDOSc�� |s&ddl}|jd�}t|dz�dz}|r t|d�}nd}|sO|tj k(r)�struct�calcsizerXr<r4r5rj�_default_architecture)r5�bits�linkagerH�size�fileoutr r[s r"� architecturerO�sY���* �����s�#���4�!�8�}�u�$����z�2�.���� ��S�^�^�#� �<�<�0� 0�(����6�D�A�q��������W�}���7�"��g�'E��W�}���7���� �W� ��� ����� ��=�� ��� �� �!�G� ��=���G� ��=�� �7� ��� ��=�� �W� ��� ��=�� � ��=�r�c�� tdd�^}} gd�t|�}|r|St j jdd�xs t j jdd�S#ttf$rY�SwxYw#t$rY�bwxYw)Nr}� Architecture) �x86�MIPS�Alphar�N�ARM�ia64NN�AMD64NN�ARM64�PROCESSOR_ARCHITEW6432r$�PROCESSOR_ARCHITECTURE)r�rr� IndexErrorr3r.r9r)�archrs r"�_get_machine_win32r]s������~�6� ��� ���$�i��D��� � � � ���/��4� 5� � � ���/��4��� �J�'� � � �� � � � �s"�A<�A'�'A9�8A9�< B�Bc�.�eZdZed��Zd�Zd�Zd�Zy)� _Processorc�h�t|dtj��|j�}|�xsdS)N�get_r$)r�r4rj�from_subprocess)�cls�funcs r"rz_Processor.gets-���s�d�3�<�<�.�1�3�3F�3F�G���v�|��r�c�� tddd�\}}|�d|��S#t$r+tjj dt ��cYSwxYw)Nr}� Manufacturer�Caption�, �PROCESSOR_IDENTIFIER)r�r3r.r9rr])� manufacturer�captions r"� get_win32z_Processor.get_win32"sZ�� 0�$.�u�n�i�$P� !�L�'��Y�b���/� /��� P��:�:�>�>�"8�:L�:N�O� O� P�s��1A � A c�f� ddl}|jdd�\}}|dk\rdSdS#t$rYywxYw)NrzSYI$_CPU�rT�VAX)�vms_lib�getsyir�)rp�csid� cpu_numbers r"� get_OpenVMSz_Processor.get_OpenVMS*sG�� ;� � '�~�~�j�!�<� �D�*�(�C�/�7� :�U� :�� � � � �s �$� 0�0c��� ddl} |jddg|jdd��j �S#t$rYywxYw#t |j f$rYywxYw)Nrr�z-pT�utf8)rerfrg)rkr�rlrmror3rn)rks r"rbz_Processor.from_subprocess3s}�� � � � ��*�*��$��!�)�)��� +�� �e�g�  ��� �� ����6�6�7� � � �s �7�.A� A�A�A�AN)�__name__� __module__� __qualname__� classmethodrrlrtrbr�r�r"r_r_s#������0�;�r�r_c��|dk(rdS|S)Nr r$r�)�vals r"�_unknown_as_blankr}Fs��� �!�2�*�s�*r�c�j��eZdZ dZej d��Z�fd�Zed��Z d�Z d�Z d�Z �xZ S)� uname_result)rq�noderrrr�� processorc�<�ttj��Sr�)r}r_r��selfs r"r�zuname_result.processorZs�� ����!1�2�2r�c�^��tjt�|� �|jf�Sr�)� itertools�chain�super�__iter__r�)r�� __class__s �r"r�zuname_result.__iter__^s)������ �G� � � �^�^� � � r�c��t|j�dz }|j|g|���}t|�|dzk7rd|�dt|���}t|��|S)Nr'z Expected z arguments, got )r0�_fields�__new__� TypeError)rc�iterable� num_fieldsr�msgs r"�_makezuname_result._makedsb������%��)� �����S�,�8�,�� �v�;�*�q�.� (��j�\�)9�#�f�+��G�C��C�.� �� r�c��t|�|Sr�)r1)r�r�s r"� __getitem__zuname_result.__getitem__ns���T�{�3��r�c�<�ttt|���Sr�)r0r1�iterr�s r"�__len__zuname_result.__len__qs���5��d��$�%�%r�c�V�tt|�dt|j�dz fS�Nr')rr1r0r�r�s r"� __reduce__zuname_result.__reduce__ts'���U�4�[�)?�#�d�l�l�*;�a�*?�@�@�@r�)rwrxryr�� functools�cached_propertyr�r�rzr�r�r�r�� __classcell__)r�s@r"rrLsQ��� �O�G����3��3� � ���� �&�Ar�r�uname_result_basez#system node release version machinec�� t�tS tj�x\}}}}}}t|�s�|dk(rt�\}}}}|xs t�}|r|s0t|�\}}}|dk(rd}n|dk(r|dk(rd}d|ddk(rd }nd}|d vr|s |dk(rd }nd }d}n.|dd dk(r&t�\}}} } d}dj| �}|s|}|dk(r |r|dk(r|}d}|dk(r |dk(rd}d }|||||f} ttt| ��atS#t$r&tj }t �}dx}x}}d}Y��wxYw)Nr$r�r_zMicrosoft Windowsr� Microsoftz6.0rTr�rrC�16bitr�r�Javarh�OpenVMSr�)� _uname_cacher.r�r2r4rjr*�anyr�r]rxr rYrrWr}) rqr�rrrr��infosr�r�rrr�valss r"r�r�{s��� ������:<�(�(�*�D�/���g�w��%� �u�:� �W� �+4�;� (�G�W�c�5��5�!3�!5�G��G�'2�6�':� $�F�G�W��,�,�"���;�&�7�i�+?� #���G�B�Q�K�'�%�G� �G� �'� '���W�$�%�G�%�G��F� �B�Q�Z�6� !�.6�j� +�G�V�V�V��F��i�i��'�G�� ������'�S�.��G��G�����I�!5����� �4��'�7� 2�D���%6��!=�>�L� ���C �������w��&(�(��(�'�G��� �s�D�+D=�<D=c�,� t�jSr�)r�rqr�r�r"rqrq�s��� �7�>�>�r�c�,� t�jSr�)r�r�r�r�r"r�r��s��� �7�<�<�r�c�,� t�jSr�)r�rrr�r�r"rrrr����� �7�?�?�r�c�,� t�jSr�)r�rr�r�r"rr�r�r�c�,� t�jSr�)r�r�r�r�r"r�r��r�r�c�,� t�jSr�)r�r�r�r�r"r�r�s��� �7� � �r�c�2� |�tj}tj|d�}|�|St j dtj �}tjjd�rWd}|j|�}|�tdt|�z��|j�\}}}}} |�d}tj} n�d|vrYt j d�} d}| j|�}|�tdt|�z��|j�\}}}}d} nQ|j|�}|�td t|�z��|j�\}}}}} d }|�d}n |r|d z|z}ttd �rtj\} } } n)ttd �rtj\} } } nd} d} |j!d�}t#|�dk(r"|j%d�dj'|�}||| | ||| f}|t|<|S)NzL([\w.+]+)\s*\(#?([^,]+)(?:,\s*([\w ]*)(?:,\s*([\w :]*))?)?\)\s*\[([^\]]+)\]?r�Jythonz&failed to parse Jython sys.version: %sr$�PyPyzE([\w.+]+)\s*\(#?([^,]+),\s*([\w ]+),\s*([\w :]+)\)\s*\[PyPy [^\]]+\]?z$failed to parse PyPy sys.version: %sz'failed to parse CPython sys.version: %s�CPythonr�_git� _mercurialrSr)r�)r4r�_sys_version_cacherrrr6rj� startswithrpr�reprr>�hasattrr�r�rr0rUrY)� sys_versionr�sys_version_parserr�rpr�buildno� builddate� buildtimer�compiler�pypy_sys_version_parser�branch�revisionr[s r"� _sys_versionr�s?���&���k�k� � � #� #�K�� 6�F� ��� ���� ��(�(� $�� �|�|���v�&���"�(�(��5�� �=��8��[�!�"�#� #�5:�L�L�N�1���)�Y�� � ��I��<�<�� �;� �"$�*�*� �#!�� ��'�-�-�k�:�� �=��C�!�+�.�/�0� 0�16����.���)�Y���#�(�(��5�� �=��9��[�!�"�#� #��l�l�n� 9���)�Y���� � ��I� �!�C��)�3�I��s�F��!�h�h���6�8� ��l� #�!�n�n���6�8����� � � �c��A� �1�v��{� ���� ��(�(�1�+���G�V�X�w� �8� L�F�&,��{�#� �Mr�c�� t�dSr'�r�r�r�r"�python_implementationr�ts��� �>�!� �r�c�� t�dSr�r�r�r�r"�python_versionr��s��� �>�!� �r�c�N� tt�djd��S)Nr'rS)r1r�rr�r�r"�python_version_tupler��s&��� ����"�(�(��-� .�.r�c�� t�dS)Nr)r�r�r�r"� python_branchr��s��� �>�!� �r�c�� t�dS)NrTr�r�r�r"�python_revisionr��s��� �>�!� �r�c�� t�ddS)Nr�r�r�r�r�r"� python_buildr��s��� �>�!�A� �r�c�� t�dS)Nr�r�r�r�r"�python_compilerr��s��� �>�!� �r�c �|� tj||fd�}|�|St�\}}}}}}||k(rd}|rt|||�\}}}|dk(rt �d} | rd}| }|dk(r.t |�\} } } } |r t ||�}n�t |||| �}n�|dk(r!t�\}}t ||||d||z�}nw|dk(r7t�\}}}\}}}|s|st |||�}nMt |||d |||�}n;|r t ||�}n,ttj�\}}t ||||||�}|t||f<|S) Nr$�Darwinr�macOSr�Linux�withr��on) �_platform_cacherr�rr�r�r%rQr rOr4r5)�aliased�terserrqr�rrrr�r�� macos_release�rel�versr�r�rj�libcname� libcversionr�r rrrr rKrLs r"rjrj�s����"� � �'�5�!1�4� 8�F� ��� �:?��6�F�D�'�7�G�Y��)��� ��#/����#I� ���� ���� �!� � � ��F�#�G� ��� )�'� 2���T�3�� � ���1�H� ���'�3�?�H� �7� � (� ���+��V�W�g�y�#�%�k�1�3�� �6� �7?�z�4��1�f�4�w� �G� �� ���'�:�H� ���'�!%�!(�*�g�?�H� � ���1�H�(����8�M�D�'� ���'�!*�D�'�;�H�)1�O�W�e�$�%� �Or�)z/etc/os-releasez/usr/lib/os-releasec��dddd�}tjd�}tjd�}|D]I}|j|�}|��|jd|j d��||j d�<�K|S) Nr��linux)�NAME�ID� PRETTY_NAMEzA^(?P[a-zA-Z0-9_]+)=(?P["']?)(?P.*)(?P=quote)$z\\([\\\$\"\'`])z\1r�r�)rrrp�sub�group)�linesru�os_release_line�os_release_unescape�line�mos r"�_parse_os_releaser�s������ �D��j�j�M��O��*�*�%7�8���� � "� "�4� (�� �>�%8�%<�%<��r�x�x��(�&�D����&�!� "�� �Kr�c�^� t�ed}tD]8} t|d��5}t|�addd�tj�St |ddj t�����tj�S#1swY�UxYw#t$r}|j }Yd}~��d}~wwxYw)Nzutf-8)rgzUnable to read files rh)�_os_release_cache�_os_release_candidatesr9r�r3�errnorY�copy)r�� candidaterF�es r"�freedesktop_os_releaser�1s����� ���/�I� ��)�g�6�!�(9�!�(<�%�7�� � !� !� #�#�0���'�� � �2H�(I�'J�K�� � � !� !� #�#�7�6��� ������ �s-� B � B�B �B �B � B,� B'�'B,�__main__r�z--terse� nonaliasedz --nonaliased)Nr$r$i@)r$)r$r$r$r^)r$r$r$r$)r$r�r$)r$r$r�r�r�)FF)D� __copyright__� __version__� collectionsr.rr4r�r�rr#rQr]rxr�r�r�r�r�r�r�r�r�r�r�r�r rr%r*r2r<rJr5rOr]r_r}� namedtuplerr�r�rqr�rrrr�r�r�r�r�r�r�r�r�r�r�r�rjr�r�r�r�rw�argvr�r��print�exitr�r�r"�r�s/���t� �*� �� � � ��� � �b� �R� � �B� �C� � � � N�` �202�#<�4$�l,�� ,� �� ��[��$<*�| (�)�,)�& �+�F&$�T�@ � � $�N� � ���  �N�N��R�I�X�8'�'�T+� )A��K����-�/�)A�X� �U�r����� ���`�D �� /� � �����H�\D�����6$�2 �z�� ���� � 9�I����$9�E��3�8�8�+�N�N�c�h�h�4N�G� �(�7�E� "�#� �C�H�H�Q�K� ��Y �'�'�'�s�E!�!E-�,E-