§
    ÷¢±jíL  ã                   ó¶  — d 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T ddlmZ dadag ZdaddlZeZ	 	 	 	 	 	 	 d%d	„Zd&d
„Z	 d'd„Zd„ Zd„ Zd„ Z G d„ d¦  «        Zefd„Zd„ Zd„ Zd„ Zd„ Z d„ Z!d„ Z"d„ Z#defdefde fde!fde"fde#ffZ$ G d „ d!ej%        ¦  «        Z&d"„ Z'e(d#k    r$	  e'¦   «          dS # e)$ r  e*d$¦  «         Y dS w xY wdS )(aÃ  A re-implementation of the MS DirectoryService samples related to services.

* Adds and removes an ActiveDirectory "Service Connection Point",
  including managing the security on the object.
* Creates and registers Service Principal Names.
* Changes the username for a domain user.

Some of these functions are likely to become move to a module - but there
is also a little command-line-interface to try these functions out.

For example:

scp.py --account-name=domain\user --service-class=PythonScpTest \
       --keyword=foo --keyword=bar --binding-string=bind_info \
       ScpCreate SpnCreate SpnRegister

would:
* Attempt to delete a Service Connection Point for the service class
  'PythonScpTest'
* Attempt to create a Service Connection Point for that class, with 2
  keywords and a binding string of 'bind_info'
* Create a Service Principal Name for the service and register it

to undo those changes, you could execute:

scp.py --account-name=domain\user --service-class=PythonScpTest \
       SpnCreate SpnUnregister ScpDelete

which will:
* Create a SPN
* Unregister that SPN from the Active Directory.
* Delete the Service Connection Point

Executing with --test will create and remove one of everything.
é    N)Úadsi)Ú*)ÚDispatché   ÚserviceConnectionPointÚAc	           
      ób  — |p|}|st          j        t          j        ¦  «        }|€t          j        t          j        ¦  «        }t          j        d|z   t          j        ¦  «        }	|pg }dt          t          |ffdt          t          |ffdt          t          |fdt          t          |ffdt          t          |ffdt          t          |ffdt          t          | ffg}
|	                     d	|z   |
¦  «        }t                               d
|¦  «         t          |¦  «        }t          ||¦  «         |S )NúLDAP://ÚcnÚobjectClassÚkeywordsÚserviceDnsNameÚserviceDnsNameTypeÚserviceClassNameÚserviceBindingInformationúcn=zNew connection point is at %s)Úwin32apiÚGetComputerNameExÚwin32conÚComputerNameDnsFullyQualifiedÚGetComputerObjectNameÚNameFullyQualifiedDNr   ÚADsGetObjectÚIID_IDirectoryObjectÚADS_ATTR_UPDATEÚADSTYPE_CASE_IGNORE_STRINGÚCreateDSObjectÚloggerÚinfor   ÚAllowAccessToScpProperties)Úservice_binding_infoÚservice_class_nameÚaccount_nameÚcontainer_namer   Úobject_classÚdns_name_typeÚdnÚdns_nameÚcompÚattrsÚnews               úfC:\Users\johnn\AppData\Local\Programs\Python\Python311\Lib\site-packages\win32comext/adsi/demos/scp.pyÚ	ScpCreater-   ?   s>  € ð $Ð9Ð'9€NØð VåÔ-­hÔ.TÑUÔUˆà	€zÝÔ+­HÔ,IÑJÔJˆõ Ô˜Y¨™^­TÔ-FÑGÔG€Dð ˆ~˜2€Hð 
�Õ :¸^Ð<MÐNØ	�Õ)CÀlÀ_ÐUØ	•_Õ&@À(ÐKØ	�?Õ,FÈÈÐTà ÝÝ&ØÐð		
ð ÝÝ&ØÐ!ð		
ð (ÝÝ&Ø!Ð#ð		
ð#€Eð0 ×
Ò
˜e nÑ4°eÑ
<Ô
<€CÝ
‡K‚KÐ/°Ñ@Ô@Ð@å
�3‰-Œ-€Cå˜|¨SÑ1Ô1Ð1Ø€Jó    c                 ó(  — |€t          j        t          j        ¦  «        }t                               d| |¦  «         t          j        d|z   t          j        ¦  «        }| 	                    d| z   ¦  «         t           
                    d| ¦  «         d S )Nz&Removing connection point '%s' from %sr
   r   z%Deleted service connection point '%s')r   r   r   r   r   Údebugr   r   r   ÚDeleteDSObjectr   )r$   r'   r)   s      r,   Ú	ScpDeleter2   y   s€   € Ø	€zÝÔ+­HÔ,IÑJÔJˆÝ
‡L‚LÐ9¸>È2ÑNÔNÐNõ Ô˜Y¨™^­TÔ-FÑGÔG€DØ×Ò˜ Ñ.Ñ/Ô/Ð/Ý
‡K‚KÐ7¸ÑHÔHÐHÐHÐHr.   ©z&{28630eb8-41d5-11d1-a9c1-0000f80367c1}z&{b7b1311c-b82e-11d0-afee-0000f80367c1}c                 óô  — | r| }nt          j        t          j        ¦  «        }d}t	          ||¦  «        }|j        }|D ]q}t          t          j        ¦  «        }t          t          z  |_        ||_        t          |_        d|_        t           |_        ||_        |                     |¦  «         Œr||_        t)          |||¦  «         |                     ¦   «          t,                               d|¦  «         d S )NÚnTSecurityDescriptorr   z%Set security on object for account %r)r   r   r   ÚNameSamCompatibleÚgetattrÚDiscretionaryAclr   r   ÚCLSID_AccessControlEntryÚADS_RIGHT_DS_READ_PROPÚADS_RIGHT_DS_WRITE_PROPÚ
AccessMaskÚTrusteeÚ!ADS_ACETYPE_ACCESS_ALLOWED_OBJECTÚAceTypeÚAceFlagsÚADS_FLAG_OBJECT_TYPE_PRESENTÚFlagsÚ
ObjectTypeÚAddAceÚsetattrÚSetInfor   r   )	Ú
accountSAMÚ	scpObjectÚschemaIDGUIDsÚtrusteeÚ	attributeÚsdÚaclÚsguidÚaces	            r,   r    r    •   sþ   € ð ð MØˆˆõ Ô0µÔ1KÑLÔLˆð '€IÝ	�˜IÑ	&Ô	&€BØ
Ô
€Càð ð ˆÝ•tÔ4Ñ5Ô5ˆõ 0Õ2IÑIˆŒð ˆŒõ 8ˆŒð ˆŒõ 1ˆŒ	ð ˆŒð 	�
Š
�3‰Œˆˆð €BÔåˆI�y "Ñ%Ô%Ð%à×ÒÑÔÐÝ
‡K‚KÐ7¸ÑAÔAÐAÐAÐAr.   c                 ó†  — t          |t          ¦  «        st          |d¦  «        sJ d|z  ¦   «         ‚t          j        t          j        ¦  «        }|                     dd¦  «        d         }| st          j        t          j	        ¦  «        } t                               d| ¦  «         t          j        |t          j        t          j        z  t          j        z  ¬¦  «        }t          j        |d         ¦  «        }t                               d	¦  «         t          j        ||| |¦  «         |                     ¦   «          d S )
NÚ__iter__z+spns must be a sequence of strings (got %r)ú\r   r   zSpnRegister using DN '%s')Ú
domainNameÚflagsÚDomainControllerNamezDsWriteAccountSpn with spns %s)Ú
isinstanceÚstrÚhasattrr   ÚGetUserNameExr6   Úsplitr   r   r   r   r0   Úwin32securityÚDsGetDcNameÚdsconÚDS_IS_FLAT_NAMEÚDS_RETURN_DNS_NAMEÚDS_DIRECTORY_SERVICE_REQUIREDÚDsBindÚDsWriteAccountSpnÚClose)ÚserviceAcctDNÚspnsÚ	operationÚsamNamer   Úhandles         r,   ÚSpnRegisterri   Ù   s8  € õ
 ˜$¥Ñ$Ô$ð ­°°zÑ)BÔ)Bð ð Ø5¸Ñ<ñô ÐBõ
 Ô$¥XÔ%?Ñ@Ô@€GØ�mŠm˜D !Ñ$Ô$ QÔ'€Gàð Vå Ô6µxÔ7TÑUÔUˆÝ
‡L‚LÐ,¨mÑ<Ô<Ð<õ Ô$ØÝÔ#Ý
Ô
"ñ#å
Ô
-ñ.ðñ ô €Dõ Ô! $Ð'=Ô">Ñ?Ô?€Fõ ‡L‚LÐ1Ñ2Ô2Ð2ÝÔ#ØØØØñ	ô ð ð ‡L‚L�N„N€N€N€Nr.   c                 óx   — d| z   }t          j        |t           j        ¦  «        }|                     |¦  «         d S )Nr
   )r   r   ÚIID_IADsUserÚSetPassword)Úusername_dnÚnew_passwordÚaccountPathÚusers       r,   ÚUserChangePasswordrq     s?   € ð ˜kÑ)€KÝÔ˜[­$Ô*;Ñ<Ô<€Dð 	×Ò�\Ñ"Ô"Ð"Ð"Ð"r.   c                 óD   — t           | k    rt          ||z  ¦  «         d S d S ©N)ÚverboseÚprint)ÚlevelÚmsgÚargss      r,   Úlogry     s-   € Ý�%ÒÐÝˆc�D‰jÑÔÐÐÐð Ðr.   c                   ó   — e Zd ZdS )Ú
_NoDefaultN)Ú__name__Ú
__module__Ú__qualname__© r.   r,   r{   r{     s   € € € € € Ø€Dr.   r{   c                 ó€   — | \  }}t          |||¦  «        }|s!|t          u r|                     d|z  ¦  «         |s|}|S )Nz4The '%s' option must be specified for this operation)r7   r{   Úerror)ÚpoÚopt_nameÚdefaultÚparserÚoptionsÚrets         r,   Ú_get_optionrˆ     sY   € Ø�O€FˆGÝ
�'˜8 WÑ
-Ô
-€CØð X�7�jÐ(Ð(Ø�ŠÐKÈhÑVÑWÔWÐWØð ØˆØ€Jr.   c                 ó@   — | d         }|                      |¦  «         d S )Nr   )r�   )r‚   Úwhyr…   s      r,   Ú_option_errorr‹      s#   € Ø�ŒU€FØ
‡L‚L�ÑÔÐÐÐr.   c           
      ó®   — t          t          | d¦  «        t          | d¦  «        t          | dd¦  «        t          | dd¦  «        ¬¦  «        }|a|j        S )z!Create a Service Connection PointÚbinding_stringÚservice_classÚaccount_name_samNr   )r   )r-   rˆ   Úg_createdSCPÚdistinguishedName)r‚   Úscps     r,   Údo_ScpCreater“   %  sb   € õ Ý�BÐ(Ñ)Ô)Ý�B˜Ñ(Ô(Ý�BÐ*¨DÑ1Ô1Ý˜R ¨TÑ2Ô2ð	ñ ô €Cð €LØÔ Ð r.   c                 óÐ   — t          | d¦  «        }	 t          |¦  «         nD# t          j        $ r2}|d         t          j        k    r‚ t          dd|¦  «         Y d}~nd}~ww xY w|S )z!Delete a Service Connection PointrŽ   r   é   z@ScpDelete ignoring ERROR_DS_OBJ_NOT_FOUND for service-class '%s'N)rˆ   r2   r   r�   ÚwinerrorÚERROR_DS_OBJ_NOT_FOUNDry   )r‚   ÚscÚdetailss      r,   Údo_ScpDeleterš   2  sˆ   € å	�R˜Ñ	)Ô	)€BðWÝ�"‰ŒˆˆøÝŒ:ð Wð Wð WØ�1Œ:�Ô8Ò8Ð8ØÝˆAÐQÐSUÑVÔVÐVÐVÐVÐVÐVÐVøøøøðWøøøð €Is   ’" ¢A#±(AÁA#c           
      ó2  — t           €t          | d¦  «         t          j        t          j        t          | d¦  «        t           j        t          | dd¦  «        dd¦  «        }|d         }t          dd|¦  «         |a	t                               |¦  «         |S )zCreate a Service Principal NameNz3ScpCreate must have been specified before SpnCreaterŽ   Úportr   r•   zCreated SPN: %s)r�   r‹   r[   ÚDsGetSpnr]   ÚDS_SPN_SERVICErˆ   r‘   ry   Úg_createdSPNLastÚg_createdSPNsÚappend)r‚   re   Úspns      r,   Údo_SpnCreater£   >  s˜   € õ Ðå�bÐOÑPÔPÐPåÔ!ÝÔÝ�B˜Ñ(Ô(ÝÔ&Ý�B˜ Ñ"Ô"ØØñô €Dð ˆqŒ'€CÝˆÐ˜cÑ"Ô"Ð"àÐÝ×Ò˜ÑÔÐØ€Jr.   c                 óž   — t           st          | d¦  «         t          t          | dd¦  «        t           ft          j        ¦  «         t           S )z4Register a previously created Service Principal Namez(SpnCreate must appear before SpnRegisterÚaccount_name_dnN)rŸ   r‹   ri   rˆ   r]   ÚDS_SPN_ADD_SPN_OP©r‚   s    r,   Údo_SpnRegisterr¨   U  sR   € åð FÝ�bÐDÑEÔEÐEåÝ�BÐ)¨4Ñ0Ô0Ý	ÐÝÔñô ð õ
 Ðr.   c                 óž   — t           st          | d¦  «         t          t          | dd¦  «        t           ft          j        ¦  «         t           S )z6Unregister a previously created Service Principal Namez*SpnCreate must appear before SpnUnregisterr¥   N)rŸ   r‹   ri   rˆ   r]   ÚDS_SPN_DELETE_SPN_OPr§   s    r,   Údo_SpnUnregisterr«   b  sR   € åð HÝ�bÐFÑGÔGÐGÝÝ�BÐ)¨4Ñ0Ô0Ý	ÐÝÔ"ñô ð õ
 Ðr.   c                 ó^   — t          t          | d¦  «        t          | d¦  «        ¦  «         dS )z(Change the password for a specified userr¥   ÚpasswordzPassword changed OK)rq   rˆ   r§   s    r,   Údo_UserChangePasswordr®   n  s-   € å•{ 2Ð'8Ñ9Ô9½;ÀrÈ:Ñ;VÔ;VÑWÔWÐWØ Ð r.   r-   r2   Ú	SpnCreateri   ÚSpnUnregisterrq   c                   ó   — e Zd Zd„ ZdS )ÚHelpFormatterc                 ó   — |S rs   r   )ÚselfÚdescriptions     r,   Úformat_descriptionz HelpFormatter.format_description  s   € ØÐr.   N)r|   r}   r~   r¶   r   r.   r,   r²   r²   ~  s#   € € € € € ðð ð ð ð r.   r²   c                  ój  — i } g }t           D ]e\  }}d                     t          j        |j        d¬¦  «        ¦  «        }|                     d|› d|› �¦  «         || |                     ¦   «         <   Œft          dz   d                     |¦  «        z   dz   }t          j        d|t          ¦   «         ¬¦  «        }| 
                    d	d
ddd¬¦  «         | 
                    dddd¬¦  «         | 
                    dddd¬¦  «         | 
                    dddd¬¦  «         | 
                    ddd¬¦  «         | 
                    dddd¬ ¦  «         | 
                    dd!d"¬¦  «         | 
                    dd#d$¬¦  «         | 
                    dd%d&¬¦  «         | 
                    dd'd(d)d*¬+¦  «         | 
                    dd,d-t          t          j        ¦  «        ¬.¦  «         |                     ¦   «         \  }}||f}		 t          |j        ¦  «        |_        n,# t"          t$          f$ r |                     d/¦  «         Y nw xY w	 t          |j        ¦  «        }
n„# t"          t$          f$ rp 	 t          t+          t          |j                             ¦   «         ¦  «        ¦  «        }
n2# t$          t"          t.          f$ r |                     d0¦  «         Y nw xY wY nw xY w	 t0          j        }n(# t.          $ r t          j        ¦   «         j        }Y nw xY w ||
¦  «         |j        r|j        r|                     d1¦  «         |j        r|xj        dz  c_        |j        a|j        r¼|r|                     d2¦  «         d3}t=          dd4|¦  «         |                     ¦   «         }|j         sd5|_         t=          d6d7|j         ¦  «         |j!        s/d8                     ¦   «         |_!        t=          d6d9|j!        ¦  «         |j"        sd:|_"        t=          d6d;|j"        ¦  «         |s|                     d<¦  «         |D ]0}|                     ¦   «         | vr|                     d=|z  ¦  «         Œ1|j#        rªt=          d6d>|j#        ¦  «         tI          j%        |j#        tL          j'        tL          j(        ¦  «        |_)        t=          d6d?|j)        ¦  «         tI          j%        |j#        tL          j'        tL          j*        ¦  «        |_+        t=          d6d@|j+        ¦  «         |D �]}| |                     ¦   «                  }|€|                     dA|z  ¦  «         d }	 	 t=          d6dB|¦  «          ||	¦  «        }t=          ddC||¦  «         n/#  |j,        r"t[          dD¦  «         t]          j/        ¦   «          ‚ xY wne# t`          j        $ r/}|j1        \  }}}}|r	|d6         }nd}|}|r|dE|z   z  }Y d }~n,d }~wtL          j        $ r}|j1        \  }}}|}Y d }~nd }~ww xY w|rt=          ddF||¦  «         �Œd S )GNú
z        )Úsubsequent_indentz  z: z
commands:
z%prog [options] command ...)Úusagerµ   Ú	formatterz-vÚcountrt   r   z)increase the verbosity of status messages)ÚactionÚdestr„   Úhelpz-qz--quietÚ
store_truezDon't print any status messages)r½   r¿   z-tz--testzGExecute a mini-test suite, providing defaults for most options and argsÚ z--show-tracebacksz&Show the tracebacks for any exceptionsz--service-classzThe service class name to use)r¿   z--portr   z)The port number to associate with the SPN)r„   r¿   z--binding-stringz*The binding string to use for SCP creationz--account-namez0The account name to use (default is LocalSystem)z
--passwordzThe password to set.z	--keywordr¡   r   z[A keyword to add to the SCP.  May be specified
                              multiple times)r½   r¾   r¿   z--log-levelz`The log-level to use - may be a number or a logging
                             module constant)r¿   r„   z--port must be numericzInvalid --log-level valuez#Can't specify --quiet and --verbosezCan't specify args with --testzAScpDelete ScpCreate SpnCreate SpnRegister SpnUnregister ScpDeletez!--test - pretending args are:
 %sÚPythonScpTestr•   z--test: --service-class=%szPython Poweredz--test: --keyword=%sztest binding stringz--test: --binding-string=%sz4No command specified (use --help for valid commands)z4Invalid command '%s' (use --help for valid commands)zTranslating account name '%s'zNameSamCompatible is '%s'zNameFullyQualifiedDNis '%s'zInvalid command '%s'zExecuting '%s'...z%s: %sz/--show-tracebacks specified - dumping exceptionz
	zCommand '%s' failed: %s)2ÚhandlersÚjoinÚtextwrapÚwrapÚ__doc__r¡   ÚlowerÚoptparseÚOptionParserr²   Ú
add_optionrW   ÚloggingÚWARNINGÚ
parse_argsÚintrœ   Ú	TypeErrorÚ
ValueErrorr�   Ú	log_levelr7   ÚupperÚAttributeErrorr   ÚsetLevelÚ	getLoggerÚquietrt   Útestry   rZ   rŽ   r   r�   r#   r[   ÚTranslateNamer   ÚNameUnknownr6   r�   r   r¥   Úshow_tracebacksru   Ú	tracebackÚ	print_excr   rx   )Ú_handlers_dictÚ	arg_descsÚargÚfuncÚ	this_descrµ   r…   r†   rx   r‚   rÒ   ÚslÚhandlerÚerr_msgÚresultÚxxx_todo_changemeÚhrÚdescÚexcÚargerrÚ
extra_descÚxxx_todo_changeme1rw   s                          r,   Úmainrî   ƒ  s†  € à€Nà€IÝð +ð +‰	ˆˆTØ—I’I�hœm¨D¬LÈGÐTÑTÔTÑUÔUˆ	Ø×ÒÐ0˜cÐ0Ð0 YÐ0Ð0Ñ1Ô1Ð1Ø&*ˆ�s—y’y‘{”{Ñ#Ð#å˜OÑ+¨d¯iªi¸	Ñ.BÔ.BÑBÀTÑI€KåÔ"Ø+ØÝ‘/”/ðñ ô €Fð ×ÒØØØØØ8ð ñ ô ð ð ×ÒØˆi Ð3Tð ñ ô ð ð ×ÒØØØØVð	 ñ ô ð ð ×ÒØ
ØØØ5ð	 ñ ô ð ð ×Ò�bÐ+Ð2QÐÑRÔRÐRà
×ÒØ
ˆH˜aÐ&Qð ñ ô ð ð ×ÒØ
ÐÐ%Qð ñ ô ð ð ×ÒØ
ÐÐ#Uð ñ ô ð ð ×Ò�b˜,Ð-CÐÑDÔDÐDà
×ÒØ
ØØØð0ð ñ ô ð ð ×ÒØ
Øð0å•G”OÑ$Ô$ð ñ ô ð ð ×%Ò%Ñ'Ô'�M€GˆTØ
�'Ð	€Bð/Ý˜7œ<Ñ(Ô(ˆŒˆøÝ•zÐ"ð /ð /ð /Ø�ŠÐ-Ñ.Ô.Ð.Ð.Ð.ð/øøøð6Ý˜Ô)Ñ*Ô*ˆ	ˆ	øÝ•zÐ"ð 6ð 6ð 6ð	6Ý�G¥G¨WÔ->×-DÒ-DÑ-FÔ-FÑGÔGÑHÔHˆIˆIøÝ�I¥~Ð6ð 	6ð 	6ð 	6Ø�LŠLÐ4Ñ5Ô5Ð5Ð5Ð5ð	6øøøøøð6øøøð
*ÝŒ_ˆˆøåð *ð *ð *åÔÑ Ô Ô)ˆˆˆð*øøøð €B€y�M„M€Mà„}ð <˜œð <Ø�ŠÐ:Ñ;Ô;Ð;Ø„}ð ØˆŒ˜1ÑˆŒØŒo€Gà„|ð JØð 	;Ø�LŠLÐ9Ñ:Ô:Ð:àRˆÝˆAÐ3°TÑ:Ô:Ð:Ø�zŠz‰|Œ|ˆØÔ$ð 	HØ$3ˆGÔ!Ý�Ð/°Ô1FÑGÔGÐGØÔð 	=Ø/×5Ò5Ñ7Ô7ˆGÔÝ�Ð)¨7Ô+;Ñ<Ô<Ð<ØÔ%ð 	JØ%:ˆGÔ"Ý�Ð0°'Ô2HÑIÔIÐIð ð MØ�ŠÐKÑLÔLÐLØð Wð WˆØ�9Š9‰;Œ;˜nÐ,Ð,Ø�LŠLÐOÐRUÑUÑVÔVÐVøð Ôð 	GÝˆAÐ.°Ô0DÑEÔEÐEÝ#0Ô#>ØÔ ¥(Ô"6½Ô8Rñ$
ô $
ˆÔ õ 	ˆAÐ*¨GÔ,DÑEÔEÐEÝ"/Ô"=ØÔ ¥(Ô"6½Ô8Uñ#
ô #
ˆÔõ 	ˆAÐ,¨gÔ.EÑFÔFÐFð ð <ñ <ˆØ  §¢¡¤Ô-ˆØˆ?Ø�LŠLÐ/°#Ñ5Ñ6Ô6Ð6Øˆð	ðÝ�AÐ*¨CÑ0Ô0Ð0Ø ˜ ™œ�Ý�A�x  fÑ-Ô-Ð-Ð-øðØÔ*ð *ÝÐKÑLÔLÐLÝÔ'Ñ)Ô)Ð)Øøøøð .øõ Œzð 	/ð 	/ð 	/Ø&7Ô&<Ñ#ˆR��s˜FØð  Ø  œV�
�
à�
ØˆGØð /Ø˜6 JÑ.Ñ.�øøøøøøøøøÝŒ~ð 	ð 	ð 	Ø0Ô5‰OˆR��sØˆGˆGˆGˆGˆGˆGøøøøð	øøøð ð 	<Ý�Ð,¨c°7Ñ;Ô;Ð;ùð9<ð <s�   Ç<H È&H?È>H?ÉI ÉKÉ*9J$Ê#KÊ$,KËKËKËKËKËK* Ë*"LÌLÕ.VÖV8Ö,V4Ö4V8Ö8X×%W1×1XØXØXÚ__main__z*** Interrupted)NNNr   r   NNrs   )r3   )+rÇ   rÉ   rÅ   rÜ   Úntsecurityconr]   r   r   r[   r–   Úwin32com.adsir   Úwin32com.adsi.adsiconÚwin32com.clientr   rt   r�   r    rŸ   rÌ   r   r-   r2   r    ri   rq   ry   r{   rˆ   r‹   r“   rš   r£   r¨   r«   r®   rÃ   ÚIndentedHelpFormatterr²   rî   r|   ÚKeyboardInterruptru   r   r.   r,   ú<module>rö      sÉ  ðð"ð "ðH €€€Ø €€€Ø Ð Ð Ð à Ð Ð Ð Ø €€€Ø €€€Ø Ð Ð Ð Ø €€€Ø Ð Ð Ð Ð Ð Ø #Ð #Ð #Ð #Ø $Ð $Ð $Ð $Ð $Ð $à
€Ø€Ø€ØÐ à €€€à	€ð ØØØ)ØØØð7ð 7ð 7ð 7ðtIð Ið Ið Ið>ð5Bð 5Bð 5Bð 5BðH&ð &ð &ðR#ð #ð #ðð ð ð
	ð 	ð 	ð 	ð 	ñ 	ô 	ð 	ð '1ð ð ð ð ðð ð ð

!ð 
!ð 
!ð	ð 	ð 	ðð ð ð.
ð 
ð 
ð	ð 	ð 	ð!ð !ð !ð �,ÐØ�,ÐØ�,ÐØ�NÐ#ØÐ&Ð'ØÐ0Ð1ð€ðð ð ð ð �HÔ2ñ ô ð ð
k<ð k<ð k<ð\ ˆzÒÐð!Øˆ‰ŒˆˆˆøØð !ð !ð !ØˆÐÑ Ô Ð Ð Ð Ð ð!øøøð Ðs   Â6
C ÃCÃC