zmc
2023-12-22 9fdbf60165db0400c2e8e6be2dc6e88138ac719a
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
U
G=®dÈã@sŽdZddlZddlmZddlmZmZddlmZm    Z    m
Z
m Z ddl Z ddl Z ddlZddlZddlZddlmZddlmZdd    lmZe  ¡d
kr²dd lmZdd lmZnGd d„dƒZeƒZeejjfZzddl m!Z!Wnek
röYnXdd„Z"d0dd„Z#dd„Z$dd„Z%dddddœZ&dd„Z'dd „Z(d!d"„Z)d#d$„Z*d1d&d'„Z+Gd(d)„d)ƒZ,Gd*d+„d+ƒZ-Gd,d-„d-ƒZ.Gd.d/„d/ƒZ/dS)2a
Improved support for Microsoft Visual C++ compilers.
 
Known supported compilers:
--------------------------
Microsoft Visual C++ 9.0:
    Microsoft Visual C++ Compiler for Python 2.7 (x86, amd64)
    Microsoft Windows SDK 6.1 (x86, x64, ia64)
    Microsoft Windows SDK 7.0 (x86, x64, ia64)
 
Microsoft Visual C++ 10.0:
    Microsoft Windows SDK 7.1 (x86, x64, ia64)
 
Microsoft Visual C++ 14.X:
    Microsoft Visual C++ Build Tools 2015 (x86, x64, arm)
    Microsoft Visual Studio Build Tools 2017 (x86, x64, arm, arm64)
    Microsoft Visual Studio Build Tools 2019 (x86, x64, arm, arm64)
 
This may also support compilers shipped with compatible Visual Studio versions.
éN)Úopen)ÚlistdirÚpathsep)ÚjoinÚisfileÚisdirÚdirname)Ú LegacyVersion)Ú filterfalseé)Ú get_unpatchedÚWindows)Úwinreg)Úenvironc@seZdZdZdZdZdZdS)rN)Ú__name__Ú
__module__Ú __qualname__Ú
HKEY_USERSÚHKEY_CURRENT_USERÚHKEY_LOCAL_MACHINEÚHKEY_CLASSES_ROOT©rrúFD:\z\workplace\VsCode\pyvenv\venv\Lib\site-packages\setuptools/msvc.pyr+sr)ÚRegc Cs’d}|d|f}zt |d¡}WnJtk
rjz|d|f}t |d¡}Wntk
rdd}YnXYnX|r†t|dƒ}t|ƒr†|Sttƒ|ƒS)aÍ
    Patched "distutils.msvc9compiler.find_vcvarsall" to use the standalone
    compiler build for Python
    (VCForPython / Microsoft Visual C++ Compiler for Python 2.7).
 
    Fall back to original behavior when the standalone compiler is not
    available.
 
    Redirect the path of "vcvarsall.bat".
 
    Parameters
    ----------
    version: float
        Required Microsoft Visual C++ version.
 
    Return
    ------
    str
        vcvarsall.bat path
    z-Software\%sMicrosoft\DevDiv\VCForPython\%0.1fÚÚ
installdirz Wow6432Node\Nú vcvarsall.bat)rÚ    get_valueÚKeyErrorrrr Úmsvc9_find_vcvarsall)ÚversionZvc_baseÚkeyÚ
productdirÚ    vcvarsallrrrrBs  
rÚx86c
Os’zttƒ}|||f|ž|ŽWStjjk
r4Yntk
rFYnXzt||ƒ ¡WStjjk
rŒ}zt|||ƒ‚W5d}~XYnXdS)ao
    Patched "distutils.msvc9compiler.query_vcvarsall" for support extra
    Microsoft Visual C++ 9.0 and 10.0 compilers.
 
    Set environment without use of "vcvarsall.bat".
 
    Parameters
    ----------
    ver: float
        Required Microsoft Visual C++ version.
    arch: str
        Target architecture.
 
    Return
    ------
    dict
        environment
    N)    r Úmsvc9_query_vcvarsallÚ    distutilsÚerrorsÚDistutilsPlatformErrorÚ
ValueErrorÚEnvironmentInfoÚ
return_envÚ_augment_exception)ÚverÚarchÚargsÚkwargsÚorigÚexcrrrr%ls r%c Csôzt tjddtjtjB¡}Wntk
r4YdSXd}d}|¤t ¡D]”}zt ||¡\}}}Wntk
r€YqâYnX|rL|tj    krLt
|ƒrLzt t |ƒƒ}Wnt tfk
rÄYqLYnX|dkrL||krL||}}qLW5QRX||fS)ú0Python 3.8 "distutils/_msvccompiler.py" backportz'Software\Microsoft\VisualStudio\SxS\VC7r©NNNé)rÚOpenKeyrÚKEY_READÚKEY_WOW64_32KEYÚOSErrorÚ    itertoolsÚcountÚ    EnumValueÚREG_SZrÚintÚfloatr)Ú    TypeError)r!Ú best_versionÚbest_dirÚiÚvZvc_dirZvtr rrrÚ_msvc14_find_vc2015’s2
ü  
rEc Cs–t d¡pt d¡}|sdSz8t t|dddƒddd    d
d d d dg    ¡jddd ¡}Wntjtt    fk
rrYdSXt|dddƒ}t
|ƒr’d|fSdS)a€Python 3.8 "distutils/_msvccompiler.py" backport
 
    Returns "15, path" based on the result of invoking vswhere.exe
    If no install is found, returns "None, None"
 
    The version is returned to avoid unnecessarily changing the function
    result. It may be ignored when the path is not None.
 
    If vswhere.exe is not available, by definition, VS 2017 is not
    installed.
    úProgramFiles(x86)Ú ProgramFilesr4zMicrosoft Visual StudioZ    Installerz vswhere.exez-latestz -prereleasez    -requiresz1Microsoft.VisualStudio.Component.VC.Tools.x86.x64z    -propertyÚinstallationPathz    -productsÚ*ÚmbcsÚstrict)Úencodingr'ÚVCZ    AuxiliaryZBuildé) rÚgetÚ
subprocessÚ check_outputrÚdecodeÚstripÚCalledProcessErrorr9ÚUnicodeDecodeErrorr)ÚrootÚpathrrrÚ_msvc14_find_vc2017°s0  úùrXÚx64ÚarmZarm64)r$Z    x86_amd64Zx86_armZ    x86_arm64c    
Csâtƒ\}}d}|tkr t|}nd|kr,dnd}|rŠt|ddddd|d    d
ƒ    }zd dl}|j|d d d}Wntttfk
rˆd}YnX|s¬tƒ\}}|r¬t|d|dd
ƒ}|s´dSt|dƒ}t|ƒsÊdS|rÖt|ƒsÚd}||fS)r3NÚamd64rYr$z..ÚredistZMSVCz**zMicrosoft.VC14*.CRTzvcruntime140.dllrT)Ú    recursiveéÿÿÿÿzMicrosoft.VC140.CRTr4r)    rXÚPLAT_SPEC_TO_RUNTIMErÚglobÚ ImportErrorr9Ú LookupErrorrEr)    Ú    plat_specÚ_rBÚ    vcruntimeZvcruntime_platZvcredistr`rAr#rrrÚ_msvc14_find_vcvarsallÛs>
 
þ
 
ÿ
 rfc
CsÄdtkrdd„t ¡DƒSt|ƒ\}}|s6tj d¡‚z&tjd ||¡tj    dj
ddd    }Wn:tj k
r–}ztj d
 |j ¡¡|‚W5d }~XYnXd d„d d„|  ¡DƒDƒ}|rÀ||d<|S)r3ZDISTUTILS_USE_SDKcSsi|]\}}| ¡|“qSr©Úlower)Ú.0r!ÚvaluerrrÚ
<dictcomp>sÿz&_msvc14_get_vc_env.<locals>.<dictcomp>zUnable to find vcvarsall.batzcmd /u /c "{}" {} && set)Ústderrzutf-16leÚreplace)r'zError executing {}NcSs$i|]\}}}|r|r| ¡|“qSrrg)rir!rdrjrrrrks
ýcss|]}| d¡VqdS)ú=N)Ú    partition)riÚlinerrrÚ    <genexpr>sz%_msvc14_get_vc_env.<locals>.<genexpr>Úpy_vcruntime_redist)rÚitemsrfr&r'r(rPrQÚformatÚSTDOUTrRrTÚcmdÚ
splitlines)rcr#reÚoutr2ÚenvrrrÚ_msvc14_get_vc_envs:þ ÿ
þý
 
ÿþýrzc
CsBz
t|ƒWStjjk
r<}zt|dƒ‚W5d}~XYnXdS)a*
    Patched "distutils._msvccompiler._get_vc_env" for support extra
    Microsoft Visual C++ 14.X compilers.
 
    Set environment without use of "vcvarsall.bat".
 
    Parameters
    ----------
    plat_spec: str
        Target architecture.
 
    Return
    ------
    dict
        environment
    ç,@N)rzr&r'r(r,)rcr2rrrÚmsvc14_get_vc_env&s
 
 
r|cOsBdtjkr4ddl}t|jƒtdƒkr4|jjj||ŽStt    ƒ||ŽS)z¦
    Patched "distutils._msvccompiler.gen_lib_options" for fix
    compatibility between "numpy.distutils" and "distutils._msvccompiler"
    (for Numpy < 1.11.2)
    znumpy.distutilsrNz1.11.2)
ÚsysÚmodulesÚnumpyr    Ú __version__r&Z    ccompilerZgen_lib_optionsr Úmsvc14_gen_lib_options)r/r0Únprrrr@s
 
rrcCs |jd}d| ¡ks"d| ¡kr”d}|jftƒŽ}d}|dkrf| ¡ d¡dkr\|d    7}q”|d
7}n.|d kr„|d 7}||d 7}n|dkr”|d7}|f|_dS)zl
    Add details to the exception message to help guide the user
    as to what action will resolve it.
    rr#zvisual cz0Microsoft Visual C++ {version:0.1f} is required.z-www.microsoft.com/download/details.aspx?id=%dç"@Zia64r^z( Get it with "Microsoft Windows SDK 7.0"z% Get it from http://aka.ms/vcpython27ç$@z* Get it with "Microsoft Windows SDK 7.1": iW r{z[ Get it with "Build Tools for Visual Studio": https://visualstudio.microsoft.com/downloads/N)r/rhrtÚlocalsÚfind)r2r r.ÚmessageÚtmplZ
msdownloadrrrr,Ms
 
 
r,c@sbeZdZdZe dd¡ ¡Zdd„Ze    dd„ƒZ
dd    „Z d
d „Z dd d„Z ddd„Zddd„ZdS)Ú PlatformInfoz
    Current and Target Architectures information.
 
    Parameters
    ----------
    arch: str
        Target architecture.
    Zprocessor_architecturercCs| ¡ dd¡|_dS)NrYr[)rhrmr.)Úselfr.rrrÚ__init__|szPlatformInfo.__init__cCs|j|j d¡dd…S)zs
        Return Target CPU architecture.
 
        Return
        ------
        str
            Target CPU
        rdr N)r.r†©rŠrrrÚ
target_cpus
zPlatformInfo.target_cpucCs
|jdkS)z‡
        Return True if target CPU is x86 32 bits..
 
        Return
        ------
        bool
            CPU is x86 32 bits
        r$©rrŒrrrÚ target_is_x86‹s    zPlatformInfo.target_is_x86cCs
|jdkS)zˆ
        Return True if current CPU is x86 32 bits..
 
        Return
        ------
        bool
            CPU is x86 32 bits
        r$©Ú current_cpurŒrrrÚcurrent_is_x86–s    zPlatformInfo.current_is_x86FcCs.|jdkr|rdS|jdkr$|r$dSd|jS)uk
        Current platform specific subfolder.
 
        Parameters
        ----------
        hidex86: bool
            return '' and not '†' if architecture is x86.
        x64: bool
            return 'd' and not 'md64' if architecture is amd64.
 
        Return
        ------
        str
            subfolder: '    arget', or '' (see hidex86 parameter)
        r$rr[ú\x64ú\%sr©rŠÚhidex86rYrrrÚ current_dir¡sýzPlatformInfo.current_dircCs.|jdkr|rdS|jdkr$|r$dSd|jS)ar
        Target platform specific subfolder.
 
        Parameters
        ----------
        hidex86: bool
            return '' and not '\x86' if architecture is x86.
        x64: bool
            return '\x64' and not '\amd64' if architecture is amd64.
 
        Return
        ------
        str
            subfolder: '\current', or '' (see hidex86 parameter)
        r$rr[r“r”rŽr•rrrÚ
target_dir·sýzPlatformInfo.target_dircCs0|rdn|j}|j|krdS| ¡ dd|¡S)ap
        Cross platform specific subfolder.
 
        Parameters
        ----------
        forcex86: bool
            Use 'x86' as current architecture even if current architecture is
            not x86.
 
        Return
        ------
        str
            subfolder: '' if target architecture is current architecture,
            '\current_target' if not.
        r$rú\z\%s_)r‘rr˜rm)rŠÚforcex86ÚcurrentrrrÚ    cross_dirÍsþzPlatformInfo.cross_dirN)FF)FF)F)rrrÚ__doc__rrOrhr‘r‹Úpropertyrrr’r—r˜rœrrrrr‰qs
 
 
r‰c@sªeZdZdZejejejejfZ    dd„Z
e dd„ƒZ e dd„ƒZ e dd    „ƒZe d
d „ƒZe d d „ƒZe dd„ƒZe dd„ƒZe dd„ƒZe dd„ƒZddd„Zdd„ZdS)Ú RegistryInfozŸ
    Microsoft Visual Studio related registry information.
 
    Parameters
    ----------
    platform_info: PlatformInfo
        "PlatformInfo" instance.
    cCs
||_dS©N)Úpi)rŠZ platform_inforrrr‹òszRegistryInfo.__init__cCsdS)z€
        Microsoft Visual Studio root registry key.
 
        Return
        ------
        str
            Registry key
        Z VisualStudiorrŒrrrÚ visualstudioõs
zRegistryInfo.visualstudiocCs t|jdƒS)z
        Microsoft Visual Studio SxS registry key.
 
        Return
        ------
        str
            Registry key
        ZSxS)rr¢rŒrrrÚsxss
zRegistryInfo.sxscCs t|jdƒS)z|
        Microsoft Visual C++ VC7 registry key.
 
        Return
        ------
        str
            Registry key
        ZVC7©rr£rŒrrrÚvc s
zRegistryInfo.vccCs t|jdƒS)z
        Microsoft Visual Studio VS7 registry key.
 
        Return
        ------
        str
            Registry key
        ZVS7r¤rŒrrrÚvss
zRegistryInfo.vscCsdS)zƒ
        Microsoft Visual C++ for Python registry key.
 
        Return
        ------
        str
            Registry key
        zDevDiv\VCForPythonrrŒrrrÚ vc_for_python%s
zRegistryInfo.vc_for_pythoncCsdS)zq
        Microsoft SDK registry key.
 
        Return
        ------
        str
            Registry key
        zMicrosoft SDKsrrŒrrrÚ microsoft_sdk1s
zRegistryInfo.microsoft_sdkcCs t|jdƒS)z‚
        Microsoft Windows/Platform SDK registry key.
 
        Return
        ------
        str
            Registry key
        r ©rr¨rŒrrrÚ windows_sdk=s
zRegistryInfo.windows_sdkcCs t|jdƒS)z€
        Microsoft .NET Framework SDK registry key.
 
        Return
        ------
        str
            Registry key
        ZNETFXSDKr©rŒrrrÚ    netfx_sdkIs
zRegistryInfo.netfx_sdkcCsdS)z€
        Microsoft Windows Kits Roots registry key.
 
        Return
        ------
        str
            Registry key
        zWindows Kits\Installed RootsrrŒrrrÚwindows_kits_rootsUs
zRegistryInfo.windows_kits_rootsFcCs$|j ¡s|rdnd}td|d|ƒS)a
        Return key in Microsoft software registry.
 
        Parameters
        ----------
        key: str
            Registry key path where look.
        x86: str
            Force x86 software registry.
 
        Return
        ------
        str
            Registry key
        rZ Wow6432NodeZSoftwareÚ    Microsoft)r¡r’r)rŠr!r$Znode64rrrÚ    microsoftaszRegistryInfo.microsoftc     Csìtj}tj}tj}|j}|jD]È}d}z||||ƒd|ƒ}Wn`ttfk
rœ|j     ¡s”z||||dƒd|ƒ}Wq˜ttfk
rYYqYq˜XnYqYnXz8zt 
||¡dWW¢"Sttfk
rÒYnXW5|rä||ƒXqdS)a
        Look for values in registry in Microsoft software registry.
 
        Parameters
        ----------
        key: str
            Registry key path where look.
        name: str
            Value name to find.
 
        Return
        ------
        str
            value
        NrT) rr7r6ÚCloseKeyr®ÚHKEYSr9ÚIOErrorr¡r’Ú QueryValueEx)    rŠr!ÚnameZkey_readZopenkeyZclosekeyÚmsÚhkeyÚbkeyrrrÚlookupts*
 
 
 
zRegistryInfo.lookupN)F)rrrrrrrrrr°r‹ržr¢r£r¥r¦r§r¨rªr«r¬r®r·rrrrrŸäs6ý
 
 
 
 
 
 
 
 
 
rŸc@s<eZdZdZe dd¡Ze dd¡Ze de¡Zd7dd„Z    d    d
„Z
d d „Z d d„Z e dd„ƒZedd„ƒZedd„ƒZdd„Zdd„Zedd„ƒZedd„ƒZedd„ƒZedd „ƒZed!d"„ƒZed#d$„ƒZed%d&„ƒZed'd(„ƒZed)d*„ƒZed+d,„ƒZed-d.„ƒZed/d0„ƒZed1d2„ƒZ d3d4„Z!e d8d5d6„ƒZ"dS)9Ú
SystemInfozê
    Microsoft Windows and Visual Studio related system information.
 
    Parameters
    ----------
    registry_info: RegistryInfo
        "RegistryInfo" instance.
    vc_ver: float
        Required Microsoft Visual C++ version.
    ÚWinDirrrGrFNcCs2||_|jj|_| ¡|_|p$| ¡|_|_dSr )Úrir¡Úfind_programdata_vs_versÚknown_vs_pathsÚ_find_latest_available_vs_verÚvs_verÚvc_ver)rŠZ registry_infor¿rrrr‹¯s
 
 
 
ÿzSystemInfo.__init__cCs>| ¡}|s|jstj d¡‚t|ƒ}| |j¡t|ƒdS)zm
        Find the latest VC version
 
        Return
        ------
        float
            version
        z%No Microsoft Visual C++ version foundr^)Úfind_reg_vs_versr¼r&r'r(ÚsetÚupdateÚsorted)rŠZ reg_vc_versZvc_versrrrr½¹s    
ÿ z(SystemInfo._find_latest_available_vs_verc Cs8|jj}|jj|jj|jjf}g}|jjD]}|D]ø}zt |||ƒdtj¡}Wnt    t
fk
rnYq4YnX|²t  |¡\}}}    t |ƒD]D}
z*t t ||
¡dƒ} | |krº| | ¡WqŽtk
rÐYqŽXqŽt |ƒD]D}
z(t t ||
¡ƒ} | |kr| | ¡WqÜtk
rYqÜXqÜW5QRXq4q*t|ƒS)z˜
        Find Microsoft Visual Studio versions available in registry.
 
        Return
        ------
        list of float
            Versions
        r)rºr®r¥r§r¦r°rr6r7r9r±Ú QueryInfoKeyÚranger?r<Úappendr)ÚEnumKeyrÃ) rŠr´ZvckeysZvs_versrµr!r¶ZsubkeysÚvaluesrdrCr-rrrrÀÌs4    
 
zSystemInfo.find_reg_vs_versc     Cs¼i}d}z t|ƒ}Wnttfk
r0|YSX|D]€}z\t||dƒ}t|ddd}t |¡}W5QRX|d}tt|dƒƒ||| |d¡<Wq6tttfk
r´Yq6Yq6Xq6|S)    zé
        Find Visual studio 2017+ versions from information in
        "C:\ProgramData\Microsoft\VisualStudio\Packages\_Instances".
 
        Return
        ------
        dict
            float version as key, path as value.
        z9C:\ProgramData\Microsoft\VisualStudio\Packages\_Instancesz
state.jsonÚrtzutf-8)rLrHú VC\Tools\MSVCZinstallationVersion)    rr9r±rrÚjsonÚloadÚ_as_float_versionr)    rŠZ vs_versionsZ instances_dirZ hashed_namesr³Z
state_pathZ
state_fileÚstateZvs_pathrrrr»ðs*
ÿ 
 ÿÿ z#SystemInfo.find_programdata_vs_verscCstd | d¡dd…¡ƒS)zç
        Return a string version as a simplified float version (major.minor)
 
        Parameters
        ----------
        version: str
            Version.
 
        Return
        ------
        float
            version
        Ú.Né)r?rÚsplit)r rrrrÍszSystemInfo._as_float_versioncCs.t|jd|jƒ}|j |jjd|j¡p,|S)zp
        Microsoft Visual Studio directory.
 
        Return
        ------
        str
            path
        zMicrosoft Visual Studio %0.1fú%0.1f)rÚProgramFilesx86r¾rºr·r¦)rŠÚdefaultrrrÚ VSInstallDir+s ÿzSystemInfo.VSInstallDircCs,| ¡p| ¡}t|ƒs(d}tj |¡‚|S)zm
        Microsoft Visual C++ directory.
 
        Return
        ------
        str
            path
        z(Microsoft Visual C++ directory not found)Ú    _guess_vcÚ_guess_vc_legacyrr&r'r()rŠrWÚmsgrrrÚ VCInstallDir<s
 
 zSystemInfo.VCInstallDirc
CsŠ|jdkrdSz|j|j}Wntk
r8|j}YnXt|dƒ}z$t|ƒd}| |¡|_t||ƒWStt    t
fk
r„YdSXdS)zl
        Locate Visual C++ for VS2017+.
 
        Return
        ------
        str
            path
        r{rrÊr^N) r¾r¼rrÕrrrÍr¿r9r±Ú
IndexError)rŠZvs_dirZguess_vcr¿rrrrÖNs    
 
   zSystemInfo._guess_vccCsbt|jd|jƒ}t|jjd|jƒ}|j |d¡}|rBt|dƒn|}|j |jjd|j¡p`|S)z{
        Locate Visual C++ for versions prior to 2017.
 
        Return
        ------
        str
            path
        z Microsoft Visual Studio %0.1f\VCrÒrrM)rrÓr¾rºr§r·r¥)rŠrÔZreg_pathZ    python_vcZ
default_vcrrrr×ls    ÿzSystemInfo._guess_vc_legacycCsJ|jdkrdS|jdkrdS|jdkr*dS|jdkr8dS|jd    krFd
Sd S) z—
        Microsoft Windows SDK versions for specified MSVC++ version.
 
        Return
        ------
        tuple of str
            versions
        rƒ)z7.0z6.1z6.0ar„)z7.1z7.0aç&@)z8.0z8.0aç(@)ú8.1z8.1ar{)z10.0rÝN©r¾rŒrrrÚWindowsSdkVersion€s
 
 
 
 
 
zSystemInfo.WindowsSdkVersioncCs| t|jdƒ¡S)zt
        Microsoft Windows SDK last version.
 
        Return
        ------
        str
            version
        Úlib)Ú_use_last_dir_namerÚ WindowsSdkDirrŒrrrÚWindowsSdkLastVersion•s
z SystemInfo.WindowsSdkLastVersioncCs d}|jD],}t|jjd|ƒ}|j |d¡}|r
q8q
|rDt|ƒstt|jjd|jƒ}|j |d¡}|rtt|dƒ}|r€t|ƒs¾|jD]6}|d| d¡…}d    |}t|j    |ƒ}t|ƒr†|}q†|rÊt|ƒsö|jD]$}d
|}t|j    |ƒ}t|ƒrÐ|}qÐ|st|j
d ƒ}|S) zn
        Microsoft Windows SDK directory.
 
        Return
        ------
        str
            path
        rzv%sÚinstallationfolderrÒrZWinSDKNrÏzMicrosoft SDKs\Windows Kits\%szMicrosoft SDKs\Windows\v%sZ PlatformSDK) rßrrºrªr·rr§r¿ÚrfindrGrÙ)rŠÚsdkdirr-ÚlocrWÚ install_baseZintverÚdrrrrâ¡s6
 
 
 
 
  zSystemInfo.WindowsSdkDirc    CsÌ|jdkrd}d}n&d}|jdkr&dnd}|jjd|d}d    || d
d ¡f}g}|jd kr~|jD]}|t|jj||ƒg7}qb|jD]}|t|jj    d ||ƒg7}q„|D]}|j 
|d¡}|r¨|Sq¨dS)zy
        Microsoft Windows SDK executable directory.
 
        Return
        ------
        str
            path
        rÛé#ré(rÜTF)rYr–zWinSDK-NetFx%dTools%sr™ú-r{zv%sAräN) r¾r¡r—rmÚNetFxSdkVersionrrºr«rßrªr·)    rŠZnetfxverr.r–ZfxZregpathsr-rWZexecpathrrrÚWindowsSDKExecutablePathÌs"
 
 
 
z#SystemInfo.WindowsSDKExecutablePathcCs&t|jjd|jƒ}|j |d¡p$dS)zl
        Microsoft Visual F# directory.
 
        Return
        ------
        str
            path
        z%0.1f\Setup\F#r"r)rrºr¢r¾r·)rŠrWrrrÚFSharpInstallDirïs
zSystemInfo.FSharpInstallDircCsF|jdkrdnd}|D]*}|j |jjd|¡}|r|p:dSqdS)zt
        Microsoft Universal CRT SDK directory.
 
        Return
        ------
        str
            path
        r{)Ú10Z81rz
kitsroot%srN)r¾rºr·r¬)rŠÚversr-rærrrÚUniversalCRTSdkDirüs  ÿzSystemInfo.UniversalCRTSdkDircCs| t|jdƒ¡S)z€
        Microsoft Universal C Runtime SDK last version.
 
        Return
        ------
        str
            version
        rà)rárròrŒrrrÚUniversalCRTSdkLastVersions
z%SystemInfo.UniversalCRTSdkLastVersioncCs|jdkrdSdS)z
        Microsoft .NET Framework SDK versions.
 
        Return
        ------
        tuple of str
            versions
        r{)    z4.7.2z4.7.1z4.7z4.6.2z4.6.1z4.6z4.5.2z4.5.1z4.5rrÞrŒrrrrísýýzSystemInfo.NetFxSdkVersioncCs8d}|jD](}t|jj|ƒ}|j |d¡}|r
q4q
|S)zu
        Microsoft .NET Framework SDK directory.
 
        Return
        ------
        str
            path
        rZkitsinstallationfolder)rírrºr«r·)rŠrær-rçrrrÚ NetFxSdkDir,s
 
zSystemInfo.NetFxSdkDircCs"t|jdƒ}|j |jjd¡p |S)zw
        Microsoft .NET Framework 32bit directory.
 
        Return
        ------
        str
            path
        zMicrosoft.NET\FrameworkZframeworkdir32©rr¹rºr·r¥©rŠZguess_fwrrrÚFrameworkDir32>s zSystemInfo.FrameworkDir32cCs"t|jdƒ}|j |jjd¡p |S)zw
        Microsoft .NET Framework 64bit directory.
 
        Return
        ------
        str
            path
        zMicrosoft.NET\Framework64Zframeworkdir64rõrörrrÚFrameworkDir64Ns zSystemInfo.FrameworkDir64cCs
| d¡S)zƒ
        Microsoft .NET Framework 32bit versions.
 
        Return
        ------
        tuple of str
            versions
        é ©Ú_find_dot_net_versionsrŒrrrÚFrameworkVersion32^s
zSystemInfo.FrameworkVersion32cCs
| d¡S)zƒ
        Microsoft .NET Framework 64bit versions.
 
        Return
        ------
        tuple of str
            versions
        é@rúrŒrrrÚFrameworkVersion64js
zSystemInfo.FrameworkVersion64cCs”|j |jjd|¡}t|d|ƒ}|p6| |d¡p6d}|jdkrJ|dfS|jdkrt| ¡dd    …d
krld n|d fS|jd kr‚dS|jdkrdSdS)zê
        Find Microsoft .NET Framework versions.
 
        Parameters
        ----------
        bits: int
            Platform number of bits: 32 or 64.
 
        Return
        ------
        tuple of str
            versions
        zframeworkver%dzFrameworkDir%drDrrÜzv4.0r„NrÐZv4z
v4.0.30319úv3.5rƒ)rÿú
v2.0.50727g @)zv3.0r)rºr·r¥Úgetattrrár¾rh)rŠÚbitsZreg_verZ dot_net_dirr-rrrrûvs
 
 
 
z!SystemInfo._find_dot_net_versionscs*‡‡fdd„ttˆƒƒDƒ}t|dƒp(dS)a)
        Return name of the last dir in path or '' if no dir found.
 
        Parameters
        ----------
        path: str
            Use dirs in this path
        prefix: str
            Use only dirs starting by this prefix
 
        Return
        ------
        str
            name
        c3s*|]"}ttˆ|ƒƒr| ˆ¡r|VqdSr )rrÚ
startswith)riÚdir_name©rWÚprefixrrrq¤s
ýz0SystemInfo._use_last_dir_name.<locals>.<genexpr>Nr)ÚreversedrÚnext)rWrZ matching_dirsrrrrá“s 
þzSystemInfo._use_last_dir_name)N)r)#rrrrrrOr¹rGrÓr‹r½rÀr»Ú staticmethodrÍržrÕrÙrÖr×rßrãrârîrïròrórírôr÷rørürþrûrárrrrr¸sZ   
 
$*
 
 
 
 
 
*
"
 
 
 
 
 
 
 
 
r¸c@sbeZdZdZd?dd„Zedd„ƒZedd    „ƒZed
d „ƒZed d „ƒZ    edd„ƒZ
edd„ƒZ edd„ƒZ edd„ƒZ edd„ƒZedd„ƒZedd„ƒZdd„Zedd„ƒZed d!„ƒZed"d#„ƒZed$d%„ƒZed&d'„ƒZed(d)„ƒZed*d+„ƒZed,d-„ƒZed.d/„ƒZed0d1„ƒZed2d3„ƒZed4d5„ƒZed6d7„ƒZd@d9d:„Zd;d<„Z e!dAd=d>„ƒZ"dS)Br*aY
    Return environment variables for specified Microsoft Visual C++ version
    and platform : Lib, Include, Path and libpath.
 
    This function is compatible with Microsoft Visual C++ 9.0 to 14.X.
 
    Script created by analysing Microsoft environment configuration files like
    "vcvars[...].bat", "SetEnv.Cmd", "vcbuildtools.bat", ...
 
    Parameters
    ----------
    arch: str
        Target architecture.
    vc_ver: float
        Required Microsoft Visual C++ version. If not set, autodetect the last
        version.
    vc_min_ver: float
        Minimum Microsoft Visual C++ version.
    NrcCsBt|ƒ|_t|jƒ|_t|j|ƒ|_|j|kr>d}tj     |¡‚dS)Nz.No suitable Microsoft Visual C++ version found)
r‰r¡rŸrºr¸Úsir¿r&r'r()rŠr.r¿Z
vc_min_verÚerrrrrr‹Ås 
 
zEnvironmentInfo.__init__cCs|jjS)zk
        Microsoft Visual Studio.
 
        Return
        ------
        float
            version
        )r
r¾rŒrrrr¾Îs
zEnvironmentInfo.vs_vercCs|jjS)zp
        Microsoft Visual C++ version.
 
        Return
        ------
        float
            version
        )r
r¿rŒrrrr¿Ús
zEnvironmentInfo.vc_vercsVddg}ˆjdkrDˆjjddd}|dg7}|dg7}|d|g7}‡fd    d
„|DƒS) zu
        Microsoft Visual Studio Tools.
 
        Return
        ------
        list of str
            paths
        z Common7\IDEz Common7\Toolsr{T©r–rYz1Common7\IDE\CommonExtensions\Microsoft\TestWindowzTeam Tools\Performance ToolszTeam Tools\Performance Tools%scsg|]}tˆjj|ƒ‘qSr©rr
rÕ©rirWrŒrrÚ
<listcomp>øsz+EnvironmentInfo.VSTools.<locals>.<listcomp>)r¾r¡r—)rŠÚpathsÚ arch_subdirrrŒrÚVSToolsæs
 
 
 
zEnvironmentInfo.VSToolscCst|jjdƒt|jjdƒgS)z’
        Microsoft Visual C++ & Microsoft Foundation Class Includes.
 
        Return
        ------
        list of str
            paths
        ÚIncludezATLMFC\Include©rr
rÙrŒrrrÚ
VCIncludesús
 ÿzEnvironmentInfo.VCIncludescsbˆjdkrˆjjdd}nˆjjdd}d|d|g}ˆjdkrP|d|g7}‡fd    d
„|DƒS) z“
        Microsoft Visual C++ & Microsoft Foundation Class Libraries.
 
        Return
        ------
        list of str
            paths
        ç.@T©rY©r–úLib%sz ATLMFC\Lib%sr{z Lib\store%scsg|]}tˆjj|ƒ‘qSrrrrŒrrrsz/EnvironmentInfo.VCLibraries.<locals>.<listcomp>)r¾r¡r˜)rŠrrrrŒrÚ VCLibrariess
 
 
zEnvironmentInfo.VCLibrariescCs|jdkrgSt|jjdƒgS)z‡
        Microsoft Visual C++ store references Libraries.
 
        Return
        ------
        list of str
            paths
        r{zLib\store\references)r¾rr
rÙrŒrrrÚ VCStoreRefss
 
zEnvironmentInfo.VCStoreRefscCs|j}t|jdƒg}|jdkr"dnd}|j |¡}|rL|t|jd|ƒg7}|jdkr|d|jjdd}|t|j|ƒg7}n€|jdkrê|j ¡r”d    nd
}|t|j||jjdd ƒg7}|jj    |jj
krü|t|j||jjdd ƒg7}n|t|jd ƒg7}|S) zr
        Microsoft Visual C++ Tools.
 
        Return
        ------
        list of str
            paths
        Z
VCPackagesr„TFúBin%sr{rrz bin\HostX86%sz bin\HostX64%srÚBin) r
rrÙr¾r¡rœr—r’r˜r‘r)rŠr
ÚtoolsršrrWZhost_dirrrrÚVCTools*s0
 
 
ÿÿÿ
zEnvironmentInfo.VCToolscCsh|jdkr.|jjddd}t|jjd|ƒgS|jjdd}t|jjdƒ}|j}t|d||fƒgSdS)    zw
        Microsoft Windows SDK Libraries.
 
        Return
        ------
        list of str
            paths
        r„Tr rrràz%sum%sN)r¾r¡r˜rr
râÚ _sdk_subdir)rŠrràZlibverrrrÚ OSLibrariesOs
 
zEnvironmentInfo.OSLibrariescCsht|jjdƒ}|jdkr&|t|dƒgS|jdkr8|j}nd}t|d|ƒt|d|ƒt|d|ƒgSd    S)
zu
        Microsoft Windows SDK Include.
 
        Return
        ------
        list of str
            paths
        Úincluder„Úglr{rz%ssharedz%sumz%swinrtN)rr
râr¾r )rŠr"ÚsdkverrrrÚ
OSIncludescs
 
 
   þzEnvironmentInfo.OSIncludescCsžt|jjdƒ}g}|jdkr&||j7}|jdkr@|t|dƒg7}|jdkrš||t|jjdƒt|ddƒt|d    dƒt|d
dƒt|jjd d d |jdddƒg7}|S)z}
        Microsoft Windows SDK Libraries Paths.
 
        Return
        ------
        list of str
            paths
        Z
ReferencesrƒrÛzCommonConfiguration\Neutralr{Z UnionMetadataz'Windows.Foundation.UniversalApiContractz1.0.0.0z%Windows.Foundation.FoundationContractz,Windows.Networking.Connectivity.WwanContractZ ExtensionSDKszMicrosoft.VCLibsrÒZCommonConfigurationZneutral)rr
râr¾r!)rŠÚrefÚlibpathrrrÚ    OSLibpath{s@
 
 
 
 
 ÿ
þý÷zEnvironmentInfo.OSLibpathcCs t| ¡ƒS)zs
        Microsoft Windows SDK Tools.
 
        Return
        ------
        list of str
            paths
        )ÚlistÚ
_sdk_toolsrŒrrrÚSdkToolsŸs
zEnvironmentInfo.SdkToolsccsø|jdkr,|jdkrdnd}t|jj|ƒV|j ¡s\|jjdd}d|}t|jj|ƒV|jdkr |j ¡rvd    }n|jjddd
}d |}t|jj|ƒVnB|jdkrât|jjdƒ}|jjdd}|jj}t|d ||fƒV|jj    rô|jj    Vd S)zˆ
        Microsoft Windows SDK Tools paths generator.
 
        Return
        ------
        generator of str
            paths
        rrÛrzBin\x86Trr)r„rÛrr zBin\NETFX 4.0 Tools%sz%s%sN)
r¾rr
râr¡r’r—rrãrî)rŠÚbin_dirrrWr$rrrr*«s(    
 
 
 
 
zEnvironmentInfo._sdk_toolscCs|jj}|rd|SdS)zu
        Microsoft Windows SDK version subdir.
 
        Return
        ------
        str
            subdir
        ú%s\r)r
rã©rŠÚucrtverrrrr Îs
zEnvironmentInfo._sdk_subdircCs|jdkrgSt|jjdƒgS)zs
        Microsoft Windows SDK Setup.
 
        Return
        ------
        list of str
            paths
        rƒÚSetup)r¾rr
rârŒrrrÚSdkSetupÛs
 
zEnvironmentInfo.SdkSetupcs”|j}|j‰|jdkr0d}| ¡ o,| ¡ }n$| ¡p>| ¡}|jdkpR|jdk}g}|rt|‡fdd„ˆjDƒ7}|r|‡fdd„ˆjDƒ7}|S)zv
        Microsoft .NET Framework Tools.
 
        Return
        ------
        list of str
            paths
        r„Tr[csg|]}tˆj|ƒ‘qSr)rr÷©rir-©r
rrrsÿz+EnvironmentInfo.FxTools.<locals>.<listcomp>csg|]}tˆj|ƒ‘qSr)rrør2r3rrrsÿ)    r¡r
r¾rr’r‘rrürþ)rŠr¡Z    include32Z    include64rrr3rÚFxToolsês"
 
 ÿ ÿzEnvironmentInfo.FxToolscCs8|jdks|jjsgS|jjdd}t|jjd|ƒgS)z~
        Microsoft .Net Framework SDK Libraries.
 
        Return
        ------
        list of str
            paths
        r{Trzlib\um%s)r¾r
rôr¡r˜r)rŠrrrrÚNetFxSDKLibrariess
z!EnvironmentInfo.NetFxSDKLibrariescCs&|jdks|jjsgSt|jjdƒgS)z}
        Microsoft .Net Framework SDK Includes.
 
        Return
        ------
        list of str
            paths
        r{z
include\um)r¾r
rôrrŒrrrÚNetFxSDKIncludess
z EnvironmentInfo.NetFxSDKIncludescCst|jjdƒgS)z„
        Microsoft Visual Studio Team System Database.
 
        Return
        ------
        list of str
            paths
        z VSTSDB\Deployr rŒrrrÚVsTDb&s
zEnvironmentInfo.VsTDbcCsv|jdkrgS|jdkr0|jj}|jjdd}n |jj}d}d|j|f}t||ƒg}|jdkrr|t||dƒg7}|S)zn
        Microsoft Build Engine.
 
        Return
        ------
        list of str
            paths
        rÜrTrrzMSBuild\%0.1f\bin%sZRoslyn)r¾r
rÓr¡r—rÕr)rŠÚ    base_pathrrWÚbuildrrrÚMSBuild2s
 
 
 
zEnvironmentInfo.MSBuildcCs|jdkrgSt|jjdƒgS)zt
        Microsoft HTML Help Workshop.
 
        Return
        ------
        list of str
            paths
        rÛzHTML Help Workshop)r¾rr
rÓrŒrrrÚHTMLHelpWorkshopNs
 
z EnvironmentInfo.HTMLHelpWorkshopcCsD|jdkrgS|jjdd}t|jjdƒ}|j}t|d||fƒgS)zƒ
        Microsoft Universal C Runtime SDK Libraries.
 
        Return
        ------
        list of str
            paths
        r{Trràz%sucrt%s)r¾r¡r˜rr
ròÚ _ucrt_subdir)rŠrràr/rrrÚ UCRTLibraries]s
 
zEnvironmentInfo.UCRTLibrariescCs.|jdkrgSt|jjdƒ}t|d|jƒgS)z
        Microsoft Universal C Runtime SDK Include.
 
        Return
        ------
        list of str
            paths
        r{r"z%sucrt)r¾rr
ròr<)rŠr"rrrÚ UCRTIncludesos
 
zEnvironmentInfo.UCRTIncludescCs|jj}|rd|SdS)z
        Microsoft Universal C Runtime SDK version subdir.
 
        Return
        ------
        str
            subdir
        r-r)r
rór.rrrr<s
zEnvironmentInfo._ucrt_subdircCs(d|jkrdkrnngS|jjgS)zk
        Microsoft Visual F#.
 
        Return
        ------
        list of str
            paths
        rÛrÜ)r¾r
rïrŒrrrÚFSharpŒs
zEnvironmentInfo.FSharpc
CsÎd|j}|jjdd d¡}g}|jj}t| dd¡ƒ}t|ƒrft    |t
|ƒdƒ}||t    |dƒg7}|t    |d    ƒg7}d
|jd d
t |j ƒd f}t  ||¡D]&\}}t    ||||ƒ}    t|    ƒr¢|    Sq¢d S) z
        Microsoft Visual C++ runtime redistributable dll.
 
        Return
        ------
        str
            path
        zvcruntime%d0.dllTrr™z\Toolsz\Redistr^Zonecorer\zMicrosoft.VC%d.CRTé
N)r¿r¡r˜rSr
rÙrrmrrrr>r¾r:Úproductr)
rŠrerÚprefixesZ
tools_pathZ redist_pathZcrt_dirsrZcrt_dirrWrrrÚVCRuntimeRedist›s 
 
 þzEnvironmentInfo.VCRuntimeRedistTcCs²t| d|j|j|j|jg|¡| d|j|j|j|j    |j
g|¡| d|j|j|j |j g|¡| d|j |j|j|j|j|j|j|j|jg    |¡d}|jdkr®t|jƒr®|j|d<|S)zÛ
        Return environment dict.
 
        Parameters
        ----------
        exists: bool
            It True, only return existing paths.
 
        Return
        ------
        dict
            environment
        r"ràr'rW)r"ràr'rWr5rr)ÚdictÚ _build_pathsrr%r>r6rr!r4r=r5rr(rrr7r+r1r:r;r?r¾rrC)rŠÚexistsryrrrr+¾sVýûüúýûø    öì 
zEnvironmentInfo.return_envc
Csptj |¡}t |d¡ t¡}t ||¡}|r<ttt    |ƒƒn|}|s\d| 
¡}t j   |¡‚| |¡}    t |    ¡S)aC
        Given an environment variable name and specified paths,
        return a pathsep-separated string of paths containing
        unique, extant, directories from those paths and from
        the environment variable. Raise an error if no paths
        are resolved.
 
        Parameters
        ----------
        name: str
            Environment variable name
        spec_path_lists: list of str
            Paths
        exists: bool
            It True, only return existing paths.
 
        Return
        ------
        str
            Pathsep-separated paths
        rz %s environment variable is empty)r:ÚchainÚ from_iterablerrOrÑrr)ÚfilterrÚupperr&r'r(Ú_unique_everseenr)
rŠr³Zspec_path_listsrFZ
spec_pathsZ    env_pathsrZ extant_pathsrØZ unique_pathsrrrrEðs    
zEnvironmentInfo._build_pathsccsbtƒ}|j}|dkr6t|j|ƒD]}||ƒ|Vq n(|D]"}||ƒ}||kr:||ƒ|Vq:dS)z×
        List unique elements, preserving order.
        Remember all elements ever seen.
 
        _unique_everseen('AAAABBBCCDAABBB') --> A B C D
 
        _unique_everseen('ABBCcAD', str.lower) --> A B C D
        N)rÁÚaddr
Ú __contains__)Úiterabler!ÚseenZseen_addÚelementÚkrrrrKs
 
z EnvironmentInfo._unique_everseen)Nr)T)N)#rrrrr‹ržr¾r¿rrrrrr!r%r(r+r*r r1r4r5r6r7r:r;r=r>r<r?rCr+rEr    rKrrrrr*­sn
    
 
 
 
 
 
 
$
 
 
#
#
 
 
 
 
 
 
 
 
 
 
 
 
"
2"r*)r$)r)0rrËÚiorÚosrrÚos.pathrrrrr}Úplatformr:rPÚdistutils.errorsr&Z#setuptools.extern.packaging.versionr    Zsetuptools.extern.six.movesr
Zmonkeyr ÚsystemrrrDrar'r(Z_msvc9_suppress_errorsZdistutils.msvc9compilerrrr%rErXr_rfrzr|rr,r‰rŸr¸r*rrrrÚ<module>s^      ú    *
&$ü'$
$s: