§
    Štj0}  ã                   óv  — d dl Z d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dl	Z	d dl
mZ d dlZd dlZd dl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mZmZ 	 d dlZd dlZd	Z n# e!$ r d
Z Y nw xY w ej"        d¬¦  «        Z#ej$         %                    dd¦  «        Z& ej'        ¦   «         dk    rdndZ(i a)d„ Z*d&d„Z+d„ Z, G d„ d¦  «        Z- G d„ d¦  «        Z. G d„ d¦  «        Z/ G d„ d¦  «        Z0 G d„ d¦  «        Z1	 d'd„Z2	 	 	 d(d „Z3d)d!„Z4	 	 	 	 d*d"„Z5	 	 	 	 d+d#„Z6	 	 	 	 d+d$„Z7	 	 	 	 	 d,d%„Z8dS )-é    N)Ú
namedtuple)ÚOAuth2Session)Ú	ApiClientÚConfiguration)ÚExecProvideré   )ÚConfigException)ÚUTCÚformat_rfc3339Úparse_rfc3339TFé   )ÚminutesÚ
KUBECONFIGz~/.kube/configÚWindowsú;ú:c                  óŒ   — t                                ¦   «         D ]'} 	 t          j        | ¦  «         Œ# t          $ r Y Œ$w xY wi a d S ©N)Ú_temp_filesÚvaluesÚosÚremoveÚOSError)Ú	temp_files    ú[/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/kubernetes/config/kube_config.pyÚ_cleanup_temp_filesr   5   s^   € å ×'Ò'Ñ)Ô)ð ð ˆ	ð	ÝŒI�iÑ Ô Ð Ð øÝð 	ð 	ð 	ØˆDð	øøøà€K€K€Ks   �2²
?¾?c                 óZ  — t          t          ¦  «        dk    rt          j        t          ¦  «         t          | ¦  «        }|s|t          v rt          |         S |r4t          j                             |¦  «        st          j	        |¬¦  «         t          j        |¬¦  «        \  }}t          j        |¦  «         |t          |<   t          |d¦  «        5 }|                     t          | t
          ¦  «        r|                      ¦   «         n| ¦  «         d d d ¦  «         n# 1 swxY w Y   |S )Nr   )Úname)ÚdirÚwb)Úlenr   ÚatexitÚregisterr   Ústrr   ÚpathÚisdirÚmakedirsÚtempfileÚmkstempÚcloseÚopenÚwriteÚ
isinstanceÚencode)ÚcontentÚtemp_file_pathÚforce_recreateÚcontent_keyÚfdr   s         r   Ú_create_temp_file_with_contentr4   ?   sU  € Ý
�;ÑÔ˜1ÒÐÝŒÕ+Ñ,Ô,Ð,õ �g‘,”,€KØð (˜k­[Ð8Ð8Ý˜;Ô'Ð'Øð )�bœgŸmšm¨NÑ;Ô;ð )Ý
Œ˜Ð(Ñ(Ô(Ð(ÝÔ NÐ3Ñ3Ô3�H€BˆÝ„HˆR�L„L€LØ#…K�ÑÝ	ˆd�DÑ	Ô	ð L˜RØ
�Š¥Z°½Ñ%=Ô%=ÐJ�—’Ñ!Ô!Ð!À7ÑKÔKÐKðLð Lð Lñ Lô Lð Lð Lð Lð Lð Lð Løøøð Lð Lð Lð Là€Ks   Ã?D Ä D$Ä'D$c                 ó~   — t          | ¦  «        t          z
  t          j                             t          ¬¦  «        k    S )N©Útz)r   ÚEXPIRY_SKEW_PREVENTION_DELAYÚdatetimeÚnowr
   )Úexpirys    r   Ú_is_expiredr<   Q   s4   € Ý˜6Ñ"Ô"Õ%AÑAÝÔ×!Ò!¥SÐ!Ñ)Ô)ò*ð +ó    c                   ó4   — e Zd ZdZ	 	 	 d
d„Zd„ Zd„ Zdd	„ZdS )Ú
FileOrDataaC  Utility class to read content of obj[%data_key_name] or file's
     content of obj[%file_key_name] and represent it as file or data.
     Note that the data is preferred. The obj[%file_key_name] will be used iff
     obj['%data_key_name'] is not set or empty. Assumption is file content is
     raw data and data field is base64 string. The assumption can be changed
     with base64_file_content flag. If set to False, the content of the file
     will assumed to be base64 and read as is. The default True value will
     result in base64 encode of the file content after read.NÚ Tc                 ó  — |s|dz   }d | _         d | _        || _        || _        |sd S ||v r||         | _        d S ||v rJt          j                             t          j                             |||         ¦  «        ¦  «        | _         d S d S )Nz-data)Ú_fileÚ_dataÚ_base64_file_contentÚ_temp_file_pathr   r%   ÚnormpathÚjoin)ÚselfÚobjÚfile_key_nameÚdata_key_nameÚfile_base_pathÚbase64_file_contentr0   s          r   Ú__init__zFileOrData.__init__`   s¦   € ð ð 	4Ø)¨GÑ3ˆMØˆŒ
ØˆŒ
Ø$7ˆÔ!Ø-ˆÔØð 	ØˆFØ˜CÐÐØ˜]Ô+ˆDŒJˆJˆJØ˜cÐ!Ð!Ýœ×)Ò)Ý”—’˜^¨S°Ô-?Ñ@Ô@ñBô BˆDŒJˆJˆJð "Ð!r=   c                 ó`  — | j          o| j        }|rU|                      ¦   «          | j         r:t          j                             | j         ¦  «        s|                      d¬¦  «         | j         r;t          j                             | j         ¦  «        st          d| j         z  ¦  «        ‚| j         S )z‹If obj[%data_key_name] exists, return name of a file with base64
        decoded obj[%data_key_name] content otherwise obj[%file_key_name].T)Úforce_rewritezFile does not exist: %s)rB   rC   Ú_write_filer   r%   Úisfiler	   )rH   Úuse_data_if_no_files     r   Úas_filezFileOrData.as_fileq   s¨   € ð #'¤*˜nÐ;°´ÐØð 	5Ø×ÒÑÔÐàŒzð 5¥"¤'§.¢.°´Ñ"<Ô"<ð 5Ø× Ò ¨tÐ Ñ4Ô4Ð4ØŒ:ð 	J�bœgŸnšn¨T¬ZÑ8Ô8ð 	JÝ!Ð";¸d¼jÑ"HÑIÔIÐIØŒzÐr=   c           	      ó‚  — | j          o| j        }|r¨t          | j        ¦  «        5 }| j        r\t                               t          j        t           	                    | 
                    ¦   «         ¦  «        ¦  «        ¦  «        | _         n| 
                    ¦   «         | _         ddd¦  «         n# 1 swxY w Y   | j         S )z†If obj[%data_key_name] exists, Return obj[%data_key_name] otherwise
        base64 encoded string of obj[%file_key_name] file content.N)rC   rB   r+   rD   ÚbytesÚdecodeÚbase64Ústandard_b64encoder$   r.   Úread)rH   Úuse_file_if_no_dataÚfs      r   Úas_datazFileOrData.as_data~   sà   € ð #'¤*˜nÐ;°´ÐØð 	*Ý�d”jÑ!Ô!ð * QØÔ,ð *Ý!&§¢ÝÔ1µ#·*²*¸Q¿VºV¹X¼XÑ2FÔ2FÑGÔGñ"Iô "I�D”J�Jð "#§¢¡¤�D”Jð*ð *ð *ñ *ô *ð *ð *ð *ð *ð *ð *øøøð *ð *ð *ð *ð ŒzÐs   ¦A=B/Â/B3Â6B3Fc                 ó,  — | j         rkt          | j        t          ¦  «        r| j                             ¦   «         }n| j        }t          t          j        |¦  «        | j        |¬¦  «        | _	        d S t          | j        | j        |¬¦  «        | _	        d S )N)r1   )
rD   r-   rC   r$   r.   r4   rX   Ústandard_b64decoderE   rB   )rH   rP   r/   s      r   rQ   zFileOrData._write_file‹   sœ   € ØÔ$ð 		PÝ˜$œ*¥cÑ*Ô*ð %Øœ*×+Ò+Ñ-Ô-��àœ*�Ý7ÝÔ)¨'Ñ2Ô2°DÔ4HÐYfðhñ hô hˆDŒJˆJˆJõ 8Ø”
˜DÔ0ÀðPñ Pô PˆDŒJˆJˆJr=   )Nr@   TN©F)Ú__name__Ú
__module__Ú__qualname__Ú__doc__rN   rT   r]   rQ   © r=   r   r?   r?   V   s{   € € € € € ð@ð @ð :>Ø8<Ø $ðBð Bð Bð Bð"ð ð ðð ð ð
Pð 
Pð 
Pð 
Pð 
Pð 
Pr=   r?   c                   ó   — e Zd Zd„ Zd„ ZdS )ÚCommandTokenSourcec                 óh   — || _         || _        |sd| _        n|| _        |s	d| _        d S || _        d S )Nz{.access_token}z{.token_expiry})Ú_cmdÚ_argsÚ	_tokenKeyÚ
_expiryKey)rH   ÚcmdÚargsÚtokenKeyÚ	expiryKeys        r   rN   zCommandTokenSource.__init__™   sF   € ØˆŒ	ØˆŒ
Øð 	&Ø.ˆDŒNˆNà%ˆDŒNØð 	(Ø/ˆDŒOˆOˆOà'ˆDŒOˆOˆOr=   c                 ó’  — | j         dz   d                     | j        ¦  «        z   }t          j        | j         g| j        z   t          j        t          j        d¬¦  «        }|                     ¦   «         \  }}|                     ¦   «         }|dk    r:d|z  }|d|z  z  }|                     ¦   «         }|r|d|z  z  }t          |¦  «        ‚	 t          j        |¦  «        }n$# t          $ r}t          d|z  ¦  «        ‚d }~ww xY wt          d	d
dg¦  «        }	 |	|d         d         t          |d         d         ¦  «        ¬¦  «        S )Nú T)ÚstdoutÚstderrÚuniversal_newlinesr   zcmd-path: process returned %dz
Cmd: %sz
Stderr: %sz)exec: failed to decode process output: %sÚAÚtokenr;   Ú
credentialÚaccess_tokenÚtoken_expiry)rw   r;   )ri   rG   rj   Ú
subprocessÚPopenÚPIPEÚcommunicateÚwaitÚstripr	   ÚjsonÚloadsÚ
ValueErrorr   r   )
rH   ÚfullCmdÚprocessrs   rt   Ú	exit_codeÚmsgÚdataÚderv   s
             r   rw   zCommandTokenSource.token¥   sx  € Ø”)˜sÑ# c§h¢h¨t¬zÑ&:Ô&:Ñ:ˆÝÔ"ØŒYˆK˜$œ*Ñ$Ý”?Ý”?Ø#ð	%ñ %ô %ˆð
 #×.Ò.Ñ0Ô0Ñˆ�Ø—L’L‘N”Nˆ	Ø˜Š>ˆ>Ø1°IÑ=ˆCØ�; Ñ(Ñ(ˆCØ—\’\‘^”^ˆFØð /Ø�~¨Ñ.Ñ.�Ý! #Ñ&Ô&Ð&ð	BÝ”:˜fÑ%Ô%ˆDˆDøÝð 	Bð 	Bð 	BÝ!Ø;¸bÑ@ñBô Bð Bøøøøð	Bøøøõ �s˜W hÐ/Ñ0Ô0ˆØˆqØ�|Ô$ ^Ô4Ý   lÔ!3°NÔ!CÑDÔDðFñ Fô Fð 	Fs   ÃC! Ã!
DÃ+C=Ã=DN)ra   rb   rc   rN   rw   re   r=   r   rg   rg   ˜   s7   € € € € € ð
(ð 
(ð 
(ðFð Fð Fð Fð Fr=   rg   c                   ó’   — e Zd Z	 	 	 	 	 dd„Zd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ed„ ¦   «         ZdS )ÚKubeConfigLoaderNr@   c                 óH  ‡ ‡— |€t          d¦  «        ‚t          |t          ¦  «        r|‰ _        nt          d|¦  «        ‰ _        d ‰ _        d ‰ _        d ‰ _        ‰                      |¦  «         |‰ _        |‰ _	        |‰ _
        ˆ fd„Šˆˆ fd„}|r	|‰ _        d S |‰ _        d S )Nz9Invalid kube-config. Expected config_dict to not be None.zkube-configc                  óî  •— ‰j         d         d         } | d         }t          |¦  «        dk    rt          d¦  «        ‚d| v r| d         dk    rt          d¦  «        ‚g }d	| v r| d	                              ¦   «         }n,| d                              ¦   «         }|d         }|d
d …         }t	          |||                      d¦  «        |                      d¦  «        ¦  «        }|                     ¦   «         S )Núauth-providerÚconfigúcmd-pathr   zNmissing access token cmd (cmd-path is an empty string in your kubeconfig file)Úscopesr@   zGscopes can only be used when kubectl is using a gcp service account keyzcmd-argsr   z	token-keyz
expiry-key)Ú_userr!   r	   Úsplitrg   Úsafe_getrw   )r�   rm   rn   ÚfieldsÚcommandTokenSourcerH   s        €r   Ú"_refresh_credentials_with_cmd_pathzEKubeConfigLoader.__init__.<locals>._refresh_credentials_with_cmd_pathÙ   s  ø€ Ø”Z Ô0°Ô:ˆFØ˜Ô$ˆCÝ�3‰xŒx˜1Š}ˆ}Ý%ðLñMô Mð Mð ˜6Ð!Ð! f¨XÔ&6¸"Ò&<Ð&<Ý%ðFñGô Gð Gð ˆDØ˜VÐ#Ð#Ø˜jÔ)×/Ò/Ñ1Ô1��à 
Ô+×1Ò1Ñ3Ô3�Ø˜Q”i�Ø˜a˜b˜b”z�å!3Ø�TØ—’ Ñ,Ô,Ø—’ Ñ-Ô-ñ"/ô "/Ðð &×+Ò+Ñ-Ô-Ð-r=   c                  óL  •— d‰j         v r.d‰j         d         v rd‰j         d         d         v r
 ‰¦   «         S t          rdt          j                             ddg¬¦  «        \  } }t          j        j        j                             ¦   «         }|                      |¦  «         | S d S )NrŽ   r�   r�   z.https://www.googleapis.com/auth/cloud-platformz.https://www.googleapis.com/auth/userinfo.email)r‘   )	r’   Úgoogle_auth_availableÚgoogleÚauthÚdefaultÚ	transportÚrequestsÚRequestÚrefresh)ÚcredentialsÚ
project_idÚrequestr—   rH   s      €€r   Ú_refresh_credentialsz7KubeConfigLoader.__init__.<locals>._refresh_credentialsò   s·   ø€ à 4¤:Ð-Ð-Ø˜DœJ Ô7Ð7Ð7Ø $¤*¨_Ô"=¸hÔ"GÐGÐGØ9Ð9Ñ;Ô;Ð;õ %ð 	Ý*0¬+×*=Ò*=ØDØDðFÐ*=ñ +ô +Ñ'�˜Zõ !œ+Ô/Ô8×@Ò@ÑBÔB�Ø×#Ò# GÑ,Ô,Ð,Ø"Ð"à�tr=   )r	   r-   Ú
ConfigNodeÚ_configÚ_current_contextr’   Ú_clusterÚset_active_contextÚ_config_base_pathÚ_config_persisterrE   Ú_get_google_credentials)	rH   Úconfig_dictÚactive_contextÚget_google_credentialsÚconfig_base_pathÚconfig_persisterr0   r¤   r—   s	   `       @r   rN   zKubeConfigLoader.__init__Â   sò   øø€ ð ÐÝ!ð7ñ8ô 8ð 8õ ˜¥ZÑ0Ô0ð 	BØ&ˆDŒLˆLå% m°[ÑAÔAˆDŒLà $ˆÔØˆŒ
ØˆŒØ×Ò Ñ/Ô/Ð/Ø!1ˆÔØ!1ˆÔØ-ˆÔð	.ð 	.ð 	.ð 	.ð 	.ð2	ð 	ð 	ð 	ð 	ð 	ð& "ð 	@Ø+AˆDÔ(Ð(Ð(à+?ˆDÔ(Ð(Ð(r=   c                 óþ  — |€| j         d         }| j         d                              |¦  «        | _        | j        d                              d¦  «        re| j                              d¦  «        rK| j         d                              | j        d         d         d¬¦  «        }|r|d         | _        nd | _        nd | _        | j         d                              | j        d         d	         ¦  «        d	         | _        d S )
Núcurrent-contextÚcontextsÚcontextÚuserÚusersT)ÚsafeÚclustersÚcluster)r¦   Úget_with_namer§   r”   r’   r¨   )rH   Úcontext_namer¶   s      r   r©   z#KubeConfigLoader.set_active_context
  s  € ØÐØœ<Ð(9Ô:ˆLØ $¤¨ZÔ 8× FÒ FØñ!ô !ˆÔàÔ! )Ô,×5Ò5°fÑ=Ô=ð 		Ø”×%Ò% gÑ.Ô.ð		à”< Ô(×6Ò6ØÔ% iÔ0°Ô8¸tð 7ñ Eô EˆDàð "Ø! &œ\�”
�
à!�”
�
àˆDŒJØœ ZÔ0×>Ò>ØÔ! )Ô,¨YÔ7ñ9ô 9Ø9BôDˆŒˆˆr=   c                 óÄ   — | j         sdS |                      ¦   «         rdS |                      ¦   «         rdS |                      ¦   «         rdS |                      ¦   «          dS )a½  Read authentication from kube-config user section if exists.

        This function goes through various authentication methods in user
        section of kube-config and stops if it finds a valid authentication
        method. The order of authentication methods is:

            1. auth-provider (gcp, azure, oidc)
            2. token field (point to a token file)
            3. exec provided plugin
            4. username/password
        N)r’   Ú_load_auth_provider_tokenÚ_load_user_tokenÚ_load_from_exec_pluginÚ_load_user_pass_token©rH   s    r   Ú_load_authenticationz%KubeConfigLoader._load_authentication  sv   € ð Œzð 	ØˆFØ×)Ò)Ñ+Ô+ð 	ØˆFØ× Ò Ñ"Ô"ð 	ØˆFØ×&Ò&Ñ(Ô(ð 	ØˆFØ×"Ò"Ñ$Ô$Ð$Ð$Ð$r=   c                 óÆ   — d| j         vrd S | j         d         }d|vrd S |d         dk    r|                      |¦  «        S |d         dk    r|                      |¦  «        S d S )NrŽ   r   ÚgcpÚoidc)r’   Ú_load_gcp_tokenÚ_load_oid_token©rH   Úproviders     r   r¾   z*KubeConfigLoader._load_auth_provider_token2  s€   € Ø $¤*Ð,Ð,ØˆFØ”:˜oÔ.ˆØ˜Ð!Ð!ØˆFØ�FÔ˜uÒ$Ð$Ø×'Ò'¨Ñ1Ô1Ð1Ø�FÔ˜vÒ%Ð%Ø×'Ò'¨Ñ1Ô1Ð1ð &Ð%r=   c                 ó  — d|vs/d|d         vs%d|d         v r/t          |d         d         ¦  «        r|                      ¦   «          d|d         d         z  | _        d|d         v r t          |d         d         ¦  «        | _        | j        S )Nr�   úaccess-tokenr;   ú	Bearer %s)r<   Ú_refresh_gcp_tokenrw   r   r;   rÉ   s     r   rÇ   z KubeConfigLoader._load_gcp_token?  s¢   € Ø˜XÐ%Ð%Ø x°Ô'9Ð9Ð9Ø˜X hÔ/Ð/Ð/Ý˜X hÔ/°Ô9Ñ:Ô:ð 0ð ×#Ò#Ñ%Ô%Ð%à  8¨HÔ#5°nÔ#EÑEˆŒ
Ø�x Ô)Ð)Ð)Ý'¨°Ô(:¸8Ô(DÑEÔEˆDŒKØŒzÐr=   c                 ó,  — d| j         d         vri | j         d         j        d<   | j         d         d         }|                      ¦   «         }|j        |j        d<   t	          |j        ¦  «        |j        d<   | j        r|                      ¦   «          d S d S )Nr�   rŽ   rÌ   r;   )r’   Úvaluer¬   rw   r   r;   r«   )rH   rÊ   r¡   s      r   rÎ   z#KubeConfigLoader._refresh_gcp_tokenL  s�   € Ø˜4œ: oÔ6Ð6Ð6Ø:<ˆDŒJ�Ô'Ô-¨hÑ7Ø”:˜oÔ.¨xÔ8ˆØ×2Ò2Ñ4Ô4ˆØ)4Ô):ˆŒ�~Ñ&Ý#1°+Ô2DÑ#EÔ#EˆŒ�xÑ ØÔ!ð 	%Ø×"Ò"Ñ$Ô$Ð$Ð$Ð$ð	%ð 	%r=   c                 óô  ‡— d|vrd S t          g d¢¦  «        }|d         d         Št          ˆfd„|D ¦   «         ¦  «        rd S ‰                     d¦  «        }t          |¦  «        dk    rd S dt          |d         ¦  «        dz  z
  d	z  }t          |¦  «        dk    rd S t	          j        t          j        |d         |z   ¦  «                             d
¦  «        ¦  «        }| 	                    d¦  «        }|�ct          t          j                             |t          ¬¦  «        ¦  «        r0|                      |¦  «         | j        r|                      ¦   «          d|d         d         z  | _        | j        S )Nr�   )ú=ú+ú/úid-tokenc              3   ó    •K  — | ]}|‰v V — Œ	d S r   re   )Ú.0Úcharrw   s     €r   ú	<genexpr>z3KubeConfigLoader._load_oid_token.<locals>.<genexpr>]  s'   øè è € Ð=Ð= ˆt�uˆ}Ð=Ð=Ð=Ð=Ð=Ð=r=   ú.é   é   r   rÒ   úutf-8Úexpr6   rÍ   )Ú	frozensetÚanyr“   r!   r�   r‚   rX   Úurlsafe_b64decoderW   Úgetr<   r9   Úfromtimestampr
   Ú_refresh_oidcr«   rw   )rH   rÊ   Úreserved_charactersÚpartsÚpaddingÚjwt_attributesÚexpirerw   s          @r   rÈ   z KubeConfigLoader._load_oid_tokenV  s‘  ø€ Ø˜8Ð#Ð#ØˆFå'¨¨¨Ñ8Ô8ÐØ˜Ô" :Ô.ˆåÐ=Ð=Ð=Ð=Ð)<Ð=Ñ=Ô=Ñ=Ô=ð 	àˆFà—’˜CÑ Ô ˆÝˆu‰:Œ:˜Š?ˆ?ØˆFà•s˜5 œ8‘}”} qÑ(Ñ(¨CÑ/ˆÝˆw‰<Œ<˜1ÒÐð ˆFåœÝÔ$ U¨1¤X°Ñ%7Ñ8Ô8×?Ò?ÀÑHÔHñ
ô 
ˆð  ×#Ò# EÑ*Ô*ˆàÐÝ�Ô*×8Ò8¸Ý<?ð 9ñ Aô Añ Bô Bð  ð ×Ò˜xÑ(Ô(Ð(àÔ%ð )Ø×&Ò&Ñ(Ô(Ð(à  8¨HÔ#5°jÔ#AÑAˆŒ
àŒzÐr=   c                 óJ  — t          ¦   «         }d|d         v r—t          j        d¬¦  «        }t          j        |d         d         ¦  «                             d¦  «        }t          |j        d¦  «        5 }|                     |¦  «         d d d ¦  «         n# 1 swxY w Y   |j        |_	        n%d|d         v r|d         d         |_	        nd|_
        t          |¬	¦  «        }|                     d
d|d         d         z  ¬¦  «        }|j        dk    rd S t          j        |j        ¦  «        }t#          |d         d         |d         d         |d         d         |d         d         dœ|d         ¬¦  «        }	 |                     |d         |d         d         |d         d         |d         d         f|j
        r|j	        nd ¬¦  «        }	n%# t&          j        j        j        j        $ r Y d S w xY w|	d         |d         j        d<   |	d         |d         j        d<   d S )Nzidp-certificate-authority-datar�   T)ÚdeleterÝ   Úwzidp-certificate-authorityF©ÚconfigurationÚGETz#%s/.well-known/openid-configurationzidp-issuer-url)ÚmethodÚurléÈ   z	client-idzrefresh-tokenzclient-secret)Ú	client_idÚclient_secretÚtoken_endpoint)ró   rw   Úauto_refresh_kwargsÚauto_refresh_url)Ú	token_urlÚrefresh_tokenr›   ÚverifyÚid_tokenrÕ   rù   )r   r(   ÚNamedTemporaryFilerX   Ú	b64decoderW   r+   r   r,   Ússl_ca_certÚ
verify_sslr   r£   Ústatusr�   r‚   rˆ   r   rù   ÚoauthlibÚoauth2Úrfc6749ÚerrorsÚInvalidClientIdErrorrÐ   )
rH   rÊ   r�   Úca_certÚcertÚfhÚclientÚresponser£   r    s
             r   rä   zKubeConfigLoader._refresh_oidc~  s¡  € Ý‘”ˆà+¨x¸Ô/AÐAÐAÝÔ1¸Ð>Ñ>Ô>ˆGåÔ#Ø˜Ô"Ð#CÔDñô çŠf�W‰oŒoð õ �g”l CÑ(Ô(ð ¨BØ—’˜‘”�ðð ð ñ ô ð ð ð ð ð ð øøøð ð ð ð ð ")¤ˆFÔÐà(¨H°XÔ,>Ð>Ð>Ø!)¨(Ô!3Ð4OÔ!PˆFÔÐð !&ˆFÔå¨Ð0Ñ0Ô0ˆà—>’>ØØ5Ø�xÔ Ð!1Ô2ñ3ð "ñ 
ô 
ˆð Œ?˜cÒ!Ð!ØˆFå”:˜hœmÑ,Ô,ˆåØ˜xÔ(¨Ô5Ø˜8Ô$ _Ô5à% hÔ/°Ô<Ø!)¨(Ô!3°OÔ!Dð!ð !ð &Ð&6Ô7ð
ñ 
ô 
ˆð		Ø×+Ò+Ø"Ð#3Ô4Ø& xÔ0°ÔAØ˜xÔ(¨Ô5Ø˜xÔ(¨Ô9ð;à-3Ô->ÐH�vÔ)Ð)ÀDð ,ñ ô ˆGˆGøõ ŒÔ&Ô-ÔBð 	ð 	ð 	ØˆFˆFð	øøøð 07°zÔ/Bˆ�ÔÔ  Ñ,Ø4;¸OÔ4Lˆ�ÔÔ  Ñ1Ð1Ð1s%   Á6BÂBÂBÅ>AG ÇG4Ç3G4c                 óÈ  — d| j         vrd S 	 |                      | j        j        ¦  «        }t	          | j         d         || j        ¦  «                             ¦   «         }d|v rd|d         z  | _        n—d|v r}d|vrt          j        d¦  «         d S t          |d d|d| j
        ¬¦  «                             ¦   «         | _        t          |d d|d| j
        ¬¦  «                             ¦   «         | _        nt          j        d	¦  «         d S d
|v rt          |d
         ¦  «        | _        dS # t           $ r,}t          j        t#          |¦  «        ¦  «         Y d }~d S d }~ww xY w)NÚexecrw   rÍ   ÚclientCertificateDataÚclientKeyDataz2exec: missing clientKeyData field in plugin outputF)rK   rL   rM   r0   zCexec: missing token or clientCertificateData field in plugin outputÚexpirationTimestampT)r’   Ú_get_base_pathr¨   r%   r   Úrunrw   ÚloggingÚerrorr?   rE   rT   Ú	cert_fileÚkey_filer   r;   Ú	Exceptionr$   )rH   Ú	base_pathr   Úes       r   rÀ   z'KubeConfigLoader._load_from_exec_plugin¸  s¬  € Ø˜œÐ#Ð#ØˆFð 	"Ø×+Ò+¨D¬MÔ,>Ñ?Ô?ˆIÝ! $¤*¨VÔ"4°iÀÄÑOÔO×SÒSÑUÔUˆFØ˜&Ð Ð Ø(¨6°'¬?Ñ:�”
�
Ø(¨FÐ2Ð2ð #¨&Ð0Ð0Ý”Mð #2ñ 3ô 3ð 3à˜4Ý!+Ø˜DØ"9Ø#,Ø(-Ø#'Ô#7ð"9ñ "9ô "9÷
 :Aº¹¼ð ”õ !+Ø˜DØ"1Ø#,Ø(-Ø#'Ô#7ð!9ñ !9ô !9÷
 :Aº¹¼ð ”�õ ”ð 7ñ 8ô 8ð 8à�tØ$¨Ð.Ð.Ý+¨FÐ3HÔ,IÑJÔJ�”Ø�4øÝð 	"ð 	"ð 	"ÝŒM�#˜a™&œ&Ñ!Ô!Ð!Ð!Ð!Ð!Ð!Ð!Ð!øøøøð	"øøøs%   �BD+ ÂA7D+ ÄD+ Ä+
E!Ä5!EÅE!c                 óÂ   — |                       | j        j        ¦  «        }t          | j        dd|d| j        ¬¦  «                             ¦   «         }|rd|z  | _        dS d S )NÚ	tokenFilerw   F)rL   rM   r0   rÍ   T)r  r’   r%   r?   rE   r]   rw   )rH   r  rw   s      r   r¿   z!KubeConfigLoader._load_user_tokenÝ  su   € Ø×'Ò'¨¬
¬Ñ8Ô8ˆ	ÝØŒJ˜ WØ$Ø %ØÔ/ð	1ñ 1ô 1÷ 29²±´ð	 	ð
 ð 	Ø$ uÑ,ˆDŒJØ�4ð	ð 	r=   c                 óÚ   — d| j         v r_d| j         v rXt          j                             | j         d         dz   | j         d         z   ¬¦  «                             d¦  «        | _        dS d S d S )NÚusernameÚpasswordr   )Ú
basic_authÚauthorizationT)r’   Úurllib3ÚutilÚmake_headersrâ   rw   rÂ   s    r   rÁ   z&KubeConfigLoader._load_user_pass_tokenè  s|   € Ø˜œÐ#Ð#¨
°d´jÐ(@Ð(@Ý œ×2Ò2Ø œJ zÔ2°SÑ8Ø œJ zÔ2ñ3ð 3ñ 5ô 5ç58²S¸Ñ5IÔ5Ið ŒJð �4ð	 $Ð#Ð(@Ð(@r=   c                 óž   — | j         �| j         S |�<t          j                             t          j                             |¦  «        ¦  «        S dS )Nr@   )rª   r   r%   ÚabspathÚdirname)rH   Úconfig_paths     r   r  zKubeConfigLoader._get_base_pathï  sA   € ØÔ!Ð-ØÔ)Ð)ØÐ"Ý”7—?’?¥2¤7§?¢?°;Ñ#?Ô#?Ñ@Ô@Ð@Øˆrr=   c                 ó’  — d| j         v �r| j         d                              d¦  «        | _        | j                             d¦  «        rÄ|                      | j         j        ¦  «        }t          | j         d|| j        ¬¦  «                             ¦   «         | _	        d| j
        vrht          | j        d|| j        ¬¦  «                             ¦   «         | _        t          | j        d|| j        ¬¦  «                             ¦   «         | _        d	| j         v r| j         d	          | _        d
| j         v r| j         d
         | _        d S d S )NÚserverrÔ   Úhttpszcertificate-authority)rL   r0   r  zclient-certificatez
client-keyzinsecure-skip-tls-verifyztls-server-name)r¨   ÚrstripÚhostÚ
startswithr  r%   r?   rE   rT   rþ   Ú__dict__r’   r  r  rÿ   Útls_server_name)rH   r  s     r   Ú_load_cluster_infoz#KubeConfigLoader._load_cluster_infoö  s]  € Ø�t”}Ð$Ñ$Øœ hÔ/×6Ò6°sÑ;Ô;ˆDŒIØŒy×#Ò# GÑ,Ô,ð GØ ×/Ò/°´Ô0BÑCÔC�	Ý#-Ø”MÐ#:Ø#,Ø#'Ô#7ð$9ñ $9ô $9÷ :Aº¹¼ð Ô ð  d¤mÐ3Ð3õ &0Øœ
Ð$8Ø'0Ø'+Ô';ð&=ñ &=ô &=÷ >EºW¹Y¼Yð ”Nõ %/Øœ
 LØ'0Ø'+Ô';ð%=ñ %=ô %=÷ >EºW¹Y¼Yð ”Mð &¨¬Ð6Ð6Ø"&¤-Ð0JÔ"KÐKˆDŒOØ ¤Ð-Ð-Ø#'¤=Ð1BÔ#CˆDÔ Ð Ð ð .Ð-r=   c           	      ó²   ‡ — d‰ j         v r‰ j        |j        d<   ˆ fd„}||_        g d¢}|D ]*}|‰ j         v rt	          ||t          ‰ |¦  «        ¦  «         Œ+d S )Nrw   ÚBearerTokenc                 ó”   •— d‰j         v r(t          ‰j        ¦  «        r‰                     ¦   «          ‰                     | ¦  «         d S )Nr;   )r-  r<   r;   rÃ   Ú_set_config)Úclient_configurationrH   s    €r   Ú_refresh_api_keyz6KubeConfigLoader._set_config.<locals>._refresh_api_key  sL   ø€ Ø ¤Ð-Ð-µ+¸d¼kÑ2JÔ2JÐ-Ø×-Ò-Ñ/Ô/Ð/Ø× Ò Ð!5Ñ6Ô6Ð6Ð6Ð6r=   )r+  rþ   r  r  rÿ   r.  )r-  rw   Úapi_keyÚrefresh_api_key_hookÚsetattrÚgetattr)rH   r4  r5  ÚkeysÚkeys   `    r   r3  zKubeConfigLoader._set_config  s˜   ø€ Ø�d”mÐ#Ð#Ø:>¼*Ð Ô(¨Ñ7ð7ð 7ð 7ð 7ð 7ð 9IÐ Ô5à_Ð_Ð_ˆØð 	Gð 	GˆCØ�d”mÐ#Ð#ÝÐ,¨cµ7¸4ÀÑ3EÔ3EÑFÔFÐFøð	Gð 	Gr=   c                 ó€   — |                       ¦   «          |                      ¦   «          |                      |¦  «         d S r   )rÃ   r/  r3  )rH   r4  s     r   Úload_and_setzKubeConfigLoader.load_and_set  sA   € Ø×!Ò!Ñ#Ô#Ð#Ø×ÒÑ!Ô!Ð!Ø×ÒÐ-Ñ.Ô.Ð.Ð.Ð.r=   c                 ó0   — d„ | j         d         D ¦   «         S )Nc                 ó   — g | ]	}|j         ‘Œ
S re   ©rÐ   )r×   rµ   s     r   ú
<listcomp>z2KubeConfigLoader.list_contexts.<locals>.<listcomp>%  s   € ÐFÐFÐF '�”ÐFÐFÐFr=   r´   )r¦   rÂ   s    r   Úlist_contextszKubeConfigLoader.list_contexts$  s   € ØFÐF¨T¬\¸*Ô-EÐFÑFÔFÐFr=   c                 ó   — | j         j        S r   )r§   rÐ   rÂ   s    r   Úcurrent_contextz KubeConfigLoader.current_context'  s   € àÔ$Ô*Ð*r=   )NNr@   NNr   )ra   rb   rc   rN   r©   rÃ   r¾   rÇ   rÎ   rÈ   rä   rÀ   r¿   rÁ   r  r/  r3  r=  rB  ÚpropertyrD  re   r=   r   r‹   r‹   À   sT  € € € € € à37Ø(,Ø"$Ø"&Ø $ð	F@ð F@ð F@ð F@ðPDð Dð Dð Dð$%ð %ð %ð,	2ð 	2ð 	2ðð ð ð%ð %ð %ð&ð &ð &ðP8Mð 8Mð 8Mðt#"ð #"ð #"ðJ	ð 	ð 	ðð ð ðð ð ðDð Dð Dð4Gð Gð Gð/ð /ð /ð
Gð Gð Gð ð+ð +ñ „Xð+ð +ð +r=   r‹   c                   ó:   — e Zd ZdZd
d„Zd„ Zd„ Zd„ Zd„ Zdd	„Z	dS )r¥   z¸Remembers each config key's path and construct a relevant exception
    message in case of missing keys. The assumption is all access keys are
    present in a well-formed kube-config.Nc                 ó0   — || _         || _        || _        d S r   )r   rÐ   r%   )rH   r   rÐ   r%   s       r   rN   zConfigNode.__init__1  s   € ØˆŒ	ØˆŒ
ØˆŒ	ˆ	ˆ	r=   c                 ó   — || j         v S r   r@  ©rH   r;  s     r   Ú__contains__zConfigNode.__contains__6  s   € Ø�d”jÐ Ð r=   c                 ó*   — t          | j        ¦  «        S r   )r!   rÐ   rÂ   s    r   Ú__len__zConfigNode.__len__9  s   € Ý�4”:‰ŒÐr=   c                 ó�   — t          | j        t          ¦  «        rt          |t          ¦  «        s	|| j        v r| j        |         S d S r   )r-   rÐ   ÚlistÚintrI  s     r   r”   zConfigNode.safe_get<  sH   € Ý�t”z¥4Ñ(Ô(ð 	#­Z¸½SÑ-AÔ-Að 	#Ø�t”zÐ!Ð!Ø”:˜c”?Ð"ð "Ð!r=   c                 óü   — |                       |¦  «        }|€t          d|›d| j        ›�¦  «        ‚t          |t          ¦  «        st          |t
          ¦  «        r t          | j        ›d|›�|| j        ¦  «        S |S )Nz'Invalid kube-config file. Expected key ú in rÔ   )r”   r	   r   r-   ÚdictrN  r¥   r%   )rH   r;  Úvs      r   Ú__getitem__zConfigNode.__getitem__A  s‰   € Ø�MŠM˜#ÑÔˆØˆ9Ý!�/à�3�3˜œ	˜	ð#ñ$ô $ð $õ �a�ÑÔð 	¥*¨QµÑ"5Ô"5ð 	Ý¨¬¨¨°C°CÐ8¸!¸T¼YÑGÔGÐGàˆHr=   Fc                 ó¼  — t          | j        t          ¦  «        st          d| j        z  ¦  «        ‚d }| j        D ]I}d|vrt          d| j        z  ¦  «        ‚|d         |k    r |€|}Œ.t          d|›d| j        ›d�¦  «        ‚ŒJ|�8t          |t
          ¦  «        r|S t          | j        ›d|›d�|| j        ¦  «        S |rd S t          d	|›d| j        ›d�¦  «        ‚)
Nz2Invalid kube-config file. Expected %s to be a listr   zKInvalid kube-config file. Expected all values in %s list to have 'name' keyz=Invalid kube-config file. Expected only one object with name rQ  z listz[name=ú]z4Invalid kube-config file. Expected object with name )r-   rÐ   rN  r	   r   r¥   r%   )rH   r   r¸   ÚresultrS  s        r   r»   zConfigNode.get_with_nameL  sK  € Ý˜$œ*¥dÑ+Ô+ð 	Ý!ØDØ”)ññô ð ð ˆØ”ð 	-ð 	-ˆAØ˜QˆˆÝ%ðJà”iñ ñ!ô !ð !ð �Œy˜DÒ Ð Ø�>Ø�F�Få)˜/ð  ˜4˜4 ¤  ð,ñ-ô -ð -ð	 !ð ÐÝ˜&¥*Ñ-Ô-ð :Ø�å!à”Y�Y�Y   ð&Ø'-¨t¬yñ:ô :ð :ð ð 	Ø�4Ýˆoà9=¸¸¸t¼y¸y¸yðJñKô Kð 	Kr=   r   r`   )
ra   rb   rc   rd   rN   rJ  rL  r”   rT  r»   re   r=   r   r¥   r¥   ,  sˆ   € € € € € ð-ð -ðð ð ð ð
!ð !ð !ðð ð ð#ð #ð #ð
	ð 	ð 	ðKð Kð Kð Kð Kð Kr=   r¥   c                   óR   — e Zd ZdZd„ Zed„ ¦   «         Zd„ Zd„ Zd„ Z	d„ Z
d„ Zd	„ Zd
S )ÚKubeConfigMergeraˆ  Reads and merges configuration from one or more kube-config's.
    The property `config` can be passed to the KubeConfigLoader as config_dict.

    It uses a path attribute from ConfigNode to store the path to kubeconfig.
    This path is required to load certs from relative paths.

    A method `save_changes` updates changed kubeconfig's (it compares current
    state of dicts with).
    c                 ó¨   — g | _         i | _        d | _        t          |d¦  «        r|                      |¦  «         d S |                      |¦  «         d S )NrZ   )ÚpathsÚconfig_filesÚconfig_mergedÚhasattrÚ"_load_config_from_file_like_objectÚ_load_config_from_file_path)rH   r[  s     r   rN   zKubeConfigMerger.__init__z  s_   € ØˆŒ
ØˆÔØ!ˆÔÝ�5˜&Ñ!Ô!ð 	4Ø×3Ò3°EÑ:Ô:Ð:Ð:Ð:à×,Ò,¨UÑ3Ô3Ð3Ð3Ð3r=   c                 ó   — | j         S r   )r]  rÂ   s    r   r�   zKubeConfigMerger.configƒ  s   € àÔ!Ð!r=   c                 ó&  — t          |d¦  «        r't          j        |                     ¦   «         ¦  «        }n&t          j        |                     ¦   «         ¦  «        }|€t          d¦  «        ‚| j        €t          j        |¦  «        | _        d S d S )NÚgetvaluezInvalid kube-config.)	r^  ÚyamlÚ	safe_loadrc  rZ   r	   r]  ÚcopyÚdeepcopy)rH   Ústringr�   s      r   r_  z3KubeConfigMerger._load_config_from_file_like_object‡  s‰   € Ý�6˜:Ñ&Ô&ð 	3Ý”^ F§O¢OÑ$5Ô$5Ñ6Ô6ˆFˆFå”^ F§K¢K¡M¤MÑ2Ô2ˆFàˆ>Ý!Ø&ñ(ô (ð (àÔÐ%Ý!%¤¨vÑ!6Ô!6ˆDÔÐÐð &Ð%r=   c                 óZ  — |                      t          ¦  «        D ]q}|rmt          j                             |¦  «        }t          j                             |¦  «        r/| j                             |¦  «         |                      |¦  «         Œrt          j
        | j        ¦  «        | _        d S r   )r“   ÚENV_KUBECONFIG_PATH_SEPARATORr   r%   Ú
expanduserÚexistsr[  ÚappendÚload_configrf  rg  r\  Úconfig_saved)rH   rh  r%   s      r   r`  z,KubeConfigMerger._load_config_from_file_path”  s—   € Ø—L’LÕ!>Ñ?Ô?ð 	+ð 	+ˆDØð +Ý”w×)Ò)¨$Ñ/Ô/�Ý”7—>’> $Ñ'Ô'ð +Ø”J×%Ò% dÑ+Ô+Ð+Ø×$Ò$ TÑ*Ô*Ð*øÝ œM¨$Ô*;Ñ<Ô<ˆÔÐÐr=   c                 óÄ  — t          |¦  «        5 }t          j        |¦  «        }d d d ¦  «         n# 1 swxY w Y   |€t          d|z  ¦  «        ‚| j        €4t          j        |¦  «        }dD ]}g ||<   Œt          |||¦  «        | _        dD ]/}|                      || 	                    |g ¦  «        pg |¦  «         Œ0d|v r|d         | j        j
        d<   || j        |<   d S )Nz%Invalid kube-config. %s file is empty)r¹   r´   r·   r³   )r+   rd  re  r	   r]  rf  rg  r¥   Ú_mergerâ   rÐ   r\  )rH   r%   r\   r�   r]  Úitems         r   rn  zKubeConfigMerger.load_config�  sQ  € Ý�$‰ZŒZð 	'˜1Ý”^ AÑ&Ô&ˆFð	'ð 	'ð 	'ñ 	'ô 	'ð 	'ð 	'ð 	'ð 	'ð 	'ð 	'øøøð 	'ð 	'ð 	'ð 	'ð ˆ>Ý!ð#Ø%)ñ*ñ+ô +ð +ð ÔÐ%Ý œM¨&Ñ1Ô1ˆMØ9ð )ð )�Ø&(�˜dÑ#Ð#Ý!+¨D°-ÀÑ!FÔ!FˆDÔØ5ð 	@ð 	@ˆDØ�KŠK˜˜fŸjšj¨¨rÑ2Ô2Ð8°b¸$Ñ?Ô?Ð?Ð?à Ð&Ð&Ø:@ÐARÔ:SˆDÔÔ$Ð%6Ñ7à"(ˆÔ˜$ÑÐÐs   �1±5¸5c           	      óò   — |D ]s}| j         j        |         D ]}|d         |d         k    r nIŒ| j         j        |                              t          d                     ||¦  «        ||¦  «        ¦  «         Œtd S )Nr   z{}/{})r]  rÐ   rm  r¥   Úformat)rH   rr  Úadd_cfgr%   Únew_itemrl  s         r   rq  zKubeConfigMerger._merge³  s¥   € Øð 	Eð 	EˆHØÔ,Ô2°4Ô8ð Eð E�Ø˜&”> X¨fÔ%5Ò5Ð5Ø�Eð 6ð Ô"Ô(¨Ô.×5Ò5µjØ—N’N 4¨Ñ2Ô2°H¸dñ7Dô 7Dñ Eô Eð Eøð	Eð 	Er=   c                 ó¸   — | j         D ]3}| j        |         | j        |         k    r|                      |¦  «         Œ4t	          j        | j        ¦  «        | _        d S r   )r[  ro  r\  Úsave_configrf  rg  )rH   r%   s     r   Úsave_changeszKubeConfigMerger.save_changes¼  s^   € Ø”Jð 	'ð 	'ˆDØÔ  Ô&¨$Ô*;¸DÔ*AÒAÐAØ× Ò  Ñ&Ô&Ð&øÝ œM¨$Ô*;Ñ<Ô<ˆÔÐÐr=   c                 óœ   — t          |d¦  «        5 }t          j        | j        |         |d¬¦  «         d d d ¦  «         d S # 1 swxY w Y   d S )Nrì   F)Údefault_flow_style)r+   rd  Ú	safe_dumpr\  )rH   r%   r\   s      r   rx  zKubeConfigMerger.save_configÂ  s™   € Ý�$˜‰_Œ_ð 	5 ÝŒN˜4Ô,¨TÔ2°AØ.3ð5ñ 5ô 5ð 5ð	5ð 	5ð 	5ñ 	5ô 	5ð 	5ð 	5ð 	5ð 	5ð 	5ð 	5ð 	5øøøð 	5ð 	5ð 	5ð 	5ð 	5ð 	5s   ‘#AÁAÁAN)ra   rb   rc   rd   rN   rE  r�   r_  r`  rn  rq  ry  rx  re   r=   r   rY  rY  n  s¥   € € € € € ðð ð4ð 4ð 4ð ð"ð "ñ „Xð"ð
7ð 
7ð 
7ð=ð =ð =ð)ð )ð )ð,Eð Eð Eð=ð =ð =ð5ð 5ð 5ð 5ð 5r=   rY  c                 ó    — t          d| |dœ|¤ŽS )N)ÚfilenameÚpersist_configre   )Ú_get_kube_config_loader)r~  r  Úkwargss      r   Ú%_get_kube_config_loader_for_yaml_filer‚  È  s.   € å"ð ØØ%ðð ð ðð ð r=   c                 ó¶   — |€It          | ¦  «        }|rd|vr
|j        |d<   |j        €t          d¦  «        ‚t	          d|j        d dœ|¤ŽS t	          d|d dœ|¤ŽS )Nr±   z1Invalid kube-config file. No configuration found.)r­   r°   re   )rY  ry  r�   r	   r‹   )r~  r­   r  r�  Úkcfgs        r   r€  r€  Ð  sµ   € ð
 ÐÝ Ñ)Ô)ˆØð 	;Ð0¸Ð>Ð>Ø)-Ô):ˆFÐ%Ñ&àŒ;ÐÝ!ð*ñ+ô +ð +õ  ð ØœØ!ðð ð ðð ð 	õ
  ð Ø#Ø!ðð ð ðð ð 	r=   c                 ój   — | €t           } t          | ¬¦  «        }|                     ¦   «         |j        fS )N)r~  )ÚKUBE_CONFIG_DEFAULT_LOCATIONr€  rB  rD  )Úconfig_fileÚloaders     r   Úlist_kube_config_contextsr‰  é  s7   € àÐÝ2ˆå$¨kÐ:Ñ:Ô:€FØ×ÒÑ!Ô! 6Ô#9Ð9Ð9r=   c                 ó   — | €t           } t          | |||¬¦  «        }|€Jt                               t          ¦  «        }|                     |¦  «         t	          j        |¦  «         dS |                     |¦  «         dS )a,  Loads authentication and cluster information from kube-config file
    and stores them in kubernetes.client.configuration.

    :param config_file: Name of the kube-config file.
    :param context: set the active context. If is set to None, current_context
        from config file will be used.
    :param client_configuration: The kubernetes.client.Configuration to
        set configs to.
    :param persist_config: If True, config file will be updated when changed
        (e.g GCP token refresh).
    :param temp_file_path: store temp files path.
    N)r~  r®   r  r0   )r†  r€  ÚtypeÚ__call__r   r=  Úset_default)r‡  rµ   r4  r  r0   rˆ  r�   s          r   Úload_kube_configrŽ  ò  s�   € ð" ÐÝ2ˆå$Ø¨WØ%Ø%ð'ñ 'ô '€Fð
 Ð#Ý—’�}Ñ-Ô-ˆØ×Ò˜FÑ#Ô#Ð#ÝÔ! &Ñ)Ô)Ð)Ð)Ð)à×ÒÐ0Ñ1Ô1Ð1Ð1Ð1r=   c                 ó  — | €t          d¦  «        ‚t          | |||¬¦  «        }|€Jt                               t          ¦  «        }|                     |¦  «         t	          j        |¦  «         dS |                     |¦  «         dS )a/  Loads authentication and cluster information from config_dict file
    and stores them in kubernetes.client.configuration.

    :param config_dict: Takes the config file as a dict.
    :param context: set the active context. If is set to None, current_context
        from config file will be used.
    :param client_configuration: The kubernetes.client.Configuration to
        set configs to.
    :param persist_config: If True, config file will be updated when changed
        (e.g GCP token refresh).
    :param temp_file_path: store temp files path.
    Nz1Invalid kube-config dict. No configuration found.)r­   r®   r  r0   )r	   r€  r‹  rŒ  r   r=  r�  )r­   rµ   r4  r  r0   rˆ  r�   s          r   Úload_kube_config_from_dictr�    s¡   € ð  ÐÝð&ñ'ô 'ð 	'õ %Ø°Ø%Ø%ð'ñ 'ô '€Fð
 Ð#Ý—’�}Ñ-Ô-ˆØ×Ò˜FÑ#Ô#Ð#ÝÔ! &Ñ)Ô)Ð)Ð)Ð)à×ÒÐ0Ñ1Ô1Ð1Ð1Ð1r=   c                 óŠ   — |€t                                t          ¦  «        }t          | |||¬¦  «         t	          |¬¦  «        S )zÃ
    Loads configuration the same as load_kube_config but returns an ApiClient
    to be used with any API object. This will allow the caller to concurrently
    talk with multiple clusters.
    N)r‡  rµ   r4  r  rí   )r‹  rŒ  r   rŽ  r   )r‡  rµ   r  r4  s       r   Únew_client_from_configr’  5  sQ   € ð Ð#Ý#Ÿ}š}­]Ñ;Ô;ÐÝ °gØ*>Ø$2ð4ñ 4ô 4ð 4õ Ð#7Ð8Ñ8Ô8Ð8r=   c                 óŒ   — |€t                                t          ¦  «        }t          | ||||¬¦  «         t	          |¬¦  «        S )zÍ
    Loads configuration the same as load_kube_config_from_dict but returns an ApiClient
    to be used with any API object. This will allow the caller to concurrently
    talk with multiple clusters.
    N)r­   rµ   r4  r  r0   rí   )r‹  rŒ  r   r�  r   )r­   rµ   r  r0   r4  s        r   Únew_client_from_config_dictr”  G  sT   € ð Ð#Ý#Ÿ}š}­]Ñ;Ô;ÐÝ¨;ÀØ4HØ.<Ø.<ð>ñ >ô >ð >õ Ð#7Ð8Ñ8Ô8Ð8r=   )NFr`   )NNFr   )NNNTN)NNTN)NNTNN)9r"   rX   rf  r9   r�   r  r   Úplatformr{   r(   Úcollectionsr   Úoauthlib.oauth2r  r   rd  Úrequests_oauthlibr   Úkubernetes.clientr   r   Úkubernetes.config.exec_providerr   Úconfig_exceptionr	   Údateutilr
   r   r   Úgoogle.authrš   Úgoogle.auth.transport.requestsr™   ÚImportErrorÚ	timedeltar8   Úenvironrâ   r†  Úsystemrj  r   r   r4   r<   r?   rg   r‹   r¥   rY  r‚  r€  r‰  rŽ  r�  r’  r”  re   r=   r   ú<module>r£     s©  ðð €€€Ø €€€Ø €€€Ø €€€Ø €€€Ø €€€Ø 	€	€	€	Ø €€€Ø Ð Ð Ð Ø €€€Ø "Ð "Ð "Ð "Ð "Ð "à Ð Ð Ð Ø €€€Ø €€€Ø +Ð +Ð +Ð +Ð +Ð +à 6Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6Ø 8Ð 8Ð 8Ð 8Ð 8Ð 8à -Ð -Ð -Ð -Ð -Ð -Ø 8Ð 8Ð 8Ð 8Ð 8Ð 8Ð 8Ð 8Ð 8Ð 8ð"ØÐÐÐØ)Ð)Ð)Ð)Ø ÐÐøØð "ð "ð "Ø!ÐÐÐð"øøøð
  2˜xÔ1¸!Ð<Ñ<Ô<Ð Ø!œzŸ~š~¨lÐ<LÑMÔMÐ Ø'6 x¤Ñ'8Ô'8¸IÒ'EÐ'E  È3Ð Ø€ðð ð ðð ð ð ð$+ð +ð +ð
?Pð ?Pð ?Pð ?Pð ?Pñ ?Pô ?Pð ?PðD%Fð %Fð %Fð %Fð %Fñ %Fô %Fð %FðPi+ð i+ð i+ð i+ð i+ñ i+ô i+ð i+ðX?Kð ?Kð ?Kð ?Kð ?Kñ ?Kô ?Kð ?KðDW5ð W5ð W5ð W5ð W5ñ W5ô W5ð W5ðv "'ðð ð ð ð ØØðð ð ð ð2:ð :ð :ð :ð 04Ø*.Ø$(Ø$(ð2ð 2ð 2ð 2ðB 59Ø48Ø.2Ø.2ð2ð 2ð 2ð 2ðF ØØØ!ð	9ð 9ð 9ð 9ð& ØØØØ!ð9ð 9ð 9ð 9ð 9ð 9s   Á 
A+ Á+A5Á4A5