+
    ˜qgj­’  ã                   ó  a € RQ t-0 t ^ RIt^ RIt^ RIt^ RIHtHtHtHt ^ RI	H
t
HtHt ^ RIHtHtHtHtHtHtHtHtHtHt ]'       d   ^ RIHt ]P4                  ! ]4      t^t^. RRO/t. RSOtR/ RRbR	R
bRRbRRbRRbRRbRRbRRbRRbRRbRRbRRbRR bR!R"bR#R$bR%R&bR'R(bR)R*R+R,/CR-R.R/R0R1R2R3R4RR5R6R7R8R9RR:R;R<R=R>R?R@R//t ] ^ k RA RB lt!RC t" ! RD RE]#4      t$RF t% ! RG RH4      t& ! RI RJ4      t'RK t(RTRL lt)RM t*RN t+RURO RP llt,R# )Vé    N)ÚTYPE_CHECKINGÚAnyÚDictÚOptional)Ú	lifecycleÚsafeyamlÚutil)
Úfind_interface_name_from_macÚget_interfaces_by_macÚipv4_mask_to_net_prefixÚipv6_mask_to_net_prefixÚis_ip_networkÚis_ipv4_addressÚis_ipv4_networkÚis_ipv6_addressÚis_ipv6_networkÚnet_prefix_to_ipv4_mask©ÚRendererÚbondzbond-ad-selectz	ad-selectzbond-all-slaves-activezall-slaves-activezbond-arp-all-targetszarp-all-targetszbond-arp-intervalzarp-intervalzbond-arp-ip-targetzarp-ip-targetzbond-arp-validatezarp-validatezbond-downdelayz
down-delayzbond-fail-over-maczfail-over-mac-policyzbond-lacp-ratez	lacp-ratezbond-learn-packet-intervalzlearn-packet-intervalzbond-miimonzmii-monitor-intervalzbond-min-linksz	min-linksz	bond-modeÚmodezbond-num-grat-arpúgratuitous-arpzbond-packets-per-slavezpackets-per-slavezbond-primaryÚprimaryzbond-primary-reselectzprimary-reselect-policyzbond-updelayzup-delayzbond-xmit-hash-policyztransmit-hash-policyÚbridgeÚbridge_ageingzageing-timeÚbridge_bridgeprioÚpriorityÚ	bridge_fdzforward-delayÚbridge_gcintÚbridge_helloz
hello-timeÚbridge_maxagezmax-ageÚbridge_maxwaitÚbridge_pathcostz	path-costÚbridge_portpriozport-priorityÚ
bridge_stpÚstpÚbridge_waitportc                ó(   € V ^8„  d   QhR\         RR/# )é   ÚdiktÚreturnN©Údict)Úformats   "Ú=/usr/lib/python3/dist-packages/cloudinit/net/network_state.pyÚ__annotate__r0   \   s   € ÷ 
ñ 
¤dð 
¨tñ 
ó    c                óX   € RV 9   g   RV 9   d   \         P                  ! RRRR7       R# R# )z8Warn about deprecations of v2 properties for all devicesÚgateway4Úgateway6z$The use of `gateway4` and `gateway6`z22.4zbFor more info check out: https://docs.cloud-init.io/en/latest/topics/network-config-format-v2.html)Ú
deprecatedÚdeprecated_versionÚextra_messageN)r   Ú	deprecate)r*   s   &r/   Úwarn_deprecated_all_devicesr9   \   s0   € à�TÔ˜Z¨4Ô/Ü×ÒØ=Ø%ðX÷	
ñ 0r1   c                 óP   € \        V 4      pV F  pVP                  V4       K  	  V# ©N)ÚsetÚdiscard)ÚexpectedÚactualÚmissingÚkeys   &&  r/   Ú	diff_keysrB   g   s&   € Ü�(‹m€GÛˆØ�‰˜Öñ à€Nr1   c                   ó   € ] tR t^ntRtR# )ÚInvalidCommand© N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__static_attributes__rE   r1   r/   rD   rD   n   s   † Ûr1   rD   c                 ó   a € V 3R  lpV# )c                 óJ   <a € \         P                  ! S 4      V V3R  l4       pV# )c                 óz   <€ S'       d(   \        SV4      pV'       d   \        R V: RS: 24      hS! W.VO5/ VB # )zCommand missing z of required keys )rB   rD   )ÚselfÚcommandÚargsÚkwargsÚmissing_keysÚfuncÚrequired_keyss   &&*, €€r/   Ú	decoratorÚ7ensure_command_keys.<locals>.wrapper.<locals>.decoratort   sC   ø€ çÜ(¨¸Ó@�ßÝ(ã'ªð8óð ñ ˜Ð7¨Ò7°Ñ7Ð7r1   )Ú	functoolsÚwraps)rS   rU   rT   s   f €r/   ÚwrapperÚ$ensure_command_keys.<locals>.wrappers   s&   ù€ Ü	�Š˜Ó	õ	8ó 
ð	8ð Ðr1   rE   )rT   rY   s   f r/   Úensure_command_keysr[   r   s   ø€ õð €Nr1   c                   óÐ   a € ] tR t^„t o ]3V 3R lR llt]V 3R lR l4       t]R 4       t]R 4       t	]R 4       t
]R 4       tRR
 ltRR ltR tR t]V 3R lR l4       tRtV tR	# )ÚNetworkStatec                ó&   <€ V ^8„  d   QhRS[ RS[/# )r)   Únetwork_stateÚversion)r-   Úint)r.   Ú__classdict__s   "€r/   r0   ÚNetworkState.__annotate__…   s   ø€ ÷ 'ñ 'Ù!ð'Ù,/ñ'r1   c                ó„   € \         P                  ! V4      V n        W n        VP	                  R R4      V n        RV n        R# )Úuse_ipv6FN)ÚcopyÚdeepcopyÚ_network_stateÚ_versionÚgetre   Ú_has_default_route)rN   r_   r`   s   &&&r/   Ú__init__ÚNetworkState.__init__…   s6   € ô #Ÿmšm¨MÓ:ˆÔØŒØ%×)Ñ)¨*°eÓ<ˆŒØ"&ˆÖr1   c                ó    <€ V ^8„  d   QhRS[ /# ©r)   r+   r,   )r.   rb   s   "€r/   r0   rc   Ž   s   ø€ ÷ -ñ -™ñ -r1   c                ó(   € V P                   R ,          # )Úconfig)rh   ©rN   s   &r/   rq   ÚNetworkState.config�   s   € à×"Ñ" 8Õ,Ð,r1   c                ó   € V P                   # r;   )ri   rr   s   &r/   r`   ÚNetworkState.version‘   s   € à�}‰}Ðr1   c                ó^   €  V P                   R ,          R,          #   \         d    . u # i ; i)ÚdnsÚnameservers©rh   ÚKeyErrorrr   s   &r/   Údns_nameserversÚNetworkState.dns_nameservers•   s1   € ð	Ø×&Ñ& uÕ-¨mÕ<Ð<øÜô 	ØŠIð	úó   ‚ œ,«,c                ó^   €  V P                   R ,          R,          #   \         d    . u # i ; i)rw   Úsearchry   rr   s   &r/   Údns_searchdomainsÚNetworkState.dns_searchdomainsœ   s1   € ð	Ø×&Ñ& uÕ-¨hÕ7Ð7øÜô 	ØŠIð	úr}   c                ó`   € V P                   f   V P                  4       V n         V P                   # r;   )rk   Ú_maybe_has_default_routerr   s   &r/   Úhas_default_routeÚNetworkState.has_default_route£   s+   € à×"Ñ"Ò*Ø&*×&CÑ&CÓ&EˆDÔ#Ø×&Ñ&Ð&r1   Nc              #  ó°   "  € V P                   P                  R / 4      pVP                  4        F!  pVf   Vx € K  V! V4      '       g   K  Vx € K#  	  R# 5i)Ú
interfacesN)rh   rj   Úvalues)rN   Úfilter_funcÚifacesÚifaces   &&  r/   Úiter_interfacesÚNetworkState.iter_interfaces©   sH   é € Ø×$Ñ$×(Ñ(¨°rÓ:ˆØ—]‘]–_ˆEØÒ"Ø”á˜u×%Ô%Ø”Kó %ùs   ‚AAÁ
Ac              #  ó�   "  € V P                   P                  R . 4       F!  pVe   V! V4      '       d   Vx € K  K  Vx € K#  	  R# 5i©ÚroutesN©rh   rj   )rN   r‰   Úroutes   && r/   Úiter_routesÚNetworkState.iter_routes²   sD   é € Ø×(Ñ(×,Ñ,¨X°rÖ:ˆEØÒ&Ù˜u×%Ò%Ø”Kñ &ð ”ó ;ùs
   ‚1A´Ac                ó2  € V P                  4        F  pV P                  V4      '       g   K   R # 	  V P                  4        FQ  pVP                  R. 4       F8  pVP                  R. 4       F  pV P                  V4      '       g   K     R # 	  K:  	  KS  	  R# )TÚsubnetsr�   F)r“   Ú_is_default_routerŒ   rj   )rN   r’   r‹   Úsubnets   &   r/   rƒ   Ú%NetworkState._maybe_has_default_routeº   s�   € Ø×%Ñ%Ö'ˆEØ×%Ñ% e×,Ô,Úñ (ð ×)Ñ)Ö+ˆEØŸ)™) I¨rÖ2�Ø#ŸZ™Z¨°"Ö5�EØ×-Ñ-¨e×4Ô4Ü#ó 6ó 3ñ ,ñ
 r1   c                óf   € RpVP                  R4      ^ 8H  ;'       d    VP                  R4      V9   # )ú::ÚprefixÚnetwork)r›   z0.0.0.0)rj   )rN   r’   Údefault_netss   && r/   r—   ÚNetworkState._is_default_routeÅ   s3   € Ø(ˆà�I‰I�hÓ 1Ñ$×MÐM¨¯©°9Ó)=ÀÑ)Mð	
r1   c                ó$   <€ V ^8„  d   QhRS[ RR/# )r)   r_   r+   r]   r,   )r.   rb   s   "€r/   r0   rc   Ì   s   ø€ ÷ 8ñ 8©4ð 8°Nñ 8r1   c                óB   € / pRV9   d   VR,          VR&   V ! RV/3/ VB # )zÁInstantiates a `NetworkState` without interpreting its data.

That means only `config` and `version` are copied.

:param network_state: Network state data.
:return: Instance of `NetworkState`.
r`   rq   rE   )Úclsr_   rQ   s   && r/   Úto_passthroughÚNetworkState.to_passthroughË   s5   € ð ˆØ˜Ô%Ø -¨iÕ 8ˆF�9ÑÙ�H˜mÐ,Ñ7°Ñ7Ð7r1   )rk   rh   ri   re   r;   )rF   rG   rH   rI   ÚNETWORK_STATE_VERSIONrl   Úpropertyrq   r`   r{   r€   r„   rŒ   r“   rƒ   r—   Úclassmethodr£   rJ   Ú__classdictcell__©rb   s   @r/   r]   r]   „   sž   ø‡ € à2G÷'ò 'ð ÷-ó ð-ð ñó ðð ñó ðð ñó ðð ñ'ó ð'ô
 ôò	ò
ð ÷8ó ö8r1   r]   c            
       ó<  a € ] tR t^Út o R/ R. RR. R. /RRRR	/t]R	R	3V 3R
 lR llt]V 3R lR l4       t]R 4       t	]	P                  R 4       t	R tR tR tR tR/R ltR/R ltR/R lt]! R.4      R 4       t]! R.4      R 4       t]! . R0O4      R 4       t]! . R1O4      R 4       t]! RR.4      R 4       t]! R.4      R 4       tR t]! R .4      R! 4       t]! R .4      R" 4       t]! R#.4      R$ 4       tR% tR& tR' tR( t R) t!V 3R* lR+ lt"R2R, lt#R- t$R.t%V t&R	# )3ÚNetworkStateInterpreterr‡   r�   rw   rx   r   re   Frq   Nc                ó   <€ V ^8„  d   QhRR/# )r)   ÚrendererzOptional[Renderer]rE   )r.   rb   s   "€r/   r0   Ú$NetworkStateInterpreter.__annotate__æ   s   ø€ ÷ 
ñ 
ð 'ñ	
r1   c                óò  € Wn         W n        \        P                  ! V P                  4      V n        W P
                  R &   RV n        / V n        W0n        RV P                  RV P                  RV P                  RV P                  RV P                  RV P                  RV P                  R	V P                   R
V P"                  RV P$                  RV P&                  RV P(                  RV P*                  /V n        R# )rq   Fr   Úbondsr   ÚbridgesÚ	ethernetsÚ
infinibandÚloopbackÚ
nameserverÚphysicalr’   ÚvlanÚvlansÚwifisN)ri   Ú_configrf   rg   Úinitial_network_staterh   Ú_parsedÚ_interface_dns_mapÚ	_rendererÚhandle_bondÚhandle_bondsÚhandle_bridgeÚhandle_bridgesÚhandle_ethernetsÚhandle_infinibandÚhandle_loopbackÚhandle_nameserverÚhandle_physicalÚhandle_routeÚhandle_vlanÚhandle_vlansÚhandle_wifisÚcommand_handlers)rN   r`   rq   r­   s   &&&&r/   rl   Ú NetworkStateInterpreter.__init__æ   sà   € ð  ŒØŒÜ"Ÿmšm¨D×,FÑ,FÓGˆÔØ(.×Ñ˜HÑ%ØˆŒØ(*ˆÔØ!Œà�D×$Ñ$Ø�T×&Ñ&Ø�d×(Ñ(Ø�t×*Ñ*Ø˜×.Ñ.Ø˜$×0Ñ0Ø˜×,Ñ,Ø˜$×0Ñ0Ø˜×,Ñ,Ø�T×&Ñ&Ø�D×$Ñ$Ø�T×&Ñ&Ø�T×&Ñ&ð!
ˆÖr1   c                ó    <€ V ^8„  d   QhRS[ /# ro   )r]   )r.   rb   s   "€r/   r0   r®     s   ø€ ÷ Hñ H™|ñ Hr1   c                ó  € ^ RI Hp V P                  ^8X  dQ   \        V P                  V4      '       d5   \
        P                  R4       \        P                  V P                  4      # \        V P                  V P                  R7      # )r   r   zPassthrough netplan v2 config©r`   )Úcloudinit.net.netplanr   ri   Ú
isinstancer¾   ÚLOGÚdebugr]   r£   rº   rh   )rN   ÚNetplanRenderers   & r/   r_   Ú%NetworkStateInterpreter.network_state  sZ   € åEà�=‰=˜AÔ¤*¨T¯^©^¸_×"MÒ"MÜ�I‰IÐ5Ô6Ü×.Ñ.¨t¯|©|Ó<Ð<Ü˜D×/Ñ/¸¿¹ÔGÐGr1   c                ó8   € V P                   P                  R 4      # )re   r‘   rr   s   &r/   re   Ú NetworkStateInterpreter.use_ipv6  s   € à×"Ñ"×&Ñ& zÓ2Ð2r1   c                ó@   € V P                   P                  R V/4       R# )re   N)rh   Úupdate)rN   Úvals   &&r/   re   rØ     s   € à×Ñ×"Ñ" J°Ð#4Ö5r1   c                óz   € R V P                   RV P                  RV P                  /p\        P                  ! V4      # ©r`   rq   r_   )ri   rº   rh   r   Údumps)rN   Ústates   & r/   ÚdumpÚNetworkStateInterpreter.dump  s7   € à�t—}‘}Ø�d—l‘lØ˜T×0Ñ0ð
ˆô
 �~Š~˜eÓ$Ð$r1   c                ód  € R V9  d!   \         P                  R4       \        R4      h\        VR ,          ,          p\	        W!4      pV'       d*   RV,          p\         P                  V4       \        V4      hV Uu. uF  qUR9  g   K  VNK  	  up F  p\        WW,          4       K  	  R# u upi )r`   z$Invalid state, missing version fieldzInvalid state, missing keys: %sNrÐ   )rÓ   ÚerrorÚ
ValueErrorÚNETWORK_STATE_REQUIRED_KEYSrB   Úsetattr)rN   rß   rT   rR   ÚmsgÚkrA   s   &&     r/   ÚloadÚNetworkStateInterpreter.load  s�   € Ø˜EÔ!Ü�I‰IÐ<Ô=ÜÐCÓDÐDä3°E¸)Õ4DÕEˆÜ  Ó6ˆßØ3°|ÕDˆCÜ�I‰I�cŒNÜ˜S“/Ð!ñ  -ÓE™}˜!¸Ñ0D—A�A™}ÔEˆCÜ�D˜u�zÖ*ó FùÒEs   Á<B-Â	B-c                óB   € \         P                  ! V P                  4      # r;   )r   rÞ   rh   rr   s   &r/   Údump_network_stateÚ*NetworkStateInterpreter.dump_network_state,  s   € Ü�~Š~˜d×1Ñ1Ó2Ð2r1   c                ó6   € R V P                   RV P                  /# )r`   rq   )ri   rº   rr   s   &r/   Úas_dictÚNetworkStateInterpreter.as_dict/  s   € Ø˜4Ÿ=™=¨(°D·L±LÐAÐAr1   c                ó¶   € V P                   ^8X  d   V P                  VR7       RV n        R# V P                   ^8X  d   V P                  VR7       RV n        R# R# )é   ©Úskip_brokenTN)ri   Úparse_config_v1r¼   Úparse_config_v2)rN   rô   s   &&r/   Úparse_configÚ$NetworkStateInterpreter.parse_config2  sO   € Ø�=‰=˜AÔØ× Ñ ¨[Ð Ô9ØˆDŽLØ�]‰]˜aÔØ× Ñ ¨[Ð Ô9ØˆDŽLñ  r1   c                óz  € V P                    F)  pVR ,          p V P                  V,          p T! T4       K+  	  V P                  P                  4        F9  w  rgRp V P                  R,          V,          pT'       g   K,  Tw  ršRT	R	T
/TR
&   K;  	  R#   \         d   p\        RT,          4      ThRp?ii ; i  \         dI    T'       g   h \
        P                  RTRR7       \
        P                  T P                  4       4        Kþ  i ; i  \         d!   p\        RP                  T4      4      ThRp?ii ; i)Útypez"No handler found for  command '%s'NúSkipping invalid command: %sT©Úexc_infor‡   zINameserver specified for interface {0}, but interface {0} does not exist!rx   r   rw   )rº   rÌ   rz   ÚRuntimeErrorrD   rÓ   ÚwarningrÔ   rì   r½   Úitemsrh   rä   r.   )rN   rô   rO   Úcommand_typeÚhandlerÚeÚ	interfacerw   r‹   rx   r   s   &&         r/   rõ   Ú'NetworkStateInterpreter.parse_config_v1:  s<  € Ø—|”|ˆGØ" 6�?ˆLðØ×/Ñ/°Õ=�ð
	9Ù˜Ö ñ $ð$ #×5Ñ5×;Ñ;Ö=‰NˆIØˆEðØ×+Ñ+¨LÕ9¸)ÕD�÷ ‰uØ&)Ñ#�à! ;Ø˜fð ��e“ó >øô ô Ü"Ø8¸<ÕGóàðûðûô "ô 9ß"Øä—K‘KØ6¸È$ð  ô ô —I‘I˜d×5Ñ5Ó7×8ð9ûô ô Ü ð8ß8>¹¸yÓ8Ióð ðûðúsF   šB®B9ÁDÂB6ÂB1Â1B6Â9DÃ<DÄDÄD:ÄD5Ä5D:c                óú  € ^ RI Hp \        V P                  V4      '       d   R# V P                  P                  4        F<  w  r4VR9   d   K   V P                  V,          p T! T4       T P                  T4       K>  	  R#   \         d   p\        RT,          4      ThRp?ii ; i  \         dI    T'       g   h \        P                  RTRR7       \        P                  T P                  4       4        Kº  i ; i)r   r   Nz!No handler found for command '%s'rû   Trü   )r`   r­   )rÑ   r   rÒ   r¾   rº   r   rÌ   rz   rþ   Ú
_v2_commonrD   rÓ   rÿ   rÔ   rì   )rN   rô   rÕ   r  rO   r  r  s   &&     r/   rö   Ú'NetworkStateInterpreter.parse_config_v2]  sÜ   € ÝEä�d—n‘n o×6Ò6áà%)§\¡\×%7Ñ%7Ö%9Ñ!ˆLØÐ6Ô6ÙðØ×/Ñ/°Õ=�ð

9Ù˜Ô Ø—‘ Ö(ó &:øô
 ô Ü"Ø7¸,ÕFóàðûðûô "ô 9ß"Øä—K‘KØ6¸È$ð  ô ô —I‘I˜d×5Ñ5Ó7×8ð9ús0   ÁBÁ"B'ÂB$ÂBÂB$Â'C:Â:<C:Ã9C:Únamec                ó$   € V P                  V4      # r;   ©rÇ   ©rN   rO   s   &&r/   rÅ   Ú'NetworkStateInterpreter.handle_loopbacky  s   € à×#Ñ# GÓ,Ð,r1   c                 óþ  € V P                   P                  R/ 4      pVP                  VR,          / 4      pVP                  R/ 4      P                  4        F  w  rEVP                  WE/4       K  	  \	        VP                  R4      4      pV P
                  '       gY   V FR  pVP                  R4      P                  R4      '       g#   \        VP                  R4      4      '       g   KK  RV n         M	  VP                  R	R
4      pVe   \        P                  ! V4      pVP                  RR
4      p	V	e   \        P                  ! V	4      p	VP                  RR
4      p
V
e   \        P                  ! V
4      p
VP                  RVP                  R4      RVP                  R4      RVP                  R4      RVP                  R4      RRRRRVP                  R4      RR
RR
RVR	VRV	RV
RVP                  R4      /4       VR,          '       d   VR,          P                  4       VR&   VP                  RVP                  R4      4      pV P                   R,          P                  W³/4       V P                  4        R
# )z®
command = {
    'type': 'physical',
    'mac_address': 'c0:d6:9f:2c:e8:80',
    'name': 'eth0',
    'subnets': [
        {'type': 'dhcp4'}
     ],
    'accept-ra': 'true'
}
r‡   r	  Úparamsr–   rú   Ú6ÚaddressTú	accept-raNÚ	wakeonlanÚoptionalÚ	config_idÚmac_addressÚinetr   ÚmanualÚmtuÚgatewayÚkeep_configuration)rh   rj   r   rÚ   Ú_normalize_subnetsre   Úendswithr   r	   Úis_trueÚlowerrì   )rN   rO   r‡   r‹   ÚparamrÛ   r–   r˜   Ú	accept_rar  r  Ú	iface_keys   &&          r/   rÇ   Ú'NetworkStateInterpreter.handle_physical}  s(  € ð ×(Ñ(×,Ñ,¨\¸2Ó>ˆ
Ø—‘˜w v�°Ó3ˆØ!Ÿ+™+ h°Ó3×9Ñ9Ö;‰JˆEØ�L‰L˜%˜Ö&ñ <ô % W§[¡[°Ó%;Ó<ˆð �}�}ˆ}Û!�Ø—:‘:˜fÓ%×.Ñ.¨s×3Ò3´Ø—J‘J˜yÓ)÷8ô 8ð %)�D”MÙñ "ð —K‘K ¨TÓ2ˆ	ØÒ ÜŸš YÓ/ˆIØ—K‘K ¨TÓ2ˆ	ØÒ ÜŸš YÓ/ˆIØ—;‘;˜z¨4Ó0ˆØÒÜ—|’| HÓ-ˆHØ�‰à˜WŸ[™[¨Ó5Ø˜Ÿ™ FÓ+Ø˜Ÿ™ FÓ+Ø˜wŸ{™{¨=Ó9Ø˜Ø˜Ø�w—{‘{ 5Ó)Ø˜4Ø˜4Ø˜7Ø˜YØ˜YØ˜HØ$ g§k¡kÐ2FÓ&Gðô	
ð& �×ÔØ#(¨Õ#7×#=Ñ#=Ó#?ˆE�-Ñ à—K‘K ¨W¯[©[¸Ó-@ÓAˆ	Ø×Ñ˜LÕ)×0Ñ0°)Ð1CÔDØ×ÑÖ!r1   c                ó&  € V P                   P                  R/ 4      pV P                  V4       VP                  VP                  R4      / 4      pVP                  R4      VR&   VP                  R4      VR&   VP                  VR,          V/4       R# )zª
auto eth0.222
iface eth0.222 inet static
        address 10.10.10.1
        netmask 255.255.255.0
        hwaddress ether BC:76:4E:06:96:B3
        vlan-raw-device eth0
r‡   r	  Ú	vlan_linkzvlan-raw-deviceÚvlan_idN)rh   rj   rÇ   rÚ   )rN   rO   r‡   r‹   s   &&  r/   rÉ   Ú#NetworkStateInterpreter.handle_vlan¿  s�   € ð ×(Ñ(×,Ñ,¨\¸2Ó>ˆ
Ø×Ñ˜WÔ%Ø—‘˜wŸ{™{¨6Ó2°BÓ7ˆØ#*§;¡;¨{Ó#;ˆÐÑ Ø"Ÿ;™; yÓ1ˆˆiÑØ×Ñ˜5 �=¨%Ð0Ö1r1   c                ó6  € V P                  V4       V P                  P                  R4      pVP                  VP                  R4      / 4      pVP                  R4      P                  4        F  w  rEVP	                  WE/4       K  	  VP	                  RR/4       V P                  R,          P	                  VR,          V/4       VP                  R4       F¾  pWb9  d   RVRR/pV P                  V4       V P                  P                  R/ 4      pVP                  V4      pVP                  R4      VR	&   VP                  R4      P                  4        F  w  rEVP	                  WE/4       K  	  V P                  R,          P	                  Wh/4       KÀ  	  R
# )a­  
#/etc/network/interfaces
auto eth0
iface eth0 inet manual
    bond-master bond0
    bond-mode 802.3ad

auto eth1
iface eth1 inet manual
    bond-master bond0
    bond-mode 802.3ad

auto bond0
iface bond0 inet static
     address 192.168.0.10
     gateway 192.168.0.1
     netmask 255.255.255.0
     bond-slaves none
     bond-mode 802.3ad
     bond-miimon 100
     bond-downdelay 200
     bond-updelay 200
     bond-lacp-rate 4
r‡   r	  r  zbond-slavesÚnoneÚbond_interfacesrú   r   zbond-masterN)rÇ   rh   rj   r   rÚ   )	rN   rO   r‡   r‹   r   rÛ   ÚifnameÚcmdÚbond_ifs	   &&       r/   r¿   Ú#NetworkStateInterpreter.handle_bondÐ  s^  € ð6 	×Ñ˜WÔ%Ø×(Ñ(×,Ñ,¨\Ó:ˆ
Ø—‘˜wŸ{™{¨6Ó2°BÓ7ˆØ!Ÿ+™+ hÓ/×5Ñ5Ö7‰JˆEØ�L‰L˜%˜Ö&ñ 8à�‰�m VÐ,Ô-Ø×Ñ˜LÕ)×0Ñ0°%¸µ-ÀÐ1GÔHð —k‘kÐ"3Ö4ˆFØÔ'à˜FØ˜Fð�ð
 ×$Ñ$ SÔ)à×,Ñ,×0Ñ0°¸rÓBˆJØ —n‘n VÓ,ˆGØ%,§[¡[°Ó%8ˆG�MÑ"à%Ÿk™k¨(Ó3×9Ñ9Ö;‘
�Ø—‘ ˜|Ö,ñ <à×Ñ Õ-×4Ñ4°fÐ5FÖGó 5r1   Úbridge_interfacesc                óà  € V P                   P                  R/ 4      pVP                  R4       F   pW29   d   K  RV/pV P                  V4       K"  	  V P                   P                  R/ 4      pV P                  V4       VP                  VP                  R4      / 4      pVR,          VR&   VP                  R/ 4      P                  4        F  w  rgVP	                  Wg/4       K  	  VP                  R4      pVeY   \        V\        4      '       gC   VR9   d   RpM%VR9   d   R	pM\        R
P                  VR7      4      hVP	                  RV/4       VP	                  VR,          V/4       R# )aÿ  
    auto br0
    iface br0 inet static
            address 10.10.10.1
            netmask 255.255.255.0
            bridge_ports eth0 eth1
            bridge_stp off
            bridge_fd 0
            bridge_maxwait 0

bridge_params = [
    "bridge_ports",
    "bridge_ageing",
    "bridge_bridgeprio",
    "bridge_fd",
    "bridge_gcint",
    "bridge_hello",
    "bridge_hw",
    "bridge_maxage",
    "bridge_maxwait",
    "bridge_pathcost",
    "bridge_portprio",
    "bridge_stp",
    "bridge_waitport",
]
r‡   r/  r	  Úbridge_portsr  r%   NTFz2Cannot convert bridge_stp value ({stp}) to boolean)r&   )ÚonÚ1rò   )ÚoffÚ0r   )	rh   rj   rÇ   r   rÚ   rÒ   Úboolrä   r.   )	rN   rO   r‡   r+  r,  r‹   r   rÛ   r%   s	   &&       r/   rÁ   Ú%NetworkStateInterpreter.handle_bridge  sZ  € ð> ×(Ñ(×,Ñ,¨\¸2Ó>ˆ
Ø—k‘kÐ"5Ö6ˆFØÔ#Ùð ˜ðˆCð × Ñ  Ö%ñ 7ð ×(Ñ(×,Ñ,¨\¸2Ó>ˆ
Ø×Ñ˜WÔ%Ø—‘˜wŸ{™{¨6Ó2°BÓ7ˆØ 'Ð(;Õ <ˆˆnÑØ!Ÿ+™+ h°Ó3×9Ñ9Ö;‰JˆEØ�L‰L˜%˜Ö&ñ <ð —Y‘Y˜|Ó,ˆ
ØÒ!¬*°ZÄ×*FÒ*FØ˜^Ô+Ø!‘
Ø˜Ô.Ø"‘
ä ðß%™v¨*˜vÓ5óð ð �L‰L˜,¨
Ð3Ô4à×Ñ˜5 �=¨%Ð0Ö1r1   c                ó(   € V P                  V4       R # r;   r  r  s   &&r/   rÄ   Ú)NetworkStateInterpreter.handle_infinibandF  s   € à×Ñ˜WÖ%r1   c                ó  € . p. pR V9   d=   VR ,          p\        V\        4      '       g   V.pV F  pVP                  V4       K  	  RV9   d=   VR,          p\        V\        4      '       g   V.pV F  pVP                  V4       K  	  W#3# )r  r   )rÒ   ÚlistÚappend)rN   rO   rx   r   ÚaddrsÚaddrÚpathsÚpaths   &&      r/   Ú
_parse_dnsÚ"NetworkStateInterpreter._parse_dnsJ  s�   € ØˆØˆØ˜ÔØ˜IÕ&ˆEÜ˜e¤T×*Ò*Ø˜�Û�Ø×"Ñ" 4Ö(ñ à�wÔØ˜HÕ%ˆEÜ˜e¤T×*Ò*Ø˜�Û�Ø—‘˜dÖ#ñ àÐ"Ð"r1   r  c                ó  € V P                   P                  R 4      pV P                  V4      w  r4RV9   d   VV3V P                  VR,          &   R# VR,          P	                  V4       VR,          P	                  V4       R# )rw   r  rx   r   N)rh   rj   rA  r½   Úextend)rN   rO   rw   rx   r   s   &&   r/   rÆ   Ú)NetworkStateInterpreter.handle_nameserver[  su   € à×!Ñ!×%Ñ% eÓ,ˆØ"Ÿo™o¨gÓ6ÑˆØ˜'Ô!àØð=ˆD×#Ñ# G¨KÕ$8Ó9ð
 �Õ×%Ñ% kÔ2Ø��M× Ñ  Ö(r1   c                ó€   € V P                   P                  R 4      pV P                  V4      w  rERVRV/W2,          R&   R# )r‡   rx   r   rw   N)rh   rj   rA  )rN   rO   r‹   Ú_ifacerx   r   s   &&&   r/   Ú_handle_individual_nameserverÚ5NetworkStateInterpreter._handle_individual_nameserverh  s>   € à×$Ñ$×(Ñ(¨Ó6ˆØ"Ÿo™o¨gÓ6ÑˆØ -¨{¸HÀfÐMˆ��eÓr1   Údestinationc                ó\   € V P                   R ,          P                  \        V4      4       R# r�   )rh   r<  Ú_normalize_router  s   &&r/   rÈ   Ú$NetworkStateInterpreter.handle_routen  s!   € à×Ñ˜HÕ%×,Ñ,Ô-=¸gÓ-FÖGr1   c                ó,   € V P                  VRR7       R# )a  
v2_command = {
  bond0: {
    'interfaces': ['interface0', 'interface1'],
    'parameters': {
       'mii-monitor-interval': 100,
       'mode': '802.3ad',
       'xmit_hash_policy': 'layer3+4'}},
  bond1: {
    'bond-slaves': ['interface2', 'interface7'],
    'parameters': {
        'mode': 1,
    }
  }
}

v1_command = {
    'type': 'bond'
    'name': 'bond0',
    'bond_interfaces': [interface0, interface1],
    'params': {
        'bond-mode': '802.3ad',
        'bond_miimon: 100,
        'bond_xmit_hash_policy': 'layer3+4',
    }
}

r   ©Úcmd_typeN©Ú_handle_bond_bridger  s   &&r/   rÀ   Ú$NetworkStateInterpreter.handle_bondss  s   € ð: 	× Ñ  °6Ð Ö:r1   c                ó,   € V P                  VRR7       R# )a_  
v2_command = {
  br0: {
    'interfaces': ['interface0', 'interface1'],
    'forward-delay': 0,
    'stp': False,
    'maxwait': 0,
  }
}

v1_command = {
    'type': 'bridge'
    'name': 'br0',
    'bridge_interfaces': [interface0, interface1],
    'params': {
        'bridge_stp': 'off',
        'bridge_fd: 0,
        'bridge_maxwait': 0
    }
}

r   rO  NrQ  r  s   &&r/   rÂ   Ú&NetworkStateInterpreter.handle_bridges’  s   € ð. 	× Ñ  °8Ð Ö<r1   c                óî  € \        4       pVP                  4        EFU  w  r4RVRR/pVP                  R/ 4      pVP                  RR4      pV'       g!   \        P	                  RV\        V4      4       WuR&   TpVP                  R	4      p	V	'       d   T	pM5V'       d.   V'       d&   VP                  4       p
\        V
4      pV'       d   TpW…R
&   VP                  RR4      pV'       d   RV/VR&   R F  pWÔ9   g   K  WM,          W]&   K  	  \        V4       V P                  V4      p\        V4      ^ 8”  d   VP                  RV/4       \        P	                  RV4       V P                  V4       EKX  	  R# )a…  
ethernets:
  eno1:
    match:
      macaddress: 00:11:22:33:44:55
      driver: hv_netvsc
    wakeonlan: true
    dhcp4: true
    dhcp6: false
    addresses:
      - 192.168.14.2/24
      - 2001:1::1/64
    gateway4: 192.168.14.1
    gateway6: 2001:1::2
    nameservers:
      search: [foo.local, bar.local]
      addresses: [8.8.8.8, 8.8.4.4]
  lom:
    match:
      driver: ixgbe
    set-name: lom1
    dhcp6: true
    accept-ra: true
  switchports:
    match:
      name: enp2*
    mtu: 1280

command = {
    'type': 'physical',
    'mac_address': 'c0:d6:9f:2c:e8:80',
    'name': 'eth0',
    'subnets': [
        {'type': 'dhcp4'}
     ]
}
r  rú   r¶   ÚmatchÚ
macaddressNzHNetworkState Version2: missing "macaddress" info in config entry: %s: %sr  úset-namer	  Údriverr  r–   z!v2(ethernets) -> v1(physical):
%s)r  rW  r  r  r  )r   r   rj   rÓ   rÔ   Ústrr  r
   r9   Ú_v2_to_v1_ipcfgÚlenrÚ   rÇ   )rN   rO   Úifaces_by_macÚethÚcfgÚphy_cmdrW  r  r	  Úset_nameÚlcase_mac_addressÚmacrZ  rA   r–   s   &&             r/   rÃ   Ú(NetworkStateInterpreter.handle_ethernets«  sU  € ôZ .Ó/ˆàŸ™Ÿ‰HˆCà˜SØ˜
ðˆGð —G‘G˜G RÓ(ˆEØŸ)™) L°$Ó7ˆKßÜ—	‘	ð.àÜ˜“Hô	ð &1�MÑ"ð ˆDØ—w‘w˜zÓ*ˆHßØ‘ß§Ø$/×$5Ñ$5Ó$7Ð!Ü2Ð3DÓE�ßØ�DØ"�F‰Oà—Y‘Y˜x¨Ó.ˆFßØ%-¨vÐ$6�˜Ñ!ÛM�Ø–:Ø#&¥8�G“Lñ Nô (¨Ô,à×*Ñ*¨3Ó/ˆGÜ�7‹|˜aÔØ—‘ 	¨7Ð3Ô4ä�I‰IÐ:¸GÔDØ× Ñ  ×)ó] (r1   c                óœ  € VP                  4        F·  w  r#RRRVRVP                  R4      RVP                  R4      RVP                  R	4      /pR
V9   d   VR
,          VR
&   \        V4       V P                  V4      p\	        V4      ^ 8”  d   VP                  RV/4       \        P                  RV4       V P                  V4       K¹  	  R# )zù
v2_vlans = {
    'eth0.123': {
        'id': 123,
        'link': 'eth0',
        'dhcp4': True,
    }
}

v1_command = {
    'type': 'vlan',
    'name': 'eth0.123',
    'vlan_link': 'eth0',
    'vlan_id': 123,
    'subnets': [{'type': 'dhcp4'}],
}
rú   r·   r	  r&  Úidr%  Úlinkr  rX  r  r–   zv2(vlans) -> v1(vlan):
%sN)	r   rj   r9   r\  r]  rÚ   rÓ   rÔ   rÉ   )rN   rO   r·   r`  Úvlan_cmdr–   s   &&    r/   rÊ   Ú$NetworkStateInterpreter.handle_vlans
  s·   € ð$ !Ÿ™ž‰IˆDà˜Ø˜Ø˜3Ÿ7™7 4›=Ø˜SŸW™W V›_Ø˜sŸw™w |Ó4ðˆHð ˜Œ|Ø"% e¥*�˜‘Ü'¨Ô,Ø×*Ñ*¨3Ó/ˆGÜ�7‹|˜aÔØ—‘ ¨GÐ 4Ô5Ü�I‰IÐ2°HÔ=Ø×Ñ˜XÖ&ó )r1   c                ó0   € \         P                  R 4       R# )zOWifi configuration is only available to distros with netplan rendering support.N)rÓ   rÿ   r  s   &&r/   rË   Ú$NetworkStateInterpreter.handle_wifis-  s   € Ü�‰ð*ö	
r1   c                ó   <€ V ^8„  d   QhRR/# )r)   r+   NrE   )r.   rb   s   "€r/   r0   r®   3  s   ø€ ÷ Dñ D ñ Dr1   c                óP  € \         P                  R V4       VP                  4        F{  w  r#RV9   g   K  VP                  R4      P                  R4      pVP                  R4      P                  R4      pRR/pV'       d   WFR&   V'       d   WVR&   V P	                  Wb4       K}  	  R# )zv2_common: handling config:
%srx   r   Ú	addressesrú   rµ   r  N)rÓ   rÔ   r   rj   rH  )rN   r`  r‹   Údev_cfgr   rw   Úname_cmds   &&     r/   r  Ú"NetworkStateInterpreter._v2_common3  s‹   € Ü�	‰	Ð3°SÔ9Ø!Ÿi™ižk‰NˆEØ Ö'Ø Ÿ™ ]Ó3×7Ñ7¸ÓA�Ø—k‘k -Ó0×4Ñ4°[ÓA�Ø" LÐ1�ßØ)/˜XÑ&ßØ*-˜YÑ'à×2Ñ2°8ÖCó *r1   c                óZ  a
€ \        R \        P                  V4      P                  4        4       4      o
VP                  4        EFa  w  r4\        R VP                  4        4       4      pVP                  R/ 4      pVP	                  RR4      pV'       d   WvR&   RVRVVR	,           VP                  R
4      R\        V
3R lVP                  4        4       4      /pRV9   d   VR,          VR&   RV9   d   VR,          VR&   \        V4       V P                  V4      p	\        V	4      ^ 8”  d   VP                  RV	/4       \        P                  RW"V4       VR8X  d   V P                  V4       EK.  VR8X  d   V P                  V4       EKI  \        RP                  VR7      4      h	  R# )z(Common handler for bond and bridge typesc              3   ó,   "  € T F
  w  rW!3x € K  	  R # 5ir;   rE   ©Ú.0rè   Úvs   &  r/   Ú	<genexpr>Ú>NetworkStateInterpreter._handle_bond_bridge.<locals>.<genexpr>E  s   é € ð 
ÙE‘t�qˆQ�FÓEùs   ‚c              3   óF   "  € T F  w  rV\         9  g   K  W3x € K  	  R # 5ir;   )ÚNETWORK_V2_KEY_FILTER)rv  rA   Úvalues   &  r/   rx  ry  J  s&   é € ð á$4‘L�SØÔ3Ñ3ô �•Û$4ùs   ‚!–!Ú
parameterszgratuitious-arpNr   rú   r	  Ú_interfacesr‡   r  c              3   ó>   <"  € T F  w  rSV,          V3x € K  	  R # 5ir;   rE   )rv  rè   rw  Úv2key_to_v1s   &  €r/   rx  ry  Z  s   øé € ÐN¹~±t°q ¨A¥°Õ2»~ùs   ƒr  rX  r  r–   zv2(%s) -> v1(%s):
%sr   r   z Unknown command type: {cmd_type}rO  )r-   ÚNET_CONFIG_TO_V2rj   r   Úpopr9   r\  r]  rÚ   rÓ   rÔ   rÁ   r¿   rä   r.   )rN   rO   rP  Ú	item_nameÚitem_cfgÚitem_paramsr  Ú
grat_valueÚv1_cmdr–   r€  s   &&&       @r/   rR  Ú+NetworkStateInterpreter._handle_bond_bridgeA  s’  ø€ ô ñ 
Ü/×3Ñ3°HÓ=×CÑCÔEó
ó 
ˆð $+§=¡=§?ÑˆIÜñ à$,§N¡NÔ$4óó ˆKð !—_‘_ \°2Ó6ˆFØŸ™Ð$5°tÓ<ˆJßØ+5Ð'Ñ(ð ˜Ø˜	Ø˜=Õ(¨(¯,©,°|Ó*DØœ$ÔN¸v¿|¹|¼~ÓNÓNð	ˆFð ˜Ô Ø (¨¥��u‘Ø˜xÔ'Ø(0°Õ(>��}Ñ%ä'¨Ô1Ø×*Ñ*¨8Ó4ˆGÜ�7‹|˜aÔØ—‘˜y¨'Ð2Ô3ä�I‰IÐ-¨xÀ6ÔJØ˜8Ô#Ø×"Ñ" 6×*Ø˜VÔ#Ø× Ñ  ×(ä Ø6×=Ñ=Ø!)ð >ó óð óI $3r1   c                óÈ  € R p. pVP                  R4      '       d/   RR/pV! VP                  R/ 4      V4       VP                  V4       VP                  R4      '       d6   RR/pRV n        V! VP                  R/ 4      V4       VP                  V4       RpRp/ pVP                  R	. 4       Fø  pRR
RV/pRV9   d1   RV9   d)   Vf%   VP                  R4      pVP                  RV/4       M/RV9   d)   Vf%   VP                  R4      pVP                  RV/4       RV9   dr   V'       gj   VP                  R4      P                  R	4      p	V	'       d   W—R&   VP                  R4      P                  R4      p
V
'       d   W§R&   VP                  V4       VP                  V4       Kú  	  . pVP                  R. 4       Fr  pVP                  \	        RVP                  R4      RVP                  R4      RVP                  R4      RVP                  R4      RVP                  R4      /4      4       Kt  	  \        V4      '       d   \        V4      '       d   W³^ ,          R&   V# )z7Common ipconfig extraction from v2 to v1 subnets array.c                 ó0   € R V 9   d   V R ,          VR&   R# R# )zroute-metricÚmetricNrE   )Ú	overridesr˜   s   &&r/   Ú_add_dhcp_overridesÚDNetworkStateInterpreter._v2_to_v1_ipcfg.<locals>._add_dhcp_overridesv  s   € Ø Ô*Ø#,¨^Õ#<��xÓ ñ +r1   Údhcp4rú   údhcp4-overridesÚdhcp6Túdhcp6-overridesNro  Ústaticr  Ú:r4   r  r3   rx   r{   r   Ú
dns_searchr�   rJ  ÚtoÚviar‹  r  Útable)rj   r<  re   rÚ   rL  r]  )rN   r`  r�  r–   r˜   r3   r4   rx   r  ro  r   r�   r’   s   &&           r/   r\  Ú'NetworkStateInterpreter._v2_to_v1_ipcfgs  s+  € ò	=ð ˆØ�7‰7�7×ÒØ˜gÐ&ˆFÙ §¡Ð(9¸2Ó >ÀÔGØ�N‰N˜6Ô"Ø�7‰7�7×ÒØ˜gÐ&ˆFØ ˆDŒMÙ §¡Ð(9¸2Ó >ÀÔGØ�N‰N˜6Ô"àˆØˆØˆØ—w‘w˜{¨BÖ/ˆGà˜Ø˜7ðˆFð
 �gŒ~Ø Ô$¨Ò)9Ø"Ÿw™w zÓ2�HØ—M‘M 9¨hÐ"7Ô8øà Ô$¨Ò)9Ø"Ÿw™w zÓ2�HØ—M‘M 9¨hÐ"7Ô8à Ô#¯KØŸG™G MÓ2×6Ñ6°{ÓC�	ßØ5>Ð 1Ñ2ØŸ™ Ó/×3Ñ3°HÓ=�ßØ06 Ñ-Ø—‘˜kÔ*à�N‰N˜6Ö"ñ1 0ð4 ˆØ—W‘W˜X rÖ*ˆEØ�M‰MÜ à% u§y¡y°£Ø! 5§9¡9¨UÓ#3Ø  %§)¡)¨HÓ"5Ø˜uŸy™y¨Ó/Ø §¡¨7Ó!3ðóö
ñ +ô ˆw�<Š<œC ŸKšKØ#)�A�J�xÑ àˆr1   )rº   r½   rh   r¼   r¾   ri   rÌ   re   )T)r	  r&  r%  )r	  r*  r  r;   )'rF   rG   rH   rI   r»   r¥   rl   r¦   r_   re   Úsetterrà   ré   rì   rï   r÷   rõ   rö   r[   rÅ   rÇ   rÉ   r¿   rÁ   rÄ   rA  rÆ   rH  rÈ   rÀ   rÂ   rÃ   rÊ   rË   r  rR  r\  rJ   r¨   r©   s   @r/   r«   r«   Ú   sï  ø‡ € à�bØ�"ØØ˜2Ø�bð
ð 	�EØ�$ð	Ðð &ØØ)-÷	
ò 
ð: ÷Hó ðHð ñ3ó ð3ð ‡_�_ñ6ó ð6ò%ò+ò 3òBô ô!ôF9ñ8 ˜&˜Ó"ñ-ó #ð-ñ ˜&˜Ó"ñ?"ó #ð?"ñB Ò9Ó:ñ2ó ;ð2ñ  Ò>Ó?ñ2Hó @ð2Hñh ˜&Ð"5Ð6Ó7ñ>2ó 8ð>2ñ@ ˜&˜Ó"ñ&ó #ð&ò#ñ" ˜)˜Ó%ñ
)ó &ð
)ñ ˜)˜Ó%ñNó &ðNñ
 ˜-˜Ó)ñHó *ðHò;ò>=ò2]*ò~!'òF
÷Dð Dô0÷dBð Br1   r«   c                 ód  € \         P                  ! V 4      p \        R  V P                  4        4       4      pV P	                  R4      R9   d   VP                  \        VRR7      4       V P	                  R. 4       Uu. uF  p\        V4      NK  	  upVR&   R pR F  pV! W4       K  	  V# u upi )c              3   ó@   "  € T F  w  rV'       g   K  W3x € K  	  R # 5ir;   rE   ru  s   &  r/   rx  Ú$_normalize_subnet.<locals>.<genexpr>»  s   é € Ð@©N¡D A¼aœ˜!�«Nùs   ‚“rú   ©Úaddress_keysr�   c                 ó‚   € W9   d9   \        W,          \        4      '       g   W,          P                  4       W&   R # R # R # r;   )rÒ   r;  Úsplit)Úsnetr	  s   &&r/   ÚlistifyÚ"_normalize_subnet.<locals>.listifyË  s.   € ØŒ<¤
¨4­:´t× <Ò <Ø�×)Ñ)Ó+ˆD‹Jñ !=‰<r1   )r“  Ústatic6)r  Ú
ip_address)r•  r{   )rf   rg   r-   r   rj   rÚ   Ú_normalize_net_keysrL  )r˜   Únormal_subnetÚrr£  rè   s   &    r/   Ú_normalize_subnetrª  ¸  s®   € ä�]Š]˜6Ó"€FÜÑ@¨F¯L©L¬NÓ@Ó@€Mà‡z�z�&ÓÐ2Ô2Ø×ÑÜØðôô	
ð &,§Z¡Z°¸"Ô%=óÙ%= Ô˜ÖÑ%=ñ€M�(Ñò,ó /ˆÙ�Ö!ñ /ð Ðùòs   Á=B-c                óä  € V P                  4        UUu/ uF  w  r#V'       g
   V^ 8X  g   K  W#bK  	  pppRpV F  pVP                  V4      '       g   K  Tp M	  V'       g:   RRP                  V4      : RV : 2p\        P	                  V4       \        V4      h\        VP                  V4      4      pVR8X  d“   \        VP                  R4      4      p	V	'       g#   Rp\        P	                  V4       \        V4      h\        V	4      '       d   RpM:\        V	4      '       d   R	pM&R
V	 R2p\        P	                  V4       \        V4      h\        V4      '       g&   \        P	                  RV4       \        RV R24      h\        V4      p
\        V4      pVP                  R4      pRV9   df   VP                  R4      w  rÞpWÔV&   V
'       d   \        V4      pM—V'       d   \        V4      pMƒ\        P	                  RV4       \        RV R24      hRV9   d   \        VR,          4      pMDV'       d   V'       d   \        V4      pM(V'       d   V
'       d   \        V4      pMV
'       d   ^@M^pRV9   d8   \        VR,          4      \        V4      8w  d   \        P!                  RVV4       VVR&   V
'       d   RV9   d   VR V# V'       d   \#        VR,          4      VR&   V# u uppi )a�  Normalize dictionary network keys returning prefix and address keys.

@param network: A dict of network-related definition containing prefix,
    netmask and address_keys.
@param address_keys: A tuple of keys to search for representing the address
    or cidr. The first address_key discovered will be used for
    normalization.

@returns: A dict containing normalized prefix and matching addr_key.
Nz No config network address keys [Ú,z] found in Údefaultr  zGateway IP is emptyz	0.0.0.0/0z::/0zInvalid Gateway IP: 'Ú'z$Address %s is not a valid ip networkzAddress z is not a valid ip addressÚnetmaskÚ/rœ   z;Overwriting existing 'prefix' with '%s' in network info: %s)r   rj   ÚjoinrÓ   rã   rä   r[  r   r   r   r   r   Ú	partitionr   r   ra   rÿ   r   )r�   rŸ  rè   rw  ÚnetÚaddr_keyrA   Úmessager>  Úgw_ipÚipv6Úipv4r¯  Ú	addr_partÚ_Úmaybe_prefixrœ   s   &&               r/   r§  r§  Õ  s~  € ð $ŸM™MœOÔ
;™O‘D�A¯q°A¸±FŒ4ˆ1Š4™O€CÑ
;Ø€HÛˆØ�7‰7�3�<Œ<ØˆHÙñ ÷ ˆ8à�H‰H�\Ö"Úð
ˆô 	�	‰	�'ÔÜ˜Ó!Ð!äˆs�w‰w�xÓ Ó!€DØˆyÔÜ�C—G‘G˜IÓ&Ó'ˆßØ+ˆGÜ�I‰I�gÔÜ˜WÓ%Ð%ä˜5×!Ò!Ø‰DÜ˜U×#Ò#Ø‰Dà-¨e¨W°AÐ6ˆGÜ�I‰I�gÔÜ˜WÓ%Ð%ä˜×ÒÜ�	‰	Ð8¸$Ô?Ü˜8 D 6Ð)CÐDÓEÐEä˜4Ó €DÜ˜4Ó €Dà�g‰g�iÓ €GØ
ˆd„{Ø%)§^¡^°CÓ%8Ñ"ˆ	�lØ!ˆH‰ßä,¨\Ó:‰Fßä,¨\Ó:‰Fô �I‰IÐ<¸dÔCÜ˜x¨ vÐ-GÐHÓIÐIØ	�SŒÜ�S˜•]Ó#‰ß	—TÜ(¨Ó1‰ß	—TÜ(¨Ó1‰ç‘ ˆà�3„œ3˜s 8�}Ó-´°V³Ô<Ü�‰ØIØØô	
ð
 €Cˆ�Mçð ˜ÔØ�I�ð €J÷ 
Ü0°°XµÓ?ˆˆI‰à€Jùó] <s
   ”K,¬K,c                óZ  € \        R V P                  4        4       4      pRV9   d   VR,          VR&   VR VP                  \        VRR7      4       VP	                  R4      pV'       d    \        V4      VR&   V# V#   \         d!   p\        RP                  T4      4      ThRp?ii ; i)	ag  normalize a route.
return a dictionary with only:
   'type': 'route' (only present if it was present in input)
   'network': the network portion of the route as a string.
   'prefix': the network prefix for address as an integer.
   'metric': integer metric (only if present in input).
   'netmask': netmask (string) equivalent to prefix iff network is ipv4.
c              3   ó>   "  € T F  w  rVR9  g   K  W3x € K  	  R# 5i)Ú N)r¾  NrE   ru  s   &  r/   rx  Ú#_normalize_route.<locals>.<genexpr>;  s    é € ð Ù(‘4�1¨A°ZÑ,?Œˆ�›=ùs   ‚’rJ  r�   rž  r‹  z(Route config metric {} is not an integerN)r�   rJ  )	r-   r   rÚ   r§  rj   ra   rä   Ú	TypeErrorr.   )r’   Únormal_router‹  r  s   &   r/   rL  rL  1  sÃ   € ô ñ Ø Ÿ;™;œ=óó €Lð ˜Ô$Ø".¨}Õ"=ˆ�YÑØ˜Ð'à×ÑÜØÐ'Aô	
ôð ×Ñ˜hÓ'€Fßð	Ü%(¨£[ˆL˜Ñ"ð
 Ðˆ<Ðøô	 ô 	ÜØ:×AÑAÀ&ÓIóàðûð	ús   Á-A? Á?B*Â
B%Â%B*c                 óV   € V '       g   . p V  Uu. uF  p\        V4      NK  	  up# u upi r;   )rª  )r–   Úss   & r/   r  r  S  s(   € ßØˆÙ*1Ó2©' QÔ˜aÖ ©'Ñ2Ð2ùÒ2s   �&c                ó<   € V ^8„  d   QhR\         R\        R\        /# )r)   Ú
net_configrô   r+   )r-   r6  r]   )r.   s   "r/   r0   r0   Y  s&   € ÷ ñ Üðäðô ñ	r1   c                óú   € RpV P                  R4      pV P                  R4      pV^8X  d   T pV'       d0   Ve,   \        WEVR7      pVP                  VR7       VP                  pV'       g   \	        RV  24      hV# )z^Parses the config, returns NetworkState object

:param net_config: curtin network config dict
Nr`   rq   )r`   rq   r­   ró   zpNo valid network_state object created from network config. Did you specify the correct version? Network config:
)rj   r«   r÷   r_   rþ   )rÅ  rô   r­   rß   r`   rq   Únsis   &&&    r/   Úparse_net_config_datarÈ  Y  s�   € ð €EØ�n‰n˜YÓ'€GØ�^‰^˜HÓ%€FØ�!„|ð ˆç�6Ò%Ü%Ø°Xô
ˆð 	×Ñ [ÐÔ1Ø×!Ñ!ˆçÜðEàˆlðó
ð 	
ð €Lr1   c                ó„   € V ^8„  d   Qh/ ^ \         9   d,   \        \        \        \        \        3,          3,          ;R&   # )r)   r�  )Ú__conditional_annotations__r   r[  r   )r.   s   "r/   r0   r0      s0   € ‡�÷^#ò #”$”sœD¤¤c �NÐ*Õ+ñ #ò_ r1   rÝ   )ro  r�  r�  r‘  r’  r3   r4   r‡   rW  r  rx   r­   rY  r  r  r  )rE   )TN).rÊ  rf   rW   ÚloggingÚtypingr   r   r   r   Ú	cloudinitr   r   r	   Úcloudinit.netr
   r   r   r   r   r   r   r   r   r   Úcloudinit.net.rendererr   Ú	getLoggerrF   rÓ   r¥   rå   r{  r�  r9   rB   Ú	ExceptionrD   r[   r]   r«   rª  r§  rL  r  rÈ  r0   )rÊ  s   @r/   Ú<module>rÒ     só  øð÷ €Û Û ß 5Ó 5ç /Ñ /÷÷ ÷ ÷ Ý/à×Ò˜Ó!€àÐ àÒ-ðÐ òÐ ð( ð Ø˜+ðà Ð"5ðð 	Ð 1ðð 	˜^ð	ð
 	˜oðð 	˜^ðð 	˜,ðð 	Ð4ðð 	˜+ðð 	%Ð&=ðð 	Ð-ðð 	˜+ðð 	�Vðð 	Ð-ðð 	!Ð"5ðð  	˜	ð!ð" 	 Ð!:ð#ð$ 	˜
ØÐ!7ñ'ð* Ø˜Ø˜ZØ�_Ø˜Ø˜Ø˜Ø˜$Ø˜;Ø˜?Ø�eØ˜4ðð-#/Ð ó #õL
òô	�Yô 	ò÷$S8ñ S8÷l[ñ [ò|ô:YòxòD3÷ñ r1   