+
    i'                     f    ^ RI t ^ RIHtHtHt ] P
                  ! ]4      tR tRR lt	R t
RR ltR# )	    N)	lifecycle
type_utilsutilc                    \        V \        4      '       d    V P                  4       P                  R 4      p \        V \        4      '       Ed$   / pV  EF  p\        V\
        4      '       d   VP                  4        F  w  r4\        V\        \        34      '       g'   \        R\        P                  ! V4      ,          4      h\        V\        4      '       d$   VP                  V. 4      P                  V4       K  VP                  V. 4      P                  V4       K  	  K  \        V\        4      '       d   W!9  d   . W&   K  K  \        R\        P                  ! V4      ,          4      h	  Tp / p\        V \
        4      '       d4   V P                  4        F  w  rg\        P                  ! V4      WV&   K  	  V# \        R\        P                  ! V 4      ,          4      h),zBad group member type %szUnknown group name type %sz@Group config must be list, dict or string type only but found %s)
isinstancestrstripsplitlistdictitems	TypeErrorr   obj_name
setdefaultextendappendr   uniq_merge_sorted)grp_cfg	c_grp_cfgikvgroupsgrp_namegrp_memberss   &       ;/usr/lib/python3/dist-packages/cloudinit/distros/ug_util.py_normalize_groupsr      s   '3--/'','4  	A!T""GGIDA%a$55'6)22157 
 "!T**!,,Q3::1=!,,Q3::1= & As##%#%IL &  0J4G4G4JK # ( F'4  %,]]_!H#55kBF &5 M	 N""7+-
 	
    c                    \        V \        4      '       d   . pV P                  4        F  w  r4\        V\        \        \
        \        34      '       d;   \        P                  ! V4      '       d   VP                  \        V4      4       Kc  Ke  \        V\        4      '       d   W4R &   VP                  V4       K  \        R\        P                  ! V4      : RV: 24      h	  Tp M,\        V \        4      '       d   \        P                  ! V 4      p / pV  F  p\        V\        \        34      '       d6   \        P                  ! V4       F  pV'       g   K  Wu9  g   K  / WW&   K  	  KT  \        V\        4      '       dI   VP!                  R R4      pVP#                  V4      ;'       g    / p	\        P$                  ! W.4      WX&   K  \        R\        P                  ! V4      ,          4      h	  V'       dk   / p
VP                  4        FR  w  r/ pVP                  4        F3  w  r4VP'                  RR4      P)                  4       pV'       g   K/  WMV&   K5  	  WV&   KT  	  T
pRpV'       d   RV9   d   VP!                  R4      pV'       d   VP+                  4       pVP!                  R 4      pVP!                  R. 4      pVP!                  V/ 4      pVP#                  R. 4      p\        P                  ! VV4      pR	P-                  V4      VR&   \        P$                  ! WV.4      W^&   VP                  4        F  w  rV'       d   W8H  MR
VR&   K  	  V# )namezUnmappable user value type z	 for key defaultzDUser config must be dictionary/list or string  types only and not %s-_Nr   r   F)r   r   r   boolintfloatr	   r   is_truer   r   r   r   r   r   
uniq_mergepopgetmergemanydictreplacer
   copyjoin)u_cfgdef_user_cfgad_ucfgr   r   usersuser_configunprev_configc_usersunameuconfig	c_uconfigdef_user
def_config
def_groupsparsed_configparsed_groupsusers_groupss   &&                  r   _normalize_usersrB   I   s   %KKMDA!dC455<<??NN3q6* #At$$&	q!!**1-q2  " 	E3		&&u-EkD#;//__[11!EH 2 T**	2A))A,,,"K));*DEEH),6,?,?,LN    #kkmNEIIIc3'--/1#$aL ( 'EN ,  He#YYy)
 (,,.L#''/H%))(B7J "IIh3M)--h;M11-LL&)hh|&<M(# #00=9EO  ++-2:U.	 ( Lr   c                 p   V '       g   / p / pR V 9   d   V R ,          '       d   V R ,          p\        V\        4      '       d   RV/p\        P                  ! RRRR7       MB\        V\        4      '       g-   \
        P                  R\        P                  ! V4      4       / p/ p VP                  4       p\        P                  ! W#.4      pV P                  R. 4      p\        V\        \        34      '       d'   \        P                  ! R	\        V4       2RR
R7       MB\        V\        4      '       g-   \
        P                  R\        P                  ! V4      4       . pV'       d   \        V\        4      '       d   VP!                  RR/4       MT\        V\        4      '       d    \	        V4      P                  RR4      VR&   M\        V\        4      '       d
   VR,          p/ pRV 9   d   \#        V R,          4      p\%        WT4      pWv3#   \         d    \
        P                  R4        ELi ; i)userr!   z'user' of type stringz22.2zUse 'users' list instead.)
deprecateddeprecated_versionextra_messagez?Format for 'user' key must be a string or dictionary and not %sziDistro has not implemented default user access. No distribution provided default user will be normalized.r3   z'users' of type zUse 'users' as a list.z^Format for 'users' key must be a comma-separated string or a dictionary or a list but found %sr"   Tz,defaultr   )r   r	   r   	deprecater   LOGwarningr   r   get_default_userNotImplementedErrorr   r,   r+   typer   r   r   rB   )cfgdistroold_userdistro_user_configdefault_user_config
base_usersr   r3   s   &&      r   normalize_users_groupsrT      s   
 H}Vv;h$$)H2#)9
 Hd++KK##H-
 H 
#446 ,,h-KL"%J*tSk**)$z*:);<%2	

 
T++6
+	

 
j$''vy12
D))$($4$8$8D$IJy!
C((*$JF3"3x=1Z=E?Q  
E	

s   %H  H54H5c                     V '       g   W3# R  p\        \        W0P                  4       4      4      pV'       g   W3# \        V4      ^ ,          pWE,          pVP	                  RR4       WV3# )c                 H    V ^,          pV'       d   RV9  d   R# VR,          # )   r"   F )entryconfigs   & r   	safe_find"extract_default.<locals>.safe_find   s#    q&0i  r   r"   N)r   filterr   r   r*   )r3   default_namedefault_configr[   	tmp_usersr!   rZ   s   &&&    r   extract_defaultra      sa    --! VI{{}56I--	?1D_F
JJy$>r   )N)NN)logging	cloudinitr   r   r   	getLogger__name__rI   r   rB   rT   ra   rX   r   r   <module>rf      s9     1 1!%bNxI\r   