System.Data.SQLite
Hex Artifact Content
Not logged in

Artifact 3d8e9f4de6cfa53a3cba4e577d37782fc6e2e8f8:


0000: 2f 2a 0d 0a 20 2a 20 49 6e 73 74 61 6c 6c 65 72  /*.. * Installer
0010: 2e 63 73 20 2d 2d 0d 0a 20 2a 0d 0a 20 2a 20 57  .cs --.. *.. * W
0020: 72 69 74 74 65 6e 20 62 79 20 4a 6f 65 20 4d 69  ritten by Joe Mi
0030: 73 74 61 63 68 6b 69 6e 2e 0d 0a 20 2a 20 52 65  stachkin... * Re
0040: 6c 65 61 73 65 64 20 74 6f 20 74 68 65 20 70 75  leased to the pu
0050: 62 6c 69 63 20 64 6f 6d 61 69 6e 2c 20 75 73 65  blic domain, use
0060: 20 61 74 20 79 6f 75 72 20 6f 77 6e 20 72 69 73   at your own ris
0070: 6b 21 0d 0a 20 2a 2f 0d 0a 0d 0a 75 73 69 6e 67  k!.. */....using
0080: 20 53 79 73 74 65 6d 3b 0d 0a 75 73 69 6e 67 20   System;..using 
0090: 53 79 73 74 65 6d 2e 43 6f 6c 6c 65 63 74 69 6f  System.Collectio
00a0: 6e 73 2e 47 65 6e 65 72 69 63 3b 0d 0a 75 73 69  ns.Generic;..usi
00b0: 6e 67 20 53 79 73 74 65 6d 2e 44 69 61 67 6e 6f  ng System.Diagno
00c0: 73 74 69 63 73 3b 0d 0a 75 73 69 6e 67 20 53 79  stics;..using Sy
00d0: 73 74 65 6d 2e 45 6e 74 65 72 70 72 69 73 65 53  stem.EnterpriseS
00e0: 65 72 76 69 63 65 73 2e 49 6e 74 65 72 6e 61 6c  ervices.Internal
00f0: 3b 0d 0a 75 73 69 6e 67 20 53 79 73 74 65 6d 2e  ;..using System.
0100: 49 4f 3b 0d 0a 75 73 69 6e 67 20 53 79 73 74 65  IO;..using Syste
0110: 6d 2e 52 65 66 6c 65 63 74 69 6f 6e 3b 0d 0a 75  m.Reflection;..u
0120: 73 69 6e 67 20 53 79 73 74 65 6d 2e 52 75 6e 74  sing System.Runt
0130: 69 6d 65 2e 43 6f 6d 70 69 6c 65 72 53 65 72 76  ime.CompilerServ
0140: 69 63 65 73 3b 0d 0a 0d 0a 23 69 66 20 57 49 4e  ices;....#if WIN
0150: 44 4f 57 53 0d 0a 75 73 69 6e 67 20 53 79 73 74  DOWS..using Syst
0160: 65 6d 2e 52 75 6e 74 69 6d 65 2e 49 6e 74 65 72  em.Runtime.Inter
0170: 6f 70 53 65 72 76 69 63 65 73 3b 0d 0a 23 65 6e  opServices;..#en
0180: 64 69 66 0d 0a 0d 0a 75 73 69 6e 67 20 53 79 73  dif....using Sys
0190: 74 65 6d 2e 53 65 63 75 72 69 74 79 3b 0d 0a 0d  tem.Security;...
01a0: 0a 23 69 66 20 4e 45 54 5f 32 30 20 7c 7c 20 4e  .#if NET_20 || N
01b0: 45 54 5f 33 35 0d 0a 75 73 69 6e 67 20 53 79 73  ET_35..using Sys
01c0: 74 65 6d 2e 53 65 63 75 72 69 74 79 2e 50 65 72  tem.Security.Per
01d0: 6d 69 73 73 69 6f 6e 73 3b 0d 0a 23 65 6e 64 69  missions;..#endi
01e0: 66 0d 0a 0d 0a 75 73 69 6e 67 20 53 79 73 74 65  f....using Syste
01f0: 6d 2e 54 68 72 65 61 64 69 6e 67 3b 0d 0a 75 73  m.Threading;..us
0200: 69 6e 67 20 53 79 73 74 65 6d 2e 57 69 6e 64 6f  ing System.Windo
0210: 77 73 2e 46 6f 72 6d 73 3b 0d 0a 75 73 69 6e 67  ws.Forms;..using
0220: 20 53 79 73 74 65 6d 2e 58 6d 6c 3b 0d 0a 75 73   System.Xml;..us
0230: 69 6e 67 20 4d 69 63 72 6f 73 6f 66 74 2e 57 69  ing Microsoft.Wi
0240: 6e 33 32 3b 0d 0a 0d 0a 6e 61 6d 65 73 70 61 63  n32;....namespac
0250: 65 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51  e System.Data.SQ
0260: 4c 69 74 65 0d 0a 7b 0d 0a 20 20 20 20 23 72 65  Lite..{..    #re
0270: 67 69 6f 6e 20 50 75 62 6c 69 63 20 44 65 6c 65  gion Public Dele
0280: 67 61 74 65 73 0d 0a 20 20 20 20 69 6e 74 65 72  gates..    inter
0290: 6e 61 6c 20 64 65 6c 65 67 61 74 65 20 76 6f 69  nal delegate voi
02a0: 64 20 54 72 61 63 65 43 61 6c 6c 62 61 63 6b 28  d TraceCallback(
02b0: 0d 0a 20 20 20 20 20 20 20 20 73 74 72 69 6e 67  ..        string
02c0: 20 6d 65 73 73 61 67 65 2c 20 2f 2a 20 69 6e 20   message, /* in 
02d0: 2a 2f 0d 0a 20 20 20 20 20 20 20 20 73 74 72 69  */..        stri
02e0: 6e 67 20 63 61 74 65 67 6f 72 79 20 2f 2a 20 69  ng category /* i
02f0: 6e 20 2a 2f 0d 0a 20 20 20 20 29 3b 0d 0a 0d 0a  n */..    );....
0300: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
0310: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0320: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0330: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0340: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
0350: 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
0360: 64 65 6c 65 67 61 74 65 20 62 6f 6f 6c 20 46 72  delegate bool Fr
0370: 61 6d 65 77 6f 72 6b 43 6f 6e 66 69 67 43 61 6c  ameworkConfigCal
0380: 6c 62 61 63 6b 28 0d 0a 20 20 20 20 20 20 20 20  lback(..        
0390: 73 74 72 69 6e 67 20 66 69 6c 65 4e 61 6d 65 2c  string fileName,
03a0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e             /* in
03b0: 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 73 74 72   */..        str
03c0: 69 6e 67 20 69 6e 76 61 72 69 61 6e 74 4e 61 6d  ing invariantNam
03d0: 65 2c 20 20 20 20 20 20 2f 2a 20 69 6e 20 2a 2f  e,      /* in */
03e0: 0d 0a 20 20 20 20 20 20 20 20 73 74 72 69 6e 67  ..        string
03f0: 20 6e 61 6d 65 2c 20 20 20 20 20 20 20 20 20 20   name,          
0400: 20 20 20 20 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20       /* in */.. 
0410: 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 64 65         string de
0420: 73 63 72 69 70 74 69 6f 6e 2c 20 20 20 20 20 20  scription,      
0430: 20 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20    /* in */..    
0440: 20 20 20 20 73 74 72 69 6e 67 20 74 79 70 65 4e      string typeN
0450: 61 6d 65 2c 20 20 20 20 20 20 20 20 20 20 20 2f  ame,           /
0460: 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20  * in */..       
0470: 20 41 73 73 65 6d 62 6c 79 4e 61 6d 65 20 61 73   AssemblyName as
0480: 73 65 6d 62 6c 79 4e 61 6d 65 2c 20 2f 2a 20 69  semblyName, /* i
0490: 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 73 74  n */..        st
04a0: 72 69 6e 67 20 64 69 72 65 63 74 6f 72 79 2c 20  ring directory, 
04b0: 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 20 2a           /* in *
04c0: 2f 0d 0a 20 20 20 20 20 20 20 20 6f 62 6a 65 63  /..        objec
04d0: 74 20 63 6c 69 65 6e 74 44 61 74 61 2c 20 20 20  t clientData,   
04e0: 20 20 20 20 20 20 2f 2a 20 69 6e 20 2a 2f 0d 0a        /* in */..
04f0: 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 70 65 72          bool per
0500: 55 73 65 72 2c 20 20 20 20 20 20 20 20 20 20 20  User,           
0510: 20 20 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20     /* in */..   
0520: 20 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34 2c       bool wow64,
0530: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0540: 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20  /* in */..      
0550: 20 20 62 6f 6f 6c 20 74 68 72 6f 77 4f 6e 4d 69    bool throwOnMi
0560: 73 73 69 6e 67 2c 20 20 20 20 20 20 20 2f 2a 20  ssing,       /* 
0570: 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 62  in */..        b
0580: 6f 6f 6c 20 77 68 61 74 49 66 2c 20 20 20 20 20  ool whatIf,     
0590: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 20            /* in 
05a0: 2a 2f 0d 0a 20 20 20 20 20 20 20 20 62 6f 6f 6c  */..        bool
05b0: 20 76 65 72 62 6f 73 65 2c 20 20 20 20 20 20 20   verbose,       
05c0: 20 20 20 20 20 20 20 2f 2a 20 69 6e 20 2a 2f 0d         /* in */.
05d0: 0a 20 20 20 20 20 20 20 20 72 65 66 20 62 6f 6f  .        ref boo
05e0: 6c 20 73 61 76 65 64 2c 20 20 20 20 20 20 20 20  l saved,        
05f0: 20 20 20 20 2f 2a 20 6f 75 74 20 2a 2f 0d 0a 20      /* out */.. 
0600: 20 20 20 20 20 20 20 72 65 66 20 73 74 72 69 6e         ref strin
0610: 67 20 65 72 72 6f 72 20 20 20 20 20 20 20 20 20  g error         
0620: 20 20 2f 2a 20 6f 75 74 20 2a 2f 0d 0a 20 20 20    /* out */..   
0630: 20 29 3b 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f   );....    /////
0640: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0650: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0660: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0670: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0680: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 69 6e  //////....    in
0690: 74 65 72 6e 61 6c 20 64 65 6c 65 67 61 74 65 20  ternal delegate 
06a0: 62 6f 6f 6c 20 46 72 61 6d 65 77 6f 72 6b 52 65  bool FrameworkRe
06b0: 67 69 73 74 72 79 43 61 6c 6c 62 61 63 6b 28 0d  gistryCallback(.
06c0: 0a 20 20 20 20 20 20 20 20 49 6e 73 74 61 6c 6c  .        Install
06d0: 65 72 2e 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b  er.MockRegistryK
06e0: 65 79 20 72 6f 6f 74 4b 65 79 2c 20 2f 2a 20 69  ey rootKey, /* i
06f0: 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 73 74  n */..        st
0700: 72 69 6e 67 20 66 72 61 6d 65 77 6f 72 6b 4e 61  ring frameworkNa
0710: 6d 65 2c 20 20 20 20 20 20 20 20 20 20 20 20 20  me,             
0720: 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20   /* in */..     
0730: 20 20 20 56 65 72 73 69 6f 6e 20 66 72 61 6d 65     Version frame
0740: 77 6f 72 6b 56 65 72 73 69 6f 6e 2c 20 20 20 20  workVersion,    
0750: 20 20 20 20 20 20 2f 2a 20 69 6e 20 2a 2f 0d 0a        /* in */..
0760: 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 70          string p
0770: 6c 61 74 66 6f 72 6d 4e 61 6d 65 2c 20 20 20 20  latformName,    
0780: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e             /* in
0790: 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 73 74 72   */..        str
07a0: 69 6e 67 20 64 69 72 65 63 74 6f 72 79 2c 20 20  ing directory,  
07b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
07c0: 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20  /* in */..      
07d0: 20 20 6f 62 6a 65 63 74 20 63 6c 69 65 6e 74 44    object clientD
07e0: 61 74 61 2c 20 20 20 20 20 20 20 20 20 20 20 20  ata,            
07f0: 20 20 20 20 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20       /* in */.. 
0800: 20 20 20 20 20 20 20 62 6f 6f 6c 20 70 65 72 55         bool perU
0810: 73 65 72 2c 20 20 20 20 20 20 20 20 20 20 20 20  ser,            
0820: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 20            /* in 
0830: 2a 2f 0d 0a 20 20 20 20 20 20 20 20 62 6f 6f 6c  */..        bool
0840: 20 77 6f 77 36 34 2c 20 20 20 20 20 20 20 20 20   wow64,         
0850: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
0860: 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20  * in */..       
0870: 20 62 6f 6f 6c 20 74 68 72 6f 77 4f 6e 4d 69 73   bool throwOnMis
0880: 73 69 6e 67 2c 20 20 20 20 20 20 20 20 20 20 20  sing,           
0890: 20 20 20 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20      /* in */..  
08a0: 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49        bool whatI
08b0: 66 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20  f,              
08c0: 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 20 2a           /* in *
08d0: 2f 0d 0a 20 20 20 20 20 20 20 20 62 6f 6f 6c 20  /..        bool 
08e0: 76 65 72 62 6f 73 65 2c 20 20 20 20 20 20 20 20  verbose,        
08f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
0900: 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20   in */..        
0910: 72 65 66 20 73 74 72 69 6e 67 20 65 72 72 6f 72  ref string error
0920: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0930: 20 20 20 2f 2a 20 6f 75 74 20 2a 2f 0d 0a 20 20     /* out */..  
0940: 20 20 29 3b 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f    );....    ////
0950: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0960: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0970: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0980: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0990: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 69  ///////....    i
09a0: 6e 74 65 72 6e 61 6c 20 64 65 6c 65 67 61 74 65  nternal delegate
09b0: 20 62 6f 6f 6c 20 56 69 73 75 61 6c 53 74 75 64   bool VisualStud
09c0: 69 6f 52 65 67 69 73 74 72 79 43 61 6c 6c 62 61  ioRegistryCallba
09d0: 63 6b 28 0d 0a 20 20 20 20 20 20 20 20 49 6e 73  ck(..        Ins
09e0: 74 61 6c 6c 65 72 2e 4d 6f 63 6b 52 65 67 69 73  taller.MockRegis
09f0: 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79 2c 20  tryKey rootKey, 
0a00: 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20  /* in */..      
0a10: 20 20 56 65 72 73 69 6f 6e 20 76 73 56 65 72 73    Version vsVers
0a20: 69 6f 6e 2c 20 20 20 20 20 20 20 20 20 20 20 20  ion,            
0a30: 20 20 20 20 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20       /* in */.. 
0a40: 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 73 75         string su
0a50: 66 66 69 78 2c 20 20 20 20 20 20 20 20 20 20 20  ffix,           
0a60: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 2c            /* in,
0a70: 20 6f 70 74 69 6f 6e 61 6c 20 2a 2f 0d 0a 20 20   optional */..  
0a80: 20 20 20 20 20 20 49 6e 73 74 61 6c 6c 65 72 2e        Installer.
0a90: 50 61 63 6b 61 67 65 20 70 61 63 6b 61 67 65 2c  Package package,
0aa0: 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 20 2a           /* in *
0ab0: 2f 0d 0a 20 20 20 20 20 20 20 20 73 74 72 69 6e  /..        strin
0ac0: 67 20 64 69 72 65 63 74 6f 72 79 2c 20 20 20 20  g directory,    
0ad0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
0ae0: 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20   in */..        
0af0: 6f 62 6a 65 63 74 20 63 6c 69 65 6e 74 44 61 74  object clientDat
0b00: 61 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20  a,              
0b10: 20 20 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20     /* in */..   
0b20: 20 20 20 20 20 62 6f 6f 6c 20 70 65 72 55 73 65       bool perUse
0b30: 72 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20  r,              
0b40: 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 20 2a 2f          /* in */
0b50: 0d 0a 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77  ..        bool w
0b60: 6f 77 36 34 2c 20 20 20 20 20 20 20 20 20 20 20  ow64,           
0b70: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
0b80: 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 62  in */..        b
0b90: 6f 6f 6c 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69  ool throwOnMissi
0ba0: 6e 67 2c 20 20 20 20 20 20 20 20 20 20 20 20 20  ng,             
0bb0: 20 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20    /* in */..    
0bc0: 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c      bool whatIf,
0bd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0be0: 20 20 20 20 20 20 20 2f 2a 20 69 6e 20 2a 2f 0d         /* in */.
0bf0: 0a 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65  .        bool ve
0c00: 72 62 6f 73 65 2c 20 20 20 20 20 20 20 20 20 20  rbose,          
0c10: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69              /* i
0c20: 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 72 65  n */..        re
0c30: 66 20 73 74 72 69 6e 67 20 65 72 72 6f 72 20 20  f string error  
0c40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0c50: 20 2f 2a 20 6f 75 74 20 2a 2f 0d 0a 20 20 20 20   /* out */..    
0c60: 29 3b 0d 0a 20 20 20 20 23 65 6e 64 72 65 67 69  );..    #endregi
0c70: 6f 6e 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f  on....    //////
0c80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0c90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0ca0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0cb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0cc0: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 23 72 65  /////....    #re
0cd0: 67 69 6f 6e 20 50 75 62 6c 69 63 20 45 6e 75 6d  gion Public Enum
0ce0: 65 72 61 74 69 6f 6e 73 0d 0a 20 20 20 20 5b 46  erations..    [F
0cf0: 6c 61 67 73 28 29 5d 0d 0a 20 20 20 20 70 75 62  lags()]..    pub
0d00: 6c 69 63 20 65 6e 75 6d 20 49 6e 73 74 61 6c 6c  lic enum Install
0d10: 46 6c 61 67 73 0d 0a 20 20 20 20 7b 0d 0a 20 20  Flags..    {..  
0d20: 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 4e 6f        #region No
0d30: 72 6d 61 6c 20 56 61 6c 75 65 73 0d 0a 20 20 20  rmal Values..   
0d40: 20 20 20 20 20 4e 6f 6e 65 20 3d 20 30 78 30 2c       None = 0x0,
0d50: 0d 0a 20 20 20 20 20 20 20 20 43 6f 72 65 47 6c  ..        CoreGl
0d60: 6f 62 61 6c 41 73 73 65 6d 62 6c 79 43 61 63 68  obalAssemblyCach
0d70: 65 20 3d 20 30 78 31 2c 0d 0a 20 20 20 20 20 20  e = 0x1,..      
0d80: 20 20 4c 69 6e 71 47 6c 6f 62 61 6c 41 73 73 65    LinqGlobalAsse
0d90: 6d 62 6c 79 43 61 63 68 65 20 3d 20 30 78 32 2c  mblyCache = 0x2,
0da0: 0d 0a 20 20 20 20 20 20 20 20 45 66 36 47 6c 6f  ..        Ef6Glo
0db0: 62 61 6c 41 73 73 65 6d 62 6c 79 43 61 63 68 65  balAssemblyCache
0dc0: 20 3d 20 30 78 34 2c 0d 0a 20 20 20 20 20 20 20   = 0x4,..       
0dd0: 20 41 73 73 65 6d 62 6c 79 46 6f 6c 64 65 72 73   AssemblyFolders
0de0: 20 3d 20 30 78 38 2c 0d 0a 20 20 20 20 20 20 20   = 0x8,..       
0df0: 20 44 62 50 72 6f 76 69 64 65 72 46 61 63 74 6f   DbProviderFacto
0e00: 72 79 20 3d 20 30 78 31 30 2c 0d 0a 20 20 20 20  ry = 0x10,..    
0e10: 20 20 20 20 56 73 50 61 63 6b 61 67 65 20 3d 20      VsPackage = 
0e20: 30 78 32 30 2c 0d 0a 20 20 20 20 20 20 20 20 56  0x20,..        V
0e30: 73 50 61 63 6b 61 67 65 47 6c 6f 62 61 6c 41 73  sPackageGlobalAs
0e40: 73 65 6d 62 6c 79 43 61 63 68 65 20 3d 20 30 78  semblyCache = 0x
0e50: 34 30 2c 0d 0a 20 20 20 20 20 20 20 20 56 73 44  40,..        VsD
0e60: 61 74 61 53 6f 75 72 63 65 20 3d 20 30 78 38 30  ataSource = 0x80
0e70: 2c 0d 0a 20 20 20 20 20 20 20 20 56 73 44 61 74  ,..        VsDat
0e80: 61 50 72 6f 76 69 64 65 72 20 3d 20 30 78 31 30  aProvider = 0x10
0e90: 30 2c 0d 0a 20 20 20 20 20 20 20 20 56 73 44 65  0,..        VsDe
0ea0: 76 45 6e 76 53 65 74 75 70 20 3d 20 30 78 32 30  vEnvSetup = 0x20
0eb0: 30 2c 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64  0,..        #end
0ec0: 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20  region....      
0ed0: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
0ee0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0ef0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0f00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0f10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
0f20: 20 20 20 20 20 23 72 65 67 69 6f 6e 20 43 6f 6d       #region Com
0f30: 70 6f 73 69 74 65 20 56 61 6c 75 65 73 0d 0a 20  posite Values.. 
0f40: 20 20 20 20 20 20 20 46 72 61 6d 65 77 6f 72 6b         Framework
0f50: 47 6c 6f 62 61 6c 41 73 73 65 6d 62 6c 79 43 61  GlobalAssemblyCa
0f60: 63 68 65 20 3d 20 43 6f 72 65 47 6c 6f 62 61 6c  che = CoreGlobal
0f70: 41 73 73 65 6d 62 6c 79 43 61 63 68 65 20 7c 0d  AssemblyCache |.
0f80: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
0f90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0fa0: 20 20 20 20 20 20 20 20 4c 69 6e 71 47 6c 6f 62          LinqGlob
0fb0: 61 6c 41 73 73 65 6d 62 6c 79 43 61 63 68 65 20  alAssemblyCache 
0fc0: 7c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  |..             
0fd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0fe0: 20 20 20 20 20 20 20 20 20 20 45 66 36 47 6c 6f            Ef6Glo
0ff0: 62 61 6c 41 73 73 65 6d 62 6c 79 43 61 63 68 65  balAssemblyCache
1000: 2c 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ,....        ///
1010: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1020: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1030: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1040: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1050: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
1060: 46 72 61 6d 65 77 6f 72 6b 20 3d 20 46 72 61 6d  Framework = Fram
1070: 65 77 6f 72 6b 47 6c 6f 62 61 6c 41 73 73 65 6d  eworkGlobalAssem
1080: 62 6c 79 43 61 63 68 65 20 7c 20 41 73 73 65 6d  blyCache | Assem
1090: 62 6c 79 46 6f 6c 64 65 72 73 20 7c 0d 0a 20 20  blyFolders |..  
10a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10b0: 20 20 44 62 50 72 6f 76 69 64 65 72 46 61 63 74    DbProviderFact
10c0: 6f 72 79 2c 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ory,....        
10d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1100: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1110: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
1120: 20 20 20 56 73 20 3d 20 56 73 50 61 63 6b 61 67     Vs = VsPackag
1130: 65 20 7c 20 56 73 50 61 63 6b 61 67 65 47 6c 6f  e | VsPackageGlo
1140: 62 61 6c 41 73 73 65 6d 62 6c 79 43 61 63 68 65  balAssemblyCache
1150: 20 7c 20 56 73 44 61 74 61 53 6f 75 72 63 65 20   | VsDataSource 
1160: 7c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  |..             
1170: 56 73 44 61 74 61 50 72 6f 76 69 64 65 72 20 7c  VsDataProvider |
1180: 20 56 73 44 65 76 45 6e 76 53 65 74 75 70 2c 0d   VsDevEnvSetup,.
1190: 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
11a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11e0: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 41 6c  //....        Al
11f0: 6c 47 6c 6f 62 61 6c 41 73 73 65 6d 62 6c 79 43  lGlobalAssemblyC
1200: 61 63 68 65 20 3d 20 46 72 61 6d 65 77 6f 72 6b  ache = Framework
1210: 47 6c 6f 62 61 6c 41 73 73 65 6d 62 6c 79 43 61  GlobalAssemblyCa
1220: 63 68 65 20 7c 0d 0a 20 20 20 20 20 20 20 20 20  che |..         
1230: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1240: 20 20 20 20 20 20 20 20 56 73 50 61 63 6b 61 67          VsPackag
1250: 65 47 6c 6f 62 61 6c 41 73 73 65 6d 62 6c 79 43  eGlobalAssemblyC
1260: 61 63 68 65 2c 0d 0a 0d 0a 20 20 20 20 20 20 20  ache,....       
1270: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
1280: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1290: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12b0: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
12c0: 20 20 20 20 41 6c 6c 20 3d 20 46 72 61 6d 65 77      All = Framew
12d0: 6f 72 6b 20 7c 20 56 73 2c 0d 0a 0d 0a 20 20 20  ork | Vs,....   
12e0: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
12f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1300: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1310: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1320: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
1330: 20 20 20 20 20 20 20 20 41 6c 6c 45 78 63 65 70          AllExcep
1340: 74 47 6c 6f 62 61 6c 41 73 73 65 6d 62 6c 79 43  tGlobalAssemblyC
1350: 61 63 68 65 20 3d 20 41 6c 6c 20 26 20 7e 41 6c  ache = All & ~Al
1360: 6c 47 6c 6f 62 61 6c 41 73 73 65 6d 62 6c 79 43  lGlobalAssemblyC
1370: 61 63 68 65 2c 0d 0a 20 20 20 20 20 20 20 20 23  ache,..        #
1380: 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20  endregion....   
1390: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
13a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
13b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
13c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
13d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
13e0: 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20          #region 
13f0: 53 75 67 67 65 73 74 65 64 20 44 65 66 61 75 6c  Suggested Defaul
1400: 74 20 56 61 6c 75 65 73 0d 0a 20 20 20 20 20 20  t Values..      
1410: 20 20 44 65 66 61 75 6c 74 20 3d 20 41 6c 6c 0d    Default = All.
1420: 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67  .        #endreg
1430: 69 6f 6e 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  ion..    }....  
1440: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
1450: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1460: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1470: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1480: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
1490: 0a 20 20 20 20 5b 46 6c 61 67 73 28 29 5d 0d 0a  .    [Flags()]..
14a0: 20 20 20 20 70 75 62 6c 69 63 20 65 6e 75 6d 20      public enum 
14b0: 50 72 6f 76 69 64 65 72 46 6c 61 67 73 0d 0a 20  ProviderFlags.. 
14c0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 72     {..        #r
14d0: 65 67 69 6f 6e 20 4e 6f 72 6d 61 6c 20 56 61 6c  egion Normal Val
14e0: 75 65 73 0d 0a 20 20 20 20 20 20 20 20 4e 6f 6e  ues..        Non
14f0: 65 20 3d 20 30 78 30 2c 0d 0a 20 20 20 20 20 20  e = 0x0,..      
1500: 20 20 53 79 73 74 65 6d 45 66 36 4d 75 73 74 42    SystemEf6MustB
1510: 65 47 6c 6f 62 61 6c 20 3d 20 30 78 31 2c 0d 0a  eGlobal = 0x1,..
1520: 20 20 20 20 20 20 20 20 44 69 64 4c 69 6e 71 46          DidLinqF
1530: 6f 72 63 65 54 72 61 63 65 20 3d 20 30 78 32 2c  orceTrace = 0x2,
1540: 0d 0a 20 20 20 20 20 20 20 20 44 69 64 45 66 36  ..        DidEf6
1550: 46 6f 72 63 65 54 72 61 63 65 20 3d 20 30 78 34  ForceTrace = 0x4
1560: 2c 0d 0a 20 20 20 20 20 20 20 20 44 69 64 45 66  ,..        DidEf
1570: 36 52 65 73 6f 6c 76 65 54 72 61 63 65 20 3d 20  6ResolveTrace = 
1580: 30 78 38 2c 0d 0a 20 20 20 20 20 20 20 20 46 6f  0x8,..        Fo
1590: 72 63 65 4c 69 6e 71 45 6e 61 62 6c 65 64 20 3d  rceLinqEnabled =
15a0: 20 30 78 31 30 2c 0d 0a 20 20 20 20 20 20 20 20   0x10,..        
15b0: 46 6f 72 63 65 4c 69 6e 71 44 69 73 61 62 6c 65  ForceLinqDisable
15c0: 64 20 3d 20 30 78 32 30 2c 0d 0a 20 20 20 20 20  d = 0x20,..     
15d0: 20 20 20 46 6f 72 63 65 45 66 36 45 6e 61 62 6c     ForceEf6Enabl
15e0: 65 64 20 3d 20 30 78 34 30 2c 0d 0a 20 20 20 20  ed = 0x40,..    
15f0: 20 20 20 20 46 6f 72 63 65 45 66 36 44 69 73 61      ForceEf6Disa
1600: 62 6c 65 64 20 3d 20 30 78 38 30 2c 0d 0a 20 20  bled = 0x80,..  
1610: 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
1620: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
1630: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1640: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1650: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1660: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1670: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23  ///....        #
1680: 72 65 67 69 6f 6e 20 53 75 67 67 65 73 74 65 64  region Suggested
1690: 20 44 65 66 61 75 6c 74 20 56 61 6c 75 65 73 0d   Default Values.
16a0: 0a 20 20 20 20 20 20 20 20 44 65 66 61 75 6c 74  .        Default
16b0: 20 3d 20 4e 6f 6e 65 0d 0a 20 20 20 20 20 20 20   = None..       
16c0: 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 20 20 20   #endregion..   
16d0: 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f   }....    //////
16e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1700: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1710: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1720: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 5b 46 6c  /////....    [Fl
1730: 61 67 73 28 29 5d 0d 0a 20 20 20 20 70 75 62 6c  ags()]..    publ
1740: 69 63 20 65 6e 75 6d 20 54 72 61 63 65 50 72 69  ic enum TracePri
1750: 6f 72 69 74 79 0d 0a 20 20 20 20 7b 0d 0a 20 20  ority..    {..  
1760: 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 4e 6f        #region No
1770: 72 6d 61 6c 20 56 61 6c 75 65 73 0d 0a 20 20 20  rmal Values..   
1780: 20 20 20 20 20 4e 6f 6e 65 20 3d 20 30 78 30 2c       None = 0x0,
1790: 0d 0a 20 20 20 20 20 20 20 20 4c 6f 77 65 73 74  ..        Lowest
17a0: 20 3d 20 30 78 31 2c 0d 0a 20 20 20 20 20 20 20   = 0x1,..       
17b0: 20 4c 6f 77 65 72 20 3d 20 30 78 32 2c 0d 0a 20   Lower = 0x2,.. 
17c0: 20 20 20 20 20 20 20 4c 6f 77 20 3d 20 30 78 34         Low = 0x4
17d0: 2c 0d 0a 20 20 20 20 20 20 20 20 4d 65 64 69 75  ,..        Mediu
17e0: 6d 4c 6f 77 20 3d 20 30 78 38 2c 0d 0a 20 20 20  mLow = 0x8,..   
17f0: 20 20 20 20 20 4d 65 64 69 75 6d 20 3d 20 30 78       Medium = 0x
1800: 31 30 2c 0d 0a 20 20 20 20 20 20 20 20 4d 65 64  10,..        Med
1810: 69 75 6d 48 69 67 68 20 3d 20 30 78 32 30 2c 0d  iumHigh = 0x20,.
1820: 0a 20 20 20 20 20 20 20 20 48 69 67 68 20 3d 20  .        High = 
1830: 30 78 34 30 2c 0d 0a 20 20 20 20 20 20 20 20 48  0x40,..        H
1840: 69 67 68 65 72 20 3d 20 30 78 38 30 2c 0d 0a 20  igher = 0x80,.. 
1850: 20 20 20 20 20 20 20 48 69 67 68 65 73 74 20 3d         Highest =
1860: 20 30 78 31 30 30 2c 0d 0a 20 20 20 20 20 20 20   0x100,..       
1870: 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20   #endregion.... 
1880: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
1890: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
18d0: 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f  ..        #regio
18e0: 6e 20 53 75 67 67 65 73 74 65 64 20 44 65 66 61  n Suggested Defa
18f0: 75 6c 74 20 46 6c 61 67 73 0d 0a 20 20 20 20 20  ult Flags..     
1900: 20 20 20 44 65 66 61 75 6c 74 20 3d 20 4d 65 64     Default = Med
1910: 69 75 6d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e  ium..        #en
1920: 64 72 65 67 69 6f 6e 0d 0a 20 20 20 20 7d 0d 0a  dregion..    }..
1930: 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
1940: 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ..    //////////
1950: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1960: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1970: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1980: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1990: 2f 0d 0a 0d 0a 20 20 20 20 23 72 65 67 69 6f 6e  /....    #region
19a0: 20 49 6e 73 74 61 6c 6c 65 72 20 43 6c 61 73 73   Installer Class
19b0: 0d 0a 23 69 66 20 4e 45 54 5f 34 30 20 7c 7c 20  ..#if NET_40 || 
19c0: 4e 45 54 5f 34 35 20 7c 7c 20 4e 45 54 5f 34 35  NET_45 || NET_45
19d0: 31 20 7c 7c 20 4e 45 54 5f 34 36 0d 0a 20 20 20  1 || NET_46..   
19e0: 20 5b 53 65 63 75 72 69 74 79 43 72 69 74 69 63   [SecurityCritic
19f0: 61 6c 28 29 5d 0d 0a 23 65 6c 73 65 0d 0a 20 20  al()]..#else..  
1a00: 20 20 5b 53 65 63 75 72 69 74 79 50 65 72 6d 69    [SecurityPermi
1a10: 73 73 69 6f 6e 28 53 65 63 75 72 69 74 79 41 63  ssion(SecurityAc
1a20: 74 69 6f 6e 2e 4c 69 6e 6b 44 65 6d 61 6e 64 2c  tion.LinkDemand,
1a30: 20 55 6e 6d 61 6e 61 67 65 64 43 6f 64 65 20 3d   UnmanagedCode =
1a40: 20 74 72 75 65 29 5d 0d 0a 23 65 6e 64 69 66 0d   true)]..#endif.
1a50: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 73 74  .    internal st
1a60: 61 74 69 63 20 63 6c 61 73 73 20 49 6e 73 74 61  atic class Insta
1a70: 6c 6c 65 72 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  ller..    {..   
1a80: 20 20 20 20 20 23 72 65 67 69 6f 6e 20 55 6e 73       #region Uns
1a90: 61 66 65 20 4e 61 74 69 76 65 20 4d 65 74 68 6f  afe Native Metho
1aa0: 64 73 20 43 6c 61 73 73 0d 0a 20 20 20 20 20 20  ds Class..      
1ab0: 20 20 5b 53 75 70 70 72 65 73 73 55 6e 6d 61 6e    [SuppressUnman
1ac0: 61 67 65 64 43 6f 64 65 53 65 63 75 72 69 74 79  agedCodeSecurity
1ad0: 28 29 5d 0d 0a 20 20 20 20 20 20 20 20 70 72 69  ()]..        pri
1ae0: 76 61 74 65 20 73 65 61 6c 65 64 20 63 6c 61 73  vate sealed clas
1af0: 73 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  s UnsafeNativeMe
1b00: 74 68 6f 64 73 0d 0a 20 20 20 20 20 20 20 20 7b  thods..        {
1b10: 0d 0a 23 69 66 20 57 49 4e 44 4f 57 53 0d 0a 20  ..#if WINDOWS.. 
1b20: 20 20 20 20 20 20 20 20 20 20 20 23 72 65 67 69             #regi
1b30: 6f 6e 20 4e 61 74 69 76 65 20 57 69 6e 33 32 20  on Native Win32 
1b40: 43 6f 6e 73 74 61 6e 74 73 0d 0a 20 20 20 20 20  Constants..     
1b50: 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 63         private c
1b60: 6f 6e 73 74 20 69 6e 74 20 4d 41 58 5f 50 41 54  onst int MAX_PAT
1b70: 48 20 3d 20 32 36 30 3b 0d 0a 0d 0a 20 20 20 20  H = 260;....    
1b80: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
1b90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ba0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1bb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1bc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
1bd0: 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
1be0: 74 65 20 63 6f 6e 73 74 20 69 6e 74 20 43 53 49  te const int CSI
1bf0: 44 4c 5f 53 59 53 54 45 4d 58 38 36 20 3d 20 30  DL_SYSTEMX86 = 0
1c00: 78 30 30 32 39 3b 0d 0a 0d 0a 20 20 20 20 20 20  x0029;....      
1c10: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
1c20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
1c60: 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65           private
1c70: 20 63 6f 6e 73 74 20 69 6e 74 20 53 48 47 46 50   const int SHGFP
1c80: 5f 54 59 50 45 5f 43 55 52 52 45 4e 54 20 3d 20  _TYPE_CURRENT = 
1c90: 30 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  0;....          
1ca0: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
1cb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1cc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1cd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ce0: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
1cf0: 20 20 20 20 20 70 72 69 76 61 74 65 20 63 6f 6e       private con
1d00: 73 74 20 69 6e 74 20 53 5f 4f 4b 20 3d 20 30 3b  st int S_OK = 0;
1d10: 20 2f 2a 20 48 52 45 53 55 4c 54 20 2a 2f 0d 0a   /* HRESULT */..
1d20: 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e 64              #end
1d30: 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20  region....      
1d40: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
1d50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
1d90: 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e           #region
1da0: 20 4e 61 74 69 76 65 20 57 69 6e 64 6f 77 73 20   Native Windows 
1db0: 4d 65 74 68 6f 64 73 0d 0a 20 20 20 20 20 20 20  Methods..       
1dc0: 20 20 20 20 20 5b 44 6c 6c 49 6d 70 6f 72 74 28       [DllImport(
1dd0: 22 73 68 66 6f 6c 64 65 72 2e 64 6c 6c 22 2c 0d  "shfolder.dll",.
1de0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1df0: 20 43 61 6c 6c 69 6e 67 43 6f 6e 76 65 6e 74 69   CallingConventi
1e00: 6f 6e 20 3d 20 43 61 6c 6c 69 6e 67 43 6f 6e 76  on = CallingConv
1e10: 65 6e 74 69 6f 6e 2e 57 69 6e 61 70 69 2c 0d 0a  ention.Winapi,..
1e20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e30: 43 68 61 72 53 65 74 20 3d 20 43 68 61 72 53 65  CharSet = CharSe
1e40: 74 2e 41 75 74 6f 2c 20 42 65 73 74 46 69 74 4d  t.Auto, BestFitM
1e50: 61 70 70 69 6e 67 20 3d 20 66 61 6c 73 65 2c 0d  apping = false,.
1e60: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1e70: 20 54 68 72 6f 77 4f 6e 55 6e 6d 61 70 70 61 62   ThrowOnUnmappab
1e80: 6c 65 43 68 61 72 20 3d 20 74 72 75 65 2c 20 53  leChar = true, S
1e90: 65 74 4c 61 73 74 45 72 72 6f 72 20 3d 20 74 72  etLastError = tr
1ea0: 75 65 29 5d 0d 0a 20 20 20 20 20 20 20 20 20 20  ue)]..          
1eb0: 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63    private static
1ec0: 20 65 78 74 65 72 6e 20 69 6e 74 20 53 48 47 65   extern int SHGe
1ed0: 74 46 6f 6c 64 65 72 50 61 74 68 28 0d 0a 20 20  tFolderPath(..  
1ee0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 49 6e                In
1ef0: 74 50 74 72 20 68 57 6e 64 4f 77 6e 65 72 2c 20  tPtr hWndOwner, 
1f00: 69 6e 74 20 6e 46 6f 6c 64 65 72 2c 20 49 6e 74  int nFolder, Int
1f10: 50 74 72 20 68 54 6f 6b 65 6e 2c 20 75 69 6e 74  Ptr hToken, uint
1f20: 20 66 6c 61 67 73 2c 0d 0a 20 20 20 20 20 20 20   flags,..       
1f30: 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20           IntPtr 
1f40: 62 75 66 66 65 72 20 2f 2a 20 3e 3d 20 4d 41 58  buffer /* >= MAX
1f50: 5f 50 41 54 48 20 2a 2f 29 3b 0d 0a 20 20 20 20  _PATH */);..    
1f60: 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
1f70: 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  on....          
1f80: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
1f90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fa0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fc0: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
1fd0: 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50 75 62       #region Pub
1fe0: 6c 69 63 20 57 72 61 70 70 65 72 20 4d 65 74 68  lic Wrapper Meth
1ff0: 6f 64 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ods..           
2000: 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 73   public static s
2010: 74 72 69 6e 67 20 47 65 74 53 79 73 74 65 6d 44  tring GetSystemD
2020: 69 72 65 63 74 6f 72 79 28 29 0d 0a 20 20 20 20  irectory()..    
2030: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
2040: 20 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74             IntPt
2050: 72 20 62 75 66 66 65 72 20 3d 20 49 6e 74 50 74  r buffer = IntPt
2060: 72 2e 5a 65 72 6f 3b 0d 0a 0d 0a 20 20 20 20 20  r.Zero;....     
2070: 20 20 20 20 20 20 20 20 20 20 20 74 72 79 0d 0a             try..
2080: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2090: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
20a0: 20 20 20 20 20 20 20 62 75 66 66 65 72 20 3d 20         buffer = 
20b0: 4d 61 72 73 68 61 6c 2e 41 6c 6c 6f 63 43 6f 54  Marshal.AllocCoT
20c0: 61 73 6b 4d 65 6d 28 0d 0a 20 20 20 20 20 20 20  askMem(..       
20d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20e0: 20 73 69 7a 65 6f 66 28 63 68 61 72 29 20 2a 20   sizeof(char) * 
20f0: 28 4d 41 58 5f 50 41 54 48 20 2b 20 31 29 29 3b  (MAX_PATH + 1));
2100: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2110: 20 20 20 20 20 20 20 20 69 66 20 28 62 75 66 66          if (buff
2120: 65 72 20 21 3d 20 49 6e 74 50 74 72 2e 5a 65 72  er != IntPtr.Zer
2130: 6f 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  o)..            
2140: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
2150: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2160: 20 20 20 69 66 20 28 53 48 47 65 74 46 6f 6c 64     if (SHGetFold
2170: 65 72 50 61 74 68 28 49 6e 74 50 74 72 2e 5a 65  erPath(IntPtr.Ze
2180: 72 6f 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ro,..           
2190: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21a0: 20 20 20 20 20 43 53 49 44 4c 5f 53 59 53 54 45       CSIDL_SYSTE
21b0: 4d 58 38 36 2c 20 49 6e 74 50 74 72 2e 5a 65 72  MX86, IntPtr.Zer
21c0: 6f 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  o,..            
21d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21e0: 20 20 20 20 53 48 47 46 50 5f 54 59 50 45 5f 43      SHGFP_TYPE_C
21f0: 55 52 52 45 4e 54 2c 20 62 75 66 66 65 72 29 20  URRENT, buffer) 
2200: 3d 3d 20 53 5f 4f 4b 29 0d 0a 20 20 20 20 20 20  == S_OK)..      
2210: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2220: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
2230: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2240: 20 72 65 74 75 72 6e 20 4d 61 72 73 68 61 6c 2e   return Marshal.
2250: 50 74 72 54 6f 53 74 72 69 6e 67 41 75 74 6f 28  PtrToStringAuto(
2260: 62 75 66 66 65 72 29 3b 0d 0a 20 20 20 20 20 20  buffer);..      
2270: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2280: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
2290: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
22a0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
22b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
22c0: 61 74 63 68 20 28 45 78 63 65 70 74 69 6f 6e 20  atch (Exception 
22d0: 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e)..            
22e0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
22f0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
2300: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2310: 20 20 20 2f 2f 20 54 4f 44 4f 3a 20 49 73 20 74     // TODO: Is t
2320: 68 69 73 20 74 68 65 20 72 69 67 68 74 20 65 72  his the right er
2330: 72 6f 72 20 68 61 6e 64 6c 69 6e 67 20 73 6f 6c  ror handling sol
2340: 75 74 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20 20  ution..         
2350: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
2360: 20 20 20 20 74 6f 20 75 73 65 20 61 74 20 74 68      to use at th
2370: 69 73 20 70 6f 69 6e 74 3f 0d 0a 20 20 20 20 20  is point?..     
2380: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
2390: 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
23a0: 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e         TraceOps.
23b0: 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 54 72  DebugAndTrace(Tr
23c0: 61 63 65 50 72 69 6f 72 69 74 79 2e 4d 65 64 69  acePriority.Medi
23d0: 75 6d 48 69 67 68 2c 0d 0a 20 20 20 20 20 20 20  umHigh,..       
23e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23f0: 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20   debugCallback, 
2400: 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53  traceCallback, S
2410: 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
2420: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2430: 20 20 20 20 20 20 20 22 43 6f 75 6c 64 20 6e 6f         "Could no
2440: 74 20 67 65 74 20 73 79 73 74 65 6d 20 64 69 72  t get system dir
2450: 65 63 74 6f 72 79 3a 20 7b 30 7d 22 2c 20 65 29  ectory: {0}", e)
2460: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
2470: 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
2480: 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  Category);....  
2490: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24a0: 20 20 74 68 72 6f 77 3b 0d 0a 20 20 20 20 20 20    throw;..      
24b0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
24c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 66 69 6e               fin
24d0: 61 6c 6c 79 0d 0a 20 20 20 20 20 20 20 20 20 20  ally..          
24e0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
24f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
2500: 28 62 75 66 66 65 72 20 21 3d 20 49 6e 74 50 74  (buffer != IntPt
2510: 72 2e 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20 20  r.Zero)..       
2520: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
2530: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2540: 20 20 20 20 20 20 20 20 4d 61 72 73 68 61 6c 2e          Marshal.
2550: 46 72 65 65 43 6f 54 61 73 6b 4d 65 6d 28 62 75  FreeCoTaskMem(bu
2560: 66 66 65 72 29 3b 0d 0a 20 20 20 20 20 20 20 20  ffer);..        
2570: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2580: 62 75 66 66 65 72 20 3d 20 49 6e 74 50 74 72 2e  buffer = IntPtr.
2590: 5a 65 72 6f 3b 0d 0a 20 20 20 20 20 20 20 20 20  Zero;..         
25a0: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
25b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
25c0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
25d0: 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d     return null;.
25e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
25f0: 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e 64              #end
2600: 72 65 67 69 6f 6e 0d 0a 23 65 6e 64 69 66 0d 0a  region..#endif..
2610: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
2620: 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
2630: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
2640: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2650: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2660: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2670: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2680: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67  ....        #reg
2690: 69 6f 6e 20 50 72 69 76 61 74 65 20 48 65 6c 70  ion Private Help
26a0: 65 72 20 43 6c 61 73 73 65 73 0d 0a 20 20 20 20  er Classes..    
26b0: 20 20 20 20 23 72 65 67 69 6f 6e 20 41 6e 79 50      #region AnyP
26c0: 61 69 72 20 43 6c 61 73 73 0d 0a 20 20 20 20 20  air Class..     
26d0: 20 20 20 70 72 69 76 61 74 65 20 73 65 61 6c 65     private seale
26e0: 64 20 63 6c 61 73 73 20 41 6e 79 50 61 69 72 3c  d class AnyPair<
26f0: 54 31 2c 20 54 32 3e 0d 0a 20 20 20 20 20 20 20  T1, T2>..       
2700: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
2710: 23 72 65 67 69 6f 6e 20 50 75 62 6c 69 63 20 43  #region Public C
2720: 6f 6e 73 74 72 75 63 74 6f 72 73 0d 0a 20 20 20  onstructors..   
2730: 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
2740: 20 20 20 20 20 20 20 20 20 2f 2f 20 57 41 52 4e           // WARN
2750: 49 4e 47 3a 20 54 68 69 73 20 63 6f 6e 73 74 72  ING: This constr
2760: 75 63 74 6f 72 20 70 72 6f 64 75 63 65 73 20 61  uctor produces a
2770: 6e 20 69 6d 6d 75 74 61 62 6c 65 20 22 65 6d 70  n immutable "emp
2780: 74 79 22 20 70 61 69 72 0d 0a 20 20 20 20 20 20  ty" pair..      
2790: 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 20        //        
27a0: 20 20 6f 62 6a 65 63 74 2e 0d 0a 20 20 20 20 20    object...     
27b0: 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
27c0: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 41 6e         public An
27d0: 79 50 61 69 72 28 29 0d 0a 20 20 20 20 20 20 20  yPair()..       
27e0: 20 20 20 20 20 20 20 20 20 3a 20 62 61 73 65 28           : base(
27f0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
2800: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2810: 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e    // do nothing.
2820: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
2830: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
2840: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2850: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2860: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2870: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2880: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
2890: 20 20 70 75 62 6c 69 63 20 41 6e 79 50 61 69 72    public AnyPair
28a0: 28 54 31 20 78 29 0d 0a 20 20 20 20 20 20 20 20  (T1 x)..        
28b0: 20 20 20 20 20 20 20 20 3a 20 74 68 69 73 28 29          : this()
28c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
28d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
28e0: 20 74 68 69 73 2e 78 20 3d 20 78 3b 0d 0a 20 20   this.x = x;..  
28f0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
2900: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
2910: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2920: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2930: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2940: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
2950: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
2960: 62 6c 69 63 20 41 6e 79 50 61 69 72 28 54 31 20  blic AnyPair(T1 
2970: 78 2c 20 54 32 20 79 29 0d 0a 20 20 20 20 20 20  x, T2 y)..      
2980: 20 20 20 20 20 20 20 20 20 20 3a 20 74 68 69 73            : this
2990: 28 78 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  (x)..           
29a0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
29b0: 20 20 20 20 74 68 69 73 2e 79 20 3d 20 79 3b 0d      this.y = y;.
29c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
29d0: 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e 64              #end
29e0: 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20  region....      
29f0: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
2a00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
2a40: 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e           #region
2a50: 20 50 75 62 6c 69 63 20 50 72 6f 70 65 72 74 69   Public Properti
2a60: 65 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  es..            
2a70: 70 72 69 76 61 74 65 20 54 31 20 78 3b 0d 0a 20  private T1 x;.. 
2a80: 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
2a90: 63 20 54 31 20 58 0d 0a 20 20 20 20 20 20 20 20  c T1 X..        
2aa0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
2ab0: 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74         get { ret
2ac0: 75 72 6e 20 78 3b 20 7d 0d 0a 20 20 20 20 20 20  urn x; }..      
2ad0: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
2ae0: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
2af0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
2b30: 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
2b40: 65 20 54 32 20 79 3b 0d 0a 20 20 20 20 20 20 20  e T2 y;..       
2b50: 20 20 20 20 20 70 75 62 6c 69 63 20 54 32 20 59       public T2 Y
2b60: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
2b70: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2b80: 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 79 3b   get { return y;
2b90: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
2ba0: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  }..            #
2bb0: 65 6e 64 72 65 67 69 6f 6e 0d 0a 20 20 20 20 20  endregion..     
2bc0: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65     }..        #e
2bd0: 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20  ndregion....    
2be0: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
2bf0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
2c30: 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 54         #region T
2c40: 72 61 63 65 4f 70 73 20 43 6c 61 73 73 0d 0a 20  raceOps Class.. 
2c50: 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
2c60: 74 61 74 69 63 20 63 6c 61 73 73 20 54 72 61 63  tatic class Trac
2c70: 65 4f 70 73 0d 0a 20 20 20 20 20 20 20 20 7b 0d  eOps..        {.
2c80: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 72 65  .            #re
2c90: 67 69 6f 6e 20 50 72 69 76 61 74 65 20 43 6f 6e  gion Private Con
2ca0: 73 74 61 6e 74 73 0d 0a 20 20 20 20 20 20 20 20  stants..        
2cb0: 20 20 20 20 70 72 69 76 61 74 65 20 63 6f 6e 73      private cons
2cc0: 74 20 73 74 72 69 6e 67 20 44 65 66 61 75 6c 74  t string Default
2cd0: 44 65 62 75 67 46 6f 72 6d 61 74 20 3d 20 22 23  DebugFormat = "#
2ce0: 7b 30 3a 30 30 30 7d 20 40 20 7b 31 7d 3a 20 7b  {0:000} @ {1}: {
2cf0: 32 7d 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  2}";..          
2d00: 20 20 70 72 69 76 61 74 65 20 63 6f 6e 73 74 20    private const 
2d10: 73 74 72 69 6e 67 20 44 65 66 61 75 6c 74 54 72  string DefaultTr
2d20: 61 63 65 46 6f 72 6d 61 74 20 3d 20 22 23 7b 30  aceFormat = "#{0
2d30: 3a 30 30 30 7d 20 40 20 7b 31 7d 3a 20 7b 32 7d  :000} @ {1}: {2}
2d40: 22 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  ";....          
2d50: 20 20 70 72 69 76 61 74 65 20 63 6f 6e 73 74 20    private const 
2d60: 73 74 72 69 6e 67 20 49 73 6f 38 36 30 31 44 61  string Iso8601Da
2d70: 74 65 54 69 6d 65 4f 75 74 70 75 74 46 6f 72 6d  teTimeOutputForm
2d80: 61 74 20 3d 0d 0a 20 20 20 20 20 20 20 20 20 20  at =..          
2d90: 20 20 20 20 20 20 22 79 79 79 79 2e 4d 4d 2e 64        "yyyy.MM.d
2da0: 64 54 48 48 3a 6d 6d 3a 73 73 2e 66 66 66 66 66  dTHH:mm:ss.fffff
2db0: 66 66 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ff";..          
2dc0: 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a    #endregion....
2dd0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
2de0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2df0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
2e20: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  ...            #
2e30: 72 65 67 69 6f 6e 20 50 72 69 76 61 74 65 20 53  region Private S
2e40: 74 61 74 69 63 20 44 61 74 61 0d 0a 20 20 20 20  tatic Data..    
2e50: 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
2e60: 73 74 61 74 69 63 20 6f 62 6a 65 63 74 20 73 79  static object sy
2e70: 6e 63 52 6f 6f 74 20 3d 20 6e 65 77 20 6f 62 6a  ncRoot = new obj
2e80: 65 63 74 28 29 3b 0d 0a 20 20 20 20 20 20 20 20  ect();..        
2e90: 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74      private stat
2ea0: 69 63 20 6c 6f 6e 67 20 6e 65 78 74 44 65 62 75  ic long nextDebu
2eb0: 67 49 64 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  gId;..          
2ec0: 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63    private static
2ed0: 20 6c 6f 6e 67 20 6e 65 78 74 54 72 61 63 65 49   long nextTraceI
2ee0: 64 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  d;..            
2ef0: 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 49  private static I
2f00: 4c 69 73 74 3c 54 72 61 63 65 4c 69 73 74 65 6e  List<TraceListen
2f10: 65 72 3e 20 64 65 62 75 67 4c 69 73 74 65 6e 65  er> debugListene
2f20: 72 73 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  rs;..           
2f30: 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20   private static 
2f40: 54 72 61 63 65 50 72 69 6f 72 69 74 79 20 64 65  TracePriority de
2f50: 62 75 67 50 72 69 6f 72 69 74 79 20 3d 20 54 72  bugPriority = Tr
2f60: 61 63 65 50 72 69 6f 72 69 74 79 2e 44 65 66 61  acePriority.Defa
2f70: 75 6c 74 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ult;..          
2f80: 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63    private static
2f90: 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 20 74   TracePriority t
2fa0: 72 61 63 65 50 72 69 6f 72 69 74 79 20 3d 20 54  racePriority = T
2fb0: 72 61 63 65 50 72 69 6f 72 69 74 79 2e 44 65 66  racePriority.Def
2fc0: 61 75 6c 74 3b 0d 0a 20 20 20 20 20 20 20 20 20  ault;..         
2fd0: 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69     private stati
2fe0: 63 20 73 74 72 69 6e 67 20 64 65 62 75 67 46 6f  c string debugFo
2ff0: 72 6d 61 74 20 3d 20 44 65 66 61 75 6c 74 44 65  rmat = DefaultDe
3000: 62 75 67 46 6f 72 6d 61 74 3b 0d 0a 20 20 20 20  bugFormat;..    
3010: 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
3020: 73 74 61 74 69 63 20 73 74 72 69 6e 67 20 74 72  static string tr
3030: 61 63 65 46 6f 72 6d 61 74 20 3d 20 44 65 66 61  aceFormat = Defa
3040: 75 6c 74 54 72 61 63 65 46 6f 72 6d 61 74 3b 0d  ultTraceFormat;.
3050: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e  .            #en
3060: 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20  dregion....     
3070: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
3080: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3090: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
30c0: 20 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f            #regio
30d0: 6e 20 50 75 62 6c 69 63 20 53 74 61 74 69 63 20  n Public Static 
30e0: 50 72 6f 70 65 72 74 69 65 73 0d 0a 20 20 20 20  Properties..    
30f0: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73          public s
3100: 74 61 74 69 63 20 54 72 61 63 65 50 72 69 6f 72  tatic TracePrior
3110: 69 74 79 20 44 65 62 75 67 50 72 69 6f 72 69 74  ity DebugPriorit
3120: 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  y..            {
3130: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
3140: 20 20 67 65 74 20 7b 20 6c 6f 63 6b 20 28 73 79    get { lock (sy
3150: 6e 63 52 6f 6f 74 29 20 7b 20 72 65 74 75 72 6e  ncRoot) { return
3160: 20 64 65 62 75 67 50 72 69 6f 72 69 74 79 3b 20   debugPriority; 
3170: 7d 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  } }..           
3180: 20 20 20 20 20 73 65 74 20 7b 20 6c 6f 63 6b 20       set { lock 
3190: 28 73 79 6e 63 52 6f 6f 74 29 20 7b 20 64 65 62  (syncRoot) { deb
31a0: 75 67 50 72 69 6f 72 69 74 79 20 3d 20 76 61 6c  ugPriority = val
31b0: 75 65 3b 20 7d 20 7d 0d 0a 20 20 20 20 20 20 20  ue; } }..       
31c0: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
31d0: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
31e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3200: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3210: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
3220: 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
3230: 73 74 61 74 69 63 20 54 72 61 63 65 50 72 69 6f  static TracePrio
3240: 72 69 74 79 20 54 72 61 63 65 50 72 69 6f 72 69  rity TracePriori
3250: 74 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ty..            
3260: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
3270: 20 20 20 67 65 74 20 7b 20 6c 6f 63 6b 20 28 73     get { lock (s
3280: 79 6e 63 52 6f 6f 74 29 20 7b 20 72 65 74 75 72  yncRoot) { retur
3290: 6e 20 74 72 61 63 65 50 72 69 6f 72 69 74 79 3b  n tracePriority;
32a0: 20 7d 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20   } }..          
32b0: 20 20 20 20 20 20 73 65 74 20 7b 20 6c 6f 63 6b        set { lock
32c0: 20 28 73 79 6e 63 52 6f 6f 74 29 20 7b 20 74 72   (syncRoot) { tr
32d0: 61 63 65 50 72 69 6f 72 69 74 79 20 3d 20 76 61  acePriority = va
32e0: 6c 75 65 3b 20 7d 20 7d 0d 0a 20 20 20 20 20 20  lue; } }..      
32f0: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
3300: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
3310: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3320: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3330: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3340: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
3350: 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
3360: 20 73 74 61 74 69 63 20 73 74 72 69 6e 67 20 44   static string D
3370: 65 62 75 67 46 6f 72 6d 61 74 0d 0a 20 20 20 20  ebugFormat..    
3380: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
3390: 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b             get {
33a0: 20 6c 6f 63 6b 20 28 73 79 6e 63 52 6f 6f 74 29   lock (syncRoot)
33b0: 20 7b 20 72 65 74 75 72 6e 20 64 65 62 75 67 46   { return debugF
33c0: 6f 72 6d 61 74 3b 20 7d 20 7d 0d 0a 20 20 20 20  ormat; } }..    
33d0: 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20              set 
33e0: 7b 20 6c 6f 63 6b 20 28 73 79 6e 63 52 6f 6f 74  { lock (syncRoot
33f0: 29 20 7b 20 64 65 62 75 67 46 6f 72 6d 61 74 20  ) { debugFormat 
3400: 3d 20 76 61 6c 75 65 3b 20 7d 20 7d 0d 0a 20 20  = value; } }..  
3410: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
3420: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
3430: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3440: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3450: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3460: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
3470: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
3480: 62 6c 69 63 20 73 74 61 74 69 63 20 73 74 72 69  blic static stri
3490: 6e 67 20 54 72 61 63 65 46 6f 72 6d 61 74 0d 0a  ng TraceFormat..
34a0: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
34b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67                 g
34c0: 65 74 20 7b 20 6c 6f 63 6b 20 28 73 79 6e 63 52  et { lock (syncR
34d0: 6f 6f 74 29 20 7b 20 72 65 74 75 72 6e 20 74 72  oot) { return tr
34e0: 61 63 65 46 6f 72 6d 61 74 3b 20 7d 20 7d 0d 0a  aceFormat; } }..
34f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3500: 73 65 74 20 7b 20 6c 6f 63 6b 20 28 73 79 6e 63  set { lock (sync
3510: 52 6f 6f 74 29 20 7b 20 74 72 61 63 65 46 6f 72  Root) { traceFor
3520: 6d 61 74 20 3d 20 76 61 6c 75 65 3b 20 7d 20 7d  mat = value; } }
3530: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
3540: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e  .            #en
3550: 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20  dregion....     
3560: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
3570: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3580: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3590: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
35b0: 20 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f            #regio
35c0: 6e 20 49 6e 74 65 72 61 63 74 69 76 65 20 53 75  n Interactive Su
35d0: 70 70 6f 72 74 20 4d 65 74 68 6f 64 73 0d 0a 20  pport Methods.. 
35e0: 20 20 20 20 20 20 20 20 20 20 20 5b 4d 65 74 68             [Meth
35f0: 6f 64 49 6d 70 6c 28 4d 65 74 68 6f 64 49 6d 70  odImpl(MethodImp
3600: 6c 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e  lOptions.NoInlin
3610: 69 6e 67 29 5d 0d 0a 20 20 20 20 20 20 20 20 20  ing)]..         
3620: 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63     public static
3630: 20 44 69 61 6c 6f 67 52 65 73 75 6c 74 20 53 68   DialogResult Sh
3640: 6f 77 4d 65 73 73 61 67 65 28 0d 0a 20 20 20 20  owMessage(..    
3650: 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
3660: 65 50 72 69 6f 72 69 74 79 20 74 72 61 63 65 50  ePriority traceP
3670: 72 69 6f 72 69 74 79 2c 0d 0a 20 20 20 20 20 20  riority,..      
3680: 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 43            TraceC
3690: 61 6c 6c 62 61 63 6b 20 64 65 62 75 67 43 61 6c  allback debugCal
36a0: 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20  lback,..        
36b0: 20 20 20 20 20 20 20 20 54 72 61 63 65 43 61 6c          TraceCal
36c0: 6c 62 61 63 6b 20 74 72 61 63 65 43 61 6c 6c 62  lback traceCallb
36d0: 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ack,..          
36e0: 20 20 20 20 20 20 41 73 73 65 6d 62 6c 79 20 61        Assembly a
36f0: 73 73 65 6d 62 6c 79 2c 0d 0a 20 20 20 20 20 20  ssembly,..      
3700: 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
3710: 20 6d 65 73 73 61 67 65 2c 0d 0a 20 20 20 20 20   message,..     
3720: 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
3730: 67 20 63 61 74 65 67 6f 72 79 2c 0d 0a 20 20 20  g category,..   
3740: 20 20 20 20 20 20 20 20 20 20 20 20 20 4d 65 73               Mes
3750: 73 61 67 65 42 6f 78 42 75 74 74 6f 6e 73 20 62  sageBoxButtons b
3760: 75 74 74 6f 6e 73 2c 0d 0a 20 20 20 20 20 20 20  uttons,..       
3770: 20 20 20 20 20 20 20 20 20 4d 65 73 73 61 67 65           Message
3780: 42 6f 78 49 63 6f 6e 20 69 63 6f 6e 0d 0a 20 20  BoxIcon icon..  
3790: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d                ).
37a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
37b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37c0: 44 69 61 6c 6f 67 52 65 73 75 6c 74 20 72 65 73  DialogResult res
37d0: 75 6c 74 20 3d 20 44 69 61 6c 6f 67 52 65 73 75  ult = DialogResu
37e0: 6c 74 2e 4f 4b 3b 0d 0a 0d 0a 20 20 20 20 20 20  lt.OK;....      
37f0: 20 20 20 20 20 20 20 20 20 20 44 65 62 75 67 41            DebugA
3800: 6e 64 54 72 61 63 65 28 74 72 61 63 65 50 72 69  ndTrace(tracePri
3810: 6f 72 69 74 79 2c 0d 0a 20 20 20 20 20 20 20 20  ority,..        
3820: 20 20 20 20 20 20 20 20 20 20 20 20 64 65 62 75              debu
3830: 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65  gCallback, trace
3840: 43 61 6c 6c 62 61 63 6b 2c 20 6d 65 73 73 61 67  Callback, messag
3850: 65 2c 20 63 61 74 65 67 6f 72 79 29 3b 0d 0a 0d  e, category);...
3860: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
3870: 20 69 66 20 28 53 79 73 74 65 6d 49 6e 66 6f 72   if (SystemInfor
3880: 6d 61 74 69 6f 6e 2e 55 73 65 72 49 6e 74 65 72  mation.UserInter
3890: 61 63 74 69 76 65 29 0d 0a 20 20 20 20 20 20 20  active)..       
38a0: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
38b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38c0: 73 74 72 69 6e 67 20 74 69 74 6c 65 20 3d 20 47  string title = G
38d0: 65 74 41 73 73 65 6d 62 6c 79 54 69 74 6c 65 28  etAssemblyTitle(
38e0: 61 73 73 65 6d 62 6c 79 29 3b 0d 0a 0d 0a 20 20  assembly);....  
38f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3900: 20 20 69 66 20 28 74 69 74 6c 65 20 3d 3d 20 6e    if (title == n
3910: 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
3920: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 69                ti
3930: 74 6c 65 20 3d 20 41 70 70 6c 69 63 61 74 69 6f  tle = Applicatio
3940: 6e 2e 50 72 6f 64 75 63 74 4e 61 6d 65 3b 0d 0a  n.ProductName;..
3950: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
3960: 20 20 20 20 20 20 72 65 73 75 6c 74 20 3d 20 4d        result = M
3970: 65 73 73 61 67 65 42 6f 78 2e 53 68 6f 77 28 6d  essageBox.Show(m
3980: 65 73 73 61 67 65 2c 20 74 69 74 6c 65 2c 20 62  essage, title, b
3990: 75 74 74 6f 6e 73 2c 20 69 63 6f 6e 29 3b 0d 0a  uttons, icon);..
39a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
39b0: 20 20 20 20 20 20 44 65 62 75 67 41 6e 64 54 72        DebugAndTr
39c0: 61 63 65 28 74 72 61 63 65 50 72 69 6f 72 69 74  ace(tracePriorit
39d0: 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y,..            
39e0: 20 20 20 20 20 20 20 20 20 20 20 20 64 65 62 75              debu
39f0: 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65  gCallback, trace
3a00: 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67  Callback, String
3a10: 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  .Format(..      
3a20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3a30: 20 20 22 55 73 65 72 20 63 68 6f 69 63 65 20 6f    "User choice o
3a40: 66 20 7b 30 7d 2e 22 2c 20 46 6f 72 44 69 73 70  f {0}.", ForDisp
3a50: 6c 61 79 28 72 65 73 75 6c 74 29 29 2c 0d 0a 20  lay(result)),.. 
3a60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3a70: 20 20 20 20 20 20 20 63 61 74 65 67 6f 72 79 29         category)
3a80: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
3a90: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
3aa0: 72 65 73 75 6c 74 3b 0d 0a 20 20 20 20 20 20 20  result;..       
3ab0: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
3ac0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 44 65                De
3ad0: 62 75 67 41 6e 64 54 72 61 63 65 28 74 72 61 63  bugAndTrace(trac
3ae0: 65 50 72 69 6f 72 69 74 79 2c 0d 0a 20 20 20 20  ePriority,..    
3af0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3b00: 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74  debugCallback, t
3b10: 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74  raceCallback, St
3b20: 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
3b30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3b40: 20 20 22 44 65 66 61 75 6c 74 20 63 68 6f 69 63    "Default choic
3b50: 65 20 6f 66 20 7b 30 7d 2e 22 2c 20 46 6f 72 44  e of {0}.", ForD
3b60: 69 73 70 6c 61 79 28 72 65 73 75 6c 74 29 29 2c  isplay(result)),
3b70: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
3b80: 20 20 20 20 20 20 63 61 74 65 67 6f 72 79 29 3b        category);
3b90: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
3ba0: 20 20 20 20 72 65 74 75 72 6e 20 72 65 73 75 6c      return resul
3bb0: 74 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t;..            
3bc0: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  }..            #
3bd0: 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20  endregion....   
3be0: 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
3bf0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3c00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3c10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3c20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
3c30: 20 20 20 20 20 20 20 20 20 20 20 20 23 72 65 67              #reg
3c40: 69 6f 6e 20 54 72 61 63 69 6e 67 20 53 75 70 70  ion Tracing Supp
3c50: 6f 72 74 20 4d 65 74 68 6f 64 73 0d 0a 20 20 20  ort Methods..   
3c60: 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
3c70: 73 74 61 74 69 63 20 76 6f 69 64 20 53 65 74 75  static void Setu
3c80: 70 44 65 62 75 67 4c 69 73 74 65 6e 65 72 73 28  pDebugListeners(
3c90: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
3ca0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
3cb0: 20 20 69 66 20 28 64 65 62 75 67 4c 69 73 74 65    if (debugListe
3cc0: 6e 65 72 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  ners == null).. 
3cd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3ce0: 20 20 20 64 65 62 75 67 4c 69 73 74 65 6e 65 72     debugListener
3cf0: 73 20 3d 20 6e 65 77 20 4c 69 73 74 3c 54 72 61  s = new List<Tra
3d00: 63 65 4c 69 73 74 65 6e 65 72 3e 28 29 3b 0d 0a  ceListener>();..
3d10: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
3d20: 20 20 64 65 62 75 67 4c 69 73 74 65 6e 65 72 73    debugListeners
3d30: 2e 41 64 64 28 6e 65 77 20 43 6f 6e 73 6f 6c 65  .Add(new Console
3d40: 54 72 61 63 65 4c 69 73 74 65 6e 65 72 28 29 29  TraceListener())
3d50: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
3d60: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
3d70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3d80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3d90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3da0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3db0: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
3dc0: 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63     public static
3dd0: 20 6c 6f 6e 67 20 4e 65 78 74 44 65 62 75 67 49   long NextDebugI
3de0: 64 28 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  d()..           
3df0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
3e00: 20 20 20 20 72 65 74 75 72 6e 20 49 6e 74 65 72      return Inter
3e10: 6c 6f 63 6b 65 64 2e 49 6e 63 72 65 6d 65 6e 74  locked.Increment
3e20: 28 72 65 66 20 6e 65 78 74 44 65 62 75 67 49 64  (ref nextDebugId
3e30: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
3e40: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
3e50: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
3e60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3e70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3e80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3e90: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
3ea0: 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69      public stati
3eb0: 63 20 6c 6f 6e 67 20 4e 65 78 74 54 72 61 63 65  c long NextTrace
3ec0: 49 64 28 29 0d 0a 20 20 20 20 20 20 20 20 20 20  Id()..          
3ed0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
3ee0: 20 20 20 20 20 72 65 74 75 72 6e 20 49 6e 74 65       return Inte
3ef0: 72 6c 6f 63 6b 65 64 2e 49 6e 63 72 65 6d 65 6e  rlocked.Incremen
3f00: 74 28 72 65 66 20 6e 65 78 74 54 72 61 63 65 49  t(ref nextTraceI
3f10: 64 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  d);..           
3f20: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
3f30: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
3f40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3f50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3f60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3f70: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
3f80: 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74       public stat
3f90: 69 63 20 73 74 72 69 6e 67 20 54 69 6d 65 53 74  ic string TimeSt
3fa0: 61 6d 70 28 44 61 74 65 54 69 6d 65 20 64 61 74  amp(DateTime dat
3fb0: 65 54 69 6d 65 29 0d 0a 20 20 20 20 20 20 20 20  eTime)..        
3fc0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
3fd0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 64 61         return da
3fe0: 74 65 54 69 6d 65 2e 54 6f 53 74 72 69 6e 67 28  teTime.ToString(
3ff0: 49 73 6f 38 36 30 31 44 61 74 65 54 69 6d 65 4f  Iso8601DateTimeO
4000: 75 74 70 75 74 46 6f 72 6d 61 74 29 3b 0d 0a 20  utputFormat);.. 
4010: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
4020: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
4030: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4040: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4050: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4060: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
4070: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b  ...            [
4080: 4d 65 74 68 6f 64 49 6d 70 6c 28 4d 65 74 68 6f  MethodImpl(Metho
4090: 64 49 6d 70 6c 4f 70 74 69 6f 6e 73 2e 4e 6f 49  dImplOptions.NoI
40a0: 6e 6c 69 6e 69 6e 67 29 5d 0d 0a 20 20 20 20 20  nlining)]..     
40b0: 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
40c0: 74 61 74 69 63 20 73 74 72 69 6e 67 20 47 65 74  tatic string Get
40d0: 4d 65 74 68 6f 64 4e 61 6d 65 28 0d 0a 20 20 20  MethodName(..   
40e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 53 74 61               Sta
40f0: 63 6b 54 72 61 63 65 20 73 74 61 63 6b 54 72 61  ckTrace stackTra
4100: 63 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ce,..           
4110: 20 20 20 20 20 69 6e 74 20 6c 65 76 65 6c 0d 0a       int level..
4120: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4130: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
4140: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
4150: 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20    try..         
4160: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
4170: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
4180: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
4190: 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 49        // NOTE: I
41a0: 66 20 61 20 76 61 6c 69 64 20 73 74 61 63 6b 20  f a valid stack 
41b0: 74 72 61 63 65 20 77 61 73 20 6e 6f 74 20 73 75  trace was not su
41c0: 70 70 6c 69 65 64 20 62 79 20 74 68 65 0d 0a 20  pplied by the.. 
41d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
41e0: 20 20 20 2f 2f 20 20 20 20 20 20 20 63 61 6c 6c     //       call
41f0: 65 72 2c 20 63 72 65 61 74 65 20 6f 6e 65 20 6e  er, create one n
4200: 6f 77 20 62 61 73 65 64 20 6f 6e 20 74 68 65 20  ow based on the 
4210: 63 75 72 72 65 6e 74 0d 0a 20 20 20 20 20 20 20  current..       
4220: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
4230: 20 20 20 20 20 20 65 78 65 63 75 74 69 6f 6e 20        execution 
4240: 73 74 61 63 6b 2e 0d 0a 20 20 20 20 20 20 20 20  stack...        
4250: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
4260: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4270: 20 20 20 20 69 66 20 28 73 74 61 63 6b 54 72 61      if (stackTra
4280: 63 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ce == null)..   
4290: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
42a0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
42b0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
42c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
42d0: 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a          // NOTE:
42e0: 20 47 72 61 62 20 74 68 65 20 63 75 72 72 65 6e   Grab the curren
42f0: 74 20 65 78 65 63 75 74 69 6f 6e 20 73 74 61 63  t execution stac
4300: 6b 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  k...            
4310: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
4320: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4330: 20 20 20 20 20 20 20 20 73 74 61 63 6b 54 72 61          stackTra
4340: 63 65 20 3d 20 6e 65 77 20 53 74 61 63 6b 54 72  ce = new StackTr
4350: 61 63 65 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  ace();....      
4360: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4370: 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
4380: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
4390: 20 4e 4f 54 45 3a 20 41 6c 77 61 79 73 20 73 6b   NOTE: Always sk
43a0: 69 70 20 74 68 69 73 20 63 61 6c 6c 20 66 72 61  ip this call fra
43b0: 6d 65 20 77 68 65 6e 20 77 65 20 63 61 70 74 75  me when we captu
43c0: 72 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  re..            
43d0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
43e0: 20 20 20 20 20 74 68 65 20 73 74 61 63 6b 20 74       the stack t
43f0: 72 61 63 65 2e 0d 0a 20 20 20 20 20 20 20 20 20  race...         
4400: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
4410: 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
4420: 20 20 20 20 20 20 20 20 20 20 20 6c 65 76 65 6c             level
4430: 2b 2b 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ++;..           
4440: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
4450: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4460: 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
4470: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54            // NOT
4480: 45 3a 20 47 65 74 20 74 68 65 20 73 70 65 63 69  E: Get the speci
4490: 66 69 65 64 20 73 74 61 63 6b 20 66 72 61 6d 65  fied stack frame
44a0: 20 28 61 6c 77 61 79 73 20 61 64 64 20 6f 6e 65   (always add one
44b0: 20 74 6f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   to..           
44c0: 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
44d0: 20 20 73 6b 69 70 20 74 68 69 73 20 6d 65 74 68    skip this meth
44e0: 6f 64 29 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  od)...          
44f0: 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
4500: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4510: 20 20 53 74 61 63 6b 46 72 61 6d 65 20 73 74 61    StackFrame sta
4520: 63 6b 46 72 61 6d 65 20 3d 20 73 74 61 63 6b 54  ckFrame = stackT
4530: 72 61 63 65 2e 47 65 74 46 72 61 6d 65 28 6c 65  race.GetFrame(le
4540: 76 65 6c 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  vel);....       
4550: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
4560: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
4570: 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 47 65       // NOTE: Ge
4580: 74 20 74 68 65 20 6d 65 74 68 6f 64 20 66 6f 72  t the method for
4590: 20 74 68 65 20 73 74 61 63 6b 20 66 72 61 6d 65   the stack frame
45a0: 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
45b0: 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
45c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4d                 M
45d0: 65 74 68 6f 64 42 61 73 65 20 6d 65 74 68 6f 64  ethodBase method
45e0: 42 61 73 65 20 3d 20 73 74 61 63 6b 46 72 61 6d  Base = stackFram
45f0: 65 2e 47 65 74 4d 65 74 68 6f 64 28 29 3b 0d 0a  e.GetMethod();..
4600: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
4610: 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
4620: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
4630: 20 4e 4f 54 45 3a 20 47 65 74 20 74 68 65 20 74   NOTE: Get the t
4640: 79 70 65 20 66 6f 72 20 74 68 65 20 6d 65 74 68  ype for the meth
4650: 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  od...           
4660: 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
4670: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4680: 20 54 79 70 65 20 74 79 70 65 20 3d 20 6d 65 74   Type type = met
4690: 68 6f 64 42 61 73 65 2e 44 65 63 6c 61 72 69 6e  hodBase.Declarin
46a0: 67 54 79 70 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  gType;....      
46b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
46c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
46d0: 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 47        // NOTE: G
46e0: 65 74 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74  et the name of t
46f0: 68 65 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20  he method...    
4700: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4710: 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
4720: 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6e          string n
4730: 61 6d 65 20 3d 20 6d 65 74 68 6f 64 42 61 73 65  ame = methodBase
4740: 2e 4e 61 6d 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  .Name;....      
4750: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
4760: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
4770: 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 52        // NOTE: R
4780: 65 74 75 72 6e 20 74 68 65 20 70 72 6f 70 65 72  eturn the proper
4790: 6c 79 20 66 6f 72 6d 61 74 74 65 64 20 72 65 73  ly formatted res
47a0: 75 6c 74 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  ult...          
47b0: 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
47c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
47d0: 20 20 72 65 74 75 72 6e 20 53 74 72 69 6e 67 2e    return String.
47e0: 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
47f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4800: 20 22 7b 30 7d 7b 31 7d 7b 32 7d 22 2c 20 74 79   "{0}{1}{2}", ty
4810: 70 65 2e 4e 61 6d 65 2c 20 54 79 70 65 2e 44 65  pe.Name, Type.De
4820: 6c 69 6d 69 74 65 72 2c 20 6e 61 6d 65 29 3b 0d  limiter, name);.
4830: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
4840: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
4850: 20 20 20 20 63 61 74 63 68 0d 0a 20 20 20 20 20      catch..     
4860: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
4870: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4880: 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e    // do nothing.
4890: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
48a0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
48b0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 75         return nu
48c0: 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll;..           
48d0: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
48e0: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
48f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4900: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4910: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4920: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
4930: 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74       public stat
4940: 69 63 20 76 6f 69 64 20 44 65 62 75 67 43 6f 72  ic void DebugCor
4950: 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
4960: 20 20 20 20 73 74 72 69 6e 67 20 6d 65 73 73 61      string messa
4970: 67 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ge,..           
4980: 20 20 20 20 20 73 74 72 69 6e 67 20 63 61 74 65       string cate
4990: 67 6f 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20  gory..          
49a0: 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
49b0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
49c0: 20 20 20 20 20 20 20 20 6c 6f 63 6b 20 28 73 79          lock (sy
49d0: 6e 63 52 6f 6f 74 29 0d 0a 20 20 20 20 20 20 20  ncRoot)..       
49e0: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
49f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4a00: 69 66 20 28 64 65 62 75 67 4c 69 73 74 65 6e 65  if (debugListene
4a10: 72 73 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  rs != null)..   
4a20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4a30: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
4a40: 20 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 65              fore
4a50: 61 63 68 20 28 54 72 61 63 65 4c 69 73 74 65 6e  ach (TraceListen
4a60: 65 72 20 6c 69 73 74 65 6e 65 72 20 69 6e 20 64  er listener in d
4a70: 65 62 75 67 4c 69 73 74 65 6e 65 72 73 29 0d 0a  ebugListeners)..
4a80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4a90: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
4aa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4ab0: 20 20 20 20 20 20 20 6c 69 73 74 65 6e 65 72 2e         listener.
4ac0: 57 72 69 74 65 4c 69 6e 65 28 6d 65 73 73 61 67  WriteLine(messag
4ad0: 65 2c 20 63 61 74 65 67 6f 72 79 29 3b 0d 0a 20  e, category);.. 
4ae0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4af0: 20 20 20 20 20 20 20 20 20 20 20 6c 69 73 74 65             liste
4b00: 6e 65 72 2e 46 6c 75 73 68 28 29 3b 0d 0a 20 20  ner.Flush();..  
4b10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4b20: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
4b30: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
4b40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4b50: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
4b60: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
4b70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4b80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4b90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4ba0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4bb0: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
4bc0: 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63     public static
4bd0: 20 76 6f 69 64 20 54 72 61 63 65 43 6f 72 65 28   void TraceCore(
4be0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
4bf0: 20 20 73 74 72 69 6e 67 20 6d 65 73 73 61 67 65    string message
4c00: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
4c10: 20 20 20 73 74 72 69 6e 67 20 63 61 74 65 67 6f     string catego
4c20: 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ry..            
4c30: 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20      )..         
4c40: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
4c50: 20 20 20 20 20 20 6c 6f 63 6b 20 28 73 79 6e 63        lock (sync
4c60: 52 6f 6f 74 29 0d 0a 20 20 20 20 20 20 20 20 20  Root)..         
4c70: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
4c80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
4c90: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
4ca0: 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 57        // NOTE: W
4cb0: 72 69 74 65 20 74 68 65 20 6d 65 73 73 61 67 65  rite the message
4cc0: 20 74 6f 20 61 6c 6c 20 74 68 65 20 61 63 74 69   to all the acti
4cd0: 76 65 20 74 72 61 63 65 0d 0a 20 20 20 20 20 20  ve trace..      
4ce0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
4cf0: 20 20 20 20 20 20 20 6c 69 73 74 65 6e 65 72 73         listeners
4d00: 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
4d10: 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
4d20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
4d30: 72 61 63 65 2e 57 72 69 74 65 4c 69 6e 65 28 6d  race.WriteLine(m
4d40: 65 73 73 61 67 65 2c 20 63 61 74 65 67 6f 72 79  essage, category
4d50: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
4d60: 20 20 20 20 20 20 20 20 54 72 61 63 65 2e 46 6c          Trace.Fl
4d70: 75 73 68 28 29 3b 0d 0a 20 20 20 20 20 20 20 20  ush();..        
4d80: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
4d90: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
4da0: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
4db0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4dc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4dd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4de0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
4df0: 20 20 20 20 20 20 20 20 20 20 20 5b 4d 65 74 68             [Meth
4e00: 6f 64 49 6d 70 6c 28 4d 65 74 68 6f 64 49 6d 70  odImpl(MethodImp
4e10: 6c 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e  lOptions.NoInlin
4e20: 69 6e 67 29 5d 0d 0a 20 20 20 20 20 20 20 20 20  ing)]..         
4e30: 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63     public static
4e40: 20 73 74 72 69 6e 67 20 44 65 62 75 67 41 6e 64   string DebugAnd
4e50: 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20  Trace(..        
4e60: 20 20 20 20 20 20 20 20 54 72 61 63 65 50 72 69          TracePri
4e70: 6f 72 69 74 79 20 74 72 61 63 65 50 72 69 6f 72  ority tracePrior
4e80: 69 74 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ity,..          
4e90: 20 20 20 20 20 20 54 72 61 63 65 43 61 6c 6c 62        TraceCallb
4ea0: 61 63 6b 20 64 65 62 75 67 43 61 6c 6c 62 61 63  ack debugCallbac
4eb0: 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  k,..            
4ec0: 20 20 20 20 54 72 61 63 65 43 61 6c 6c 62 61 63      TraceCallbac
4ed0: 6b 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c  k traceCallback,
4ee0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
4ef0: 20 20 45 78 63 65 70 74 69 6f 6e 20 65 78 63 65    Exception exce
4f00: 70 74 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20  ption,..        
4f10: 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 63          string c
4f20: 61 74 65 67 6f 72 79 0d 0a 20 20 20 20 20 20 20  ategory..       
4f30: 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
4f40: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
4f50: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 65             if (e
4f60: 78 63 65 70 74 69 6f 6e 20 21 3d 20 6e 75 6c 6c  xception != null
4f70: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
4f80: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 44 65         return De
4f90: 62 75 67 41 6e 64 54 72 61 63 65 28 74 72 61 63  bugAndTrace(trac
4fa0: 65 50 72 69 6f 72 69 74 79 2c 20 64 65 62 75 67  ePriority, debug
4fb0: 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20  Callback,..     
4fc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4fd0: 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b     traceCallback
4fe0: 2c 20 6e 65 77 20 53 74 61 63 6b 54 72 61 63 65  , new StackTrace
4ff0: 28 65 78 63 65 70 74 69 6f 6e 2c 20 74 72 75 65  (exception, true
5000: 29 2c 20 30 2c 0d 0a 20 20 20 20 20 20 20 20 20  ), 0,..         
5010: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
5020: 78 63 65 70 74 69 6f 6e 2e 54 6f 53 74 72 69 6e  xception.ToStrin
5030: 67 28 29 2c 20 63 61 74 65 67 6f 72 79 29 3b 0d  g(), category);.
5040: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
5050: 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d     return null;.
5060: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
5070: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
5080: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5090: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
50a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
50b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
50c0: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
50d0: 20 5b 4d 65 74 68 6f 64 49 6d 70 6c 28 4d 65 74   [MethodImpl(Met
50e0: 68 6f 64 49 6d 70 6c 4f 70 74 69 6f 6e 73 2e 4e  hodImplOptions.N
50f0: 6f 49 6e 6c 69 6e 69 6e 67 29 5d 0d 0a 20 20 20  oInlining)]..   
5100: 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
5110: 73 74 61 74 69 63 20 73 74 72 69 6e 67 20 44 65  static string De
5120: 62 75 67 41 6e 64 54 72 61 63 65 28 0d 0a 20 20  bugAndTrace(..  
5130: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
5140: 61 63 65 50 72 69 6f 72 69 74 79 20 74 72 61 63  acePriority trac
5150: 65 50 72 69 6f 72 69 74 79 2c 0d 0a 20 20 20 20  ePriority,..    
5160: 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
5170: 65 43 61 6c 6c 62 61 63 6b 20 64 65 62 75 67 43  eCallback debugC
5180: 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20  allback,..      
5190: 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 43            TraceC
51a0: 61 6c 6c 62 61 63 6b 20 74 72 61 63 65 43 61 6c  allback traceCal
51b0: 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20  lback,..        
51c0: 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6d          string m
51d0: 65 73 73 61 67 65 2c 0d 0a 20 20 20 20 20 20 20  essage,..       
51e0: 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
51f0: 63 61 74 65 67 6f 72 79 0d 0a 20 20 20 20 20 20  category..      
5200: 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
5210: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
5220: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
5230: 72 6e 20 44 65 62 75 67 41 6e 64 54 72 61 63 65  rn DebugAndTrace
5240: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
5250: 20 20 20 20 20 20 20 74 72 61 63 65 50 72 69 6f         tracePrio
5260: 72 69 74 79 2c 20 64 65 62 75 67 43 61 6c 6c 62  rity, debugCallb
5270: 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61  ack, traceCallba
5280: 63 6b 2c 20 6e 75 6c 6c 2c 20 31 2c 0d 0a 20 20  ck, null, 1,..  
5290: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
52a0: 20 20 6d 65 73 73 61 67 65 2c 20 63 61 74 65 67    message, categ
52b0: 6f 72 79 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ory);..         
52c0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
52d0: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
52e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
52f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5300: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5310: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
5320: 20 20 20 20 20 20 20 5b 4d 65 74 68 6f 64 49 6d         [MethodIm
5330: 70 6c 28 4d 65 74 68 6f 64 49 6d 70 6c 4f 70 74  pl(MethodImplOpt
5340: 69 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e 69 6e 67 29  ions.NoInlining)
5350: 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ]..            p
5360: 72 69 76 61 74 65 20 73 74 61 74 69 63 20 73 74  rivate static st
5370: 72 69 6e 67 20 44 65 62 75 67 41 6e 64 54 72 61  ring DebugAndTra
5380: 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ce(..           
5390: 20 20 20 20 20 54 72 61 63 65 50 72 69 6f 72 69       TracePriori
53a0: 74 79 20 74 72 61 63 65 50 72 69 6f 72 69 74 79  ty tracePriority
53b0: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
53c0: 20 20 20 54 72 61 63 65 43 61 6c 6c 62 61 63 6b     TraceCallback
53d0: 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d   debugCallback,.
53e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
53f0: 20 54 72 61 63 65 43 61 6c 6c 62 61 63 6b 20 74   TraceCallback t
5400: 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20  raceCallback,.. 
5410: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53                 S
5420: 74 61 63 6b 54 72 61 63 65 20 73 74 61 63 6b 54  tackTrace stackT
5430: 72 61 63 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  race,..         
5440: 20 20 20 20 20 20 20 69 6e 74 20 6c 65 76 65 6c         int level
5450: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
5460: 20 20 20 73 74 72 69 6e 67 20 6d 65 73 73 61 67     string messag
5470: 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
5480: 20 20 20 20 73 74 72 69 6e 67 20 63 61 74 65 67      string categ
5490: 6f 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ory..           
54a0: 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
54b0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
54c0: 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
54d0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f             // NO
54e0: 54 45 3a 20 41 6c 77 61 79 73 20 73 6b 69 70 20  TE: Always skip 
54f0: 74 68 69 73 20 63 61 6c 6c 20 66 72 61 6d 65 20  this call frame 
5500: 69 66 20 74 68 65 20 73 74 61 63 6b 20 74 72 61  if the stack tra
5510: 63 65 20 69 73 0d 0a 20 20 20 20 20 20 20 20 20  ce is..         
5520: 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
5530: 67 6f 69 6e 67 20 74 6f 20 62 65 20 63 61 70 74  going to be capt
5540: 75 72 65 64 20 62 79 20 47 65 74 4d 65 74 68 6f  ured by GetMetho
5550: 64 4e 61 6d 65 2e 0d 0a 20 20 20 20 20 20 20 20  dName...        
5560: 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
5570: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
5580: 73 74 61 63 6b 54 72 61 63 65 20 3d 3d 20 6e 75  stackTrace == nu
5590: 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
55a0: 20 20 20 20 20 20 20 20 20 6c 65 76 65 6c 2b 2b           level++
55b0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
55c0: 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
55d0: 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45           // NOTE
55e0: 3a 20 46 6f 72 6d 61 74 20 74 68 65 20 6d 65 73  : Format the mes
55f0: 73 61 67 65 20 66 6f 72 20 64 69 73 70 6c 61 79  sage for display
5600: 20 28 6f 6e 63 65 29 2e 0d 0a 20 20 20 20 20 20   (once)...      
5610: 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
5620: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
5630: 72 69 6e 67 20 66 6f 72 6d 61 74 74 65 64 20 3d  ring formatted =
5640: 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 22   String.Format("
5650: 7b 30 7d 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20  {0}: {1}",..    
5660: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5670: 47 65 74 4d 65 74 68 6f 64 4e 61 6d 65 28 73 74  GetMethodName(st
5680: 61 63 6b 54 72 61 63 65 2c 20 6c 65 76 65 6c 29  ackTrace, level)
5690: 2c 20 6d 65 73 73 61 67 65 29 3b 0d 0a 0d 0a 20  , message);.... 
56a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
56b0: 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
56c0: 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 49 66 20 74     // NOTE: If t
56d0: 68 65 20 64 65 62 75 67 20 63 61 6c 6c 62 61 63  he debug callbac
56e0: 6b 20 69 73 20 69 6e 76 61 6c 69 64 20 6f 72 20  k is invalid or 
56f0: 74 68 65 20 74 72 61 63 65 20 70 72 69 6f 72 69  the trace priori
5700: 74 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ty..            
5710: 20 20 20 20 2f 2f 20 20 20 20 20 20 20 6f 66 20      //       of 
5720: 74 68 69 73 20 6d 65 73 73 61 67 65 20 69 73 20  this message is 
5730: 6c 65 73 73 20 74 68 61 6e 20 77 68 61 74 20 77  less than what w
5740: 65 20 63 75 72 72 65 6e 74 6c 79 20 77 61 6e 74  e currently want
5750: 20 74 6f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   to..           
5760: 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 64 65       //       de
5770: 62 75 67 2c 20 73 6b 69 70 20 69 74 2e 0d 0a 20  bug, skip it... 
5780: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
5790: 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
57a0: 20 20 20 69 66 20 28 28 64 65 62 75 67 43 61 6c     if ((debugCal
57b0: 6c 62 61 63 6b 20 21 3d 20 6e 75 6c 6c 29 20 26  lback != null) &
57c0: 26 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  &..             
57d0: 20 20 20 20 20 20 20 28 74 72 61 63 65 50 72 69         (tracePri
57e0: 6f 72 69 74 79 20 3e 3d 20 44 65 62 75 67 50 72  ority >= DebugPr
57f0: 69 6f 72 69 74 79 29 29 0d 0a 20 20 20 20 20 20  iority))..      
5800: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
5810: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5820: 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
5830: 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45           // NOTE
5840: 3a 20 49 6e 76 6f 6b 65 20 74 68 65 20 64 65 62  : Invoke the deb
5850: 75 67 20 63 61 6c 6c 62 61 63 6b 20 77 69 74 68  ug callback with
5860: 20 74 68 65 20 66 6f 72 6d 61 74 74 65 64 0d 0a   the formatted..
5870: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5880: 20 20 20 20 2f 2f 20 20 20 20 20 20 20 6d 65 73      //       mes
5890: 73 61 67 65 20 61 6e 64 20 74 68 65 20 63 61 74  sage and the cat
58a0: 65 67 6f 72 79 20 73 70 65 63 69 66 69 65 64 20  egory specified 
58b0: 62 79 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20  by the..        
58c0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
58d0: 20 20 20 20 20 63 61 6c 6c 65 72 2e 0d 0a 20 20       caller...  
58e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
58f0: 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
5900: 20 20 20 20 20 20 20 20 20 20 64 65 62 75 67 43            debugC
5910: 61 6c 6c 62 61 63 6b 28 66 6f 72 6d 61 74 74 65  allback(formatte
5920: 64 2c 20 63 61 74 65 67 6f 72 79 29 3b 0d 0a 20  d, category);.. 
5930: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
5940: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
5950: 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
5960: 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a          // NOTE:
5970: 20 49 66 20 74 68 65 20 74 72 61 63 65 20 63 61   If the trace ca
5980: 6c 6c 62 61 63 6b 20 69 73 20 69 6e 76 61 6c 69  llback is invali
5990: 64 20 6f 72 20 74 68 65 20 74 72 61 63 65 20 70  d or the trace p
59a0: 72 69 6f 72 69 74 79 0d 0a 20 20 20 20 20 20 20  riority..       
59b0: 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
59c0: 20 20 6f 66 20 74 68 69 73 20 6d 65 73 73 61 67    of this messag
59d0: 65 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20 77  e is less than w
59e0: 68 61 74 20 77 65 20 63 75 72 72 65 6e 74 6c 79  hat we currently
59f0: 20 77 61 6e 74 20 74 6f 0d 0a 20 20 20 20 20 20   want to..      
5a00: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
5a10: 20 20 20 74 72 61 63 65 2c 20 73 6b 69 70 20 69     trace, skip i
5a20: 74 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t...            
5a30: 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
5a40: 20 20 20 20 20 20 20 20 69 66 20 28 28 74 72 61          if ((tra
5a50: 63 65 43 61 6c 6c 62 61 63 6b 20 21 3d 20 6e 75  ceCallback != nu
5a60: 6c 6c 29 20 26 26 0d 0a 20 20 20 20 20 20 20 20  ll) &&..        
5a70: 20 20 20 20 20 20 20 20 20 20 20 20 28 74 72 61              (tra
5a80: 63 65 50 72 69 6f 72 69 74 79 20 3e 3d 20 54 72  cePriority >= Tr
5a90: 61 63 65 50 72 69 6f 72 69 74 79 29 29 0d 0a 20  acePriority)).. 
5aa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
5ab0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
5ac0: 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
5ad0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
5ae0: 20 4e 4f 54 45 3a 20 49 6e 76 6f 6b 65 20 74 68   NOTE: Invoke th
5af0: 65 20 74 72 61 63 65 20 63 61 6c 6c 62 61 63 6b  e trace callback
5b00: 20 77 69 74 68 20 74 68 65 20 66 6f 72 6d 61 74   with the format
5b10: 74 65 64 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ted..           
5b20: 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
5b30: 20 20 6d 65 73 73 61 67 65 20 61 6e 64 20 74 68    message and th
5b40: 65 20 63 61 74 65 67 6f 72 79 20 73 70 65 63 69  e category speci
5b50: 66 69 65 64 20 62 79 20 74 68 65 0d 0a 20 20 20  fied by the..   
5b60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5b70: 20 2f 2f 20 20 20 20 20 20 20 63 61 6c 6c 65 72   //       caller
5b80: 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
5b90: 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
5ba0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
5bb0: 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 66 6f 72  raceCallback(for
5bc0: 6d 61 74 74 65 64 2c 20 63 61 74 65 67 6f 72 79  matted, category
5bd0: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
5be0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
5bf0: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
5c00: 6d 65 73 73 61 67 65 3b 0d 0a 20 20 20 20 20 20  message;..      
5c10: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
5c20: 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d       #endregion.
5c30: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..    
5c40: 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
5c50: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
5c60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5c70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5c80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5c90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5ca0: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65  /....        #re
5cb0: 67 69 6f 6e 20 4d 6f 63 6b 52 65 67 69 73 74 72  gion MockRegistr
5cc0: 79 20 43 6c 61 73 73 0d 0a 20 20 20 20 20 20 20  y Class..       
5cd0: 20 70 72 69 76 61 74 65 20 73 65 61 6c 65 64 20   private sealed 
5ce0: 63 6c 61 73 73 20 4d 6f 63 6b 52 65 67 69 73 74  class MockRegist
5cf0: 72 79 20 3a 20 49 44 69 73 70 6f 73 61 62 6c 65  ry : IDisposable
5d00: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
5d10: 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e           #region
5d20: 20 50 75 62 6c 69 63 20 43 6f 6e 73 74 72 75 63   Public Construc
5d30: 74 6f 72 73 0d 0a 20 20 20 20 20 20 20 20 20 20  tors..          
5d40: 20 20 70 75 62 6c 69 63 20 4d 6f 63 6b 52 65 67    public MockReg
5d50: 69 73 74 72 79 28 29 0d 0a 20 20 20 20 20 20 20  istry()..       
5d60: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
5d70: 20 20 20 20 20 20 20 20 77 68 61 74 49 66 20 3d          whatIf =
5d80: 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20   true;..        
5d90: 20 20 20 20 20 20 20 20 72 65 61 64 4f 6e 6c 79          readOnly
5da0: 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20   = true;..      
5db0: 20 20 20 20 20 20 20 20 20 20 73 61 66 65 20 3d            safe =
5dc0: 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20   true;..        
5dd0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
5de0: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
5df0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5e00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5e10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5e20: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
5e30: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 4d          public M
5e40: 6f 63 6b 52 65 67 69 73 74 72 79 28 0d 0a 20 20  ockRegistry(..  
5e50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f                bo
5e60: 6f 6c 20 77 68 61 74 49 66 0d 0a 20 20 20 20 20  ol whatIf..     
5e70: 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
5e80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3a 20                : 
5e90: 74 68 69 73 28 29 0d 0a 20 20 20 20 20 20 20 20  this()..        
5ea0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
5eb0: 20 20 20 20 20 20 20 74 68 69 73 2e 77 68 61 74         this.what
5ec0: 49 66 20 3d 20 77 68 61 74 49 66 3b 0d 0a 20 20  If = whatIf;..  
5ed0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
5ee0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
5ef0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5f00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5f10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5f20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
5f30: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
5f40: 62 6c 69 63 20 4d 6f 63 6b 52 65 67 69 73 74 72  blic MockRegistr
5f50: 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y(..            
5f60: 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c      bool whatIf,
5f70: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
5f80: 20 20 62 6f 6f 6c 20 72 65 61 64 4f 6e 6c 79 0d    bool readOnly.
5f90: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
5fa0: 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   )..            
5fb0: 20 20 20 20 3a 20 74 68 69 73 28 77 68 61 74 49      : this(whatI
5fc0: 66 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  f)..            
5fd0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
5fe0: 20 20 20 74 68 69 73 2e 72 65 61 64 4f 6e 6c 79     this.readOnly
5ff0: 20 3d 20 72 65 61 64 4f 6e 6c 79 3b 0d 0a 20 20   = readOnly;..  
6000: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
6010: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
6020: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6030: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6040: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6050: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
6060: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
6070: 62 6c 69 63 20 4d 6f 63 6b 52 65 67 69 73 74 72  blic MockRegistr
6080: 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y(..            
6090: 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c      bool whatIf,
60a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
60b0: 20 20 62 6f 6f 6c 20 72 65 61 64 4f 6e 6c 79 2c    bool readOnly,
60c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
60d0: 20 20 62 6f 6f 6c 20 73 61 66 65 0d 0a 20 20 20    bool safe..   
60e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a               )..
60f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6100: 3a 20 74 68 69 73 28 77 68 61 74 49 66 2c 20 72  : this(whatIf, r
6110: 65 61 64 4f 6e 6c 79 29 0d 0a 20 20 20 20 20 20  eadOnly)..      
6120: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
6130: 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 73 61           this.sa
6140: 66 65 20 3d 20 73 61 66 65 3b 0d 0a 20 20 20 20  fe = safe;..    
6150: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
6160: 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f         #endregio
6170: 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n....           
6180: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
6190: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
61a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
61b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
61c0: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
61d0: 20 20 20 20 23 72 65 67 69 6f 6e 20 50 75 62 6c      #region Publ
61e0: 69 63 20 50 72 6f 70 65 72 74 69 65 73 0d 0a 20  ic Properties.. 
61f0: 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
6200: 74 65 20 62 6f 6f 6c 20 77 68 61 74 49 66 3b 0d  te bool whatIf;.
6210: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
6220: 6c 69 63 20 62 6f 6f 6c 20 57 68 61 74 49 66 0d  lic bool WhatIf.
6230: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
6240: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6250: 67 65 74 20 7b 20 43 68 65 63 6b 44 69 73 70 6f  get { CheckDispo
6260: 73 65 64 28 29 3b 20 72 65 74 75 72 6e 20 77 68  sed(); return wh
6270: 61 74 49 66 3b 20 7d 0d 0a 20 20 20 20 20 20 20  atIf; }..       
6280: 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 43           set { C
6290: 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 20  heckDisposed(); 
62a0: 77 68 61 74 49 66 20 3d 20 76 61 6c 75 65 3b 20  whatIf = value; 
62b0: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
62c0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
62d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
62e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
62f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6300: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6310: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
6320: 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20     private bool 
6330: 72 65 61 64 4f 6e 6c 79 3b 0d 0a 20 20 20 20 20  readOnly;..     
6340: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f         public bo
6350: 6f 6c 20 52 65 61 64 4f 6e 6c 79 0d 0a 20 20 20  ol ReadOnly..   
6360: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
6370: 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20              get 
6380: 7b 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28  { CheckDisposed(
6390: 29 3b 20 72 65 74 75 72 6e 20 72 65 61 64 4f 6e  ); return readOn
63a0: 6c 79 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  ly; }..         
63b0: 20 20 20 20 20 20 20 73 65 74 20 7b 20 43 68 65         set { Che
63c0: 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 20 72 65  ckDisposed(); re
63d0: 61 64 4f 6e 6c 79 20 3d 20 76 61 6c 75 65 3b 20  adOnly = value; 
63e0: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
63f0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
6400: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6410: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6420: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6430: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6440: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
6450: 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20     private bool 
6460: 73 61 66 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  safe;..         
6470: 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 53     public bool S
6480: 61 66 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  afe..           
6490: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
64a0: 20 20 20 20 67 65 74 20 7b 20 43 68 65 63 6b 44      get { CheckD
64b0: 69 73 70 6f 73 65 64 28 29 3b 20 72 65 74 75 72  isposed(); retur
64c0: 6e 20 73 61 66 65 3b 20 7d 0d 0a 20 20 20 20 20  n safe; }..     
64d0: 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b             set {
64e0: 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29   CheckDisposed()
64f0: 3b 20 73 61 66 65 20 3d 20 76 61 6c 75 65 3b 20  ; safe = value; 
6500: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
6510: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
6520: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6530: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6540: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6550: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6560: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
6570: 20 20 20 70 72 69 76 61 74 65 20 4d 6f 63 6b 52     private MockR
6580: 65 67 69 73 74 72 79 4b 65 79 20 63 6c 61 73 73  egistryKey class
6590: 65 73 52 6f 6f 74 3b 0d 0a 20 20 20 20 20 20 20  esRoot;..       
65a0: 20 20 20 20 20 70 75 62 6c 69 63 20 4d 6f 63 6b       public Mock
65b0: 52 65 67 69 73 74 72 79 4b 65 79 20 43 6c 61 73  RegistryKey Clas
65c0: 73 65 73 52 6f 6f 74 0d 0a 20 20 20 20 20 20 20  sesRoot..       
65d0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
65e0: 20 20 20 20 20 20 20 20 67 65 74 0d 0a 20 20 20          get..   
65f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
6600: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6610: 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65      CheckDispose
6620: 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  d();....        
6630: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
6640: 63 6c 61 73 73 65 73 52 6f 6f 74 20 3d 3d 20 6e  classesRoot == n
6650: 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
6660: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6c                cl
6670: 61 73 73 65 73 52 6f 6f 74 20 3d 20 6e 65 77 20  assesRoot = new 
6680: 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 28  MockRegistryKey(
6690: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
66a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65                Re
66b0: 67 69 73 74 72 79 2e 43 6c 61 73 73 65 73 52 6f  gistry.ClassesRo
66c0: 6f 74 2c 20 77 68 61 74 49 66 2c 20 72 65 61 64  ot, whatIf, read
66d0: 4f 6e 6c 79 2c 20 73 61 66 65 29 3b 0d 0a 0d 0a  Only, safe);....
66e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
66f0: 20 20 20 20 72 65 74 75 72 6e 20 63 6c 61 73 73      return class
6700: 65 73 52 6f 6f 74 3b 0d 0a 20 20 20 20 20 20 20  esRoot;..       
6710: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
6720: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
6730: 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
6740: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6750: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6760: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6770: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
6780: 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76              priv
6790: 61 74 65 20 4d 6f 63 6b 52 65 67 69 73 74 72 79  ate MockRegistry
67a0: 4b 65 79 20 63 75 72 72 65 6e 74 43 6f 6e 66 69  Key currentConfi
67b0: 67 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  g;..            
67c0: 70 75 62 6c 69 63 20 4d 6f 63 6b 52 65 67 69 73  public MockRegis
67d0: 74 72 79 4b 65 79 20 43 75 72 72 65 6e 74 43 6f  tryKey CurrentCo
67e0: 6e 66 69 67 0d 0a 20 20 20 20 20 20 20 20 20 20  nfig..          
67f0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
6800: 20 20 20 20 20 67 65 74 0d 0a 20 20 20 20 20 20       get..      
6810: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
6820: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6830: 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29   CheckDisposed()
6840: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
6850: 20 20 20 20 20 20 20 20 20 69 66 20 28 63 75 72           if (cur
6860: 72 65 6e 74 43 6f 6e 66 69 67 20 3d 3d 20 6e 75  rentConfig == nu
6870: 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
6880: 20 20 20 20 20 20 20 20 20 20 20 20 20 63 75 72               cur
6890: 72 65 6e 74 43 6f 6e 66 69 67 20 3d 20 6e 65 77  rentConfig = new
68a0: 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79   MockRegistryKey
68b0: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
68c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52                 R
68d0: 65 67 69 73 74 72 79 2e 43 75 72 72 65 6e 74 43  egistry.CurrentC
68e0: 6f 6e 66 69 67 2c 20 77 68 61 74 49 66 2c 20 72  onfig, whatIf, r
68f0: 65 61 64 4f 6e 6c 79 2c 20 73 61 66 65 29 3b 0d  eadOnly, safe);.
6900: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
6910: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 63 75         return cu
6920: 72 72 65 6e 74 43 6f 6e 66 69 67 3b 0d 0a 20 20  rrentConfig;..  
6930: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
6940: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
6950: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
6960: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6970: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6980: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6990: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
69a0: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
69b0: 20 70 72 69 76 61 74 65 20 4d 6f 63 6b 52 65 67   private MockReg
69c0: 69 73 74 72 79 4b 65 79 20 63 75 72 72 65 6e 74  istryKey current
69d0: 55 73 65 72 3b 0d 0a 20 20 20 20 20 20 20 20 20  User;..         
69e0: 20 20 20 70 75 62 6c 69 63 20 4d 6f 63 6b 52 65     public MockRe
69f0: 67 69 73 74 72 79 4b 65 79 20 43 75 72 72 65 6e  gistryKey Curren
6a00: 74 55 73 65 72 0d 0a 20 20 20 20 20 20 20 20 20  tUser..         
6a10: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
6a20: 20 20 20 20 20 20 67 65 74 0d 0a 20 20 20 20 20        get..     
6a30: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
6a40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6a50: 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28    CheckDisposed(
6a60: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
6a70: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 63 75            if (cu
6a80: 72 72 65 6e 74 55 73 65 72 20 3d 3d 20 6e 75 6c  rrentUser == nul
6a90: 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
6aa0: 20 20 20 20 20 20 20 20 20 20 20 20 63 75 72 72              curr
6ab0: 65 6e 74 55 73 65 72 20 3d 20 6e 65 77 20 4d 6f  entUser = new Mo
6ac0: 63 6b 52 65 67 69 73 74 72 79 4b 65 79 28 0d 0a  ckRegistryKey(..
6ad0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6ae0: 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69              Regi
6af0: 73 74 72 79 2e 43 75 72 72 65 6e 74 55 73 65 72  stry.CurrentUser
6b00: 2c 20 77 68 61 74 49 66 2c 20 72 65 61 64 4f 6e  , whatIf, readOn
6b10: 6c 79 2c 20 73 61 66 65 29 3b 0d 0a 0d 0a 20 20  ly, safe);....  
6b20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6b30: 20 20 72 65 74 75 72 6e 20 63 75 72 72 65 6e 74    return current
6b40: 55 73 65 72 3b 0d 0a 20 20 20 20 20 20 20 20 20  User;..         
6b50: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
6b60: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
6b70: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
6b80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6b90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6ba0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6bb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
6bc0: 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
6bd0: 65 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65  e MockRegistryKe
6be0: 79 20 64 79 6e 44 61 74 61 3b 0d 0a 20 20 20 20  y dynData;..    
6bf0: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 4d          public M
6c00: 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 44  ockRegistryKey D
6c10: 79 6e 44 61 74 61 0d 0a 20 20 20 20 20 20 20 20  ynData..        
6c20: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
6c30: 20 20 20 20 20 20 20 67 65 74 0d 0a 20 20 20 20         get..    
6c40: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
6c50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6c60: 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64     CheckDisposed
6c70: 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ();....         
6c80: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 64             if (d
6c90: 79 6e 44 61 74 61 20 3d 3d 20 6e 75 6c 6c 29 0d  ynData == null).
6ca0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
6cb0: 20 20 20 20 20 20 20 20 20 64 79 6e 44 61 74 61           dynData
6cc0: 20 3d 20 6e 65 77 20 4d 6f 63 6b 52 65 67 69 73   = new MockRegis
6cd0: 74 72 79 4b 65 79 28 0d 0a 20 20 20 20 20 20 20  tryKey(..       
6ce0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6cf0: 20 20 20 20 20 52 65 67 69 73 74 72 79 2e 44 79       Registry.Dy
6d00: 6e 44 61 74 61 2c 20 77 68 61 74 49 66 2c 20 72  nData, whatIf, r
6d10: 65 61 64 4f 6e 6c 79 2c 20 73 61 66 65 29 3b 0d  eadOnly, safe);.
6d20: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
6d30: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 64 79         return dy
6d40: 6e 44 61 74 61 3b 0d 0a 20 20 20 20 20 20 20 20  nData;..        
6d50: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
6d60: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
6d70: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
6d80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6d90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6da0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6db0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
6dc0: 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
6dd0: 74 65 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b  te MockRegistryK
6de0: 65 79 20 6c 6f 63 61 6c 4d 61 63 68 69 6e 65 3b  ey localMachine;
6df0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
6e00: 62 6c 69 63 20 4d 6f 63 6b 52 65 67 69 73 74 72  blic MockRegistr
6e10: 79 4b 65 79 20 4c 6f 63 61 6c 4d 61 63 68 69 6e  yKey LocalMachin
6e20: 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  e..            {
6e30: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
6e40: 20 20 67 65 74 0d 0a 20 20 20 20 20 20 20 20 20    get..         
6e50: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
6e60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43 68                Ch
6e70: 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a  eckDisposed();..
6e80: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
6e90: 20 20 20 20 20 20 69 66 20 28 6c 6f 63 61 6c 4d        if (localM
6ea0: 61 63 68 69 6e 65 20 3d 3d 20 6e 75 6c 6c 29 0d  achine == null).
6eb0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
6ec0: 20 20 20 20 20 20 20 20 20 6c 6f 63 61 6c 4d 61           localMa
6ed0: 63 68 69 6e 65 20 3d 20 6e 65 77 20 4d 6f 63 6b  chine = new Mock
6ee0: 52 65 67 69 73 74 72 79 4b 65 79 28 0d 0a 20 20  RegistryKey(..  
6ef0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6f00: 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74            Regist
6f10: 72 79 2e 4c 6f 63 61 6c 4d 61 63 68 69 6e 65 2c  ry.LocalMachine,
6f20: 20 77 68 61 74 49 66 2c 20 72 65 61 64 4f 6e 6c   whatIf, readOnl
6f30: 79 2c 20 73 61 66 65 29 3b 0d 0a 0d 0a 20 20 20  y, safe);....   
6f40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6f50: 20 72 65 74 75 72 6e 20 6c 6f 63 61 6c 4d 61 63   return localMac
6f60: 68 69 6e 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  hine;..         
6f70: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
6f80: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
6f90: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
6fa0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6fb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6fc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6fd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
6fe0: 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
6ff0: 65 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65  e MockRegistryKe
7000: 79 20 70 65 72 66 6f 72 6d 61 6e 63 65 44 61 74  y performanceDat
7010: 61 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  a;..            
7020: 70 75 62 6c 69 63 20 4d 6f 63 6b 52 65 67 69 73  public MockRegis
7030: 74 72 79 4b 65 79 20 50 65 72 66 6f 72 6d 61 6e  tryKey Performan
7040: 63 65 44 61 74 61 0d 0a 20 20 20 20 20 20 20 20  ceData..        
7050: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
7060: 20 20 20 20 20 20 20 67 65 74 0d 0a 20 20 20 20         get..    
7070: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
7080: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7090: 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64     CheckDisposed
70a0: 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ();....         
70b0: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 70             if (p
70c0: 65 72 66 6f 72 6d 61 6e 63 65 44 61 74 61 20 3d  erformanceData =
70d0: 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
70e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
70f0: 20 70 65 72 66 6f 72 6d 61 6e 63 65 44 61 74 61   performanceData
7100: 20 3d 20 6e 65 77 20 4d 6f 63 6b 52 65 67 69 73   = new MockRegis
7110: 74 72 79 4b 65 79 28 0d 0a 20 20 20 20 20 20 20  tryKey(..       
7120: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7130: 20 20 20 20 20 52 65 67 69 73 74 72 79 2e 50 65       Registry.Pe
7140: 72 66 6f 72 6d 61 6e 63 65 44 61 74 61 2c 20 77  rformanceData, w
7150: 68 61 74 49 66 2c 20 72 65 61 64 4f 6e 6c 79 2c  hatIf, readOnly,
7160: 20 73 61 66 65 29 3b 0d 0a 0d 0a 20 20 20 20 20   safe);....     
7170: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
7180: 65 74 75 72 6e 20 70 65 72 66 6f 72 6d 61 6e 63  eturn performanc
7190: 65 44 61 74 61 3b 0d 0a 20 20 20 20 20 20 20 20  eData;..        
71a0: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
71b0: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
71c0: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
71d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
71e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
71f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7200: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
7210: 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
7220: 74 65 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b  te MockRegistryK
7230: 65 79 20 75 73 65 72 73 3b 0d 0a 20 20 20 20 20  ey users;..     
7240: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 4d 6f         public Mo
7250: 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 55 73  ckRegistryKey Us
7260: 65 72 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ers..           
7270: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
7280: 20 20 20 20 67 65 74 0d 0a 20 20 20 20 20 20 20      get..       
7290: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
72a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
72b0: 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b  CheckDisposed();
72c0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
72d0: 20 20 20 20 20 20 20 20 69 66 20 28 75 73 65 72          if (user
72e0: 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  s == null)..    
72f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7300: 20 20 20 20 75 73 65 72 73 20 3d 20 6e 65 77 20      users = new 
7310: 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 28  MockRegistryKey(
7320: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
7330: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65                Re
7340: 67 69 73 74 72 79 2e 55 73 65 72 73 2c 20 77 68  gistry.Users, wh
7350: 61 74 49 66 2c 20 72 65 61 64 4f 6e 6c 79 2c 20  atIf, readOnly, 
7360: 73 61 66 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  safe);....      
7370: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
7380: 74 75 72 6e 20 75 73 65 72 73 3b 0d 0a 20 20 20  turn users;..   
7390: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
73a0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
73b0: 20 20 20 20 20 20 20 20 20 20 20 23 65 6e 64 72             #endr
73c0: 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20  egion....       
73d0: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
73e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
73f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7400: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7410: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
7420: 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20          #region 
7430: 50 75 62 6c 69 63 20 22 52 65 67 69 73 74 72 79  Public "Registry
7440: 22 20 4d 65 74 68 6f 64 73 0d 0a 23 69 66 20 66  " Methods..#if f
7450: 61 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20  alse..          
7460: 20 20 70 75 62 6c 69 63 20 6f 62 6a 65 63 74 20    public object 
7470: 47 65 74 56 61 6c 75 65 28 0d 0a 20 20 20 20 20  GetValue(..     
7480: 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
7490: 67 20 6b 65 79 4e 61 6d 65 2c 0d 0a 20 20 20 20  g keyName,..    
74a0: 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
74b0: 6e 67 20 76 61 6c 75 65 4e 61 6d 65 2c 0d 0a 20  ng valueName,.. 
74c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6f                 o
74d0: 62 6a 65 63 74 20 64 65 66 61 75 6c 74 56 61 6c  bject defaultVal
74e0: 75 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ue..            
74f0: 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20      )..         
7500: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
7510: 20 20 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f        CheckDispo
7520: 73 65 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  sed();....      
7530: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
7540: 20 52 65 67 69 73 74 72 79 2e 47 65 74 56 61 6c   Registry.GetVal
7550: 75 65 28 6b 65 79 4e 61 6d 65 2c 20 76 61 6c 75  ue(keyName, valu
7560: 65 4e 61 6d 65 2c 20 64 65 66 61 75 6c 74 56 61  eName, defaultVa
7570: 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  lue);..         
7580: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
7590: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
75a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
75b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
75c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
75d0: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
75e0: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 76 6f         public vo
75f0: 69 64 20 53 65 74 56 61 6c 75 65 28 0d 0a 20 20  id SetValue(..  
7600: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
7610: 72 69 6e 67 20 6b 65 79 4e 61 6d 65 2c 0d 0a 20  ring keyName,.. 
7620: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
7630: 74 72 69 6e 67 20 76 61 6c 75 65 4e 61 6d 65 2c  tring valueName,
7640: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
7650: 20 20 6f 62 6a 65 63 74 20 76 61 6c 75 65 0d 0a    object value..
7660: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7670: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
7680: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
7690: 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28    CheckDisposed(
76a0: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
76b0: 20 20 20 20 43 68 65 63 6b 52 65 61 64 4f 6e 6c      CheckReadOnl
76c0: 79 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  y();....        
76d0: 20 20 20 20 20 20 20 20 69 66 20 28 21 77 68 61          if (!wha
76e0: 74 49 66 29 0d 0a 20 20 20 20 20 20 20 20 20 20  tIf)..          
76f0: 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74            Regist
7700: 72 79 2e 53 65 74 56 61 6c 75 65 28 6b 65 79 4e  ry.SetValue(keyN
7710: 61 6d 65 2c 20 76 61 6c 75 65 4e 61 6d 65 2c 20  ame, valueName, 
7720: 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20 20  value);..       
7730: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
7740: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
7750: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7760: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7770: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7780: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
7790: 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
77a0: 76 6f 69 64 20 53 65 74 56 61 6c 75 65 28 0d 0a  void SetValue(..
77b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
77c0: 73 74 72 69 6e 67 20 6b 65 79 4e 61 6d 65 2c 0d  string keyName,.
77d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
77e0: 20 73 74 72 69 6e 67 20 76 61 6c 75 65 4e 61 6d   string valueNam
77f0: 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
7800: 20 20 20 20 6f 62 6a 65 63 74 20 76 61 6c 75 65      object value
7810: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
7820: 20 20 20 52 65 67 69 73 74 72 79 56 61 6c 75 65     RegistryValue
7830: 4b 69 6e 64 20 76 61 6c 75 65 4b 69 6e 64 0d 0a  Kind valueKind..
7840: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7850: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
7860: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
7870: 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28    CheckDisposed(
7880: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
7890: 20 20 20 20 43 68 65 63 6b 52 65 61 64 4f 6e 6c      CheckReadOnl
78a0: 79 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  y();....        
78b0: 20 20 20 20 20 20 20 20 69 66 20 28 21 77 68 61          if (!wha
78c0: 74 49 66 29 0d 0a 20 20 20 20 20 20 20 20 20 20  tIf)..          
78d0: 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74            Regist
78e0: 72 79 2e 53 65 74 56 61 6c 75 65 28 6b 65 79 4e  ry.SetValue(keyN
78f0: 61 6d 65 2c 20 76 61 6c 75 65 4e 61 6d 65 2c 20  ame, valueName, 
7900: 76 61 6c 75 65 2c 20 76 61 6c 75 65 4b 69 6e 64  value, valueKind
7910: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
7920: 7d 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20  }..#endif..     
7930: 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f         #endregio
7940: 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n....           
7950: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
7960: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7970: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7980: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7990: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
79a0: 20 20 20 20 23 72 65 67 69 6f 6e 20 50 72 69 76      #region Priv
79b0: 61 74 65 20 4d 65 74 68 6f 64 73 0d 0a 20 20 20  ate Methods..   
79c0: 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65           private
79d0: 20 76 6f 69 64 20 43 68 65 63 6b 52 65 61 64 4f   void CheckReadO
79e0: 6e 6c 79 28 29 0d 0a 20 20 20 20 20 20 20 20 20  nly()..         
79f0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
7a00: 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
7a10: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54            // NOT
7a20: 45 3a 20 49 6e 20 22 72 65 61 64 2d 6f 6e 6c 79  E: In "read-only
7a30: 22 20 6d 6f 64 65 2c 20 77 65 20 64 69 73 61 6c  " mode, we disal
7a40: 6c 6f 77 20 61 6c 6c 20 77 72 69 74 65 20 61 63  low all write ac
7a50: 63 65 73 73 2e 0d 0a 20 20 20 20 20 20 20 20 20  cess...         
7a60: 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
7a70: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21             if (!
7a80: 72 65 61 64 4f 6e 6c 79 29 0d 0a 20 20 20 20 20  readOnly)..     
7a90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
7aa0: 65 74 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20  eturn;....      
7ab0: 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20            throw 
7ac0: 6e 65 77 20 49 6e 76 61 6c 69 64 4f 70 65 72 61  new InvalidOpera
7ad0: 74 69 6f 6e 45 78 63 65 70 74 69 6f 6e 28 29 3b  tionException();
7ae0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
7af0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e  .            #en
7b00: 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20  dregion....     
7b10: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
7b20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7b30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7b40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7b50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
7b60: 20 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f            #regio
7b70: 6e 20 49 44 69 73 70 6f 73 61 62 6c 65 20 22 50  n IDisposable "P
7b80: 61 74 74 65 72 6e 22 20 4d 65 6d 62 65 72 73 0d  attern" Members.
7b90: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69  .            pri
7ba0: 76 61 74 65 20 62 6f 6f 6c 20 64 69 73 70 6f 73  vate bool dispos
7bb0: 65 64 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ed;..           
7bc0: 20 70 72 69 76 61 74 65 20 76 6f 69 64 20 43 68   private void Ch
7bd0: 65 63 6b 44 69 73 70 6f 73 65 64 28 29 20 2f 2a  eckDisposed() /*
7be0: 20 74 68 72 6f 77 20 2a 2f 0d 0a 20 20 20 20 20   throw */..     
7bf0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
7c00: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21 64            if (!d
7c10: 69 73 70 6f 73 65 64 29 0d 0a 20 20 20 20 20 20  isposed)..      
7c20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
7c30: 74 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  turn;....       
7c40: 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e           throw n
7c50: 65 77 20 4f 62 6a 65 63 74 44 69 73 70 6f 73 65  ew ObjectDispose
7c60: 64 45 78 63 65 70 74 69 6f 6e 28 0d 0a 20 20 20  dException(..   
7c70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7c80: 20 74 79 70 65 6f 66 28 4d 6f 63 6b 52 65 67 69   typeof(MockRegi
7c90: 73 74 72 79 29 2e 4e 61 6d 65 29 3b 0d 0a 20 20  stry).Name);..  
7ca0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
7cb0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
7cc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7cd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7ce0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7cf0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
7d00: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
7d10: 69 76 61 74 65 20 2f 2a 20 70 72 6f 74 65 63 74  ivate /* protect
7d20: 65 64 20 76 69 72 74 75 61 6c 20 2a 2f 20 76 6f  ed virtual */ vo
7d30: 69 64 20 44 69 73 70 6f 73 65 28 0d 0a 20 20 20  id Dispose(..   
7d40: 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f               boo
7d50: 6c 20 64 69 73 70 6f 73 69 6e 67 0d 0a 20 20 20  l disposing..   
7d60: 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a               )..
7d70: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
7d80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
7d90: 66 20 28 21 64 69 73 70 6f 73 65 64 29 0d 0a 20  f (!disposed).. 
7da0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
7db0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
7dc0: 20 20 20 20 20 20 69 66 20 28 64 69 73 70 6f 73        if (dispos
7dd0: 69 6e 67 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ing)..          
7de0: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
7df0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7e00: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
7e10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7e20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 20 20 20 20 20  /////////..     
7e30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7e40: 20 20 20 2f 2f 20 64 69 73 70 6f 73 65 20 6d 61     // dispose ma
7e50: 6e 61 67 65 64 20 72 65 73 6f 75 72 63 65 73 20  naged resources 
7e60: 68 65 72 65 2e 2e 2e 0d 0a 20 20 20 20 20 20 20  here.....       
7e70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7e80: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
7e90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7ea0: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
7eb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7ec0: 20 69 66 20 28 63 6c 61 73 73 65 73 52 6f 6f 74   if (classesRoot
7ed0: 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   != null)..     
7ee0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7ef0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
7f00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7f10: 20 20 63 6c 61 73 73 65 73 52 6f 6f 74 2e 43 6c    classesRoot.Cl
7f20: 6f 73 65 28 29 3b 0d 0a 20 20 20 20 20 20 20 20  ose();..        
7f30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7f40: 20 20 20 20 63 6c 61 73 73 65 73 52 6f 6f 74 20      classesRoot 
7f50: 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20  = null;..       
7f60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7f70: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
7f80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
7f90: 20 28 63 75 72 72 65 6e 74 43 6f 6e 66 69 67 20   (currentConfig 
7fa0: 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  != null)..      
7fb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7fc0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
7fd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7fe0: 20 63 75 72 72 65 6e 74 43 6f 6e 66 69 67 2e 43   currentConfig.C
7ff0: 6c 6f 73 65 28 29 3b 0d 0a 20 20 20 20 20 20 20  lose();..       
8000: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8010: 20 20 20 20 20 63 75 72 72 65 6e 74 43 6f 6e 66       currentConf
8020: 69 67 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20  ig = null;..    
8030: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8040: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
8050: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8060: 20 69 66 20 28 63 75 72 72 65 6e 74 55 73 65 72   if (currentUser
8070: 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   != null)..     
8080: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8090: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
80a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
80b0: 20 20 63 75 72 72 65 6e 74 55 73 65 72 2e 43 6c    currentUser.Cl
80c0: 6f 73 65 28 29 3b 0d 0a 20 20 20 20 20 20 20 20  ose();..        
80d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
80e0: 20 20 20 20 63 75 72 72 65 6e 74 55 73 65 72 20      currentUser 
80f0: 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20  = null;..       
8100: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8110: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
8120: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
8130: 20 28 64 79 6e 44 61 74 61 20 21 3d 20 6e 75 6c   (dynData != nul
8140: 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
8150: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
8160: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8170: 20 20 20 20 20 20 20 20 20 20 20 64 79 6e 44 61             dynDa
8180: 74 61 2e 43 6c 6f 73 65 28 29 3b 0d 0a 20 20 20  ta.Close();..   
8190: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
81a0: 20 20 20 20 20 20 20 20 20 64 79 6e 44 61 74 61           dynData
81b0: 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20   = null;..      
81c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
81d0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
81e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
81f0: 66 20 28 6c 6f 63 61 6c 4d 61 63 68 69 6e 65 20  f (localMachine 
8200: 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  != null)..      
8210: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8220: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
8230: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8240: 20 6c 6f 63 61 6c 4d 61 63 68 69 6e 65 2e 43 6c   localMachine.Cl
8250: 6f 73 65 28 29 3b 0d 0a 20 20 20 20 20 20 20 20  ose();..        
8260: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8270: 20 20 20 20 6c 6f 63 61 6c 4d 61 63 68 69 6e 65      localMachine
8280: 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20   = null;..      
8290: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
82a0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
82b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
82c0: 66 20 28 70 65 72 66 6f 72 6d 61 6e 63 65 44 61  f (performanceDa
82d0: 74 61 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ta != null)..   
82e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
82f0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
8300: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8310: 20 20 20 20 70 65 72 66 6f 72 6d 61 6e 63 65 44      performanceD
8320: 61 74 61 2e 43 6c 6f 73 65 28 29 3b 0d 0a 20 20  ata.Close();..  
8330: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8340: 20 20 20 20 20 20 20 20 20 20 70 65 72 66 6f 72            perfor
8350: 6d 61 6e 63 65 44 61 74 61 20 3d 20 6e 75 6c 6c  manceData = null
8360: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
8370: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
8380: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8390: 20 20 20 20 20 20 20 20 69 66 20 28 75 73 65 72          if (user
83a0: 73 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  s != null)..    
83b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
83c0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
83d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
83e0: 20 20 20 75 73 65 72 73 2e 43 6c 6f 73 65 28 29     users.Close()
83f0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
8400: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 75                 u
8410: 73 65 72 73 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20  sers = null;..  
8420: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8430: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
8440: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
8450: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
8460: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
8470: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8480: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 20 20  ////////////..  
8490: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
84a0: 20 20 2f 2f 20 72 65 6c 65 61 73 65 20 75 6e 6d    // release unm
84b0: 61 6e 61 67 65 64 20 72 65 73 6f 75 72 63 65 73  anaged resources
84c0: 20 68 65 72 65 2e 2e 2e 0d 0a 20 20 20 20 20 20   here.....      
84d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
84e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
84f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8500: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
8510: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
8520: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8530: 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 54 68 69      // NOTE: Thi
8540: 73 20 6f 62 6a 65 63 74 20 69 73 20 6e 6f 77 20  s object is now 
8550: 64 69 73 70 6f 73 65 64 2e 0d 0a 20 20 20 20 20  disposed...     
8560: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
8570: 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
8580: 20 20 20 20 20 20 20 64 69 73 70 6f 73 65 64 20         disposed 
8590: 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20  = true;..       
85a0: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
85b0: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
85c0: 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f         #endregio
85d0: 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n....           
85e0: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
85f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8600: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8610: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8620: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
8630: 20 20 20 20 23 72 65 67 69 6f 6e 20 49 44 69 73      #region IDis
8640: 70 6f 73 61 62 6c 65 20 4d 65 6d 62 65 72 73 0d  posable Members.
8650: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
8660: 6c 69 63 20 76 6f 69 64 20 44 69 73 70 6f 73 65  lic void Dispose
8670: 28 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ()..            
8680: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
8690: 20 20 20 44 69 73 70 6f 73 65 28 74 72 75 65 29     Dispose(true)
86a0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
86b0: 20 20 20 47 43 2e 53 75 70 70 72 65 73 73 46 69     GC.SuppressFi
86c0: 6e 61 6c 69 7a 65 28 74 68 69 73 29 3b 0d 0a 20  nalize(this);.. 
86d0: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
86e0: 20 20 20 20 20 20 20 20 20 20 23 65 6e 64 72 65            #endre
86f0: 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20  gion....        
8700: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
8710: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8720: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8730: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8740: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
8750: 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 44         #region D
8760: 65 73 74 72 75 63 74 6f 72 0d 0a 20 20 20 20 20  estructor..     
8770: 20 20 20 20 20 20 20 7e 4d 6f 63 6b 52 65 67 69         ~MockRegi
8780: 73 74 72 79 28 29 0d 0a 20 20 20 20 20 20 20 20  stry()..        
8790: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
87a0: 20 20 20 20 20 20 20 44 69 73 70 6f 73 65 28 66         Dispose(f
87b0: 61 6c 73 65 29 3b 0d 0a 20 20 20 20 20 20 20 20  alse);..        
87c0: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
87d0: 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 20     #endregion.. 
87e0: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
87f0: 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a    #endregion....
8800: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
8810: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8820: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8830: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8840: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
8850: 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69  ...        #regi
8860: 6f 6e 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b  on MockRegistryK
8870: 65 79 20 43 6c 61 73 73 0d 0a 20 20 20 20 20 20  ey Class..      
8880: 20 20 69 6e 74 65 72 6e 61 6c 20 73 65 61 6c 65    internal seale
8890: 64 20 63 6c 61 73 73 20 4d 6f 63 6b 52 65 67 69  d class MockRegi
88a0: 73 74 72 79 4b 65 79 20 3a 20 49 44 69 73 70 6f  stryKey : IDispo
88b0: 73 61 62 6c 65 0d 0a 20 20 20 20 20 20 20 20 7b  sable..        {
88c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 72  ..            #r
88d0: 65 67 69 6f 6e 20 50 72 69 76 61 74 65 20 43 6f  egion Private Co
88e0: 6e 73 74 72 75 63 74 6f 72 73 0d 0a 20 20 20 20  nstructors..    
88f0: 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
8900: 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 28  MockRegistryKey(
8910: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
8920: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
8930: 20 20 77 68 61 74 49 66 20 3d 20 74 72 75 65 3b    whatIf = true;
8940: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
8950: 20 20 72 65 61 64 4f 6e 6c 79 20 3d 20 74 72 75    readOnly = tru
8960: 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
8970: 20 20 20 20 73 61 66 65 20 3d 20 74 72 75 65 3b      safe = true;
8980: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
8990: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e  .            #en
89a0: 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20  dregion....     
89b0: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
89c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
89d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
89e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
89f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
8a00: 20 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f            #regio
8a10: 6e 20 50 75 62 6c 69 63 20 43 6f 6e 73 74 72 75  n Public Constru
8a20: 63 74 6f 72 73 0d 0a 20 20 20 20 20 20 20 20 20  ctors..         
8a30: 20 20 20 70 75 62 6c 69 63 20 4d 6f 63 6b 52 65     public MockRe
8a40: 67 69 73 74 72 79 4b 65 79 28 0d 0a 20 20 20 20  gistryKey(..    
8a50: 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69              Regi
8a60: 73 74 72 79 4b 65 79 20 6b 65 79 0d 0a 20 20 20  stryKey key..   
8a70: 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a               )..
8a80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8a90: 3a 20 74 68 69 73 28 29 0d 0a 20 20 20 20 20 20  : this()..      
8aa0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
8ab0: 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 6b 65           this.ke
8ac0: 79 20 3d 20 6b 65 79 3b 0d 0a 20 20 20 20 20 20  y = key;..      
8ad0: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
8ae0: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
8af0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8b00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8b10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8b20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
8b30: 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
8b40: 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79   MockRegistryKey
8b50: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
8b60: 20 20 20 52 65 67 69 73 74 72 79 4b 65 79 20 6b     RegistryKey k
8b70: 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ey,..           
8b80: 20 20 20 20 20 73 74 72 69 6e 67 20 73 75 62 4b       string subK
8b90: 65 79 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20 20  eyName..        
8ba0: 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
8bb0: 20 20 20 20 20 20 20 20 20 20 20 3a 20 74 68 69             : thi
8bc0: 73 28 6b 65 79 29 0d 0a 20 20 20 20 20 20 20 20  s(key)..        
8bd0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
8be0: 20 20 20 20 20 20 20 74 68 69 73 2e 73 75 62 4b         this.subK
8bf0: 65 79 4e 61 6d 65 20 3d 20 73 75 62 4b 65 79 4e  eyName = subKeyN
8c00: 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ame;..          
8c10: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
8c20: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
8c30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8c40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8c50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8c60: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
8c70: 20 20 20 20 20 20 70 75 62 6c 69 63 20 4d 6f 63        public Moc
8c80: 6b 52 65 67 69 73 74 72 79 4b 65 79 28 0d 0a 20  kRegistryKey(.. 
8c90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52                 R
8ca0: 65 67 69 73 74 72 79 4b 65 79 20 6b 65 79 2c 0d  egistryKey key,.
8cb0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
8cc0: 20 73 74 72 69 6e 67 20 73 75 62 4b 65 79 4e 61   string subKeyNa
8cd0: 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me,..           
8ce0: 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66       bool whatIf
8cf0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
8d00: 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20    )..           
8d10: 20 20 20 20 20 3a 20 74 68 69 73 28 6b 65 79 2c       : this(key,
8d20: 20 73 75 62 4b 65 79 4e 61 6d 65 29 0d 0a 20 20   subKeyName)..  
8d30: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
8d40: 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69               thi
8d50: 73 2e 77 68 61 74 49 66 20 3d 20 77 68 61 74 49  s.whatIf = whatI
8d60: 66 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  f;..            
8d70: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
8d80: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
8d90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8da0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8db0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8dc0: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
8dd0: 20 20 20 20 70 75 62 6c 69 63 20 4d 6f 63 6b 52      public MockR
8de0: 65 67 69 73 74 72 79 4b 65 79 28 0d 0a 20 20 20  egistryKey(..   
8df0: 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67               Reg
8e00: 69 73 74 72 79 4b 65 79 20 6b 65 79 2c 0d 0a 20  istryKey key,.. 
8e10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
8e20: 74 72 69 6e 67 20 73 75 62 4b 65 79 4e 61 6d 65  tring subKeyName
8e30: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
8e40: 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d     bool whatIf,.
8e50: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
8e60: 20 62 6f 6f 6c 20 72 65 61 64 4f 6e 6c 79 0d 0a   bool readOnly..
8e70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8e80: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
8e90: 20 20 20 3a 20 74 68 69 73 28 6b 65 79 2c 20 73     : this(key, s
8ea0: 75 62 4b 65 79 4e 61 6d 65 2c 20 77 68 61 74 49  ubKeyName, whatI
8eb0: 66 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  f)..            
8ec0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
8ed0: 20 20 20 74 68 69 73 2e 72 65 61 64 4f 6e 6c 79     this.readOnly
8ee0: 20 3d 20 72 65 61 64 4f 6e 6c 79 3b 0d 0a 20 20   = readOnly;..  
8ef0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
8f00: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
8f10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8f20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8f30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8f40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
8f50: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
8f60: 62 6c 69 63 20 4d 6f 63 6b 52 65 67 69 73 74 72  blic MockRegistr
8f70: 79 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20  yKey(..         
8f80: 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79 4b         RegistryK
8f90: 65 79 20 6b 65 79 2c 0d 0a 20 20 20 20 20 20 20  ey key,..       
8fa0: 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
8fb0: 73 75 62 4b 65 79 4e 61 6d 65 2c 0d 0a 20 20 20  subKeyName,..   
8fc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f               boo
8fd0: 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20  l whatIf,..     
8fe0: 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
8ff0: 72 65 61 64 4f 6e 6c 79 2c 0d 0a 20 20 20 20 20  readOnly,..     
9000: 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
9010: 73 61 66 65 0d 0a 20 20 20 20 20 20 20 20 20 20  safe..          
9020: 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
9030: 20 20 20 20 20 20 20 20 20 3a 20 74 68 69 73 28           : this(
9040: 6b 65 79 2c 20 73 75 62 4b 65 79 4e 61 6d 65 2c  key, subKeyName,
9050: 20 77 68 61 74 49 66 2c 20 72 65 61 64 4f 6e 6c   whatIf, readOnl
9060: 79 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y)..            
9070: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
9080: 20 20 20 74 68 69 73 2e 73 61 66 65 20 3d 20 73     this.safe = s
9090: 61 66 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  afe;..          
90a0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
90b0: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
90c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
90d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
90e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
90f0: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
9100: 20 20 20 20 20 20 70 75 62 6c 69 63 20 4d 6f 63        public Moc
9110: 6b 52 65 67 69 73 74 72 79 4b 65 79 28 0d 0a 20  kRegistryKey(.. 
9120: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52                 R
9130: 65 67 69 73 74 72 79 4b 65 79 20 6b 65 79 2c 0d  egistryKey key,.
9140: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
9150: 20 62 6f 6f 6c 20 77 68 61 74 49 66 0d 0a 20 20   bool whatIf..  
9160: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d                ).
9170: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
9180: 20 3a 20 74 68 69 73 28 6b 65 79 2c 20 6e 75 6c   : this(key, nul
9190: 6c 2c 20 77 68 61 74 49 66 29 0d 0a 20 20 20 20  l, whatIf)..    
91a0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
91b0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f             // do
91c0: 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20   nothing...     
91d0: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
91e0: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
91f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9200: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9210: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9220: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
9230: 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
9240: 63 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65  c MockRegistryKe
9250: 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y(..            
9260: 20 20 20 20 52 65 67 69 73 74 72 79 4b 65 79 20      RegistryKey 
9270: 6b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  key,..          
9280: 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49        bool whatI
9290: 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  f,..            
92a0: 20 20 20 20 62 6f 6f 6c 20 72 65 61 64 4f 6e 6c      bool readOnl
92b0: 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  y..             
92c0: 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20     )..          
92d0: 20 20 20 20 20 20 3a 20 74 68 69 73 28 6b 65 79        : this(key
92e0: 2c 20 6e 75 6c 6c 2c 20 77 68 61 74 49 66 2c 20  , null, whatIf, 
92f0: 72 65 61 64 4f 6e 6c 79 29 0d 0a 20 20 20 20 20  readOnly)..     
9300: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
9310: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20            // do 
9320: 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20  nothing...      
9330: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
9340: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
9350: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9360: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9370: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9380: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
9390: 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
93a0: 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79   MockRegistryKey
93b0: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
93c0: 20 20 20 52 65 67 69 73 74 72 79 4b 65 79 20 6b     RegistryKey k
93d0: 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ey,..           
93e0: 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66       bool whatIf
93f0: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
9400: 20 20 20 62 6f 6f 6c 20 72 65 61 64 4f 6e 6c 79     bool readOnly
9410: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
9420: 20 20 20 62 6f 6f 6c 20 73 61 66 65 0d 0a 20 20     bool safe..  
9430: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d                ).
9440: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
9450: 20 3a 20 74 68 69 73 28 6b 65 79 2c 20 6e 75 6c   : this(key, nul
9460: 6c 2c 20 77 68 61 74 49 66 2c 20 72 65 61 64 4f  l, whatIf, readO
9470: 6e 6c 79 2c 20 73 61 66 65 29 0d 0a 20 20 20 20  nly, safe)..    
9480: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
9490: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f             // do
94a0: 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20   nothing...     
94b0: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
94c0: 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
94d0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
94e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
94f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9500: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9510: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9520: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
9530: 20 20 20 23 72 65 67 69 6f 6e 20 50 75 62 6c 69     #region Publi
9540: 63 20 4d 65 74 68 6f 64 73 0d 0a 20 20 20 20 20  c Methods..     
9550: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 76 6f         public vo
9560: 69 64 20 43 6c 6f 73 65 28 29 0d 0a 20 20 20 20  id Close()..    
9570: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
9580: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
9590: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
95a0: 2f 20 4e 4f 54 45 3a 20 4e 6f 20 64 69 73 70 6f  / NOTE: No dispo
95b0: 73 65 64 20 63 68 65 63 6b 20 68 65 72 65 20 62  sed check here b
95c0: 65 63 61 75 73 65 20 63 61 6c 6c 69 6e 67 20 74  ecause calling t
95d0: 68 69 73 20 6d 65 74 68 6f 64 0d 0a 20 20 20 20  his method..    
95e0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
95f0: 20 20 20 20 20 73 68 6f 75 6c 64 20 62 65 20 6a       should be j
9600: 75 73 74 20 6c 69 6b 65 20 63 61 6c 6c 69 6e 67  ust like calling
9610: 20 44 69 73 70 6f 73 65 2e 0d 0a 20 20 20 20 20   Dispose...     
9620: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
9630: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 44                 D
9640: 69 73 70 6f 73 65 28 74 72 75 65 29 3b 0d 0a 20  ispose(true);.. 
9650: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
9660: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
9670: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9680: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9690: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
96a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
96b0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
96c0: 75 62 6c 69 63 20 4d 6f 63 6b 52 65 67 69 73 74  ublic MockRegist
96d0: 72 79 4b 65 79 20 43 72 65 61 74 65 53 75 62 4b  ryKey CreateSubK
96e0: 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ey(..           
96f0: 20 20 20 20 20 73 74 72 69 6e 67 20 73 75 62 4b       string subK
9700: 65 79 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20 20  eyName..        
9710: 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
9720: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
9730: 20 20 20 20 20 20 20 20 20 20 43 68 65 63 6b 44            CheckD
9740: 69 73 70 6f 73 65 64 28 29 3b 0d 0a 20 20 20 20  isposed();..    
9750: 20 20 20 20 20 20 20 20 20 20 20 20 43 68 65 63              Chec
9760: 6b 52 65 61 64 4f 6e 6c 79 28 29 3b 0d 0a 0d 0a  kReadOnly();....
9770: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9780: 69 66 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29  if (key == null)
9790: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
97a0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 75 6c        return nul
97b0: 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  l;....          
97c0: 20 20 20 20 20 20 69 66 20 28 77 68 61 74 49 66        if (whatIf
97d0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
97e0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
97f0: 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
9800: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9810: 20 20 2f 2f 20 48 41 43 4b 3a 20 41 74 74 65 6d    // HACK: Attem
9820: 70 74 20 74 6f 20 6f 70 65 6e 20 74 68 65 20 73  pt to open the s
9830: 70 65 63 69 66 69 65 64 20 73 75 62 2d 6b 65 79  pecified sub-key
9840: 2e 20 20 49 66 20 74 68 69 73 0d 0a 20 20 20 20  .  If this..    
9850: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9860: 2f 2f 20 20 20 20 20 20 20 66 61 69 6c 73 2c 20  //       fails, 
9870: 77 65 20 77 69 6c 6c 20 73 69 6d 70 6c 79 20 72  we will simply r
9880: 65 74 75 72 6e 20 74 68 65 20 77 72 61 70 70 65  eturn the wrappe
9890: 64 20 72 6f 6f 74 20 6b 65 79 0d 0a 20 20 20 20  d root key..    
98a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
98b0: 2f 2f 20 20 20 20 20 20 20 69 74 73 65 6c 66 20  //       itself 
98c0: 73 69 6e 63 65 20 6e 6f 20 77 72 69 74 65 73 20  since no writes 
98d0: 61 72 65 20 61 6c 6c 6f 77 65 64 20 69 6e 20 22  are allowed in "
98e0: 77 68 61 74 2d 69 66 22 0d 0a 20 20 20 20 20 20  what-if"..      
98f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
9900: 20 20 20 20 20 20 20 6d 6f 64 65 20 61 6e 79 68         mode anyh
9910: 6f 77 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ow...           
9920: 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
9930: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9940: 20 52 65 67 69 73 74 72 79 4b 65 79 20 73 75 62   RegistryKey sub
9950: 4b 65 79 20 3d 20 6b 65 79 2e 4f 70 65 6e 53 75  Key = key.OpenSu
9960: 62 4b 65 79 28 73 75 62 4b 65 79 4e 61 6d 65 29  bKey(subKeyName)
9970: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
9980: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
9990: 28 73 75 62 4b 65 79 20 21 3d 20 6e 75 6c 6c 29  (subKey != null)
99a0: 20 3f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   ?..            
99b0: 20 20 20 20 20 20 20 20 20 20 20 20 6e 65 77 20              new 
99c0: 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 28  MockRegistryKey(
99d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
99e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
99f0: 20 20 73 75 62 4b 65 79 2c 20 77 68 61 74 49 66    subKey, whatIf
9a00: 2c 20 72 65 61 64 4f 6e 6c 79 2c 20 73 61 66 65  , readOnly, safe
9a10: 29 20 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ) :..           
9a20: 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 65 77               new
9a30: 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79   MockRegistryKey
9a40: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
9a50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9a60: 20 20 20 6b 65 79 2c 20 73 75 62 4b 65 79 4e 61     key, subKeyNa
9a70: 6d 65 2c 20 77 68 61 74 49 66 2c 20 72 65 61 64  me, whatIf, read
9a80: 4f 6e 6c 79 2c 20 73 61 66 65 29 3b 0d 0a 20 20  Only, safe);..  
9a90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
9aa0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
9ab0: 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20   else..         
9ac0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
9ad0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
9ae0: 74 75 72 6e 20 6e 65 77 20 4d 6f 63 6b 52 65 67  turn new MockReg
9af0: 69 73 74 72 79 4b 65 79 28 0d 0a 20 20 20 20 20  istryKey(..     
9b00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9b10: 20 20 20 6b 65 79 2e 43 72 65 61 74 65 53 75 62     key.CreateSub
9b20: 4b 65 79 28 73 75 62 4b 65 79 4e 61 6d 65 29 2c  Key(subKeyName),
9b30: 20 77 68 61 74 49 66 2c 20 72 65 61 64 4f 6e 6c   whatIf, readOnl
9b40: 79 2c 20 73 61 66 65 29 3b 0d 0a 20 20 20 20 20  y, safe);..     
9b50: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
9b60: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
9b70: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
9b80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9b90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9ba0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9bb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
9bc0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
9bd0: 62 6c 69 63 20 76 6f 69 64 20 44 65 6c 65 74 65  blic void Delete
9be0: 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20 20  SubKey(..       
9bf0: 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
9c00: 73 75 62 4b 65 79 4e 61 6d 65 2c 0d 0a 20 20 20  subKeyName,..   
9c10: 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f               boo
9c20: 6c 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67  l throwOnMissing
9c30: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
9c40: 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20    )..           
9c50: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
9c60: 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65      CheckDispose
9c70: 64 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  d();..          
9c80: 20 20 20 20 20 20 43 68 65 63 6b 52 65 61 64 4f        CheckReadO
9c90: 6e 6c 79 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  nly();....      
9ca0: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6b 65            if (ke
9cb0: 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  y == null)..    
9cc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9cd0: 72 65 74 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20  return;....     
9ce0: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21             if (!
9cf0: 77 68 61 74 49 66 29 0d 0a 20 20 20 20 20 20 20  whatIf)..       
9d00: 20 20 20 20 20 20 20 20 20 20 20 20 20 6b 65 79               key
9d10: 2e 44 65 6c 65 74 65 53 75 62 4b 65 79 28 73 75  .DeleteSubKey(su
9d20: 62 4b 65 79 4e 61 6d 65 2c 20 74 68 72 6f 77 4f  bKeyName, throwO
9d30: 6e 4d 69 73 73 69 6e 67 29 3b 0d 0a 20 20 20 20  nMissing);..    
9d40: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
9d50: 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
9d60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9d70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9d80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9d90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
9da0: 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
9db0: 69 63 20 76 6f 69 64 20 44 65 6c 65 74 65 53 75  ic void DeleteSu
9dc0: 62 4b 65 79 54 72 65 65 28 0d 0a 20 20 20 20 20  bKeyTree(..     
9dd0: 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
9de0: 67 20 73 75 62 4b 65 79 4e 61 6d 65 0d 0a 20 20  g subKeyName..  
9df0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d                ).
9e00: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
9e10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9e20: 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b  CheckDisposed();
9e30: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
9e40: 20 20 43 68 65 63 6b 52 65 61 64 4f 6e 6c 79 28    CheckReadOnly(
9e50: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
9e60: 20 20 20 20 20 20 69 66 20 28 6b 65 79 20 3d 3d        if (key ==
9e70: 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
9e80: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
9e90: 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  rn;....         
9ea0: 20 20 20 20 20 20 20 69 66 20 28 21 77 68 61 74         if (!what
9eb0: 49 66 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  If)..           
9ec0: 20 20 20 20 20 20 20 20 20 6b 65 79 2e 44 65 6c           key.Del
9ed0: 65 74 65 53 75 62 4b 65 79 54 72 65 65 28 73 75  eteSubKeyTree(su
9ee0: 62 4b 65 79 4e 61 6d 65 29 3b 0d 0a 20 20 20 20  bKeyName);..    
9ef0: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
9f00: 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
9f10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9f20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9f30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9f40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
9f50: 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
9f60: 69 63 20 76 6f 69 64 20 44 65 6c 65 74 65 56 61  ic void DeleteVa
9f70: 6c 75 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  lue(..          
9f80: 20 20 20 20 20 20 73 74 72 69 6e 67 20 6e 61 6d        string nam
9f90: 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
9fa0: 20 20 20 20 62 6f 6f 6c 20 74 68 72 6f 77 4f 6e      bool throwOn
9fb0: 4d 69 73 73 69 6e 67 0d 0a 20 20 20 20 20 20 20  Missing..       
9fc0: 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
9fd0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
9fe0: 20 20 20 20 20 20 20 20 20 20 20 43 68 65 63 6b             Check
9ff0: 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 20 20 20  Disposed();..   
a000: 20 20 20 20 20 20 20 20 20 20 20 20 20 43 68 65               Che
a010: 63 6b 52 65 61 64 4f 6e 6c 79 28 29 3b 0d 0a 0d  ckReadOnly();...
a020: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
a030: 20 69 66 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c   if (key == null
a040: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
a050: 20 20 20 20 20 20 20 72 65 74 75 72 6e 3b 0d 0a         return;..
a060: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
a070: 20 20 69 66 20 28 21 77 68 61 74 49 66 29 0d 0a    if (!whatIf)..
a080: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a090: 20 20 20 20 6b 65 79 2e 44 65 6c 65 74 65 56 61      key.DeleteVa
a0a0: 6c 75 65 28 6e 61 6d 65 2c 20 74 68 72 6f 77 4f  lue(name, throwO
a0b0: 6e 4d 69 73 73 69 6e 67 29 3b 0d 0a 20 20 20 20  nMissing);..    
a0c0: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
a0d0: 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
a0e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a0f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a100: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a110: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
a120: 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
a130: 69 63 20 73 74 72 69 6e 67 5b 5d 20 47 65 74 53  ic string[] GetS
a140: 75 62 4b 65 79 4e 61 6d 65 73 28 29 0d 0a 20 20  ubKeyNames()..  
a150: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
a160: 20 20 20 20 20 20 20 20 20 20 20 20 20 43 68 65               Che
a170: 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 0d  ckDisposed();...
a180: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
a190: 20 69 66 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c   if (key == null
a1a0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
a1b0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 75         return nu
a1c0: 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ll;....         
a1d0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6b 65         return ke
a1e0: 79 2e 47 65 74 53 75 62 4b 65 79 4e 61 6d 65 73  y.GetSubKeyNames
a1f0: 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ();..           
a200: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
a210: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
a220: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a230: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a240: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a250: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
a260: 20 20 20 20 20 70 75 62 6c 69 63 20 6f 62 6a 65       public obje
a270: 63 74 20 47 65 74 56 61 6c 75 65 28 0d 0a 20 20  ct GetValue(..  
a280: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
a290: 72 69 6e 67 20 6e 61 6d 65 2c 0d 0a 20 20 20 20  ring name,..    
a2a0: 20 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65              obje
a2b0: 63 74 20 64 65 66 61 75 6c 74 56 61 6c 75 65 0d  ct defaultValue.
a2c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
a2d0: 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   )..            
a2e0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
a2f0: 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64     CheckDisposed
a300: 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ();....         
a310: 20 20 20 20 20 20 20 69 66 20 28 6b 65 79 20 3d         if (key =
a320: 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
a330: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
a340: 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20  urn null;....   
a350: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
a360: 75 72 6e 20 6b 65 79 2e 47 65 74 56 61 6c 75 65  urn key.GetValue
a370: 28 6e 61 6d 65 2c 20 64 65 66 61 75 6c 74 56 61  (name, defaultVa
a380: 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  lue);..         
a390: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
a3a0: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
a3b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a3c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a3d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a3e0: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
a3f0: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 4d 6f         public Mo
a400: 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 4f 70  ckRegistryKey Op
a410: 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20  enSubKey(..     
a420: 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
a430: 67 20 73 75 62 4b 65 79 4e 61 6d 65 0d 0a 20 20  g subKeyName..  
a440: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d                ).
a450: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
a460: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a470: 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b  CheckDisposed();
a480: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
a490: 20 20 20 20 72 65 74 75 72 6e 20 4f 70 65 6e 53      return OpenS
a4a0: 75 62 4b 65 79 28 73 75 62 4b 65 79 4e 61 6d 65  ubKey(subKeyName
a4b0: 2c 20 66 61 6c 73 65 29 3b 0d 0a 20 20 20 20 20  , false);..     
a4c0: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
a4d0: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
a4e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a4f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a500: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a510: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
a520: 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
a530: 63 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65  c MockRegistryKe
a540: 79 20 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20  y OpenSubKey(.. 
a550: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
a560: 74 72 69 6e 67 20 73 75 62 4b 65 79 4e 61 6d 65  tring subKeyName
a570: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
a580: 20 20 20 62 6f 6f 6c 20 77 72 69 74 61 62 6c 65     bool writable
a590: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
a5a0: 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20    )..           
a5b0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
a5c0: 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65      CheckDispose
a5d0: 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  d();....        
a5e0: 20 20 20 20 20 20 20 20 69 66 20 28 77 72 69 74          if (writ
a5f0: 61 62 6c 65 29 0d 0a 20 20 20 20 20 20 20 20 20  able)..         
a600: 20 20 20 20 20 20 20 20 20 20 20 43 68 65 63 6b             Check
a610: 52 65 61 64 4f 6e 6c 79 28 29 3b 0d 0a 0d 0a 20  ReadOnly();.... 
a620: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
a630: 66 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d  f (key == null).
a640: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
a650: 20 20 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c       return null
a660: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
a670: 20 20 20 20 20 52 65 67 69 73 74 72 79 4b 65 79       RegistryKey
a680: 20 73 75 62 4b 65 79 20 3d 20 6b 65 79 2e 4f 70   subKey = key.Op
a690: 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20  enSubKey(..     
a6a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
a6b0: 75 62 4b 65 79 4e 61 6d 65 2c 20 77 68 61 74 49  ubKeyName, whatI
a6c0: 66 20 3f 20 66 61 6c 73 65 20 3a 20 77 72 69 74  f ? false : writ
a6d0: 61 62 6c 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  able);....      
a6e0: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
a6f0: 20 28 73 75 62 4b 65 79 20 21 3d 20 6e 75 6c 6c   (subKey != null
a700: 29 20 3f 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ) ?..           
a710: 20 20 20 20 20 20 20 20 20 6e 65 77 20 4d 6f 63           new Moc
a720: 6b 52 65 67 69 73 74 72 79 4b 65 79 28 73 75 62  kRegistryKey(sub
a730: 4b 65 79 2c 20 77 68 61 74 49 66 2c 20 72 65 61  Key, whatIf, rea
a740: 64 4f 6e 6c 79 2c 20 73 61 66 65 29 20 3a 20 6e  dOnly, safe) : n
a750: 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ull;..          
a760: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
a770: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
a780: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a790: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a7a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a7b0: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
a7c0: 20 20 20 20 20 20 70 75 62 6c 69 63 20 76 6f 69        public voi
a7d0: 64 20 53 65 74 56 61 6c 75 65 28 0d 0a 20 20 20  d SetValue(..   
a7e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72               str
a7f0: 69 6e 67 20 6e 61 6d 65 2c 0d 0a 20 20 20 20 20  ing name,..     
a800: 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63             objec
a810: 74 20 76 61 6c 75 65 0d 0a 20 20 20 20 20 20 20  t value..       
a820: 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
a830: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
a840: 20 20 20 20 20 20 20 20 20 20 20 43 68 65 63 6b             Check
a850: 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 20 20 20  Disposed();..   
a860: 20 20 20 20 20 20 20 20 20 20 20 20 20 43 68 65               Che
a870: 63 6b 52 65 61 64 4f 6e 6c 79 28 29 3b 0d 0a 0d  ckReadOnly();...
a880: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
a890: 20 69 66 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c   if (key == null
a8a0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
a8b0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 3b 0d 0a         return;..
a8c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
a8d0: 20 20 69 66 20 28 21 77 68 61 74 49 66 29 0d 0a    if (!whatIf)..
a8e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a8f0: 20 20 20 20 6b 65 79 2e 53 65 74 56 61 6c 75 65      key.SetValue
a900: 28 6e 61 6d 65 2c 20 76 61 6c 75 65 29 3b 0d 0a  (name, value);..
a910: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
a920: 20 20 20 20 20 20 20 20 20 20 20 23 65 6e 64 72             #endr
a930: 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20  egion....       
a940: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
a950: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a960: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a970: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a980: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
a990: 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20          #region 
a9a0: 50 75 62 6c 69 63 20 50 72 6f 70 65 72 74 69 65  Public Propertie
a9b0: 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  s..            p
a9c0: 75 62 6c 69 63 20 73 74 72 69 6e 67 20 4e 61 6d  ublic string Nam
a9d0: 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  e..            {
a9e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
a9f0: 20 20 67 65 74 0d 0a 20 20 20 20 20 20 20 20 20    get..         
aa00: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
aa10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43 68                Ch
aa20: 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a  eckDisposed();..
aa30: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
aa40: 20 20 20 20 20 20 69 66 20 28 6b 65 79 20 3d 3d        if (key ==
aa50: 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
aa60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
aa70: 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a  return null;....
aa80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
aa90: 20 20 20 20 72 65 74 75 72 6e 20 21 53 74 72 69      return !Stri
aaa0: 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79  ng.IsNullOrEmpty
aab0: 28 73 75 62 4b 65 79 4e 61 6d 65 29 20 3f 0d 0a  (subKeyName) ?..
aac0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
aad0: 20 20 20 20 20 20 20 20 53 74 72 69 6e 67 2e 46          String.F
aae0: 6f 72 6d 61 74 28 22 7b 30 7d 5c 5c 7b 31 7d 22  ormat("{0}\\{1}"
aaf0: 2c 20 6b 65 79 2e 4e 61 6d 65 2c 20 73 75 62 4b  , key.Name, subK
ab00: 65 79 4e 61 6d 65 29 20 3a 0d 0a 20 20 20 20 20  eyName) :..     
ab10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ab20: 20 20 20 6b 65 79 2e 4e 61 6d 65 3b 0d 0a 20 20     key.Name;..  
ab30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
ab40: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
ab50: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
ab60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ab70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ab80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ab90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
aba0: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
abb0: 20 70 72 69 76 61 74 65 20 52 65 67 69 73 74 72   private Registr
abc0: 79 4b 65 79 20 6b 65 79 3b 0d 0a 20 20 20 20 20  yKey key;..     
abd0: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 52 65         public Re
abe0: 67 69 73 74 72 79 4b 65 79 20 4b 65 79 0d 0a 20  gistryKey Key.. 
abf0: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
ac00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65                ge
ac10: 74 20 7b 20 43 68 65 63 6b 44 69 73 70 6f 73 65  t { CheckDispose
ac20: 64 28 29 3b 20 43 68 65 63 6b 53 61 66 65 28 29  d(); CheckSafe()
ac30: 3b 20 72 65 74 75 72 6e 20 6b 65 79 3b 20 7d 0d  ; return key; }.
ac40: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
ac50: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
ac60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ac70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ac80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ac90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
aca0: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
acb0: 20 70 72 69 76 61 74 65 20 73 74 72 69 6e 67 20   private string 
acc0: 73 75 62 4b 65 79 4e 61 6d 65 3b 0d 0a 20 20 20  subKeyName;..   
acd0: 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
ace0: 73 74 72 69 6e 67 20 53 75 62 4b 65 79 4e 61 6d  string SubKeyNam
acf0: 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  e..            {
ad00: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
ad10: 20 20 67 65 74 20 7b 20 43 68 65 63 6b 44 69 73    get { CheckDis
ad20: 70 6f 73 65 64 28 29 3b 20 72 65 74 75 72 6e 20  posed(); return 
ad30: 73 75 62 4b 65 79 4e 61 6d 65 3b 20 7d 0d 0a 20  subKeyName; }.. 
ad40: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
ad50: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
ad60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ad70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ad80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ad90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
ada0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
adb0: 72 69 76 61 74 65 20 62 6f 6f 6c 20 77 68 61 74  rivate bool what
adc0: 49 66 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  If;..           
add0: 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 57 68 61   public bool Wha
ade0: 74 49 66 0d 0a 20 20 20 20 20 20 20 20 20 20 20  tIf..           
adf0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
ae00: 20 20 20 20 67 65 74 20 7b 20 43 68 65 63 6b 44      get { CheckD
ae10: 69 73 70 6f 73 65 64 28 29 3b 20 72 65 74 75 72  isposed(); retur
ae20: 6e 20 77 68 61 74 49 66 3b 20 7d 0d 0a 20 20 20  n whatIf; }..   
ae30: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
ae40: 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
ae50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ae60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ae70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ae80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
ae90: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69  .            pri
aea0: 76 61 74 65 20 62 6f 6f 6c 20 72 65 61 64 4f 6e  vate bool readOn
aeb0: 6c 79 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ly;..           
aec0: 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 52 65 61   public bool Rea
aed0: 64 4f 6e 6c 79 0d 0a 20 20 20 20 20 20 20 20 20  dOnly..         
aee0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
aef0: 20 20 20 20 20 20 67 65 74 20 7b 20 43 68 65 63        get { Chec
af00: 6b 44 69 73 70 6f 73 65 64 28 29 3b 20 72 65 74  kDisposed(); ret
af10: 75 72 6e 20 72 65 61 64 4f 6e 6c 79 3b 20 7d 0d  urn readOnly; }.
af20: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
af30: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
af40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
af50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
af60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
af70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
af80: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
af90: 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 73 61 66   public bool saf
afa0: 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
afb0: 70 75 62 6c 69 63 20 62 6f 6f 6c 20 53 61 66 65  public bool Safe
afc0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
afd0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
afe0: 20 67 65 74 20 7b 20 43 68 65 63 6b 44 69 73 70   get { CheckDisp
aff0: 6f 73 65 64 28 29 3b 20 72 65 74 75 72 6e 20 73  osed(); return s
b000: 61 66 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  afe; }..        
b010: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
b020: 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
b030: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
b040: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b050: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b060: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b070: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b080: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
b090: 23 72 65 67 69 6f 6e 20 50 72 69 76 61 74 65 20  #region Private 
b0a0: 4d 65 74 68 6f 64 73 0d 0a 20 20 20 20 20 20 20  Methods..       
b0b0: 20 20 20 20 20 70 72 69 76 61 74 65 20 76 6f 69       private voi
b0c0: 64 20 43 68 65 63 6b 52 65 61 64 4f 6e 6c 79 28  d CheckReadOnly(
b0d0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
b0e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
b0f0: 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
b100: 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 49        // NOTE: I
b110: 6e 20 22 72 65 61 64 2d 6f 6e 6c 79 22 20 6d 6f  n "read-only" mo
b120: 64 65 2c 20 77 65 20 64 69 73 61 6c 6c 6f 77 20  de, we disallow 
b130: 61 6c 6c 20 77 72 69 74 65 20 61 63 63 65 73 73  all write access
b140: 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
b150: 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
b160: 20 20 20 20 20 20 20 69 66 20 28 21 72 65 61 64         if (!read
b170: 4f 6e 6c 79 29 0d 0a 20 20 20 20 20 20 20 20 20  Only)..         
b180: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
b190: 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  n;....          
b1a0: 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20        throw new 
b1b0: 49 6e 76 61 6c 69 64 4f 70 65 72 61 74 69 6f 6e  InvalidOperation
b1c0: 45 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 20 20  Exception();..  
b1d0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
b1e0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
b1f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b200: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b210: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b220: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
b230: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
b240: 69 76 61 74 65 20 76 6f 69 64 20 43 68 65 63 6b  ivate void Check
b250: 53 61 66 65 28 29 0d 0a 20 20 20 20 20 20 20 20  Safe()..        
b260: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
b270: 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
b280: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f             // NO
b290: 54 45 3a 20 49 6e 20 22 73 61 66 65 22 20 6d 6f  TE: In "safe" mo
b2a0: 64 65 2c 20 77 65 20 64 69 73 61 6c 6c 6f 77 20  de, we disallow 
b2b0: 61 6c 6c 20 64 69 72 65 63 74 20 61 63 63 65 73  all direct acces
b2c0: 73 20 74 6f 20 74 68 65 0d 0a 20 20 20 20 20 20  s to the..      
b2d0: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
b2e0: 20 20 20 63 6f 6e 74 61 69 6e 65 64 20 72 65 67     contained reg
b2f0: 69 73 74 72 79 20 6b 65 79 2e 0d 0a 20 20 20 20  istry key...    
b300: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
b310: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b320: 69 66 20 28 21 73 61 66 65 29 0d 0a 20 20 20 20  if (!safe)..    
b330: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b340: 72 65 74 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20  return;....     
b350: 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77             throw
b360: 20 6e 65 77 20 49 6e 76 61 6c 69 64 4f 70 65 72   new InvalidOper
b370: 61 74 69 6f 6e 45 78 63 65 70 74 69 6f 6e 28 29  ationException()
b380: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
b390: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 65  ..            #e
b3a0: 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20  ndregion....    
b3b0: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
b3c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b3d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b3e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b3f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
b400: 20 20 20 20 20 20 20 20 20 20 20 23 72 65 67 69             #regi
b410: 6f 6e 20 53 79 73 74 65 6d 2e 4f 62 6a 65 63 74  on System.Object
b420: 20 4f 76 65 72 72 69 64 65 73 0d 0a 20 20 20 20   Overrides..    
b430: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 6f          public o
b440: 76 65 72 72 69 64 65 20 73 74 72 69 6e 67 20 54  verride string T
b450: 6f 53 74 72 69 6e 67 28 29 0d 0a 20 20 20 20 20  oString()..     
b460: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
b470: 20 20 20 20 20 20 20 20 20 20 43 68 65 63 6b 44            CheckD
b480: 69 73 70 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20 20  isposed();....  
b490: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
b4a0: 74 75 72 6e 20 74 68 69 73 2e 4e 61 6d 65 3b 0d  turn this.Name;.
b4b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
b4c0: 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e 64              #end
b4d0: 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20  region....      
b4e0: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
b4f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b500: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b510: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b520: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
b530: 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e           #region
b540: 20 49 6d 70 6c 69 63 69 74 20 43 6f 6e 76 65 72   Implicit Conver
b550: 73 69 6f 6e 20 4f 70 65 72 61 74 6f 72 73 0d 0a  sion Operators..
b560: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
b570: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 42              // B
b580: 55 47 42 55 47 3a 20 52 65 6d 6f 76 65 20 6d 65  UGBUG: Remove me
b590: 3f 20 20 54 68 69 73 20 73 68 6f 75 6c 64 20 62  ?  This should b
b5a0: 65 20 73 61 66 65 20 62 65 63 61 75 73 65 20 69  e safe because i
b5b0: 6e 20 22 77 68 61 74 2d 69 66 22 0d 0a 20 20 20  n "what-if"..   
b5c0: 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
b5d0: 20 20 20 20 6d 6f 64 65 20 61 6c 6c 20 6b 65 79      mode all key
b5e0: 73 20 61 72 65 20 6f 70 65 6e 65 64 20 72 65 61  s are opened rea
b5f0: 64 2d 6f 6e 6c 79 2e 0d 0a 20 20 20 20 20 20 20  d-only...       
b600: 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
b610: 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74       public stat
b620: 69 63 20 69 6d 70 6c 69 63 69 74 20 6f 70 65 72  ic implicit oper
b630: 61 74 6f 72 20 52 65 67 69 73 74 72 79 4b 65 79  ator RegistryKey
b640: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
b650: 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b     MockRegistryK
b660: 65 79 20 6b 65 79 0d 0a 20 20 20 20 20 20 20 20  ey key..        
b670: 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
b680: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
b690: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
b6a0: 20 28 6b 65 79 20 21 3d 20 6e 75 6c 6c 29 20 3f   (key != null) ?
b6b0: 20 6b 65 79 2e 4b 65 79 20 3a 20 6e 75 6c 6c 3b   key.Key : null;
b6c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
b6d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e  .            #en
b6e0: 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20  dregion....     
b6f0: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
b700: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b710: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b720: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b730: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
b740: 20 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f            #regio
b750: 6e 20 49 44 69 73 70 6f 73 61 62 6c 65 20 22 50  n IDisposable "P
b760: 61 74 74 65 72 6e 22 20 4d 65 6d 62 65 72 73 0d  attern" Members.
b770: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69  .            pri
b780: 76 61 74 65 20 62 6f 6f 6c 20 64 69 73 70 6f 73  vate bool dispos
b790: 65 64 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ed;..           
b7a0: 20 70 72 69 76 61 74 65 20 76 6f 69 64 20 43 68   private void Ch
b7b0: 65 63 6b 44 69 73 70 6f 73 65 64 28 29 20 2f 2a  eckDisposed() /*
b7c0: 20 74 68 72 6f 77 20 2a 2f 0d 0a 20 20 20 20 20   throw */..     
b7d0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
b7e0: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21 64            if (!d
b7f0: 69 73 70 6f 73 65 64 29 0d 0a 20 20 20 20 20 20  isposed)..      
b800: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
b810: 74 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  turn;....       
b820: 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e           throw n
b830: 65 77 20 4f 62 6a 65 63 74 44 69 73 70 6f 73 65  ew ObjectDispose
b840: 64 45 78 63 65 70 74 69 6f 6e 28 0d 0a 20 20 20  dException(..   
b850: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b860: 20 74 79 70 65 6f 66 28 4d 6f 63 6b 52 65 67 69   typeof(MockRegi
b870: 73 74 72 79 4b 65 79 29 2e 4e 61 6d 65 29 3b 0d  stryKey).Name);.
b880: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
b890: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
b8a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b8b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b8c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b8d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b8e0: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
b8f0: 20 70 72 69 76 61 74 65 20 2f 2a 20 70 72 6f 74   private /* prot
b900: 65 63 74 65 64 20 76 69 72 74 75 61 6c 20 2a 2f  ected virtual */
b910: 20 76 6f 69 64 20 44 69 73 70 6f 73 65 28 0d 0a   void Dispose(..
b920: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b930: 62 6f 6f 6c 20 64 69 73 70 6f 73 69 6e 67 0d 0a  bool disposing..
b940: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b950: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
b960: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
b970: 20 20 69 66 20 28 21 64 69 73 70 6f 73 65 64 29    if (!disposed)
b980: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
b990: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
b9a0: 20 20 20 20 20 20 20 20 20 69 66 20 28 64 69 73           if (dis
b9b0: 70 6f 73 69 6e 67 29 0d 0a 20 20 20 20 20 20 20  posing)..       
b9c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
b9d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b9e0: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
b9f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ba00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 20 20  ////////////..  
ba10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ba20: 20 20 20 20 20 20 2f 2f 20 64 69 73 70 6f 73 65        // dispose
ba30: 20 6d 61 6e 61 67 65 64 20 72 65 73 6f 75 72 63   managed resourc
ba40: 65 73 20 68 65 72 65 2e 2e 2e 0d 0a 20 20 20 20  es here.....    
ba50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ba60: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
ba70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ba80: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
ba90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
baa0: 20 20 20 20 69 66 20 28 6b 65 79 20 21 3d 20 6e      if (key != n
bab0: 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
bac0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
bad0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
bae0: 20 20 20 20 20 20 20 20 20 20 20 20 20 6b 65 79               key
baf0: 2e 43 6c 6f 73 65 28 29 3b 0d 0a 20 20 20 20 20  .Close();..     
bb00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bb10: 20 20 20 20 20 20 20 6b 65 79 20 3d 20 6e 75 6c         key = nul
bb20: 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l;..            
bb30: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
bb40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bb50: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
bb60: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
bb70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bb80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bb90: 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
bba0: 20 20 20 20 20 20 20 20 2f 2f 20 72 65 6c 65 61          // relea
bbb0: 73 65 20 75 6e 6d 61 6e 61 67 65 64 20 72 65 73  se unmanaged res
bbc0: 6f 75 72 63 65 73 20 68 65 72 65 2e 2e 2e 0d 0a  ources here.....
bbd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bbe0: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
bbf0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bc00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
bc10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bc20: 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
bc30: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54            // NOT
bc40: 45 3a 20 54 68 69 73 20 6f 62 6a 65 63 74 20 69  E: This object i
bc50: 73 20 6e 6f 77 20 64 69 73 70 6f 73 65 64 2e 0d  s now disposed..
bc60: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
bc70: 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
bc80: 20 20 20 20 20 20 20 20 20 20 20 20 20 64 69 73               dis
bc90: 70 6f 73 65 64 20 3d 20 74 72 75 65 3b 0d 0a 20  posed = true;.. 
bca0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
bcb0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
bcc0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e  .            #en
bcd0: 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20  dregion....     
bce0: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
bcf0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bd00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bd10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bd20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
bd30: 20 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f            #regio
bd40: 6e 20 49 44 69 73 70 6f 73 61 62 6c 65 20 4d 65  n IDisposable Me
bd50: 6d 62 65 72 73 0d 0a 20 20 20 20 20 20 20 20 20  mbers..         
bd60: 20 20 20 70 75 62 6c 69 63 20 76 6f 69 64 20 44     public void D
bd70: 69 73 70 6f 73 65 28 29 0d 0a 20 20 20 20 20 20  ispose()..      
bd80: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
bd90: 20 20 20 20 20 20 20 20 20 44 69 73 70 6f 73 65           Dispose
bda0: 28 74 72 75 65 29 3b 0d 0a 20 20 20 20 20 20 20  (true);..       
bdb0: 20 20 20 20 20 20 20 20 20 47 43 2e 53 75 70 70           GC.Supp
bdc0: 72 65 73 73 46 69 6e 61 6c 69 7a 65 28 74 68 69  ressFinalize(thi
bdd0: 73 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s);..           
bde0: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
bdf0: 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20  #endregion....  
be00: 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
be10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
be20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
be30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
be40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
be50: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 72 65  .            #re
be60: 67 69 6f 6e 20 44 65 73 74 72 75 63 74 6f 72 0d  gion Destructor.
be70: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7e 4d 6f  .            ~Mo
be80: 63 6b 52 65 67 69 73 74 72 79 4b 65 79 28 29 0d  ckRegistryKey().
be90: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
bea0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
beb0: 44 69 73 70 6f 73 65 28 66 61 6c 73 65 29 3b 0d  Dispose(false);.
bec0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
bed0: 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e 64              #end
bee0: 72 65 67 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20  region..        
bef0: 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72  }..        #endr
bf00: 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20  egion....       
bf10: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
bf20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bf30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bf40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bf50: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
bf60: 20 20 20 20 23 72 65 67 69 6f 6e 20 52 65 67 69      #region Regi
bf70: 73 74 72 79 48 65 6c 70 65 72 20 43 6c 61 73 73  stryHelper Class
bf80: 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
bf90: 65 20 73 74 61 74 69 63 20 63 6c 61 73 73 20 52  e static class R
bfa0: 65 67 69 73 74 72 79 48 65 6c 70 65 72 0d 0a 20  egistryHelper.. 
bfb0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
bfc0: 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50 75        #region Pu
bfd0: 62 6c 69 63 20 53 74 61 74 69 63 20 50 72 6f 70  blic Static Prop
bfe0: 65 72 74 69 65 73 0d 0a 20 20 20 20 20 20 20 20  erties..        
bff0: 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74      private stat
c000: 69 63 20 69 6e 74 20 73 75 62 4b 65 79 73 43 72  ic int subKeysCr
c010: 65 61 74 65 64 3b 0d 0a 20 20 20 20 20 20 20 20  eated;..        
c020: 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69      public stati
c030: 63 20 69 6e 74 20 53 75 62 4b 65 79 73 43 72 65  c int SubKeysCre
c040: 61 74 65 64 0d 0a 20 20 20 20 20 20 20 20 20 20  ated..          
c050: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
c060: 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72       get { retur
c070: 6e 20 73 75 62 4b 65 79 73 43 72 65 61 74 65 64  n subKeysCreated
c080: 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
c090: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
c0a0: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
c0b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c0c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c0d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c0e0: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
c0f0: 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61       private sta
c100: 74 69 63 20 69 6e 74 20 73 75 62 4b 65 79 73 44  tic int subKeysD
c110: 65 6c 65 74 65 64 3b 0d 0a 20 20 20 20 20 20 20  eleted;..       
c120: 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74       public stat
c130: 69 63 20 69 6e 74 20 53 75 62 4b 65 79 73 44 65  ic int SubKeysDe
c140: 6c 65 74 65 64 0d 0a 20 20 20 20 20 20 20 20 20  leted..         
c150: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
c160: 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75        get { retu
c170: 72 6e 20 73 75 62 4b 65 79 73 44 65 6c 65 74 65  rn subKeysDelete
c180: 64 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  d; }..          
c190: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
c1a0: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
c1b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c1c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c1d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c1e0: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
c1f0: 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74        private st
c200: 61 74 69 63 20 69 6e 74 20 6b 65 79 56 61 6c 75  atic int keyValu
c210: 65 73 52 65 61 64 3b 0d 0a 20 20 20 20 20 20 20  esRead;..       
c220: 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74       public stat
c230: 69 63 20 69 6e 74 20 4b 65 79 56 61 6c 75 65 73  ic int KeyValues
c240: 52 65 61 64 0d 0a 20 20 20 20 20 20 20 20 20 20  Read..          
c250: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
c260: 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72       get { retur
c270: 6e 20 6b 65 79 56 61 6c 75 65 73 52 65 61 64 3b  n keyValuesRead;
c280: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
c290: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
c2a0: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
c2b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c2c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c2d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c2e0: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
c2f0: 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74      private stat
c300: 69 63 20 69 6e 74 20 6b 65 79 56 61 6c 75 65 73  ic int keyValues
c310: 57 72 69 74 74 65 6e 3b 0d 0a 20 20 20 20 20 20  Written;..      
c320: 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61        public sta
c330: 74 69 63 20 69 6e 74 20 4b 65 79 56 61 6c 75 65  tic int KeyValue
c340: 73 57 72 69 74 74 65 6e 0d 0a 20 20 20 20 20 20  sWritten..      
c350: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
c360: 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72           get { r
c370: 65 74 75 72 6e 20 6b 65 79 56 61 6c 75 65 73 57  eturn keyValuesW
c380: 72 69 74 74 65 6e 3b 20 7d 0d 0a 20 20 20 20 20  ritten; }..     
c390: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
c3a0: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
c3b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c3c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c3d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c3e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
c3f0: 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
c400: 74 65 20 73 74 61 74 69 63 20 69 6e 74 20 6b 65  te static int ke
c410: 79 56 61 6c 75 65 73 44 65 6c 65 74 65 64 3b 0d  yValuesDeleted;.
c420: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
c430: 6c 69 63 20 73 74 61 74 69 63 20 69 6e 74 20 4b  lic static int K
c440: 65 79 56 61 6c 75 65 73 44 65 6c 65 74 65 64 0d  eyValuesDeleted.
c450: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
c460: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c470: 67 65 74 20 7b 20 72 65 74 75 72 6e 20 6b 65 79  get { return key
c480: 56 61 6c 75 65 73 44 65 6c 65 74 65 64 3b 20 7d  ValuesDeleted; }
c490: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
c4a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e  .            #en
c4b0: 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20  dregion....     
c4c0: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
c4d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c4e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c4f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c500: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
c510: 20 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f            #regio
c520: 6e 20 50 75 62 6c 69 63 20 53 74 61 74 69 63 20  n Public Static 
c530: 4d 65 74 68 6f 64 73 0d 0a 20 20 20 20 20 20 20  Methods..       
c540: 20 20 20 20 20 5b 4d 65 74 68 6f 64 49 6d 70 6c       [MethodImpl
c550: 28 4d 65 74 68 6f 64 49 6d 70 6c 4f 70 74 69 6f  (MethodImplOptio
c560: 6e 73 2e 4e 6f 49 6e 6c 69 6e 69 6e 67 29 5d 0d  ns.NoInlining)].
c570: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
c580: 6c 69 63 20 73 74 61 74 69 63 20 4d 6f 63 6b 52  lic static MockR
c590: 65 67 69 73 74 72 79 4b 65 79 20 4f 70 65 6e 53  egistryKey OpenS
c5a0: 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20  ubKey(..        
c5b0: 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65 67 69          MockRegi
c5c0: 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79 2c  stryKey rootKey,
c5d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
c5e0: 20 20 73 74 72 69 6e 67 20 73 75 62 4b 65 79 4e    string subKeyN
c5f0: 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ame,..          
c600: 20 20 20 20 20 20 62 6f 6f 6c 20 77 72 69 74 61        bool writa
c610: 62 6c 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ble,..          
c620: 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49        bool whatI
c630: 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  f,..            
c640: 20 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65      bool verbose
c650: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
c660: 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20    )..           
c670: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
c680: 20 20 20 20 69 66 20 28 72 6f 6f 74 4b 65 79 20      if (rootKey 
c690: 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
c6a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
c6b0: 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20  turn null;....  
c6c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
c6d0: 20 28 76 65 72 62 6f 73 65 29 0d 0a 20 20 20 20   (verbose)..    
c6e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c6f0: 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e  TraceOps.DebugAn
c700: 64 54 72 61 63 65 28 77 72 69 74 61 62 6c 65 20  dTrace(writable 
c710: 3f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ?..             
c720: 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
c730: 50 72 69 6f 72 69 74 79 2e 48 69 67 68 65 73 74  Priority.Highest
c740: 20 3a 20 54 72 61 63 65 50 72 69 6f 72 69 74 79   : TracePriority
c750: 2e 48 69 67 68 65 72 2c 0d 0a 20 20 20 20 20 20  .Higher,..      
c760: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c770: 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c    debugCallback,
c780: 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20   traceCallback, 
c790: 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
c7a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c7b0: 20 20 20 20 20 20 20 20 22 72 6f 6f 74 4b 65 79          "rootKey
c7c0: 20 3d 20 7b 30 7d 2c 20 73 75 62 4b 65 79 4e 61   = {0}, subKeyNa
c7d0: 6d 65 20 3d 20 7b 31 7d 2c 20 77 72 69 74 61 62  me = {1}, writab
c7e0: 6c 65 20 3d 20 7b 32 7d 22 2c 0d 0a 20 20 20 20  le = {2}",..    
c7f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c800: 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 72      ForDisplay(r
c810: 6f 6f 74 4b 65 79 29 2c 20 46 6f 72 44 69 73 70  ootKey), ForDisp
c820: 6c 61 79 28 73 75 62 4b 65 79 4e 61 6d 65 29 2c  lay(subKeyName),
c830: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
c840: 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73            ForDis
c850: 70 6c 61 79 28 77 72 69 74 61 62 6c 65 29 29 2c  play(writable)),
c860: 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
c870: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
c880: 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
c890: 20 20 20 20 20 20 20 20 2f 2f 20 48 41 43 4b 3a          // HACK:
c8a0: 20 41 6c 77 61 79 73 20 66 6f 72 62 69 64 20 77   Always forbid w
c8b0: 72 69 74 61 62 6c 65 20 61 63 63 65 73 73 20 77  ritable access w
c8c0: 68 65 6e 20 6f 70 65 72 61 74 69 6e 67 20 69 6e  hen operating in
c8d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
c8e0: 20 20 2f 2f 20 20 20 20 20 20 20 22 77 68 61 74    //       "what
c8f0: 2d 69 66 22 20 6d 6f 64 65 2e 0d 0a 20 20 20 20  -if" mode...    
c900: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
c910: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c920: 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20  MockRegistryKey 
c930: 6b 65 79 20 3d 20 72 6f 6f 74 4b 65 79 2e 4f 70  key = rootKey.Op
c940: 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20  enSubKey(..     
c950: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
c960: 75 62 4b 65 79 4e 61 6d 65 2c 20 77 68 61 74 49  ubKeyName, whatI
c970: 66 20 3f 20 66 61 6c 73 65 20 3a 20 77 72 69 74  f ? false : writ
c980: 61 62 6c 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  able);....      
c990: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
c9a0: 20 28 6b 65 79 20 21 3d 20 6e 75 6c 6c 29 20 3f   (key != null) ?
c9b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
c9c0: 20 20 20 20 20 20 6e 65 77 20 4d 6f 63 6b 52 65        new MockRe
c9d0: 67 69 73 74 72 79 4b 65 79 28 6b 65 79 2c 20 77  gistryKey(key, w
c9e0: 68 61 74 49 66 2c 20 66 61 6c 73 65 2c 20 66 61  hatIf, false, fa
c9f0: 6c 73 65 29 20 3a 20 6e 75 6c 6c 3b 0d 0a 20 20  lse) : null;..  
ca00: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
ca10: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
ca20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ca30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ca40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ca50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
ca60: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 4d  ..            [M
ca70: 65 74 68 6f 64 49 6d 70 6c 28 4d 65 74 68 6f 64  ethodImpl(Method
ca80: 49 6d 70 6c 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e  ImplOptions.NoIn
ca90: 6c 69 6e 69 6e 67 29 5d 0d 0a 20 20 20 20 20 20  lining)]..      
caa0: 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61        public sta
cab0: 74 69 63 20 4d 6f 63 6b 52 65 67 69 73 74 72 79  tic MockRegistry
cac0: 4b 65 79 20 43 72 65 61 74 65 53 75 62 4b 65 79  Key CreateSubKey
cad0: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
cae0: 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b     MockRegistryK
caf0: 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20  ey rootKey,..   
cb00: 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72               str
cb10: 69 6e 67 20 73 75 62 4b 65 79 4e 61 6d 65 2c 0d  ing subKeyName,.
cb20: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
cb30: 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20   bool whatIf,.. 
cb40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62                 b
cb50: 6f 6f 6c 20 76 65 72 62 6f 73 65 0d 0a 20 20 20  ool verbose..   
cb60: 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a               )..
cb70: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
cb80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
cb90: 66 20 28 72 6f 6f 74 4b 65 79 20 3d 3d 20 6e 75  f (rootKey == nu
cba0: 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
cbb0: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
cbc0: 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  null;....       
cbd0: 20 20 20 20 20 20 20 20 20 69 66 20 28 76 65 72           if (ver
cbe0: 62 6f 73 65 29 0d 0a 20 20 20 20 20 20 20 20 20  bose)..         
cbf0: 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
cc00: 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63  Ops.DebugAndTrac
cc10: 65 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e  e(TracePriority.
cc20: 48 69 67 68 65 73 74 2c 0d 0a 20 20 20 20 20 20  Highest,..      
cc30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cc40: 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c    debugCallback,
cc50: 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20   traceCallback, 
cc60: 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
cc70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cc80: 20 20 20 20 20 20 20 20 22 72 6f 6f 74 4b 65 79          "rootKey
cc90: 20 3d 20 7b 30 7d 2c 20 73 75 62 4b 65 79 4e 61   = {0}, subKeyNa
cca0: 6d 65 20 3d 20 7b 31 7d 22 2c 0d 0a 20 20 20 20  me = {1}",..    
ccb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ccc0: 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 72      ForDisplay(r
ccd0: 6f 6f 74 4b 65 79 29 2c 20 46 6f 72 44 69 73 70  ootKey), ForDisp
cce0: 6c 61 79 28 73 75 62 4b 65 79 4e 61 6d 65 29 29  lay(subKeyName))
ccf0: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
cd00: 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
cd10: 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  Category);....  
cd20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
cd30: 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  y..             
cd40: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
cd50: 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
cd60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cd70: 20 20 2f 2f 20 48 41 43 4b 3a 20 41 6c 77 61 79    // HACK: Alway
cd80: 73 20 6f 70 65 6e 20 61 20 6b 65 79 2c 20 72 61  s open a key, ra
cd90: 74 68 65 72 20 74 68 61 6e 20 63 72 65 61 74 69  ther than creati
cda0: 6e 67 20 6f 6e 65 20 77 68 65 6e 0d 0a 20 20 20  ng one when..   
cdb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cdc0: 20 2f 2f 20 20 20 20 20 20 20 6f 70 65 72 61 74   //       operat
cdd0: 69 6e 67 20 69 6e 20 22 77 68 61 74 2d 69 66 22  ing in "what-if"
cde0: 20 6d 6f 64 65 2e 0d 0a 20 20 20 20 20 20 20 20   mode...        
cdf0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
ce00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ce10: 20 20 20 20 69 66 20 28 77 68 61 74 49 66 29 0d      if (whatIf).
ce20: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
ce30: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
ce40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ce50: 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
ce60: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 48              // H
ce70: 41 43 4b 3a 20 41 74 74 65 6d 70 74 20 74 6f 20  ACK: Attempt to 
ce80: 6f 70 65 6e 20 74 68 65 20 73 70 65 63 69 66 69  open the specifi
ce90: 65 64 20 73 75 62 2d 6b 65 79 2e 20 20 49 66 0d  ed sub-key.  If.
cea0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
ceb0: 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
cec0: 20 20 74 68 69 73 20 66 61 69 6c 73 2c 20 77 65    this fails, we
ced0: 20 77 69 6c 6c 20 73 69 6d 70 6c 79 20 72 65 74   will simply ret
cee0: 75 72 6e 20 74 68 65 20 72 6f 6f 74 0d 0a 20 20  urn the root..  
cef0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cf00: 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 6b        //       k
cf10: 65 79 20 69 74 73 65 6c 66 20 73 69 6e 63 65 20  ey itself since 
cf20: 6e 6f 20 77 72 69 74 65 73 20 61 72 65 20 61 6c  no writes are al
cf30: 6c 6f 77 65 64 20 69 6e 0d 0a 20 20 20 20 20 20  lowed in..      
cf40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cf50: 20 20 2f 2f 20 20 20 20 20 20 20 22 77 68 61 74    //       "what
cf60: 2d 69 66 22 20 6d 6f 64 65 20 61 6e 79 68 6f 77  -if" mode anyhow
cf70: 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
cf80: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
cf90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cfa0: 20 20 20 20 20 20 20 4d 6f 63 6b 52 65 67 69 73         MockRegis
cfb0: 74 72 79 4b 65 79 20 6b 65 79 20 3d 20 72 6f 6f  tryKey key = roo
cfc0: 74 4b 65 79 2e 4f 70 65 6e 53 75 62 4b 65 79 28  tKey.OpenSubKey(
cfd0: 73 75 62 4b 65 79 4e 61 6d 65 29 3b 0d 0a 0d 0a  subKeyName);....
cfe0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cff0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 28          return (
d000: 6b 65 79 20 21 3d 20 6e 75 6c 6c 29 20 3f 0d 0a  key != null) ?..
d010: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d020: 20 20 20 20 20 20 20 20 20 20 20 20 6b 65 79 20              key 
d030: 3a 20 6e 65 77 20 4d 6f 63 6b 52 65 67 69 73 74  : new MockRegist
d040: 72 79 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20  ryKey(..        
d050: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d060: 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c          rootKey,
d070: 20 73 75 62 4b 65 79 4e 61 6d 65 2c 20 77 68 61   subKeyName, wha
d080: 74 49 66 2c 20 66 61 6c 73 65 2c 20 66 61 6c 73  tIf, false, fals
d090: 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e);..           
d0a0: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
d0b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d0c0: 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20  else..          
d0d0: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
d0e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d0f0: 20 20 20 20 20 72 65 74 75 72 6e 20 6e 65 77 20       return new 
d100: 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 28  MockRegistryKey(
d110: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
d120: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f                ro
d130: 6f 74 4b 65 79 2e 43 72 65 61 74 65 53 75 62 4b  otKey.CreateSubK
d140: 65 79 28 73 75 62 4b 65 79 4e 61 6d 65 29 2c 20  ey(subKeyName), 
d150: 77 68 61 74 49 66 2c 20 66 61 6c 73 65 2c 0d 0a  whatIf, false,..
d160: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d170: 20 20 20 20 20 20 20 20 20 20 20 20 66 61 6c 73              fals
d180: 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e);..           
d190: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
d1a0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
d1b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66                 f
d1c0: 69 6e 61 6c 6c 79 0d 0a 20 20 20 20 20 20 20 20  inally..        
d1d0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
d1e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
d1f0: 75 62 4b 65 79 73 43 72 65 61 74 65 64 2b 2b 3b  ubKeysCreated++;
d200: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
d210: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
d220: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
d230: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
d240: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d250: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d260: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d270: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
d280: 20 20 20 20 20 5b 4d 65 74 68 6f 64 49 6d 70 6c       [MethodImpl
d290: 28 4d 65 74 68 6f 64 49 6d 70 6c 4f 70 74 69 6f  (MethodImplOptio
d2a0: 6e 73 2e 4e 6f 49 6e 6c 69 6e 69 6e 67 29 5d 0d  ns.NoInlining)].
d2b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
d2c0: 6c 69 63 20 73 74 61 74 69 63 20 76 6f 69 64 20  lic static void 
d2d0: 44 65 6c 65 74 65 53 75 62 4b 65 79 28 0d 0a 20  DeleteSubKey(.. 
d2e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4d                 M
d2f0: 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 72  ockRegistryKey r
d300: 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20  ootKey,..       
d310: 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
d320: 73 75 62 4b 65 79 4e 61 6d 65 2c 0d 0a 20 20 20  subKeyName,..   
d330: 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f               boo
d340: 6c 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67  l throwOnMissing
d350: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
d360: 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d     bool whatIf,.
d370: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
d380: 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 0d 0a 20   bool verbose.. 
d390: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29                 )
d3a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
d3b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
d3c0: 20 69 66 20 28 72 6f 6f 74 4b 65 79 20 3d 3d 20   if (rootKey == 
d3d0: 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
d3e0: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
d3f0: 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  n;....          
d400: 20 20 20 20 20 20 69 66 20 28 76 65 72 62 6f 73        if (verbos
d410: 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e)..            
d420: 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73          TraceOps
d430: 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 54  .DebugAndTrace(T
d440: 72 61 63 65 50 72 69 6f 72 69 74 79 2e 48 69 67  racePriority.Hig
d450: 68 65 73 74 2c 0d 0a 20 20 20 20 20 20 20 20 20  hest,..         
d460: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64                 d
d470: 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72  ebugCallback, tr
d480: 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72  aceCallback, Str
d490: 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
d4a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d4b0: 20 20 20 20 20 22 72 6f 6f 74 4b 65 79 20 3d 20       "rootKey = 
d4c0: 7b 30 7d 2c 20 73 75 62 4b 65 79 4e 61 6d 65 20  {0}, subKeyName 
d4d0: 3d 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20  = {1}",..       
d4e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d4f0: 20 46 6f 72 44 69 73 70 6c 61 79 28 72 6f 6f 74   ForDisplay(root
d500: 4b 65 79 29 2c 20 46 6f 72 44 69 73 70 6c 61 79  Key), ForDisplay
d510: 28 73 75 62 4b 65 79 4e 61 6d 65 29 29 2c 0d 0a  (subKeyName)),..
d520: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d530: 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74          traceCat
d540: 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20  egory);....     
d550: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21             if (!
d560: 77 68 61 74 49 66 29 0d 0a 20 20 20 20 20 20 20  whatIf)..       
d570: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f               roo
d580: 74 4b 65 79 2e 44 65 6c 65 74 65 53 75 62 4b 65  tKey.DeleteSubKe
d590: 79 28 73 75 62 4b 65 79 4e 61 6d 65 2c 20 74 68  y(subKeyName, th
d5a0: 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 29 3b 0d 0a  rowOnMissing);..
d5b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
d5c0: 20 20 73 75 62 4b 65 79 73 44 65 6c 65 74 65 64    subKeysDeleted
d5d0: 2b 2b 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ++;..           
d5e0: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
d5f0: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
d600: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d610: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d620: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d630: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
d640: 20 20 20 20 20 5b 4d 65 74 68 6f 64 49 6d 70 6c       [MethodImpl
d650: 28 4d 65 74 68 6f 64 49 6d 70 6c 4f 70 74 69 6f  (MethodImplOptio
d660: 6e 73 2e 4e 6f 49 6e 6c 69 6e 69 6e 67 29 5d 0d  ns.NoInlining)].
d670: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
d680: 6c 69 63 20 73 74 61 74 69 63 20 76 6f 69 64 20  lic static void 
d690: 44 65 6c 65 74 65 53 75 62 4b 65 79 54 72 65 65  DeleteSubKeyTree
d6a0: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
d6b0: 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b     MockRegistryK
d6c0: 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20  ey rootKey,..   
d6d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72               str
d6e0: 69 6e 67 20 73 75 62 4b 65 79 4e 61 6d 65 2c 0d  ing subKeyName,.
d6f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
d700: 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20   bool whatIf,.. 
d710: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62                 b
d720: 6f 6f 6c 20 76 65 72 62 6f 73 65 0d 0a 20 20 20  ool verbose..   
d730: 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a               )..
d740: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
d750: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
d760: 66 20 28 72 6f 6f 74 4b 65 79 20 3d 3d 20 6e 75  f (rootKey == nu
d770: 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
d780: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 3b           return;
d790: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
d7a0: 20 20 20 20 69 66 20 28 76 65 72 62 6f 73 65 29      if (verbose)
d7b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
d7c0: 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44        TraceOps.D
d7d0: 65 62 75 67 41 6e 64 54 72 61 63 65 28 54 72 61  ebugAndTrace(Tra
d7e0: 63 65 50 72 69 6f 72 69 74 79 2e 48 69 67 68 65  cePriority.Highe
d7f0: 73 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  st,..           
d800: 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65 62               deb
d810: 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63  ugCallback, trac
d820: 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e  eCallback, Strin
d830: 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
d840: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d850: 20 20 20 22 72 6f 6f 74 4b 65 79 20 3d 20 7b 30     "rootKey = {0
d860: 7d 2c 20 73 75 62 4b 65 79 4e 61 6d 65 20 3d 20  }, subKeyName = 
d870: 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  {1}",..         
d880: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46                 F
d890: 6f 72 44 69 73 70 6c 61 79 28 72 6f 6f 74 4b 65  orDisplay(rootKe
d8a0: 79 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 73  y), ForDisplay(s
d8b0: 75 62 4b 65 79 4e 61 6d 65 29 29 2c 0d 0a 20 20  ubKeyName)),..  
d8c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d8d0: 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67        traceCateg
d8e0: 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
d8f0: 20 20 20 20 20 20 20 20 20 69 66 20 28 21 77 68           if (!wh
d900: 61 74 49 66 29 0d 0a 20 20 20 20 20 20 20 20 20  atIf)..         
d910: 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b             rootK
d920: 65 79 2e 44 65 6c 65 74 65 53 75 62 4b 65 79 54  ey.DeleteSubKeyT
d930: 72 65 65 28 73 75 62 4b 65 79 4e 61 6d 65 29 3b  ree(subKeyName);
d940: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
d950: 20 20 20 20 73 75 62 4b 65 79 73 44 65 6c 65 74      subKeysDelet
d960: 65 64 2b 2b 3b 0d 0a 20 20 20 20 20 20 20 20 20  ed++;..         
d970: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
d980: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
d990: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d9a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d9b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d9c0: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
d9d0: 20 20 20 20 20 20 20 5b 4d 65 74 68 6f 64 49 6d         [MethodIm
d9e0: 70 6c 28 4d 65 74 68 6f 64 49 6d 70 6c 4f 70 74  pl(MethodImplOpt
d9f0: 69 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e 69 6e 67 29  ions.NoInlining)
da00: 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ]..            p
da10: 75 62 6c 69 63 20 73 74 61 74 69 63 20 73 74 72  ublic static str
da20: 69 6e 67 5b 5d 20 47 65 74 53 75 62 4b 65 79 4e  ing[] GetSubKeyN
da30: 61 6d 65 73 28 0d 0a 20 20 20 20 20 20 20 20 20  ames(..         
da40: 20 20 20 20 20 20 20 4d 6f 63 6b 52 65 67 69 73         MockRegis
da50: 74 72 79 4b 65 79 20 6b 65 79 2c 0d 0a 20 20 20  tryKey key,..   
da60: 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f               boo
da70: 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20  l whatIf,..     
da80: 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
da90: 76 65 72 62 6f 73 65 0d 0a 20 20 20 20 20 20 20  verbose..       
daa0: 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
dab0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
dac0: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6b             if (k
dad0: 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ey == null)..   
dae0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
daf0: 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d   return null;...
db00: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
db10: 20 69 66 20 28 76 65 72 62 6f 73 65 29 0d 0a 20   if (verbose).. 
db20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
db30: 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75     TraceOps.Debu
db40: 67 41 6e 64 54 72 61 63 65 28 54 72 61 63 65 50  gAndTrace(TraceP
db50: 72 69 6f 72 69 74 79 2e 48 69 67 68 2c 0d 0a 20  riority.High,.. 
db60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
db70: 20 20 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c         debugCall
db80: 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62  back, traceCallb
db90: 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d  ack, String.Form
dba0: 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
dbb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 22 6b 65               "ke
dbc0: 79 20 3d 20 7b 30 7d 22 2c 20 46 6f 72 44 69 73  y = {0}", ForDis
dbd0: 70 6c 61 79 28 6b 65 79 29 29 2c 20 74 72 61 63  play(key)), trac
dbe0: 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20  eCategory);.... 
dbf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
dc00: 65 74 75 72 6e 20 6b 65 79 2e 47 65 74 53 75 62  eturn key.GetSub
dc10: 4b 65 79 4e 61 6d 65 73 28 29 3b 0d 0a 20 20 20  KeyNames();..   
dc20: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
dc30: 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
dc40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
dc50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
dc60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
dc70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
dc80: 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 4d 65  .            [Me
dc90: 74 68 6f 64 49 6d 70 6c 28 4d 65 74 68 6f 64 49  thodImpl(MethodI
dca0: 6d 70 6c 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e 6c  mplOptions.NoInl
dcb0: 69 6e 69 6e 67 29 5d 0d 0a 20 20 20 20 20 20 20  ining)]..       
dcc0: 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74       public stat
dcd0: 69 63 20 6f 62 6a 65 63 74 20 47 65 74 56 61 6c  ic object GetVal
dce0: 75 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue(..           
dcf0: 20 20 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72       MockRegistr
dd00: 79 4b 65 79 20 6b 65 79 2c 0d 0a 20 20 20 20 20  yKey key,..     
dd10: 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
dd20: 67 20 6e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20  g name,..       
dd30: 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20           object 
dd40: 64 65 66 61 75 6c 74 56 61 6c 75 65 2c 0d 0a 20  defaultValue,.. 
dd50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62                 b
dd60: 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20  ool whatIf,..   
dd70: 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f               boo
dd80: 6c 20 76 65 72 62 6f 73 65 0d 0a 20 20 20 20 20  l verbose..     
dd90: 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
dda0: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
ddb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
ddc0: 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  (key == null).. 
ddd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dde0: 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d     return null;.
ddf0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
de00: 20 20 20 69 66 20 28 76 65 72 62 6f 73 65 29 0d     if (verbose).
de10: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
de20: 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65       TraceOps.De
de30: 62 75 67 41 6e 64 54 72 61 63 65 28 54 72 61 63  bugAndTrace(Trac
de40: 65 50 72 69 6f 72 69 74 79 2e 48 69 67 68 2c 0d  ePriority.High,.
de50: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
de60: 20 20 20 20 20 20 20 20 20 64 65 62 75 67 43 61           debugCa
de70: 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c  llback, traceCal
de80: 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f  lback, String.Fo
de90: 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
dea0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
deb0: 6b 65 79 20 3d 20 7b 30 7d 2c 20 6e 61 6d 65 20  key = {0}, name 
dec0: 3d 20 7b 31 7d 2c 20 64 65 66 61 75 6c 74 56 61  = {1}, defaultVa
ded0: 6c 75 65 20 3d 20 7b 32 7d 22 2c 0d 0a 20 20 20  lue = {2}",..   
dee0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
def0: 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28       ForDisplay(
df00: 6b 65 79 29 2c 20 46 6f 72 44 69 73 70 6c 61 79  key), ForDisplay
df10: 28 6e 61 6d 65 29 2c 0d 0a 20 20 20 20 20 20 20  (name),..       
df20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
df30: 20 46 6f 72 44 69 73 70 6c 61 79 28 64 65 66 61   ForDisplay(defa
df40: 75 6c 74 56 61 6c 75 65 29 29 2c 20 74 72 61 63  ultValue)), trac
df50: 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20  eCategory);.... 
df60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6f                 o
df70: 62 6a 65 63 74 20 76 61 6c 75 65 20 3d 20 6b 65  bject value = ke
df80: 79 2e 47 65 74 56 61 6c 75 65 28 6e 61 6d 65 2c  y.GetValue(name,
df90: 20 64 65 66 61 75 6c 74 56 61 6c 75 65 29 3b 0d   defaultValue);.
dfa0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
dfb0: 20 20 20 6b 65 79 56 61 6c 75 65 73 52 65 61 64     keyValuesRead
dfc0: 2b 2b 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ++;....         
dfd0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 76 61         return va
dfe0: 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lue;..          
dff0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
e000: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
e010: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e020: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e030: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e040: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
e050: 20 20 20 20 20 20 5b 4d 65 74 68 6f 64 49 6d 70        [MethodImp
e060: 6c 28 4d 65 74 68 6f 64 49 6d 70 6c 4f 70 74 69  l(MethodImplOpti
e070: 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e 69 6e 67 29 5d  ons.NoInlining)]
e080: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
e090: 62 6c 69 63 20 73 74 61 74 69 63 20 76 6f 69 64  blic static void
e0a0: 20 53 65 74 56 61 6c 75 65 28 0d 0a 20 20 20 20   SetValue(..    
e0b0: 20 20 20 20 20 20 20 20 20 20 20 20 4d 6f 63 6b              Mock
e0c0: 52 65 67 69 73 74 72 79 4b 65 79 20 6b 65 79 2c  RegistryKey key,
e0d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
e0e0: 20 20 73 74 72 69 6e 67 20 6e 61 6d 65 2c 0d 0a    string name,..
e0f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e100: 6f 62 6a 65 63 74 20 76 61 6c 75 65 2c 0d 0a 20  object value,.. 
e110: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62                 b
e120: 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20  ool whatIf,..   
e130: 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f               boo
e140: 6c 20 76 65 72 62 6f 73 65 0d 0a 20 20 20 20 20  l verbose..     
e150: 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
e160: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
e170: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
e180: 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  (key == null).. 
e190: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e1a0: 20 20 20 72 65 74 75 72 6e 3b 0d 0a 0d 0a 20 20     return;....  
e1b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
e1c0: 20 28 76 65 72 62 6f 73 65 29 0d 0a 20 20 20 20   (verbose)..    
e1d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e1e0: 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e  TraceOps.DebugAn
e1f0: 64 54 72 61 63 65 28 54 72 61 63 65 50 72 69 6f  dTrace(TracePrio
e200: 72 69 74 79 2e 48 69 67 68 65 73 74 2c 0d 0a 20  rity.Highest,.. 
e210: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e220: 20 20 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c         debugCall
e230: 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62  back, traceCallb
e240: 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d  ack, String.Form
e250: 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
e260: 20 20 20 20 20 20 20 20 20 20 20 20 20 22 6b 65               "ke
e270: 79 20 3d 20 7b 30 7d 2c 20 6e 61 6d 65 20 3d 20  y = {0}, name = 
e280: 7b 31 7d 2c 20 76 61 6c 75 65 20 3d 20 7b 32 7d  {1}, value = {2}
e290: 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
e2a0: 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44              ForD
e2b0: 69 73 70 6c 61 79 28 6b 65 79 29 2c 20 46 6f 72  isplay(key), For
e2c0: 44 69 73 70 6c 61 79 28 6e 61 6d 65 29 2c 20 46  Display(name), F
e2d0: 6f 72 44 69 73 70 6c 61 79 28 76 61 6c 75 65 29  orDisplay(value)
e2e0: 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
e2f0: 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
e300: 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20  eCategory);.... 
e310: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
e320: 66 20 28 21 77 68 61 74 49 66 29 0d 0a 20 20 20  f (!whatIf)..   
e330: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e340: 20 6b 65 79 2e 53 65 74 56 61 6c 75 65 28 6e 61   key.SetValue(na
e350: 6d 65 2c 20 76 61 6c 75 65 29 3b 0d 0a 0d 0a 20  me, value);.... 
e360: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6b                 k
e370: 65 79 56 61 6c 75 65 73 57 72 69 74 74 65 6e 2b  eyValuesWritten+
e380: 2b 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  +;..            
e390: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
e3a0: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
e3b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e3c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e3d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e3e0: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
e3f0: 20 20 20 20 5b 4d 65 74 68 6f 64 49 6d 70 6c 28      [MethodImpl(
e400: 4d 65 74 68 6f 64 49 6d 70 6c 4f 70 74 69 6f 6e  MethodImplOption
e410: 73 2e 4e 6f 49 6e 6c 69 6e 69 6e 67 29 5d 0d 0a  s.NoInlining)]..
e420: 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
e430: 69 63 20 73 74 61 74 69 63 20 76 6f 69 64 20 44  ic static void D
e440: 65 6c 65 74 65 56 61 6c 75 65 28 0d 0a 20 20 20  eleteValue(..   
e450: 20 20 20 20 20 20 20 20 20 20 20 20 20 4d 6f 63               Moc
e460: 6b 52 65 67 69 73 74 72 79 4b 65 79 20 6b 65 79  kRegistryKey key
e470: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
e480: 20 20 20 73 74 72 69 6e 67 20 6e 61 6d 65 2c 0d     string name,.
e490: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
e4a0: 20 62 6f 6f 6c 20 74 68 72 6f 77 4f 6e 4d 69 73   bool throwOnMis
e4b0: 73 69 6e 67 2c 0d 0a 20 20 20 20 20 20 20 20 20  sing,..         
e4c0: 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74         bool what
e4d0: 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  If,..           
e4e0: 20 20 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73       bool verbos
e4f0: 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e..             
e500: 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20     )..          
e510: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
e520: 20 20 20 20 20 69 66 20 28 6b 65 79 20 3d 3d 20       if (key == 
e530: 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
e540: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
e550: 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  n;....          
e560: 20 20 20 20 20 20 69 66 20 28 76 65 72 62 6f 73        if (verbos
e570: 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e)..            
e580: 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73          TraceOps
e590: 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 54  .DebugAndTrace(T
e5a0: 72 61 63 65 50 72 69 6f 72 69 74 79 2e 48 69 67  racePriority.Hig
e5b0: 68 65 73 74 2c 0d 0a 20 20 20 20 20 20 20 20 20  hest,..         
e5c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64                 d
e5d0: 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72  ebugCallback, tr
e5e0: 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72  aceCallback, Str
e5f0: 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
e600: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e610: 20 20 20 20 20 22 6b 65 79 20 3d 20 7b 30 7d 2c       "key = {0},
e620: 20 6e 61 6d 65 20 3d 20 7b 31 7d 22 2c 20 46 6f   name = {1}", Fo
e630: 72 44 69 73 70 6c 61 79 28 6b 65 79 29 2c 0d 0a  rDisplay(key),..
e640: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e650: 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c          ForDispl
e660: 61 79 28 6e 61 6d 65 29 29 2c 20 74 72 61 63 65  ay(name)), trace
e670: 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  Category);....  
e680: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
e690: 20 28 21 77 68 61 74 49 66 29 0d 0a 20 20 20 20   (!whatIf)..    
e6a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e6b0: 6b 65 79 2e 44 65 6c 65 74 65 56 61 6c 75 65 28  key.DeleteValue(
e6c0: 6e 61 6d 65 2c 20 74 68 72 6f 77 4f 6e 4d 69 73  name, throwOnMis
e6d0: 73 69 6e 67 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  sing);....      
e6e0: 20 20 20 20 20 20 20 20 20 20 6b 65 79 56 61 6c            keyVal
e6f0: 75 65 73 44 65 6c 65 74 65 64 2b 2b 3b 0d 0a 20  uesDeleted++;.. 
e700: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
e710: 20 20 20 20 20 20 20 20 20 20 23 65 6e 64 72 65            #endre
e720: 67 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20 7d 0d  gion..        }.
e730: 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67  .        #endreg
e740: 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f  ion....        /
e750: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e760: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e770: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e780: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e790: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
e7a0: 20 20 23 72 65 67 69 6f 6e 20 53 74 72 69 6e 67    #region String
e7b0: 4c 69 73 74 20 43 6c 61 73 73 0d 0a 20 20 20 20  List Class..    
e7c0: 20 20 20 20 70 72 69 76 61 74 65 20 73 65 61 6c      private seal
e7d0: 65 64 20 63 6c 61 73 73 20 53 74 72 69 6e 67 4c  ed class StringL
e7e0: 69 73 74 20 3a 20 4c 69 73 74 3c 73 74 72 69 6e  ist : List<strin
e7f0: 67 3e 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  g>..        {.. 
e800: 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
e810: 63 20 53 74 72 69 6e 67 4c 69 73 74 28 29 0d 0a  c StringList()..
e820: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e830: 3a 20 62 61 73 65 28 29 0d 0a 20 20 20 20 20 20  : base()..      
e840: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
e850: 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e           // do n
e860: 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20  othing...       
e870: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
e880: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
e890: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e8a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e8b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e8c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
e8d0: 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
e8e0: 53 74 72 69 6e 67 4c 69 73 74 28 49 45 6e 75 6d  StringList(IEnum
e8f0: 65 72 61 62 6c 65 3c 73 74 72 69 6e 67 3e 20 63  erable<string> c
e900: 6f 6c 6c 65 63 74 69 6f 6e 29 0d 0a 20 20 20 20  ollection)..    
e910: 20 20 20 20 20 20 20 20 20 20 20 20 3a 20 62 61              : ba
e920: 73 65 28 63 6f 6c 6c 65 63 74 69 6f 6e 29 0d 0a  se(collection)..
e930: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
e940: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
e950: 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20  / do nothing... 
e960: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
e970: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
e980: 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20   #endregion.... 
e990: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
e9a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e9b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e9c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e9d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
e9e0: 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f  ..        #regio
e9f0: 6e 20 53 74 72 69 6e 67 44 69 63 74 69 6f 6e 61  n StringDictiona
ea00: 72 79 20 43 6c 61 73 73 0d 0a 20 20 20 20 20 20  ry Class..      
ea10: 20 20 70 72 69 76 61 74 65 20 73 65 61 6c 65 64    private sealed
ea20: 20 63 6c 61 73 73 20 53 74 72 69 6e 67 44 69 63   class StringDic
ea30: 74 69 6f 6e 61 72 79 20 3a 20 44 69 63 74 69 6f  tionary : Dictio
ea40: 6e 61 72 79 3c 73 74 72 69 6e 67 2c 20 73 74 72  nary<string, str
ea50: 69 6e 67 3e 0d 0a 20 20 20 20 20 20 20 20 7b 0d  ing>..        {.
ea60: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
ea70: 6c 69 63 20 53 74 72 69 6e 67 44 69 63 74 69 6f  lic StringDictio
ea80: 6e 61 72 79 28 29 0d 0a 20 20 20 20 20 20 20 20  nary()..        
ea90: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
eaa0: 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74         // do not
eab0: 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 20  hing...         
eac0: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d     }..        }.
ead0: 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67  .        #endreg
eae0: 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f  ion....        /
eaf0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
eb00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
eb10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
eb20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
eb30: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
eb40: 20 20 23 72 65 67 69 6f 6e 20 56 65 72 73 69 6f    #region Versio
eb50: 6e 4c 69 73 74 20 43 6c 61 73 73 0d 0a 20 20 20  nList Class..   
eb60: 20 20 20 20 20 70 72 69 76 61 74 65 20 73 65 61       private sea
eb70: 6c 65 64 20 63 6c 61 73 73 20 56 65 72 73 69 6f  led class Versio
eb80: 6e 4c 69 73 74 20 3a 20 4c 69 73 74 3c 56 65 72  nList : List<Ver
eb90: 73 69 6f 6e 3e 0d 0a 20 20 20 20 20 20 20 20 7b  sion>..        {
eba0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
ebb0: 62 6c 69 63 20 56 65 72 73 69 6f 6e 4c 69 73 74  blic VersionList
ebc0: 28 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ()..            
ebd0: 20 20 20 20 3a 20 62 61 73 65 28 29 0d 0a 20 20      : base()..  
ebe0: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
ebf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
ec00: 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20  do nothing...   
ec10: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
ec20: 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
ec30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ec40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ec50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ec60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
ec70: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
ec80: 6c 69 63 20 56 65 72 73 69 6f 6e 4c 69 73 74 28  lic VersionList(
ec90: 49 45 6e 75 6d 65 72 61 62 6c 65 3c 56 65 72 73  IEnumerable<Vers
eca0: 69 6f 6e 3e 20 63 6f 6c 6c 65 63 74 69 6f 6e 29  ion> collection)
ecb0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
ecc0: 20 20 3a 20 62 61 73 65 28 63 6f 6c 6c 65 63 74    : base(collect
ecd0: 69 6f 6e 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ion)..          
ece0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
ecf0: 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69       // do nothi
ed00: 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ng...           
ed10: 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20   }..        }.. 
ed20: 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f         #endregio
ed30: 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  n....        ///
ed40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ed50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ed60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ed70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ed80: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
ed90: 23 72 65 67 69 6f 6e 20 56 65 72 73 69 6f 6e 4d  #region VersionM
eda0: 61 70 20 43 6c 61 73 73 0d 0a 20 20 20 20 20 20  ap Class..      
edb0: 20 20 70 72 69 76 61 74 65 20 73 65 61 6c 65 64    private sealed
edc0: 20 63 6c 61 73 73 20 56 65 72 73 69 6f 6e 4d 61   class VersionMa
edd0: 70 20 3a 20 44 69 63 74 69 6f 6e 61 72 79 3c 73  p : Dictionary<s
ede0: 74 72 69 6e 67 2c 20 56 65 72 73 69 6f 6e 4c 69  tring, VersionLi
edf0: 73 74 3e 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  st>..        {..
ee00: 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
ee10: 69 63 20 56 65 72 73 69 6f 6e 4d 61 70 28 29 0d  ic VersionMap().
ee20: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
ee30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ee40: 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a  // do nothing...
ee50: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
ee60: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
ee70: 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a    #endregion....
ee80: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
ee90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
eea0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
eeb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
eec0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
eed0: 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69  ...        #regi
eee0: 6f 6e 20 50 61 63 6b 61 67 65 20 43 6c 61 73 73  on Package Class
eef0: 0d 0a 20 20 20 20 20 20 20 20 69 6e 74 65 72 6e  ..        intern
ef00: 61 6c 20 73 65 61 6c 65 64 20 63 6c 61 73 73 20  al sealed class 
ef10: 50 61 63 6b 61 67 65 0d 0a 20 20 20 20 20 20 20  Package..       
ef20: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
ef30: 23 72 65 67 69 6f 6e 20 50 75 62 6c 69 63 20 43  #region Public C
ef40: 6f 6e 73 74 72 75 63 74 6f 72 73 0d 0a 20 20 20  onstructors..   
ef50: 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
ef60: 50 61 63 6b 61 67 65 28 29 0d 0a 20 20 20 20 20  Package()..     
ef70: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
ef80: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20            // do 
ef90: 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20  nothing...      
efa0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
efb0: 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d       #endregion.
efc0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
efd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
efe0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
eff0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f000: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f010: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
f020: 20 20 23 72 65 67 69 6f 6e 20 50 75 62 6c 69 63    #region Public
f030: 20 50 72 6f 70 65 72 74 69 65 73 0d 0a 20 20 20   Properties..   
f040: 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65           private
f050: 20 73 74 72 69 6e 67 20 70 72 6f 76 69 64 65 72   string provider
f060: 49 6e 76 61 72 69 61 6e 74 4e 61 6d 65 3b 0d 0a  InvariantName;..
f070: 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
f080: 69 63 20 73 74 72 69 6e 67 20 50 72 6f 76 69 64  ic string Provid
f090: 65 72 49 6e 76 61 72 69 61 6e 74 4e 61 6d 65 0d  erInvariantName.
f0a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
f0b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f0c0: 67 65 74 20 7b 20 72 65 74 75 72 6e 20 70 72 6f  get { return pro
f0d0: 76 69 64 65 72 49 6e 76 61 72 69 61 6e 74 4e 61  viderInvariantNa
f0e0: 6d 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  me; }..         
f0f0: 20 20 20 20 20 20 20 73 65 74 20 7b 20 70 72 6f         set { pro
f100: 76 69 64 65 72 49 6e 76 61 72 69 61 6e 74 4e 61  viderInvariantNa
f110: 6d 65 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20  me = value; }.. 
f120: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
f130: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
f140: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f150: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f160: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f170: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
f180: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
f190: 72 69 76 61 74 65 20 73 74 72 69 6e 67 20 66 61  rivate string fa
f1a0: 63 74 6f 72 79 54 79 70 65 4e 61 6d 65 3b 0d 0a  ctoryTypeName;..
f1b0: 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
f1c0: 69 63 20 73 74 72 69 6e 67 20 46 61 63 74 6f 72  ic string Factor
f1d0: 79 54 79 70 65 4e 61 6d 65 0d 0a 20 20 20 20 20  yTypeName..     
f1e0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
f1f0: 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20            get { 
f200: 72 65 74 75 72 6e 20 66 61 63 74 6f 72 79 54 79  return factoryTy
f210: 70 65 4e 61 6d 65 3b 20 7d 0d 0a 20 20 20 20 20  peName; }..     
f220: 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b             set {
f230: 20 66 61 63 74 6f 72 79 54 79 70 65 4e 61 6d 65   factoryTypeName
f240: 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20   = value; }..   
f250: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
f260: 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
f270: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f280: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f290: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f2a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
f2b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69  .            pri
f2c0: 76 61 74 65 20 41 73 73 65 6d 62 6c 79 4e 61 6d  vate AssemblyNam
f2d0: 65 20 70 72 6f 76 69 64 65 72 41 73 73 65 6d 62  e providerAssemb
f2e0: 6c 79 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20  lyName;..       
f2f0: 20 20 20 20 20 70 75 62 6c 69 63 20 41 73 73 65       public Asse
f300: 6d 62 6c 79 4e 61 6d 65 20 50 72 6f 76 69 64 65  mblyName Provide
f310: 72 41 73 73 65 6d 62 6c 79 4e 61 6d 65 0d 0a 20  rAssemblyName.. 
f320: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
f330: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65                ge
f340: 74 20 7b 20 72 65 74 75 72 6e 20 70 72 6f 76 69  t { return provi
f350: 64 65 72 41 73 73 65 6d 62 6c 79 4e 61 6d 65 3b  derAssemblyName;
f360: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
f370: 20 20 20 20 73 65 74 20 7b 20 70 72 6f 76 69 64      set { provid
f380: 65 72 41 73 73 65 6d 62 6c 79 4e 61 6d 65 20 3d  erAssemblyName =
f390: 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20   value; }..     
f3a0: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
f3b0: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
f3c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f3d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f3e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f3f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
f400: 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
f410: 74 65 20 41 73 73 65 6d 62 6c 79 4e 61 6d 65 20  te AssemblyName 
f420: 64 65 73 69 67 6e 65 72 41 73 73 65 6d 62 6c 79  designerAssembly
f430: 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  Name;..         
f440: 20 20 20 70 75 62 6c 69 63 20 41 73 73 65 6d 62     public Assemb
f450: 6c 79 4e 61 6d 65 20 44 65 73 69 67 6e 65 72 41  lyName DesignerA
f460: 73 73 65 6d 62 6c 79 4e 61 6d 65 0d 0a 20 20 20  ssemblyName..   
f470: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
f480: 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20              get 
f490: 7b 20 72 65 74 75 72 6e 20 64 65 73 69 67 6e 65  { return designe
f4a0: 72 41 73 73 65 6d 62 6c 79 4e 61 6d 65 3b 20 7d  rAssemblyName; }
f4b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
f4c0: 20 20 73 65 74 20 7b 20 64 65 73 69 67 6e 65 72    set { designer
f4d0: 41 73 73 65 6d 62 6c 79 4e 61 6d 65 20 3d 20 76  AssemblyName = v
f4e0: 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20  alue; }..       
f4f0: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
f500: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
f510: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f520: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f530: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f540: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
f550: 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65           private
f560: 20 62 6f 6f 6c 20 67 6c 6f 62 61 6c 41 73 73 65   bool globalAsse
f570: 6d 62 6c 79 43 61 63 68 65 3b 0d 0a 20 20 20 20  mblyCache;..    
f580: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 62          public b
f590: 6f 6f 6c 20 47 6c 6f 62 61 6c 41 73 73 65 6d 62  ool GlobalAssemb
f5a0: 6c 79 43 61 63 68 65 0d 0a 20 20 20 20 20 20 20  lyCache..       
f5b0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
f5c0: 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65          get { re
f5d0: 74 75 72 6e 20 67 6c 6f 62 61 6c 41 73 73 65 6d  turn globalAssem
f5e0: 62 6c 79 43 61 63 68 65 3b 20 7d 0d 0a 20 20 20  blyCache; }..   
f5f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74               set
f600: 20 7b 20 67 6c 6f 62 61 6c 41 73 73 65 6d 62 6c   { globalAssembl
f610: 79 43 61 63 68 65 20 3d 20 76 61 6c 75 65 3b 20  yCache = value; 
f620: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
f630: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
f640: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f650: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f660: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f670: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f680: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
f690: 20 20 20 70 72 69 76 61 74 65 20 47 75 69 64 20     private Guid 
f6a0: 70 61 63 6b 61 67 65 49 64 3b 0d 0a 20 20 20 20  packageId;..    
f6b0: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 47          public G
f6c0: 75 69 64 20 50 61 63 6b 61 67 65 49 64 0d 0a 20  uid PackageId.. 
f6d0: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
f6e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65                ge
f6f0: 74 20 7b 20 72 65 74 75 72 6e 20 70 61 63 6b 61  t { return packa
f700: 67 65 49 64 3b 20 7d 0d 0a 20 20 20 20 20 20 20  geId; }..       
f710: 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 70           set { p
f720: 61 63 6b 61 67 65 49 64 20 3d 20 76 61 6c 75 65  ackageId = value
f730: 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
f740: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
f750: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
f760: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f770: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f780: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f790: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
f7a0: 20 20 20 20 20 70 72 69 76 61 74 65 20 47 75 69       private Gui
f7b0: 64 20 73 65 72 76 69 63 65 49 64 3b 0d 0a 20 20  d serviceId;..  
f7c0: 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
f7d0: 20 47 75 69 64 20 53 65 72 76 69 63 65 49 64 0d   Guid ServiceId.
f7e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
f7f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f800: 67 65 74 20 7b 20 72 65 74 75 72 6e 20 73 65 72  get { return ser
f810: 76 69 63 65 49 64 3b 20 7d 0d 0a 20 20 20 20 20  viceId; }..     
f820: 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b             set {
f830: 20 73 65 72 76 69 63 65 49 64 20 3d 20 76 61 6c   serviceId = val
f840: 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  ue; }..         
f850: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
f860: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
f870: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f880: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f890: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f8a0: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
f8b0: 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 47         private G
f8c0: 75 69 64 20 64 61 74 61 53 6f 75 72 63 65 49 64  uid dataSourceId
f8d0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ;..            p
f8e0: 75 62 6c 69 63 20 47 75 69 64 20 44 61 74 61 53  ublic Guid DataS
f8f0: 6f 75 72 63 65 49 64 0d 0a 20 20 20 20 20 20 20  ourceId..       
f900: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
f910: 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65          get { re
f920: 74 75 72 6e 20 64 61 74 61 53 6f 75 72 63 65 49  turn dataSourceI
f930: 64 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  d; }..          
f940: 20 20 20 20 20 20 73 65 74 20 7b 20 64 61 74 61        set { data
f950: 53 6f 75 72 63 65 49 64 20 3d 20 76 61 6c 75 65  SourceId = value
f960: 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
f970: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
f980: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
f990: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f9a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f9b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f9c0: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
f9d0: 20 20 20 20 20 70 72 69 76 61 74 65 20 47 75 69       private Gui
f9e0: 64 20 64 61 74 61 50 72 6f 76 69 64 65 72 49 64  d dataProviderId
f9f0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ;..            p
fa00: 75 62 6c 69 63 20 47 75 69 64 20 44 61 74 61 50  ublic Guid DataP
fa10: 72 6f 76 69 64 65 72 49 64 0d 0a 20 20 20 20 20  roviderId..     
fa20: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
fa30: 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20            get { 
fa40: 72 65 74 75 72 6e 20 64 61 74 61 50 72 6f 76 69  return dataProvi
fa50: 64 65 72 49 64 3b 20 7d 0d 0a 20 20 20 20 20 20  derId; }..      
fa60: 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20            set { 
fa70: 64 61 74 61 50 72 6f 76 69 64 65 72 49 64 20 3d  dataProviderId =
fa80: 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20   value; }..     
fa90: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
faa0: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
fab0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fac0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fad0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fae0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
faf0: 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
fb00: 74 65 20 47 75 69 64 20 61 64 6f 4e 65 74 54 65  te Guid adoNetTe
fb10: 63 68 6e 6f 6c 6f 67 79 49 64 3b 0d 0a 20 20 20  chnologyId;..   
fb20: 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
fb30: 47 75 69 64 20 41 64 6f 4e 65 74 54 65 63 68 6e  Guid AdoNetTechn
fb40: 6f 6c 6f 67 79 49 64 0d 0a 20 20 20 20 20 20 20  ologyId..       
fb50: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
fb60: 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65          get { re
fb70: 74 75 72 6e 20 61 64 6f 4e 65 74 54 65 63 68 6e  turn adoNetTechn
fb80: 6f 6c 6f 67 79 49 64 3b 20 7d 0d 0a 20 20 20 20  ologyId; }..    
fb90: 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20              set 
fba0: 7b 20 61 64 6f 4e 65 74 54 65 63 68 6e 6f 6c 6f  { adoNetTechnolo
fbb0: 67 79 49 64 20 3d 20 76 61 6c 75 65 3b 20 7d 0d  gyId = value; }.
fbc0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
fbd0: 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e 64              #end
fbe0: 72 65 67 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20  region..        
fbf0: 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72  }..        #endr
fc00: 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20  egion....       
fc10: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
fc20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fc30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fc40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fc50: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
fc60: 20 20 20 20 23 72 65 67 69 6f 6e 20 43 6f 6e 66      #region Conf
fc70: 69 67 75 72 61 74 69 6f 6e 20 43 6c 61 73 73 0d  iguration Class.
fc80: 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65  .        private
fc90: 20 73 65 61 6c 65 64 20 63 6c 61 73 73 20 43 6f   sealed class Co
fca0: 6e 66 69 67 75 72 61 74 69 6f 6e 0d 0a 20 20 20  nfiguration..   
fcb0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
fcc0: 20 20 20 20 23 72 65 67 69 6f 6e 20 50 72 69 76      #region Priv
fcd0: 61 74 65 20 43 6f 6e 73 74 61 6e 74 73 0d 0a 20  ate Constants.. 
fce0: 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
fcf0: 74 65 20 63 6f 6e 73 74 20 63 68 61 72 20 53 77  te const char Sw
fd00: 69 74 63 68 20 3d 20 27 2d 27 3b 0d 0a 20 20 20  itch = '-';..   
fd10: 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65           private
fd20: 20 63 6f 6e 73 74 20 63 68 61 72 20 41 6c 74 53   const char AltS
fd30: 77 69 74 63 68 20 3d 20 27 2f 27 3b 0d 0a 0d 0a  witch = '/';....
fd40: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
fd50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fd60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fd70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fd80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
fd90: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
fda0: 72 69 76 61 74 65 20 73 74 61 74 69 63 20 72 65  rivate static re
fdb0: 61 64 6f 6e 6c 79 20 63 68 61 72 5b 5d 20 53 77  adonly char[] Sw
fdc0: 69 74 63 68 43 68 61 72 73 20 3d 20 7b 0d 0a 20  itchChars = {.. 
fdd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53                 S
fde0: 77 69 74 63 68 2c 20 41 6c 74 53 77 69 74 63 68  witch, AltSwitch
fdf0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 3b  ..            };
fe00: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
fe10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fe20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fe30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fe40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fe50: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
fe60: 20 20 20 70 72 69 76 61 74 65 20 63 6f 6e 73 74     private const
fe70: 20 73 74 72 69 6e 67 20 49 6e 76 61 72 69 61 6e   string Invarian
fe80: 74 4e 61 6d 65 20 3d 20 22 53 79 73 74 65 6d 2e  tName = "System.
fe90: 44 61 74 61 2e 53 51 4c 69 74 65 22 3b 0d 0a 20  Data.SQLite";.. 
fea0: 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
feb0: 74 65 20 63 6f 6e 73 74 20 73 74 72 69 6e 67 20  te const string 
fec0: 45 66 36 49 6e 76 61 72 69 61 6e 74 4e 61 6d 65  Ef6InvariantName
fed0: 20 3d 20 22 53 79 73 74 65 6d 2e 44 61 74 61 2e   = "System.Data.
fee0: 53 51 4c 69 74 65 2e 45 46 36 22 3b 0d 0a 0d 0a  SQLite.EF6";....
fef0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
ff00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ff10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ff20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ff30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
ff40: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
ff50: 72 69 76 61 74 65 20 63 6f 6e 73 74 20 73 74 72  rivate const str
ff60: 69 6e 67 20 46 61 63 74 6f 72 79 54 79 70 65 4e  ing FactoryTypeN
ff70: 61 6d 65 20 3d 0d 0a 20 20 20 20 20 20 20 20 20  ame =..         
ff80: 20 20 20 20 20 20 20 22 53 79 73 74 65 6d 2e 44         "System.D
ff90: 61 74 61 2e 53 51 4c 69 74 65 2e 53 51 4c 69 74  ata.SQLite.SQLit
ffa0: 65 46 61 63 74 6f 72 79 22 3b 0d 0a 0d 0a 20 20  eFactory";....  
ffb0: 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
ffc0: 65 20 63 6f 6e 73 74 20 73 74 72 69 6e 67 20 45  e const string E
ffd0: 66 36 46 61 63 74 6f 72 79 54 79 70 65 4e 61 6d  f6FactoryTypeNam
ffe0: 65 20 3d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e =..           
fff0: 20 20 20 20 20 22 53 79 73 74 65 6d 2e 44 61 74       "System.Dat
10000 61 2e 53 51 4c 69 74 65 2e 45 46 36 2e 53 51 4c  a.SQLite.EF6.SQL
10010 69 74 65 50 72 6f 76 69 64 65 72 46 61 63 74 6f  iteProviderFacto
10020 72 79 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ry";..          
10030 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a    #endregion....
10040 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
10050 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10060 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10070 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10080 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
10090 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  ...            #
100a0 72 65 67 69 6f 6e 20 50 72 69 76 61 74 65 20 53  region Private S
100b0 74 61 74 69 63 20 44 61 74 61 0d 0a 20 20 20 20  tatic Data..    
100c0 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
100d0 73 74 61 74 69 63 20 41 73 73 65 6d 62 6c 79 20  static Assembly 
100e0 73 79 73 74 65 6d 45 66 36 41 73 73 65 6d 62 6c  systemEf6Assembl
100f0 79 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y;..            
10100 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20  #endregion....  
10110 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
10120 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10130 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10140 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10150 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
10160 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 72 65  .            #re
10170 67 69 6f 6e 20 50 72 69 76 61 74 65 20 44 61 74  gion Private Dat
10180 61 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  a..            p
10190 72 69 76 61 74 65 20 41 73 73 65 6d 62 6c 79 4e  rivate AssemblyN
101a0 61 6d 65 20 63 6f 72 65 41 73 73 65 6d 62 6c 79  ame coreAssembly
101b0 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  Name;..         
101c0 20 20 20 70 72 69 76 61 74 65 20 41 73 73 65 6d     private Assem
101d0 62 6c 79 4e 61 6d 65 20 6c 69 6e 71 41 73 73 65  blyName linqAsse
101e0 6d 62 6c 79 4e 61 6d 65 3b 0d 0a 20 20 20 20 20  mblyName;..     
101f0 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 41         private A
10200 73 73 65 6d 62 6c 79 4e 61 6d 65 20 65 66 36 41  ssemblyName ef6A
10210 73 73 65 6d 62 6c 79 4e 61 6d 65 3b 0d 0a 20 20  ssemblyName;..  
10220 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
10230 65 20 41 73 73 65 6d 62 6c 79 4e 61 6d 65 20 64  e AssemblyName d
10240 65 73 69 67 6e 65 72 41 73 73 65 6d 62 6c 79 4e  esignerAssemblyN
10250 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ame;..          
10260 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a    #endregion....
10270 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
10280 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10290 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
102a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
102b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
102c0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  ...            #
102d0 72 65 67 69 6f 6e 20 50 72 69 76 61 74 65 20 43  region Private C
102e0 6f 6e 73 74 72 75 63 74 6f 72 73 0d 0a 20 20 20  onstructors..   
102f0 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65           private
10300 20 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 28 0d   Configuration(.
10310 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
10320 20 41 73 73 65 6d 62 6c 79 20 61 73 73 65 6d 62   Assembly assemb
10330 6c 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ly,..           
10340 20 20 20 20 20 73 74 72 69 6e 67 20 6c 6f 67 46       string logF
10350 69 6c 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20  ileName,..      
10360 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
10370 20 64 69 72 65 63 74 6f 72 79 2c 0d 0a 20 20 20   directory,..   
10380 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72               str
10390 69 6e 67 20 63 6f 72 65 46 69 6c 65 4e 61 6d 65  ing coreFileName
103a0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
103b0 20 20 20 73 74 72 69 6e 67 20 6c 69 6e 71 46 69     string linqFi
103c0 6c 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20  leName,..       
103d0 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
103e0 65 66 36 46 69 6c 65 4e 61 6d 65 2c 0d 0a 20 20  ef6FileName,..  
103f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
10400 72 69 6e 67 20 64 65 73 69 67 6e 65 72 46 69 6c  ring designerFil
10410 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20  eName,..        
10420 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 72          string r
10430 65 67 69 73 74 72 79 56 65 72 73 69 6f 6e 2c 0d  egistryVersion,.
10440 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
10450 20 73 74 72 69 6e 67 20 63 6f 6e 66 69 67 56 65   string configVe
10460 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20  rsion,..        
10470 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 76          string v
10480 73 56 65 72 73 69 6f 6e 53 75 66 66 69 78 2c 0d  sVersionSuffix,.
10490 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
104a0 20 73 74 72 69 6e 67 20 64 65 62 75 67 46 6f 72   string debugFor
104b0 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  mat,..          
104c0 20 20 20 20 20 20 73 74 72 69 6e 67 20 74 72 61        string tra
104d0 63 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20  ceFormat,..     
104e0 20 20 20 20 20 20 20 20 20 20 20 49 6e 73 74 61             Insta
104f0 6c 6c 46 6c 61 67 73 20 69 6e 73 74 61 6c 6c 46  llFlags installF
10500 6c 61 67 73 2c 0d 0a 20 20 20 20 20 20 20 20 20  lags,..         
10510 20 20 20 20 20 20 20 50 72 6f 76 69 64 65 72 46         ProviderF
10520 6c 61 67 73 20 70 72 6f 76 69 64 65 72 46 6c 61  lags providerFla
10530 67 73 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  gs,..           
10540 20 20 20 20 20 54 72 61 63 65 50 72 69 6f 72 69       TracePriori
10550 74 79 20 64 65 62 75 67 50 72 69 6f 72 69 74 79  ty debugPriority
10560 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
10570 20 20 20 54 72 61 63 65 50 72 69 6f 72 69 74 79     TracePriority
10580 20 74 72 61 63 65 50 72 69 6f 72 69 74 79 2c 0d   tracePriority,.
10590 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
105a0 20 62 6f 6f 6c 20 70 65 72 55 73 65 72 2c 0d 0a   bool perUser,..
105b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
105c0 62 6f 6f 6c 20 69 6e 73 74 61 6c 6c 2c 0d 0a 20  bool install,.. 
105d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62                 b
105e0 6f 6f 6c 20 77 6f 77 36 34 2c 0d 0a 20 20 20 20  ool wow64,..    
105f0 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
10600 20 6e 6f 52 75 6e 74 69 6d 65 56 65 72 73 69 6f   noRuntimeVersio
10610 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n,..            
10620 20 20 20 20 62 6f 6f 6c 20 6e 6f 44 65 73 6b 74      bool noDeskt
10630 6f 70 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  op,..           
10640 20 20 20 20 20 62 6f 6f 6c 20 6e 6f 43 6f 6d 70       bool noComp
10650 61 63 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  act,..          
10660 20 20 20 20 20 20 62 6f 6f 6c 20 6e 6f 4e 65 74        bool noNet
10670 46 78 32 30 2c 0d 0a 20 20 20 20 20 20 20 20 20  Fx20,..         
10680 20 20 20 20 20 20 20 62 6f 6f 6c 20 6e 6f 4e 65         bool noNe
10690 74 46 78 33 35 2c 0d 0a 20 20 20 20 20 20 20 20  tFx35,..        
106a0 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 6e 6f 4e          bool noN
106b0 65 74 46 78 34 30 2c 0d 0a 20 20 20 20 20 20 20  etFx40,..       
106c0 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 6e 6f           bool no
106d0 4e 65 74 46 78 34 35 2c 0d 0a 20 20 20 20 20 20  NetFx45,..      
106e0 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 6e            bool n
106f0 6f 4e 65 74 46 78 34 35 31 2c 0d 0a 20 20 20 20  oNetFx451,..    
10700 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
10710 20 6e 6f 4e 65 74 46 78 34 35 32 2c 0d 0a 20 20   noNetFx452,..  
10720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f                bo
10730 6f 6c 20 6e 6f 4e 65 74 46 78 34 36 2c 0d 0a 20  ol noNetFx46,.. 
10740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62                 b
10750 6f 6f 6c 20 6e 6f 56 73 32 30 30 35 2c 0d 0a 20  ool noVs2005,.. 
10760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62                 b
10770 6f 6f 6c 20 6e 6f 56 73 32 30 30 38 2c 0d 0a 20  ool noVs2008,.. 
10780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62                 b
10790 6f 6f 6c 20 6e 6f 56 73 32 30 31 30 2c 0d 0a 20  ool noVs2010,.. 
107a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62                 b
107b0 6f 6f 6c 20 6e 6f 56 73 32 30 31 32 2c 0d 0a 20  ool noVs2012,.. 
107c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62                 b
107d0 6f 6f 6c 20 6e 6f 56 73 32 30 31 33 2c 0d 0a 20  ool noVs2013,.. 
107e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62                 b
107f0 6f 6f 6c 20 6e 6f 56 73 32 30 31 35 2c 0d 0a 20  ool noVs2015,.. 
10800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62                 b
10810 6f 6f 6c 20 6e 6f 54 72 61 63 65 2c 0d 0a 20 20  ool noTrace,..  
10820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f                bo
10830 6f 6c 20 6e 6f 43 6f 6e 73 6f 6c 65 2c 0d 0a 20  ol noConsole,.. 
10840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62                 b
10850 6f 6f 6c 20 6e 6f 4c 6f 67 2c 0d 0a 20 20 20 20  ool noLog,..    
10860 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
10870 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 2c   throwOnMissing,
10880 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
10890 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a    bool whatIf,..
108a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
108b0 62 6f 6f 6c 20 64 65 62 75 67 2c 0d 0a 20 20 20  bool debug,..   
108c0 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f               boo
108d0 6c 20 76 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20  l verbose,..    
108e0 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
108f0 20 63 6f 6e 66 69 72 6d 0d 0a 20 20 20 20 20 20   confirm..      
10900 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
10910 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
10920 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73              this
10930 2e 61 73 73 65 6d 62 6c 79 20 3d 20 61 73 73 65  .assembly = asse
10940 6d 62 6c 79 3b 0d 0a 20 20 20 20 20 20 20 20 20  mbly;..         
10950 20 20 20 20 20 20 20 74 68 69 73 2e 6c 6f 67 46         this.logF
10960 69 6c 65 4e 61 6d 65 20 3d 20 6c 6f 67 46 69 6c  ileName = logFil
10970 65 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20  eName;..        
10980 20 20 20 20 20 20 20 20 74 68 69 73 2e 64 69 72          this.dir
10990 65 63 74 6f 72 79 20 3d 20 64 69 72 65 63 74 6f  ectory = directo
109a0 72 79 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ry;..           
109b0 20 20 20 20 20 74 68 69 73 2e 63 6f 72 65 46 69       this.coreFi
109c0 6c 65 4e 61 6d 65 20 3d 20 63 6f 72 65 46 69 6c  leName = coreFil
109d0 65 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20  eName;..        
109e0 20 20 20 20 20 20 20 20 74 68 69 73 2e 6c 69 6e          this.lin
109f0 71 46 69 6c 65 4e 61 6d 65 20 3d 20 6c 69 6e 71  qFileName = linq
10a00 46 69 6c 65 4e 61 6d 65 3b 0d 0a 20 20 20 20 20  FileName;..     
10a10 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e             this.
10a20 65 66 36 46 69 6c 65 4e 61 6d 65 20 3d 20 65 66  ef6FileName = ef
10a30 36 46 69 6c 65 4e 61 6d 65 3b 0d 0a 20 20 20 20  6FileName;..    
10a40 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73              this
10a50 2e 64 65 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d  .designerFileNam
10a60 65 20 3d 20 64 65 73 69 67 6e 65 72 46 69 6c 65  e = designerFile
10a70 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  Name;..         
10a80 20 20 20 20 20 20 20 74 68 69 73 2e 72 65 67 69         this.regi
10a90 73 74 72 79 56 65 72 73 69 6f 6e 20 3d 20 72 65  stryVersion = re
10aa0 67 69 73 74 72 79 56 65 72 73 69 6f 6e 3b 0d 0a  gistryVersion;..
10ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10ac0 74 68 69 73 2e 63 6f 6e 66 69 67 56 65 72 73 69  this.configVersi
10ad0 6f 6e 20 3d 20 63 6f 6e 66 69 67 56 65 72 73 69  on = configVersi
10ae0 6f 6e 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  on;..           
10af0 20 20 20 20 20 74 68 69 73 2e 76 73 56 65 72 73       this.vsVers
10b00 69 6f 6e 53 75 66 66 69 78 20 3d 20 76 73 56 65  ionSuffix = vsVe
10b10 72 73 69 6f 6e 53 75 66 66 69 78 3b 0d 0a 20 20  rsionSuffix;..  
10b20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
10b30 69 73 2e 64 65 62 75 67 46 6f 72 6d 61 74 20 3d  is.debugFormat =
10b40 20 64 65 62 75 67 46 6f 72 6d 61 74 3b 0d 0a 20   debugFormat;.. 
10b50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
10b60 68 69 73 2e 74 72 61 63 65 46 6f 72 6d 61 74 20  his.traceFormat 
10b70 3d 20 74 72 61 63 65 46 6f 72 6d 61 74 3b 0d 0a  = traceFormat;..
10b80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10b90 74 68 69 73 2e 69 6e 73 74 61 6c 6c 46 6c 61 67  this.installFlag
10ba0 73 20 3d 20 69 6e 73 74 61 6c 6c 46 6c 61 67 73  s = installFlags
10bb0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
10bc0 20 20 20 74 68 69 73 2e 70 72 6f 76 69 64 65 72     this.provider
10bd0 46 6c 61 67 73 20 3d 20 70 72 6f 76 69 64 65 72  Flags = provider
10be0 46 6c 61 67 73 3b 0d 0a 20 20 20 20 20 20 20 20  Flags;..        
10bf0 20 20 20 20 20 20 20 20 74 68 69 73 2e 64 65 62          this.deb
10c00 75 67 50 72 69 6f 72 69 74 79 20 3d 20 64 65 62  ugPriority = deb
10c10 75 67 50 72 69 6f 72 69 74 79 3b 0d 0a 20 20 20  ugPriority;..   
10c20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69               thi
10c30 73 2e 74 72 61 63 65 50 72 69 6f 72 69 74 79 20  s.tracePriority 
10c40 3d 20 74 72 61 63 65 50 72 69 6f 72 69 74 79 3b  = tracePriority;
10c50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
10c60 20 20 74 68 69 73 2e 70 65 72 55 73 65 72 20 3d    this.perUser =
10c70 20 70 65 72 55 73 65 72 3b 0d 0a 20 20 20 20 20   perUser;..     
10c80 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e             this.
10c90 69 6e 73 74 61 6c 6c 20 3d 20 69 6e 73 74 61 6c  install = instal
10ca0 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l;..            
10cb0 20 20 20 20 74 68 69 73 2e 77 6f 77 36 34 20 3d      this.wow64 =
10cc0 20 77 6f 77 36 34 3b 0d 0a 20 20 20 20 20 20 20   wow64;..       
10cd0 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 6e 6f           this.no
10ce0 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 20 3d  RuntimeVersion =
10cf0 20 6e 6f 52 75 6e 74 69 6d 65 56 65 72 73 69 6f   noRuntimeVersio
10d00 6e 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n;..            
10d10 20 20 20 20 74 68 69 73 2e 6e 6f 44 65 73 6b 74      this.noDeskt
10d20 6f 70 20 3d 20 6e 6f 44 65 73 6b 74 6f 70 3b 0d  op = noDesktop;.
10d30 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
10d40 20 74 68 69 73 2e 6e 6f 43 6f 6d 70 61 63 74 20   this.noCompact 
10d50 3d 20 6e 6f 43 6f 6d 70 61 63 74 3b 0d 0a 20 20  = noCompact;..  
10d60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
10d70 69 73 2e 6e 6f 4e 65 74 46 78 32 30 20 3d 20 6e  is.noNetFx20 = n
10d80 6f 4e 65 74 46 78 32 30 3b 0d 0a 20 20 20 20 20  oNetFx20;..     
10d90 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e             this.
10da0 6e 6f 4e 65 74 46 78 33 35 20 3d 20 6e 6f 4e 65  noNetFx35 = noNe
10db0 74 46 78 33 35 3b 0d 0a 20 20 20 20 20 20 20 20  tFx35;..        
10dc0 20 20 20 20 20 20 20 20 74 68 69 73 2e 6e 6f 4e          this.noN
10dd0 65 74 46 78 34 30 20 3d 20 6e 6f 4e 65 74 46 78  etFx40 = noNetFx
10de0 34 30 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  40;..           
10df0 20 20 20 20 20 74 68 69 73 2e 6e 6f 4e 65 74 46       this.noNetF
10e00 78 34 35 20 3d 20 6e 6f 4e 65 74 46 78 34 35 3b  x45 = noNetFx45;
10e10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
10e20 20 20 74 68 69 73 2e 6e 6f 4e 65 74 46 78 34 35    this.noNetFx45
10e30 31 20 3d 20 6e 6f 4e 65 74 46 78 34 35 31 3b 0d  1 = noNetFx451;.
10e40 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
10e50 20 74 68 69 73 2e 6e 6f 4e 65 74 46 78 34 35 32   this.noNetFx452
10e60 20 3d 20 6e 6f 4e 65 74 46 78 34 35 32 3b 0d 0a   = noNetFx452;..
10e70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10e80 74 68 69 73 2e 6e 6f 4e 65 74 46 78 34 36 20 3d  this.noNetFx46 =
10e90 20 6e 6f 4e 65 74 46 78 34 36 3b 0d 0a 20 20 20   noNetFx46;..   
10ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69               thi
10eb0 73 2e 6e 6f 56 73 32 30 30 35 20 3d 20 6e 6f 56  s.noVs2005 = noV
10ec0 73 32 30 30 35 3b 0d 0a 20 20 20 20 20 20 20 20  s2005;..        
10ed0 20 20 20 20 20 20 20 20 74 68 69 73 2e 6e 6f 56          this.noV
10ee0 73 32 30 30 38 20 3d 20 6e 6f 56 73 32 30 30 38  s2008 = noVs2008
10ef0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
10f00 20 20 20 74 68 69 73 2e 6e 6f 56 73 32 30 31 30     this.noVs2010
10f10 20 3d 20 6e 6f 56 73 32 30 31 30 3b 0d 0a 20 20   = noVs2010;..  
10f20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
10f30 69 73 2e 6e 6f 56 73 32 30 31 32 20 3d 20 6e 6f  is.noVs2012 = no
10f40 56 73 32 30 31 32 3b 0d 0a 20 20 20 20 20 20 20  Vs2012;..       
10f50 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 6e 6f           this.no
10f60 56 73 32 30 31 33 20 3d 20 6e 6f 56 73 32 30 31  Vs2013 = noVs201
10f70 33 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  3;..            
10f80 20 20 20 20 74 68 69 73 2e 6e 6f 56 73 32 30 31      this.noVs201
10f90 35 20 3d 20 6e 6f 56 73 32 30 31 35 3b 0d 0a 20  5 = noVs2015;.. 
10fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
10fb0 68 69 73 2e 6e 6f 54 72 61 63 65 20 3d 20 6e 6f  his.noTrace = no
10fc0 54 72 61 63 65 3b 0d 0a 20 20 20 20 20 20 20 20  Trace;..        
10fd0 20 20 20 20 20 20 20 20 74 68 69 73 2e 6e 6f 43          this.noC
10fe0 6f 6e 73 6f 6c 65 20 3d 20 6e 6f 43 6f 6e 73 6f  onsole = noConso
10ff0 6c 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  le;..           
11000 20 20 20 20 20 74 68 69 73 2e 6e 6f 4c 6f 67 20       this.noLog 
11010 3d 20 6e 6f 4c 6f 67 3b 0d 0a 20 20 20 20 20 20  = noLog;..      
11020 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 74            this.t
11030 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 20 3d 20  hrowOnMissing = 
11040 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 3b 0d  throwOnMissing;.
11050 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
11060 20 74 68 69 73 2e 77 68 61 74 49 66 20 3d 20 77   this.whatIf = w
11070 68 61 74 49 66 3b 0d 0a 20 20 20 20 20 20 20 20  hatIf;..        
11080 20 20 20 20 20 20 20 20 74 68 69 73 2e 64 65 62          this.deb
11090 75 67 20 3d 20 64 65 62 75 67 3b 0d 0a 20 20 20  ug = debug;..   
110a0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69               thi
110b0 73 2e 76 65 72 62 6f 73 65 20 3d 20 76 65 72 62  s.verbose = verb
110c0 6f 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ose;..          
110d0 20 20 20 20 20 20 74 68 69 73 2e 63 6f 6e 66 69        this.confi
110e0 72 6d 20 3d 20 63 6f 6e 66 69 72 6d 3b 0d 0a 20  rm = confirm;.. 
110f0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
11100 20 20 20 20 20 20 20 20 20 20 23 65 6e 64 72 65            #endre
11110 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20  gion....        
11120 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
11130 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11140 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11150 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11160 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
11170 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50         #region P
11180 72 69 76 61 74 65 20 53 74 61 74 69 63 20 4d 65  rivate Static Me
11190 74 68 6f 64 73 0d 0a 20 20 20 20 20 20 20 20 20  thods..         
111a0 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69     private stati
111b0 63 20 76 6f 69 64 20 47 65 74 44 65 66 61 75 6c  c void GetDefaul
111c0 74 46 69 6c 65 4e 61 6d 65 73 28 0d 0a 20 20 20  tFileNames(..   
111d0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66               ref
111e0 20 73 74 72 69 6e 67 20 64 69 72 65 63 74 6f 72   string director
111f0 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y,..            
11200 20 20 20 20 72 65 66 20 73 74 72 69 6e 67 20 63      ref string c
11210 6f 72 65 46 69 6c 65 4e 61 6d 65 2c 0d 0a 20 20  oreFileName,..  
11220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
11230 66 20 73 74 72 69 6e 67 20 6c 69 6e 71 46 69 6c  f string linqFil
11240 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20  eName,..        
11250 20 20 20 20 20 20 20 20 72 65 66 20 73 74 72 69          ref stri
11260 6e 67 20 65 66 36 46 69 6c 65 4e 61 6d 65 2c 0d  ng ef6FileName,.
11270 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
11280 20 72 65 66 20 73 74 72 69 6e 67 20 64 65 73 69   ref string desi
11290 67 6e 65 72 46 69 6c 65 4e 61 6d 65 0d 0a 20 20  gnerFileName..  
112a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d                ).
112b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
112c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
112d0 69 66 20 28 74 68 69 73 41 73 73 65 6d 62 6c 79  if (thisAssembly
112e0 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
112f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
11300 65 74 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20  eturn;....      
11310 20 20 20 20 20 20 20 20 20 20 64 69 72 65 63 74            direct
11320 6f 72 79 20 3d 20 50 61 74 68 2e 47 65 74 44 69  ory = Path.GetDi
11330 72 65 63 74 6f 72 79 4e 61 6d 65 28 74 68 69 73  rectoryName(this
11340 41 73 73 65 6d 62 6c 79 2e 4c 6f 63 61 74 69 6f  Assembly.Locatio
11350 6e 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  n);....         
11360 20 20 20 20 20 20 20 69 66 20 28 53 74 72 69 6e         if (Strin
11370 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28  g.IsNullOrEmpty(
11380 64 69 72 65 63 74 6f 72 79 29 29 0d 0a 20 20 20  directory))..   
11390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
113a0 20 72 65 74 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20   return;....    
113b0 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 72 65              core
113c0 46 69 6c 65 4e 61 6d 65 20 3d 20 50 61 74 68 2e  FileName = Path.
113d0 43 6f 6d 62 69 6e 65 28 64 69 72 65 63 74 6f 72  Combine(director
113e0 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y,..            
113f0 20 20 20 20 20 20 20 20 49 6e 73 74 61 6c 6c 65          Installe
11400 72 2e 43 6f 72 65 46 69 6c 65 4e 61 6d 65 29 3b  r.CoreFileName);
11410 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
11420 20 20 20 20 6c 69 6e 71 46 69 6c 65 4e 61 6d 65      linqFileName
11430 20 3d 20 50 61 74 68 2e 43 6f 6d 62 69 6e 65 28   = Path.Combine(
11440 64 69 72 65 63 74 6f 72 79 2c 0d 0a 20 20 20 20  directory,..    
11450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11460 49 6e 73 74 61 6c 6c 65 72 2e 4c 69 6e 71 46 69  Installer.LinqFi
11470 6c 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20  leName);....    
11480 20 20 20 20 20 20 20 20 20 20 20 20 65 66 36 46              ef6F
11490 69 6c 65 4e 61 6d 65 20 3d 20 50 61 74 68 2e 43  ileName = Path.C
114a0 6f 6d 62 69 6e 65 28 64 69 72 65 63 74 6f 72 79  ombine(directory
114b0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
114c0 20 20 20 20 20 20 20 49 6e 73 74 61 6c 6c 65 72         Installer
114d0 2e 45 66 36 46 69 6c 65 4e 61 6d 65 29 3b 0d 0a  .Ef6FileName);..
114e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
114f0 20 20 64 65 73 69 67 6e 65 72 46 69 6c 65 4e 61    designerFileNa
11500 6d 65 20 3d 20 50 61 74 68 2e 43 6f 6d 62 69 6e  me = Path.Combin
11510 65 28 64 69 72 65 63 74 6f 72 79 2c 0d 0a 20 20  e(directory,..  
11520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11530 20 20 49 6e 73 74 61 6c 6c 65 72 2e 44 65 73 69    Installer.Desi
11540 67 6e 65 72 46 69 6c 65 4e 61 6d 65 29 3b 0d 0a  gnerFileName);..
11550 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
11560 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
11570 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11580 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11590 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
115a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
115b0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
115c0 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 62  private static b
115d0 6f 6f 6c 20 43 68 65 63 6b 4f 70 74 69 6f 6e 28  ool CheckOption(
115e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
115f0 20 20 72 65 66 20 73 74 72 69 6e 67 20 61 72 67    ref string arg
11600 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
11610 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20    )..           
11620 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
11630 20 20 20 20 73 74 72 69 6e 67 20 72 65 73 75 6c      string resul
11640 74 20 3d 20 61 72 67 3b 0d 0a 0d 0a 20 20 20 20  t = arg;....    
11650 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
11660 21 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72  !String.IsNullOr
11670 45 6d 70 74 79 28 72 65 73 75 6c 74 29 29 0d 0a  Empty(result))..
11680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11690 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
116a0 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
116b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
116c0 2f 20 4e 4f 54 45 3a 20 52 65 6d 6f 76 65 20 61  / NOTE: Remove a
116d0 6c 6c 20 6c 65 61 64 69 6e 67 20 73 77 69 74 63  ll leading switc
116e0 68 20 63 68 61 72 73 2e 0d 0a 20 20 20 20 20 20  h chars...      
116f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
11700 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
11710 20 20 20 20 20 20 72 65 73 75 6c 74 20 3d 20 72        result = r
11720 65 73 75 6c 74 2e 54 72 69 6d 53 74 61 72 74 28  esult.TrimStart(
11730 53 77 69 74 63 68 43 68 61 72 73 29 3b 0d 0a 0d  SwitchChars);...
11740 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
11750 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
11760 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
11770 4e 4f 54 45 3a 20 48 6f 77 20 6d 61 6e 79 20 63  NOTE: How many c
11780 68 61 72 73 20 77 65 72 65 20 72 65 6d 6f 76 65  hars were remove
11790 64 3f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  d?..            
117a0 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
117b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
117c0 69 6e 74 20 63 6f 75 6e 74 20 3d 20 61 72 67 2e  int count = arg.
117d0 4c 65 6e 67 74 68 20 2d 20 72 65 73 75 6c 74 2e  Length - result.
117e0 4c 65 6e 67 74 68 3b 0d 0a 0d 0a 20 20 20 20 20  Length;....     
117f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
11800 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
11810 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20         // NOTE: 
11820 57 61 73 20 74 68 65 72 65 20 61 74 20 6c 65 61  Was there at lea
11830 73 74 20 6f 6e 65 3f 0d 0a 20 20 20 20 20 20 20  st one?..       
11840 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
11850 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
11860 20 20 20 20 20 69 66 20 28 63 6f 75 6e 74 20 3e       if (count >
11870 20 30 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20   0)..           
11880 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
11890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
118a0 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
118b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
118c0 2f 2f 20 4e 4f 54 45 3a 20 4f 6b 2c 20 72 65 70  // NOTE: Ok, rep
118d0 6c 61 63 65 20 74 68 65 69 72 20 6f 72 69 67 69  lace their origi
118e0 6e 61 6c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  nal..           
118f0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
11900 20 20 20 20 20 20 61 72 67 75 6d 65 6e 74 2e 0d        argument..
11910 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
11920 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
11930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11940 20 20 20 20 20 61 72 67 20 3d 20 72 65 73 75 6c       arg = resul
11950 74 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  t;....          
11960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
11970 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
11980 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54            // NOT
11990 45 3a 20 59 65 73 2c 20 74 68 69 73 20 69 73 20  E: Yes, this is 
119a0 61 20 73 77 69 74 63 68 2e 0d 0a 20 20 20 20 20  a switch...     
119b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
119c0 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
119d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
119e0 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20  eturn true;..   
119f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11a00 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
11a10 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
11a20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
11a30 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20  false;..        
11a40 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
11a50 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
11a60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11a70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11a80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11a90 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
11aa0 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
11ab0 73 74 61 74 69 63 20 62 6f 6f 6c 20 4d 61 74 63  static bool Matc
11ac0 68 4f 70 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20  hOption(..      
11ad0 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
11ae0 20 61 72 67 2c 0d 0a 20 20 20 20 20 20 20 20 20   arg,..         
11af0 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6f 70         string op
11b00 74 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20 20 20  tion..          
11b10 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
11b20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
11b30 20 20 20 20 20 20 20 20 69 66 20 28 28 61 72 67          if ((arg
11b40 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20 28 6f 70   == null) || (op
11b50 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 29 0d 0a  tion == null))..
11b60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11b70 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
11b80 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
11b90 20 20 20 20 20 72 65 74 75 72 6e 20 53 74 72 69       return Stri
11ba0 6e 67 2e 43 6f 6d 70 61 72 65 28 61 72 67 2c 20  ng.Compare(arg, 
11bb0 30 2c 20 6f 70 74 69 6f 6e 2c 20 30 2c 0d 0a 20  0, option, 0,.. 
11bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11bd0 20 20 20 61 72 67 2e 4c 65 6e 67 74 68 2c 20 53     arg.Length, S
11be0 74 72 69 6e 67 43 6f 6d 70 61 72 69 73 6f 6e 2e  tringComparison.
11bf0 4f 72 64 69 6e 61 6c 49 67 6e 6f 72 65 43 61 73  OrdinalIgnoreCas
11c00 65 29 20 3d 3d 20 30 3b 0d 0a 20 20 20 20 20 20  e) == 0;..      
11c10 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
11c20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
11c30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11c40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11c50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11c60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
11c70 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
11c80 65 20 73 74 61 74 69 63 20 62 6f 6f 6c 3f 20 50  e static bool? P
11c90 61 72 73 65 42 6f 6f 6c 65 61 6e 28 0d 0a 20 20  arseBoolean(..  
11ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
11cb0 72 69 6e 67 20 74 65 78 74 0d 0a 20 20 20 20 20  ring text..     
11cc0 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
11cd0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
11ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
11cf0 28 21 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f  (!String.IsNullO
11d00 72 45 6d 70 74 79 28 74 65 78 74 29 29 0d 0a 20  rEmpty(text)).. 
11d10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
11d20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
11d30 20 20 20 20 20 20 62 6f 6f 6c 20 76 61 6c 75 65        bool value
11d40 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
11d50 20 20 20 20 20 20 20 20 20 69 66 20 28 62 6f 6f           if (boo
11d60 6c 2e 54 72 79 50 61 72 73 65 28 74 65 78 74 2c  l.TryParse(text,
11d70 20 6f 75 74 20 76 61 6c 75 65 29 29 0d 0a 20 20   out value))..  
11d80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11d90 20 20 20 20 20 20 72 65 74 75 72 6e 20 76 61 6c        return val
11da0 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
11db0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
11dc0 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
11dd0 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20   null;..        
11de0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
11df0 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
11e00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11e10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11e20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11e30 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
11e40 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
11e50 73 74 61 74 69 63 20 6f 62 6a 65 63 74 20 50 61  static object Pa
11e60 72 73 65 45 6e 75 6d 28 0d 0a 20 20 20 20 20 20  rseEnum(..      
11e70 20 20 20 20 20 20 20 20 20 20 54 79 70 65 20 65            Type e
11e80 6e 75 6d 54 79 70 65 2c 0d 0a 20 20 20 20 20 20  numType,..      
11e90 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
11ea0 20 74 65 78 74 2c 0d 0a 20 20 20 20 20 20 20 20   text,..        
11eb0 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 6e 6f 43          bool noC
11ec0 61 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ase..           
11ed0 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
11ee0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
11ef0 20 20 20 20 20 20 20 69 66 20 28 28 65 6e 75 6d         if ((enum
11f00 54 79 70 65 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c  Type == null) ||
11f10 20 21 65 6e 75 6d 54 79 70 65 2e 49 73 45 6e 75   !enumType.IsEnu
11f20 6d 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  m)..            
11f30 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e          return n
11f40 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ull;....        
11f50 20 20 20 20 20 20 20 20 69 66 20 28 21 53 74 72          if (!Str
11f60 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74  ing.IsNullOrEmpt
11f70 79 28 74 65 78 74 29 29 0d 0a 20 20 20 20 20 20  y(text))..      
11f80 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
11f90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11fa0 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20   try..          
11fb0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
11fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11fd0 20 20 20 20 20 72 65 74 75 72 6e 20 45 6e 75 6d       return Enum
11fe0 2e 50 61 72 73 65 28 65 6e 75 6d 54 79 70 65 2c  .Parse(enumType,
11ff0 20 74 65 78 74 2c 20 6e 6f 43 61 73 65 29 3b 0d   text, noCase);.
12000 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
12010 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
12020 20 20 20 20 20 20 20 20 20 20 20 20 63 61 74 63              catc
12030 68 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  h..             
12040 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
12050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12060 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e    // do nothing.
12070 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
12080 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
12090 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
120a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
120b0 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20  turn null;..    
120c0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
120d0 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
120e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
120f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12100 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12110 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
12120 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76              priv
12130 61 74 65 20 73 74 61 74 69 63 20 62 6f 6f 6c 20  ate static bool 
12140 49 73 53 79 73 74 65 6d 45 66 36 41 73 73 65 6d  IsSystemEf6Assem
12150 62 6c 79 47 6c 6f 62 61 6c 28 29 0d 0a 20 20 20  blyGlobal()..   
12160 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
12170 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
12180 73 79 73 74 65 6d 45 66 36 41 73 73 65 6d 62 6c  systemEf6Assembl
12190 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  y == null)..    
121a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
121b0 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d  return false;...
121c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
121d0 20 72 65 74 75 72 6e 20 73 79 73 74 65 6d 45 66   return systemEf
121e0 36 41 73 73 65 6d 62 6c 79 2e 47 6c 6f 62 61 6c  6Assembly.Global
121f0 41 73 73 65 6d 62 6c 79 43 61 63 68 65 3b 0d 0a  AssemblyCache;..
12200 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
12210 20 20 20 20 20 20 20 20 20 20 20 23 65 6e 64 72             #endr
12220 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20  egion....       
12230 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
12240 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12250 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12260 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12270 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
12280 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20          #region 
12290 50 75 62 6c 69 63 20 53 74 61 74 69 63 20 4d 65  Public Static Me
122a0 74 68 6f 64 73 0d 0a 20 20 20 20 20 20 20 20 20  thods..         
122b0 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63     public static
122c0 20 76 6f 69 64 20 42 72 65 61 6b 49 6e 74 6f 44   void BreakIntoD
122d0 65 62 75 67 67 65 72 28 29 0d 0a 20 20 20 20 20  ebugger()..     
122e0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
122f0 20 20 20 20 20 20 20 20 20 20 43 6f 6e 73 6f 6c            Consol
12300 65 2e 57 72 69 74 65 4c 69 6e 65 28 0d 0a 20 20  e.WriteLine(..  
12310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12320 20 20 22 41 74 74 61 63 68 20 61 20 64 65 62 75    "Attach a debu
12330 67 67 65 72 20 74 6f 20 70 72 6f 63 65 73 73 20  gger to process 
12340 7b 30 7d 20 61 6e 64 20 70 72 65 73 73 20 22 20  {0} and press " 
12350 2b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  +..             
12360 20 20 20 20 20 20 20 22 61 6e 79 20 6b 65 79 20         "any key 
12370 74 6f 20 63 6f 6e 74 69 6e 75 65 2e 22 2c 20 28  to continue.", (
12380 74 68 69 73 50 72 6f 63 65 73 73 20 21 3d 20 6e  thisProcess != n
12390 75 6c 6c 29 20 3f 0d 0a 20 20 20 20 20 20 20 20  ull) ?..        
123a0 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73              this
123b0 50 72 6f 63 65 73 73 2e 49 64 2e 54 6f 53 74 72  Process.Id.ToStr
123c0 69 6e 67 28 29 20 3a 20 22 3c 75 6e 6b 6e 6f 77  ing() : "<unknow
123d0 6e 3e 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  n>");....       
123e0 20 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20           try..  
123f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
12400 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
12410 20 20 20 20 20 43 6f 6e 73 6f 6c 65 2e 52 65 61       Console.Rea
12420 64 4b 65 79 28 74 72 75 65 29 3b 20 2f 2a 20 74  dKey(true); /* t
12430 68 72 6f 77 20 2a 2f 0d 0a 20 20 20 20 20 20 20  hrow */..       
12440 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
12450 20 20 20 20 20 20 20 20 20 20 20 20 63 61 74 63              catc
12460 68 20 28 49 6e 76 61 6c 69 64 4f 70 65 72 61 74  h (InvalidOperat
12470 69 6f 6e 45 78 63 65 70 74 69 6f 6e 29 20 2f 2f  ionException) //
12480 20 43 6f 6e 73 6f 6c 65 2e 52 65 61 64 4b 65 79   Console.ReadKey
12490 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
124a0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
124b0 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e           // do n
124c0 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20  othing...       
124d0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
124e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 44 65                De
124f0 62 75 67 67 65 72 2e 42 72 65 61 6b 28 29 3b 0d  bugger.Break();.
12500 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
12510 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
12520 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12530 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12540 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12550 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12560 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
12570 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 43   public static C
12580 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 43 72 65  onfiguration Cre
12590 61 74 65 44 65 66 61 75 6c 74 28 29 0d 0a 20 20  ateDefault()..  
125a0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
125b0 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72               str
125c0 69 6e 67 20 64 69 72 65 63 74 6f 72 79 20 3d 20  ing directory = 
125d0 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20  null;..         
125e0 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 63 6f         string co
125f0 72 65 46 69 6c 65 4e 61 6d 65 20 3d 20 6e 75 6c  reFileName = nul
12600 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l;..            
12610 20 20 20 20 73 74 72 69 6e 67 20 6c 69 6e 71 46      string linqF
12620 69 6c 65 4e 61 6d 65 20 3d 20 6e 75 6c 6c 3b 0d  ileName = null;.
12630 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
12640 20 73 74 72 69 6e 67 20 65 66 36 46 69 6c 65 4e   string ef6FileN
12650 61 6d 65 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20  ame = null;..   
12660 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72               str
12670 69 6e 67 20 64 65 73 69 67 6e 65 72 46 69 6c 65  ing designerFile
12680 4e 61 6d 65 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a  Name = null;....
12690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
126a0 47 65 74 44 65 66 61 75 6c 74 46 69 6c 65 4e 61  GetDefaultFileNa
126b0 6d 65 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mes(..          
126c0 20 20 20 20 20 20 20 20 20 20 72 65 66 20 64 69            ref di
126d0 72 65 63 74 6f 72 79 2c 20 72 65 66 20 63 6f 72  rectory, ref cor
126e0 65 46 69 6c 65 4e 61 6d 65 2c 20 72 65 66 20 6c  eFileName, ref l
126f0 69 6e 71 46 69 6c 65 4e 61 6d 65 2c 0d 0a 20 20  inqFileName,..  
12700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12710 20 20 72 65 66 20 65 66 36 46 69 6c 65 4e 61 6d    ref ef6FileNam
12720 65 2c 20 72 65 66 20 64 65 73 69 67 6e 65 72 46  e, ref designerF
12730 69 6c 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20  ileName);....   
12740 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
12750 75 72 6e 20 6e 65 77 20 43 6f 6e 66 69 67 75 72  urn new Configur
12760 61 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20  ation(..        
12770 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73              this
12780 41 73 73 65 6d 62 6c 79 2c 20 6e 75 6c 6c 2c 20  Assembly, null, 
12790 64 69 72 65 63 74 6f 72 79 2c 20 63 6f 72 65 46  directory, coreF
127a0 69 6c 65 4e 61 6d 65 2c 20 6c 69 6e 71 46 69 6c  ileName, linqFil
127b0 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20  eName,..        
127c0 20 20 20 20 20 20 20 20 20 20 20 20 65 66 36 46              ef6F
127d0 69 6c 65 4e 61 6d 65 2c 20 64 65 73 69 67 6e 65  ileName, designe
127e0 72 46 69 6c 65 4e 61 6d 65 2c 20 6e 75 6c 6c 2c  rFileName, null,
127f0 20 6e 75 6c 6c 2c 20 6e 75 6c 6c 2c 0d 0a 20 20   null, null,..  
12800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12810 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67    TraceOps.Debug
12820 46 6f 72 6d 61 74 2c 20 54 72 61 63 65 4f 70 73  Format, TraceOps
12830 2e 54 72 61 63 65 46 6f 72 6d 61 74 2c 0d 0a 20  .TraceFormat,.. 
12840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12850 20 20 20 49 6e 73 74 61 6c 6c 46 6c 61 67 73 2e     InstallFlags.
12860 44 65 66 61 75 6c 74 2c 20 50 72 6f 76 69 64 65  Default, Provide
12870 72 46 6c 61 67 73 2e 44 65 66 61 75 6c 74 2c 0d  rFlags.Default,.
12880 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
12890 20 20 20 20 20 54 72 61 63 65 50 72 69 6f 72 69       TracePriori
128a0 74 79 2e 44 65 66 61 75 6c 74 2c 20 54 72 61 63  ty.Default, Trac
128b0 65 50 72 69 6f 72 69 74 79 2e 44 65 66 61 75 6c  ePriority.Defaul
128c0 74 2c 20 66 61 6c 73 65 2c 20 74 72 75 65 2c 0d  t, false, true,.
128d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
128e0 20 20 20 20 20 66 61 6c 73 65 2c 20 66 61 6c 73       false, fals
128f0 65 2c 20 66 61 6c 73 65 2c 20 66 61 6c 73 65 2c  e, false, false,
12900 20 66 61 6c 73 65 2c 20 66 61 6c 73 65 2c 20 66   false, false, f
12910 61 6c 73 65 2c 20 66 61 6c 73 65 2c 0d 0a 20 20  alse, false,..  
12920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12930 20 20 66 61 6c 73 65 2c 20 66 61 6c 73 65 2c 20    false, false, 
12940 66 61 6c 73 65 2c 20 66 61 6c 73 65 2c 20 66 61  false, false, fa
12950 6c 73 65 2c 20 66 61 6c 73 65 2c 20 66 61 6c 73  lse, false, fals
12960 65 2c 20 66 61 6c 73 65 2c 0d 0a 20 20 20 20 20  e, false,..     
12970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66                 f
12980 61 6c 73 65 2c 20 66 61 6c 73 65 2c 20 66 61 6c  alse, false, fal
12990 73 65 2c 20 66 61 6c 73 65 2c 20 74 72 75 65 2c  se, false, true,
129a0 20 74 72 75 65 2c 20 66 61 6c 73 65 2c 20 66 61   true, false, fa
129b0 6c 73 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  lse,..          
129c0 20 20 20 20 20 20 20 20 20 20 66 61 6c 73 65 29            false)
129d0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
129e0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
129f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12a00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12a10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12a20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12a30 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
12a40 20 20 20 5b 4d 65 74 68 6f 64 49 6d 70 6c 28 4d     [MethodImpl(M
12a50 65 74 68 6f 64 49 6d 70 6c 4f 70 74 69 6f 6e 73  ethodImplOptions
12a60 2e 4e 6f 49 6e 6c 69 6e 69 6e 67 29 5d 0d 0a 20  .NoInlining)].. 
12a70 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
12a80 63 20 73 74 61 74 69 63 20 62 6f 6f 6c 20 46 72  c static bool Fr
12a90 6f 6d 41 72 67 73 28 0d 0a 20 20 20 20 20 20 20  omArgs(..       
12aa0 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 5b           string[
12ab0 5d 20 61 72 67 73 2c 0d 0a 20 20 20 20 20 20 20  ] args,..       
12ac0 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 73 74           bool st
12ad0 72 69 63 74 2c 0d 0a 20 20 20 20 20 20 20 20 20  rict,..         
12ae0 20 20 20 20 20 20 20 72 65 66 20 43 6f 6e 66 69         ref Confi
12af0 67 75 72 61 74 69 6f 6e 20 63 6f 6e 66 69 67 75  guration configu
12b00 72 61 74 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20  ration,..       
12b10 20 20 20 20 20 20 20 20 20 72 65 66 20 73 74 72           ref str
12b20 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20 20 20  ing error..     
12b30 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
12b40 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
12b50 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 79               try
12b60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
12b70 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
12b80 20 20 20 20 20 20 20 20 20 69 66 20 28 61 72 67           if (arg
12b90 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  s == null)..    
12ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12bb0 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b      return true;
12bc0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
12bd0 20 20 20 20 20 20 20 20 69 66 20 28 63 6f 6e 66          if (conf
12be0 69 67 75 72 61 74 69 6f 6e 20 3d 3d 20 6e 75 6c  iguration == nul
12bf0 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
12c00 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66              conf
12c10 69 67 75 72 61 74 69 6f 6e 20 3d 20 43 6f 6e 66  iguration = Conf
12c20 69 67 75 72 61 74 69 6f 6e 2e 43 72 65 61 74 65  iguration.Create
12c30 44 65 66 61 75 6c 74 28 29 3b 0d 0a 0d 0a 20 20  Default();....  
12c40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12c50 20 20 69 6e 74 20 6c 65 6e 67 74 68 20 3d 20 61    int length = a
12c60 72 67 73 2e 4c 65 6e 67 74 68 3b 0d 0a 0d 0a 20  rgs.Length;.... 
12c70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12c80 20 20 20 66 6f 72 20 28 69 6e 74 20 69 6e 64 65     for (int inde
12c90 78 20 3d 20 30 3b 20 69 6e 64 65 78 20 3c 20 6c  x = 0; index < l
12ca0 65 6e 67 74 68 3b 20 69 6e 64 65 78 2b 2b 29 0d  ength; index++).
12cb0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
12cc0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
12cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12ce0 73 74 72 69 6e 67 20 61 72 67 20 3d 20 61 72 67  string arg = arg
12cf0 73 5b 69 6e 64 65 78 5d 3b 0d 0a 0d 0a 20 20 20  s[index];....   
12d00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12d10 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
12d20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12d30 20 2f 2f 20 4e 4f 54 45 3a 20 53 6b 69 70 20 61   // NOTE: Skip a
12d40 6e 79 20 61 72 67 75 6d 65 6e 74 20 74 68 61 74  ny argument that
12d50 20 69 73 20 6e 75 6c 6c 20 28 3f 29 20 6f 72 20   is null (?) or 
12d60 61 6e 20 65 6d 70 74 79 0d 0a 20 20 20 20 20 20  an empty..      
12d70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12d80 20 20 2f 2f 20 20 20 20 20 20 20 73 74 72 69 6e    //       strin
12d90 67 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  g...            
12da0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
12db0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12dc0 20 20 20 20 20 20 20 20 69 66 20 28 53 74 72 69          if (Stri
12dd0 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79  ng.IsNullOrEmpty
12de0 28 61 72 67 29 29 0d 0a 20 20 20 20 20 20 20 20  (arg))..        
12df0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12e00 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 0d      continue;...
12e10 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
12e20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
12e30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12e40 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 57 65       // NOTE: We
12e50 20 61 72 65 20 67 6f 69 6e 67 20 74 6f 20 6d 6f   are going to mo
12e60 64 69 66 79 20 74 68 65 20 6f 72 69 67 69 6e 61  dify the origina
12e70 6c 20 61 72 67 75 6d 65 6e 74 0d 0a 20 20 20 20  l argument..    
12e80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12e90 20 20 20 20 2f 2f 20 20 20 20 20 20 20 62 79 20      //       by 
12ea0 72 65 6d 6f 76 69 6e 67 20 61 6e 79 20 6c 65 61  removing any lea
12eb0 64 69 6e 67 20 6f 70 74 69 6f 6e 20 63 68 61 72  ding option char
12ec0 61 63 74 65 72 73 3b 0d 0a 20 20 20 20 20 20 20  acters;..       
12ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12ee0 20 2f 2f 20 20 20 20 20 20 20 74 68 65 72 65 66   //       theref
12ef0 6f 72 65 2c 20 77 65 20 75 73 65 20 61 20 6e 65  ore, we use a ne
12f00 77 20 73 74 72 69 6e 67 20 74 6f 20 68 6f 6c 64  w string to hold
12f10 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 20 20   the..          
12f20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
12f30 20 20 20 20 20 20 20 6d 6f 64 69 66 69 65 64 20         modified 
12f40 61 72 67 75 6d 65 6e 74 2e 0d 0a 20 20 20 20 20  argument...     
12f50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12f60 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
12f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
12f80 74 72 69 6e 67 20 6e 65 77 41 72 67 20 3d 20 61  tring newArg = a
12f90 72 67 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  rg;....         
12fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
12fb0 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
12fc0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f             // NO
12fd0 54 45 3a 20 41 6c 6c 20 74 68 65 20 73 75 70 70  TE: All the supp
12fe0 6f 72 74 65 64 20 63 6f 6d 6d 61 6e 64 20 6c 69  orted command li
12ff0 6e 65 20 6f 70 74 69 6f 6e 73 20 6d 75 73 74 0d  ne options must.
13000 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
13010 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
13020 20 20 62 65 67 69 6e 20 77 69 74 68 20 61 6e 20    begin with an 
13030 6f 70 74 69 6f 6e 20 63 68 61 72 61 63 74 65 72  option character
13040 20 28 65 2e 67 2e 20 61 20 6d 69 6e 75 73 0d 0a   (e.g. a minus..
13050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13060 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
13070 20 6f 72 20 66 6f 72 77 61 72 64 20 73 6c 61 73   or forward slas
13080 68 29 3b 20 61 74 74 65 6d 70 74 20 74 6f 20 76  h); attempt to v
13090 61 6c 69 64 61 74 65 20 74 68 61 74 0d 0a 20 20  alidate that..  
130a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
130b0 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 6e        //       n
130c0 6f 77 2e 20 20 49 66 20 77 65 20 66 61 69 6c 20  ow.  If we fail 
130d0 69 6e 20 73 74 72 69 63 74 20 6d 6f 64 65 2c 20  in strict mode, 
130e0 77 65 20 61 72 65 20 64 6f 6e 65 3b 0d 0a 20 20  we are done;..  
130f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13100 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 6f        //       o
13110 74 68 65 72 77 69 73 65 2c 20 6a 75 73 74 20 73  therwise, just s
13120 6b 69 70 20 74 68 69 73 20 61 72 67 75 6d 65 6e  kip this argumen
13130 74 20 61 6e 64 20 61 64 76 61 6e 63 65 0d 0a 20  t and advance.. 
13140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13150 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
13160 74 6f 20 74 68 65 20 6e 65 78 74 20 6f 6e 65 2e  to the next one.
13170 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
13180 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
13190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
131a0 20 20 20 20 20 20 69 66 20 28 21 43 68 65 63 6b        if (!Check
131b0 4f 70 74 69 6f 6e 28 72 65 66 20 6e 65 77 41 72  Option(ref newAr
131c0 67 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  g))..           
131d0 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
131e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
131f0 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
13200 72 20 3d 20 54 72 61 63 65 4f 70 73 2e 44 65 62  r = TraceOps.Deb
13210 75 67 41 6e 64 54 72 61 63 65 28 0d 0a 20 20 20  ugAndTrace(..   
13220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13230 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61               Tra
13240 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73  cePriority.Lowes
13250 74 2c 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b  t, debugCallback
13260 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
13270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13280 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b     traceCallback
13290 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  , String.Format(
132a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
132b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
132c0 20 20 22 55 6e 73 75 70 70 6f 72 74 65 64 20 63    "Unsupported c
132d0 6f 6d 6d 61 6e 64 20 6c 69 6e 65 20 61 72 67 75  ommand line argu
132e0 6d 65 6e 74 3a 20 7b 30 7d 22 2c 0d 0a 20 20 20  ment: {0}",..   
132f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13300 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72               For
13310 44 69 73 70 6c 61 79 28 61 72 67 29 29 2c 20 74  Display(arg)), t
13320 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
13330 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
13340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
13350 20 28 73 74 72 69 63 74 29 0d 0a 20 20 20 20 20   (strict)..     
13360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13370 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
13380 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20  n false;....    
13390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
133a0 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65          continue
133b0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
133c0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
133d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
133e0 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
133f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13400 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 41 6c 6c      // NOTE: All
13410 20 74 68 65 20 73 75 70 70 6f 72 74 65 64 20 63   the supported c
13420 6f 6d 6d 61 6e 64 20 6c 69 6e 65 20 6f 70 74 69  ommand line opti
13430 6f 6e 73 20 6d 75 73 74 0d 0a 20 20 20 20 20 20  ons must..      
13440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13450 20 20 2f 2f 20 20 20 20 20 20 20 68 61 76 65 20    //       have 
13460 61 20 76 61 6c 75 65 3b 20 74 68 65 72 65 66 6f  a value; therefo
13470 72 65 2c 20 61 74 74 65 6d 70 74 20 74 6f 20 61  re, attempt to a
13480 64 76 61 6e 63 65 0d 0a 20 20 20 20 20 20 20 20  dvance..        
13490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
134a0 2f 2f 20 20 20 20 20 20 20 74 6f 20 69 74 20 6e  //       to it n
134b0 6f 77 2e 20 20 49 66 20 77 65 20 66 61 69 6c 2c  ow.  If we fail,
134c0 20 77 65 20 61 72 65 20 64 6f 6e 65 2e 0d 0a 20   we are done... 
134d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
134e0 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
134f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13500 20 20 20 69 6e 64 65 78 2b 2b 3b 0d 0a 0d 0a 20     index++;.... 
13510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13520 20 20 20 20 20 20 20 69 66 20 28 69 6e 64 65 78         if (index
13530 20 3e 3d 20 6c 65 6e 67 74 68 29 0d 0a 20 20 20   >= length)..   
13540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13550 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
13560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13570 20 20 20 20 65 72 72 6f 72 20 3d 20 54 72 61 63      error = Trac
13580 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61  eOps.DebugAndTra
13590 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ce(..           
135a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
135b0 20 20 20 20 20 54 72 61 63 65 50 72 69 6f 72 69       TracePriori
135c0 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75 67  ty.Lowest, debug
135d0 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20  Callback,..     
135e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
135f0 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
13600 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67  Callback, String
13610 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  .Format(..      
13620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13630 20 20 20 20 20 20 20 20 20 20 22 4d 69 73 73 69            "Missi
13640 6e 67 20 76 61 6c 75 65 20 66 6f 72 20 6f 70 74  ng value for opt
13650 69 6f 6e 3a 20 7b 30 7d 22 2c 0d 0a 20 20 20 20  ion: {0}",..    
13660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13670 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44              ForD
13680 69 73 70 6c 61 79 28 61 72 67 29 29 2c 20 74 72  isplay(arg)), tr
13690 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d  aceCategory);...
136a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
136b0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
136c0 28 73 74 72 69 63 74 29 0d 0a 20 20 20 20 20 20  (strict)..      
136d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
136e0 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
136f0 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20   false;....     
13700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13710 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0d 0a 20         break;.. 
13720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13730 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
13740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13750 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
13760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13770 2f 2f 20 4e 4f 54 45 3a 20 47 72 61 62 20 74 68  // NOTE: Grab th
13780 65 20 74 65 78 74 75 61 6c 20 76 61 6c 75 65 20  e textual value 
13790 6f 66 20 74 68 69 73 20 63 6f 6d 6d 61 6e 64 20  of this command 
137a0 6c 69 6e 65 0d 0a 20 20 20 20 20 20 20 20 20 20  line..          
137b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
137c0 20 20 20 20 20 20 20 6f 70 74 69 6f 6e 2e 0d 0a         option...
137d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
137e0 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
137f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13800 20 20 20 20 73 74 72 69 6e 67 20 74 65 78 74 20      string text 
13810 3d 20 61 72 67 73 5b 69 6e 64 65 78 5d 3b 0d 0a  = args[index];..
13820 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
13830 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
13840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13850 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 46        // NOTE: F
13860 69 67 75 72 65 20 6f 75 74 20 77 68 69 63 68 20  igure out which 
13870 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 20 6f 70 74  command line opt
13880 69 6f 6e 20 74 68 69 73 20 69 73 0d 0a 20 20 20  ion this is..   
13890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
138a0 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 28 62       //       (b
138b0 61 73 65 64 20 6f 6e 20 61 20 70 61 72 74 69 61  ased on a partia
138c0 6c 20 6e 61 6d 65 20 6d 61 74 63 68 29 20 61 6e  l name match) an
138d0 64 20 74 68 65 6e 20 74 72 79 0d 0a 20 20 20 20  d then try..    
138e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
138f0 20 20 20 20 2f 2f 20 20 20 20 20 20 20 74 6f 20      //       to 
13900 69 6e 74 65 72 70 72 65 74 20 74 68 65 20 74 65  interpret the te
13910 78 74 75 61 6c 20 76 61 6c 75 65 20 61 73 20 74  xtual value as t
13920 68 65 20 63 6f 72 72 65 63 74 0d 0a 20 20 20 20  he correct..    
13930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13940 20 20 20 20 2f 2f 20 20 20 20 20 20 20 74 79 70      //       typ
13950 65 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e...            
13960 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
13970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13980 20 20 20 20 20 20 20 20 69 66 20 28 4d 61 74 63          if (Matc
13990 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20  hOption(newArg, 
139a0 22 62 72 65 61 6b 22 29 29 0d 0a 20 20 20 20 20  "break"))..     
139b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
139c0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
139d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
139e0 20 20 62 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d 20    bool? value = 
139f0 50 61 72 73 65 42 6f 6f 6c 65 61 6e 28 74 65 78  ParseBoolean(tex
13a00 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  t);....         
13a10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13a20 20 20 20 69 66 20 28 76 61 6c 75 65 20 3d 3d 20     if (value == 
13a30 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
13a40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13a50 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
13a60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13a70 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 54 72        error = Tr
13a80 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54  aceOps.DebugAndT
13a90 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20  race(..         
13aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13ab0 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
13ac0 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c  Priority.Lowest,
13ad0 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d   debugCallback,.
13ae0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
13af0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13b00 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61       traceCallba
13b10 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ck, String.Forma
13b20 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
13b30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13b40 20 20 20 20 20 20 20 20 22 49 6e 76 61 6c 69 64          "Invalid
13b50 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 61 6c   {0} boolean val
13b60 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20  ue: {1}",..     
13b70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13b80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46                 F
13b90 6f 72 44 69 73 70 6c 61 79 28 61 72 67 29 2c 20  orDisplay(arg), 
13ba0 46 6f 72 44 69 73 70 6c 61 79 28 74 65 78 74 29  ForDisplay(text)
13bb0 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
13bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13bd0 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74          traceCat
13be0 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20  egory);....     
13bf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13c00 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 73             if (s
13c10 74 72 69 63 74 29 0d 0a 20 20 20 20 20 20 20 20  trict)..        
13c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13c30 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
13c40 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20  rn false;....   
13c50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13c60 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
13c70 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20  tinue;..        
13c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13c90 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
13ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13cb0 20 20 20 20 20 69 66 20 28 28 62 6f 6f 6c 29 76       if ((bool)v
13cc0 61 6c 75 65 29 0d 0a 20 20 20 20 20 20 20 20 20  alue)..         
13cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13ce0 20 20 20 20 20 20 20 42 72 65 61 6b 49 6e 74 6f         BreakInto
13cf0 44 65 62 75 67 67 65 72 28 29 3b 0d 0a 20 20 20  Debugger();..   
13d00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13d10 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
13d20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13d30 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70  else if (MatchOp
13d40 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 63 6f  tion(newArg, "co
13d50 6e 66 69 67 56 65 72 73 69 6f 6e 22 29 29 0d 0a  nfigVersion"))..
13d60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13d70 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
13d80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13d90 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61         configura
13da0 74 69 6f 6e 2e 63 6f 6e 66 69 67 56 65 72 73 69  tion.configVersi
13db0 6f 6e 20 3d 20 74 65 78 74 3b 0d 0a 20 20 20 20  on = text;..    
13dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13dd0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
13de0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
13df0 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74  lse if (MatchOpt
13e00 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 63 6f 6e  ion(newArg, "con
13e10 66 69 72 6d 22 29 29 0d 0a 20 20 20 20 20 20 20  firm"))..       
13e20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13e30 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
13e40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13e50 62 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d 20 50 61  bool? value = Pa
13e60 72 73 65 42 6f 6f 6c 65 61 6e 28 74 65 78 74 29  rseBoolean(text)
13e70 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
13e80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13e90 20 69 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75   if (value == nu
13ea0 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
13eb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13ec0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
13ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13ee0 20 20 20 20 65 72 72 6f 72 20 3d 20 54 72 61 63      error = Trac
13ef0 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61  eOps.DebugAndTra
13f00 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ce(..           
13f10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13f20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 50 72           TracePr
13f30 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64  iority.Lowest, d
13f40 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20  ebugCallback,.. 
13f50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13f60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13f70 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b     traceCallback
13f80 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  , String.Format(
13f90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
13fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13fb0 20 20 20 20 20 20 22 49 6e 76 61 6c 69 64 20 7b        "Invalid {
13fc0 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65  0} boolean value
13fd0 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20  : {1}",..       
13fe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72               For
14000 44 69 73 70 6c 61 79 28 61 72 67 29 2c 20 46 6f  Display(arg), Fo
14010 72 44 69 73 70 6c 61 79 28 74 65 78 74 29 29 2c  rDisplay(text)),
14020 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
14030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14040 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67        traceCateg
14050 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
14060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14070 20 20 20 20 20 20 20 20 20 69 66 20 28 73 74 72           if (str
14080 69 63 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ict)..          
14090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
140a0 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
140b0 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20   false;....     
140c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
140d0 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69             conti
140e0 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  nue;..          
140f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14100 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
14110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14120 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e     configuration
14130 2e 63 6f 6e 66 69 72 6d 20 3d 20 28 62 6f 6f 6c  .confirm = (bool
14140 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20  )value;..       
14150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14160 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
14170 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65              else
14180 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e   if (MatchOption
14190 28 6e 65 77 41 72 67 2c 20 22 63 6f 72 65 46 69  (newArg, "coreFi
141a0 6c 65 4e 61 6d 65 22 29 29 0d 0a 20 20 20 20 20  leName"))..     
141b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
141c0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
141d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
141e0 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e    configuration.
141f0 63 6f 72 65 46 69 6c 65 4e 61 6d 65 20 3d 20 74  coreFileName = t
14200 65 78 74 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ext;..          
14210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
14220 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
14230 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66           else if
14240 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65   (MatchOption(ne
14250 77 41 72 67 2c 20 22 64 65 62 75 67 22 29 29 0d  wArg, "debug")).
14260 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
14270 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
14280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14290 20 20 20 20 20 20 20 20 62 6f 6f 6c 3f 20 76 61          bool? va
142a0 6c 75 65 20 3d 20 50 61 72 73 65 42 6f 6f 6c 65  lue = ParseBoole
142b0 61 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a 20 20 20  an(text);....   
142c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
142d0 20 20 20 20 20 20 20 20 20 69 66 20 28 76 61 6c           if (val
142e0 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ue == null)..   
142f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14300 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
14310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14320 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
14330 72 20 3d 20 54 72 61 63 65 4f 70 73 2e 44 65 62  r = TraceOps.Deb
14340 75 67 41 6e 64 54 72 61 63 65 28 0d 0a 20 20 20  ugAndTrace(..   
14350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14370 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c   TracePriority.L
14380 6f 77 65 73 74 2c 20 64 65 62 75 67 43 61 6c 6c  owest, debugCall
14390 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20  back,..         
143a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
143b0 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
143c0 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67  Callback, String
143d0 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  .Format(..      
143e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
143f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 49                "I
14400 6e 76 61 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c 65  nvalid {0} boole
14410 61 6e 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d  an value: {1}",.
14420 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
14430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14440 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28       ForDisplay(
14450 61 72 67 29 2c 20 46 6f 72 44 69 73 70 6c 61 79  arg), ForDisplay
14460 28 74 65 78 74 29 29 2c 0d 0a 20 20 20 20 20 20  (text)),..      
14470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
14490 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d  aceCategory);...
144a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
144b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
144c0 20 69 66 20 28 73 74 72 69 63 74 29 0d 0a 20 20   if (strict)..  
144d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
144e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
144f0 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
14500 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
14510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14520 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20     continue;..  
14530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14540 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
14550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14560 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69             confi
14570 67 75 72 61 74 69 6f 6e 2e 64 65 62 75 67 20 3d  guration.debug =
14580 20 28 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20   (bool)value;.. 
14590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
145a0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
145b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
145c0 20 20 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68    else if (Match
145d0 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22  Option(newArg, "
145e0 64 65 62 75 67 46 6f 72 6d 61 74 22 29 29 0d 0a  debugFormat"))..
145f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14600 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
14610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14620 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61         configura
14630 74 69 6f 6e 2e 64 65 62 75 67 46 6f 72 6d 61 74  tion.debugFormat
14640 20 3d 20 74 65 78 74 3b 0d 0a 20 20 20 20 20 20   = text;..      
14650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14660 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44        TraceOps.D
14670 65 62 75 67 46 6f 72 6d 61 74 20 3d 20 63 6f 6e  ebugFormat = con
14680 66 69 67 75 72 61 74 69 6f 6e 2e 64 65 62 75 67  figuration.debug
14690 46 6f 72 6d 61 74 3b 0d 0a 20 20 20 20 20 20 20  Format;..       
146a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
146b0 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
146c0 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65              else
146d0 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e   if (MatchOption
146e0 28 6e 65 77 41 72 67 2c 20 22 64 65 62 75 67 50  (newArg, "debugP
146f0 72 69 6f 72 69 74 79 22 29 29 0d 0a 20 20 20 20  riority"))..    
14700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14710 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
14720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14730 20 20 20 6f 62 6a 65 63 74 20 76 61 6c 75 65 20     object value 
14740 3d 20 50 61 72 73 65 45 6e 75 6d 28 0d 0a 20 20  = ParseEnum(..  
14750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 79                ty
14770 70 65 6f 66 28 54 72 61 63 65 50 72 69 6f 72 69  peof(TracePriori
14780 74 79 29 2c 20 74 65 78 74 2c 20 74 72 75 65 29  ty), text, true)
14790 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
147a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
147b0 20 69 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75   if (value == nu
147c0 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
147d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
147e0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
147f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14800 20 20 20 20 65 72 72 6f 72 20 3d 20 54 72 61 63      error = Trac
14810 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61  eOps.DebugAndTra
14820 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ce(..           
14830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14840 20 20 20 20 20 20 20 20 20 54 72 61 63 65 50 72           TracePr
14850 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64  iority.Lowest, d
14860 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20  ebugCallback,.. 
14870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14890 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b     traceCallback
148a0 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  , String.Format(
148b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
148c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
148d0 20 20 20 20 20 20 22 49 6e 76 61 6c 69 64 20 7b        "Invalid {
148e0 30 7d 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d  0} value: {1}",.
148f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
14900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14910 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28       ForDisplay(
14920 61 72 67 29 2c 20 46 6f 72 44 69 73 70 6c 61 79  arg), ForDisplay
14930 28 74 65 78 74 29 29 2c 0d 0a 20 20 20 20 20 20  (text)),..      
14940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
14960 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d  aceCategory);...
14970 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
14980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14990 20 69 66 20 28 73 74 72 69 63 74 29 0d 0a 20 20   if (strict)..  
149a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
149b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
149c0 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
149d0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
149e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
149f0 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20     continue;..  
14a00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14a10 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
14a20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14a30 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69             confi
14a40 67 75 72 61 74 69 6f 6e 2e 64 65 62 75 67 50 72  guration.debugPr
14a50 69 6f 72 69 74 79 20 3d 20 28 54 72 61 63 65 50  iority = (TraceP
14a60 72 69 6f 72 69 74 79 29 76 61 6c 75 65 3b 0d 0a  riority)value;..
14a70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14a80 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
14a90 65 4f 70 73 2e 44 65 62 75 67 50 72 69 6f 72 69  eOps.DebugPriori
14aa0 74 79 20 3d 20 63 6f 6e 66 69 67 75 72 61 74 69  ty = configurati
14ab0 6f 6e 2e 64 65 62 75 67 50 72 69 6f 72 69 74 79  on.debugPriority
14ac0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
14ad0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
14ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14af0 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d        else if (M
14b00 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72  atchOption(newAr
14b10 67 2c 20 22 64 65 73 69 67 6e 65 72 46 69 6c 65  g, "designerFile
14b20 4e 61 6d 65 22 29 29 0d 0a 20 20 20 20 20 20 20  Name"))..       
14b30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14b40 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
14b50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14b60 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 64 65  configuration.de
14b70 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65 20 3d  signerFileName =
14b80 20 74 65 78 74 3b 0d 0a 20 20 20 20 20 20 20 20   text;..        
14b90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14ba0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
14bb0 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20             else 
14bc0 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28  if (MatchOption(
14bd0 6e 65 77 41 72 67 2c 20 22 64 69 72 65 63 74 6f  newArg, "directo
14be0 72 79 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ry"))..         
14bf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
14c00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
14c10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
14c20 6e 66 69 67 75 72 61 74 69 6f 6e 2e 64 69 72 65  nfiguration.dire
14c30 63 74 6f 72 79 20 3d 20 74 65 78 74 3b 0d 0a 0d  ctory = text;...
14c40 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
14c50 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
14c60 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
14c70 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
14c80 4e 4f 54 45 3a 20 2a 53 50 45 43 49 41 4c 2a 20  NOTE: *SPECIAL* 
14c90 4d 75 73 74 20 72 65 66 72 65 73 68 20 74 68 65  Must refresh the
14ca0 20 66 69 6c 65 20 6e 61 6d 65 73 0d 0a 20 20 20   file names..   
14cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14cc0 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
14cd0 20 20 68 65 72 65 20 62 65 63 61 75 73 65 20 74    here because t
14ce0 68 65 20 75 6e 64 65 72 6c 79 69 6e 67 20 64 69  he underlying di
14cf0 72 65 63 74 6f 72 79 0d 0a 20 20 20 20 20 20 20  rectory..       
14d00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14d10 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 68 61       //       ha
14d20 73 20 63 68 61 6e 67 65 64 2e 0d 0a 20 20 20 20  s changed...    
14d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14d40 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
14d50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14d60 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 63          string c
14d70 6f 72 65 46 69 6c 65 4e 61 6d 65 20 3d 20 63 6f  oreFileName = co
14d80 6e 66 69 67 75 72 61 74 69 6f 6e 2e 63 6f 72 65  nfiguration.core
14d90 46 69 6c 65 4e 61 6d 65 3b 0d 0a 0d 0a 20 20 20  FileName;....   
14da0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14db0 20 20 20 20 20 20 20 20 20 69 66 20 28 21 53 74           if (!St
14dc0 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70  ring.IsNullOrEmp
14dd0 74 79 28 63 6f 72 65 46 69 6c 65 4e 61 6d 65 29  ty(coreFileName)
14de0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
14df0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14e00 20 20 20 63 6f 72 65 46 69 6c 65 4e 61 6d 65 20     coreFileName 
14e10 3d 20 50 61 74 68 2e 47 65 74 46 69 6c 65 4e 61  = Path.GetFileNa
14e20 6d 65 28 63 6f 72 65 46 69 6c 65 4e 61 6d 65 29  me(coreFileName)
14e30 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
14e40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14e50 20 69 66 20 28 53 74 72 69 6e 67 2e 49 73 4e 75   if (String.IsNu
14e60 6c 6c 4f 72 45 6d 70 74 79 28 63 6f 72 65 46 69  llOrEmpty(coreFi
14e70 6c 65 4e 61 6d 65 29 29 0d 0a 20 20 20 20 20 20  leName))..      
14e80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14e90 20 20 20 20 20 20 20 20 20 20 63 6f 72 65 46 69            coreFi
14ea0 6c 65 4e 61 6d 65 20 3d 20 49 6e 73 74 61 6c 6c  leName = Install
14eb0 65 72 2e 43 6f 72 65 46 69 6c 65 4e 61 6d 65 3b  er.CoreFileName;
14ec0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
14ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14ee0 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 63 6f  configuration.co
14ef0 72 65 46 69 6c 65 4e 61 6d 65 20 3d 20 50 61 74  reFileName = Pat
14f00 68 2e 43 6f 6d 62 69 6e 65 28 0d 0a 20 20 20 20  h.Combine(..    
14f10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14f20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66              conf
14f30 69 67 75 72 61 74 69 6f 6e 2e 64 69 72 65 63 74  iguration.direct
14f40 6f 72 79 2c 20 63 6f 72 65 46 69 6c 65 4e 61 6d  ory, coreFileNam
14f50 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  e);....         
14f60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14f70 20 20 20 73 74 72 69 6e 67 20 6c 69 6e 71 46 69     string linqFi
14f80 6c 65 4e 61 6d 65 20 3d 20 63 6f 6e 66 69 67 75  leName = configu
14f90 72 61 74 69 6f 6e 2e 6c 69 6e 71 46 69 6c 65 4e  ration.linqFileN
14fa0 61 6d 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ame;....        
14fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14fc0 20 20 20 20 69 66 20 28 21 53 74 72 69 6e 67 2e      if (!String.
14fd0 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 6c 69  IsNullOrEmpty(li
14fe0 6e 71 46 69 6c 65 4e 61 6d 65 29 29 0d 0a 20 20  nqFileName))..  
14ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6c 69                li
15010 6e 71 46 69 6c 65 4e 61 6d 65 20 3d 20 50 61 74  nqFileName = Pat
15020 68 2e 47 65 74 46 69 6c 65 4e 61 6d 65 28 6c 69  h.GetFileName(li
15030 6e 71 46 69 6c 65 4e 61 6d 65 29 3b 0d 0a 0d 0a  nqFileName);....
15040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15050 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
15060 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45  String.IsNullOrE
15070 6d 70 74 79 28 6c 69 6e 71 46 69 6c 65 4e 61 6d  mpty(linqFileNam
15080 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e))..           
15090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
150a0 20 20 20 20 20 6c 69 6e 71 46 69 6c 65 4e 61 6d       linqFileNam
150b0 65 20 3d 20 49 6e 73 74 61 6c 6c 65 72 2e 4c 69  e = Installer.Li
150c0 6e 71 46 69 6c 65 4e 61 6d 65 3b 0d 0a 0d 0a 20  nqFileName;.... 
150d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
150e0 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69             confi
150f0 67 75 72 61 74 69 6f 6e 2e 6c 69 6e 71 46 69 6c  guration.linqFil
15100 65 4e 61 6d 65 20 3d 20 50 61 74 68 2e 43 6f 6d  eName = Path.Com
15110 62 69 6e 65 28 0d 0a 20 20 20 20 20 20 20 20 20  bine(..         
15120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15130 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61         configura
15140 74 69 6f 6e 2e 64 69 72 65 63 74 6f 72 79 2c 20  tion.directory, 
15150 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 29 3b 0d 0a  linqFileName);..
15160 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
15170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
15180 72 69 6e 67 20 65 66 36 46 69 6c 65 4e 61 6d 65  ring ef6FileName
15190 20 3d 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e   = configuration
151a0 2e 65 66 36 46 69 6c 65 4e 61 6d 65 3b 0d 0a 0d  .ef6FileName;...
151b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
151c0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
151d0 28 21 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f  (!String.IsNullO
151e0 72 45 6d 70 74 79 28 65 66 36 46 69 6c 65 4e 61  rEmpty(ef6FileNa
151f0 6d 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  me))..          
15200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15210 20 20 20 20 20 20 65 66 36 46 69 6c 65 4e 61 6d        ef6FileNam
15220 65 20 3d 20 50 61 74 68 2e 47 65 74 46 69 6c 65  e = Path.GetFile
15230 4e 61 6d 65 28 65 66 36 46 69 6c 65 4e 61 6d 65  Name(ef6FileName
15240 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
15250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15260 20 20 69 66 20 28 53 74 72 69 6e 67 2e 49 73 4e    if (String.IsN
15270 75 6c 6c 4f 72 45 6d 70 74 79 28 65 66 36 46 69  ullOrEmpty(ef6Fi
15280 6c 65 4e 61 6d 65 29 29 0d 0a 20 20 20 20 20 20  leName))..      
15290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
152a0 20 20 20 20 20 20 20 20 20 20 65 66 36 46 69 6c            ef6Fil
152b0 65 4e 61 6d 65 20 3d 20 49 6e 73 74 61 6c 6c 65  eName = Installe
152c0 72 2e 45 66 36 46 69 6c 65 4e 61 6d 65 3b 0d 0a  r.Ef6FileName;..
152d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
152e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
152f0 6e 66 69 67 75 72 61 74 69 6f 6e 2e 65 66 36 46  nfiguration.ef6F
15300 69 6c 65 4e 61 6d 65 20 3d 20 50 61 74 68 2e 43  ileName = Path.C
15310 6f 6d 62 69 6e 65 28 0d 0a 20 20 20 20 20 20 20  ombine(..       
15320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15330 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75           configu
15340 72 61 74 69 6f 6e 2e 64 69 72 65 63 74 6f 72 79  ration.directory
15350 2c 20 65 66 36 46 69 6c 65 4e 61 6d 65 29 3b 0d  , ef6FileName);.
15360 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
15370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
15380 74 72 69 6e 67 20 64 65 73 69 67 6e 65 72 46 69  tring designerFi
15390 6c 65 4e 61 6d 65 20 3d 20 63 6f 6e 66 69 67 75  leName = configu
153a0 72 61 74 69 6f 6e 2e 64 65 73 69 67 6e 65 72 46  ration.designerF
153b0 69 6c 65 4e 61 6d 65 3b 0d 0a 0d 0a 20 20 20 20  ileName;....    
153c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
153d0 20 20 20 20 20 20 20 20 69 66 20 28 21 53 74 72          if (!Str
153e0 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74  ing.IsNullOrEmpt
153f0 79 28 64 65 73 69 67 6e 65 72 46 69 6c 65 4e 61  y(designerFileNa
15400 6d 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  me))..          
15410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15420 20 20 20 20 20 20 64 65 73 69 67 6e 65 72 46 69        designerFi
15430 6c 65 4e 61 6d 65 20 3d 20 50 61 74 68 2e 47 65  leName = Path.Ge
15440 74 46 69 6c 65 4e 61 6d 65 28 64 65 73 69 67 6e  tFileName(design
15450 65 72 46 69 6c 65 4e 61 6d 65 29 3b 0d 0a 0d 0a  erFileName);....
15460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15470 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
15480 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45  String.IsNullOrE
15490 6d 70 74 79 28 64 65 73 69 67 6e 65 72 46 69 6c  mpty(designerFil
154a0 65 4e 61 6d 65 29 29 0d 0a 20 20 20 20 20 20 20  eName))..       
154b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
154c0 20 20 20 20 20 20 20 20 20 64 65 73 69 67 6e 65           designe
154d0 72 46 69 6c 65 4e 61 6d 65 20 3d 20 49 6e 73 74  rFileName = Inst
154e0 61 6c 6c 65 72 2e 44 65 73 69 67 6e 65 72 46 69  aller.DesignerFi
154f0 6c 65 4e 61 6d 65 3b 0d 0a 0d 0a 20 20 20 20 20  leName;....     
15500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15510 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61         configura
15520 74 69 6f 6e 2e 64 65 73 69 67 6e 65 72 46 69 6c  tion.designerFil
15530 65 4e 61 6d 65 20 3d 20 50 61 74 68 2e 43 6f 6d  eName = Path.Com
15540 62 69 6e 65 28 0d 0a 20 20 20 20 20 20 20 20 20  bine(..         
15550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15560 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61         configura
15570 74 69 6f 6e 2e 64 69 72 65 63 74 6f 72 79 2c 20  tion.directory, 
15580 64 65 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65  designerFileName
15590 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
155a0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
155b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
155c0 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28         else if (
155d0 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41  MatchOption(newA
155e0 72 67 2c 20 22 65 66 36 46 69 6c 65 4e 61 6d 65  rg, "ef6FileName
155f0 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  "))..           
15600 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
15610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15620 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66              conf
15630 69 67 75 72 61 74 69 6f 6e 2e 65 66 36 46 69 6c  iguration.ef6Fil
15640 65 4e 61 6d 65 20 3d 20 74 65 78 74 3b 0d 0a 20  eName = text;.. 
15650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15660 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
15670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15680 20 20 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68    else if (Match
15690 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22  Option(newArg, "
156a0 69 6e 73 74 61 6c 6c 22 29 29 0d 0a 20 20 20 20  install"))..    
156b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
156c0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
156d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
156e0 20 20 20 62 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d     bool? value =
156f0 20 50 61 72 73 65 42 6f 6f 6c 65 61 6e 28 74 65   ParseBoolean(te
15700 78 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  xt);....        
15710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15720 20 20 20 20 69 66 20 28 76 61 6c 75 65 20 3d 3d      if (value ==
15730 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
15740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15750 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
15760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15770 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 54         error = T
15780 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64  raceOps.DebugAnd
15790 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20  Trace(..        
157a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
157b0 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
157c0 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74  ePriority.Lowest
157d0 2c 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c  , debugCallback,
157e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
157f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15800 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62        traceCallb
15810 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d  ack, String.Form
15820 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
15830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15840 20 20 20 20 20 20 20 20 20 22 49 6e 76 61 6c 69           "Invali
15850 64 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 61  d {0} boolean va
15860 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20  lue: {1}",..    
15870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15890 46 6f 72 44 69 73 70 6c 61 79 28 61 72 67 29 2c  ForDisplay(arg),
158a0 20 46 6f 72 44 69 73 70 6c 61 79 28 74 65 78 74   ForDisplay(text
158b0 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  )),..           
158c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
158d0 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
158e0 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
158f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15900 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
15910 73 74 72 69 63 74 29 0d 0a 20 20 20 20 20 20 20  strict)..       
15920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15930 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
15940 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20  urn false;....  
15950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
15970 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20  ntinue;..       
15980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15990 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
159a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
159b0 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74        configurat
159c0 69 6f 6e 2e 69 6e 73 74 61 6c 6c 20 3d 20 28 62  ion.install = (b
159d0 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20  ool)value;..    
159e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
159f0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
15a00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
15a10 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74  lse if (MatchOpt
15a20 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 69 6e 73  ion(newArg, "ins
15a30 74 61 6c 6c 46 6c 61 67 73 22 29 29 0d 0a 20 20  tallFlags"))..  
15a40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15a50 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
15a60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15a70 20 20 20 20 20 6f 62 6a 65 63 74 20 76 61 6c 75       object valu
15a80 65 20 3d 20 50 61 72 73 65 45 6e 75 6d 28 0d 0a  e = ParseEnum(..
15a90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15ab0 74 79 70 65 6f 66 28 49 6e 73 74 61 6c 6c 46 6c  typeof(InstallFl
15ac0 61 67 73 29 2c 20 74 65 78 74 2c 20 74 72 75 65  ags), text, true
15ad0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
15ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15af0 20 20 69 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e    if (value == n
15b00 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
15b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15b20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
15b30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15b40 20 20 20 20 20 65 72 72 6f 72 20 3d 20 54 72 61       error = Tra
15b50 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72  ceOps.DebugAndTr
15b60 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ace(..          
15b70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15b80 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 50            TraceP
15b90 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20  riority.Lowest, 
15ba0 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a  debugCallback,..
15bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15bd0 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63      traceCallbac
15be0 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  k, String.Format
15bf0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
15c00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15c10 20 20 20 20 20 20 20 22 49 6e 76 61 6c 69 64 20         "Invalid 
15c20 7b 30 7d 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c  {0} value: {1}",
15c30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
15c40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15c50 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79        ForDisplay
15c60 28 61 72 67 29 2c 20 46 6f 72 44 69 73 70 6c 61  (arg), ForDispla
15c70 79 28 74 65 78 74 29 29 2c 0d 0a 20 20 20 20 20  y(text)),..     
15c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15c90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
15ca0 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
15cb0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
15cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15cd0 20 20 69 66 20 28 73 74 72 69 63 74 29 0d 0a 20    if (strict).. 
15ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15d00 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
15d10 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
15d20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15d30 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20      continue;.. 
15d40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15d50 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
15d60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15d70 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66              conf
15d80 69 67 75 72 61 74 69 6f 6e 2e 69 6e 73 74 61 6c  iguration.instal
15d90 6c 46 6c 61 67 73 20 3d 20 28 49 6e 73 74 61 6c  lFlags = (Instal
15da0 6c 46 6c 61 67 73 29 76 61 6c 75 65 3b 0d 0a 20  lFlags)value;.. 
15db0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15dc0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
15dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15de0 20 20 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68    else if (Match
15df0 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22  Option(newArg, "
15e00 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 22 29 29 0d  linqFileName")).
15e10 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
15e20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
15e30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15e40 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72          configur
15e50 61 74 69 6f 6e 2e 6c 69 6e 71 46 69 6c 65 4e 61  ation.linqFileNa
15e60 6d 65 20 3d 20 74 65 78 74 3b 0d 0a 20 20 20 20  me = text;..    
15e70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15e80 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
15e90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
15ea0 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74  lse if (MatchOpt
15eb0 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 6c 6f 67  ion(newArg, "log
15ec0 46 69 6c 65 4e 61 6d 65 22 29 29 0d 0a 20 20 20  FileName"))..   
15ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15ee0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
15ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15f00 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f      configuratio
15f10 6e 2e 6c 6f 67 46 69 6c 65 4e 61 6d 65 20 3d 20  n.logFileName = 
15f20 74 65 78 74 3b 0d 0a 20 20 20 20 20 20 20 20 20  text;..         
15f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
15f40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
15f50 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69            else i
15f60 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e  f (MatchOption(n
15f70 65 77 41 72 67 2c 20 22 6e 6f 43 6f 6d 70 61 63  ewArg, "noCompac
15f80 74 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  t"))..          
15f90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
15fa0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
15fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f               boo
15fc0 6c 3f 20 76 61 6c 75 65 20 3d 20 50 61 72 73 65  l? value = Parse
15fd0 42 6f 6f 6c 65 61 6e 28 74 65 78 74 29 3b 0d 0a  Boolean(text);..
15fe0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
15ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
16000 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29   (value == null)
16010 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
16020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
16030 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
16040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16050 20 65 72 72 6f 72 20 3d 20 54 72 61 63 65 4f 70   error = TraceOp
16060 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28  s.DebugAndTrace(
16070 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
16080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16090 20 20 20 20 20 20 54 72 61 63 65 50 72 69 6f 72        TracePrior
160a0 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75  ity.Lowest, debu
160b0 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20  gCallback,..    
160c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
160d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
160e0 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53  traceCallback, S
160f0 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
16100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16120 20 20 20 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20     "Invalid {0} 
16130 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 3a 20 7b  boolean value: {
16140 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  1}",..          
16150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16160 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73            ForDis
16170 70 6c 61 79 28 61 72 67 29 2c 20 46 6f 72 44 69  play(arg), ForDi
16180 73 70 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a 20  splay(text)),.. 
16190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
161a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
161b0 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
161c0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
161d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
161e0 20 20 20 20 20 20 69 66 20 28 73 74 72 69 63 74        if (strict
161f0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
16200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16210 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
16220 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  lse;....        
16230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16240 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65          continue
16250 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
16260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
16270 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
16280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16290 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f  configuration.no
162a0 43 6f 6d 70 61 63 74 20 3d 20 28 62 6f 6f 6c 29  Compact = (bool)
162b0 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20  value;..        
162c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
162d0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
162e0 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20             else 
162f0 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28  if (MatchOption(
16300 6e 65 77 41 72 67 2c 20 22 6e 6f 43 6f 6e 73 6f  newArg, "noConso
16310 6c 65 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20  le"))..         
16320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
16330 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
16340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f                bo
16350 6f 6c 3f 20 76 61 6c 75 65 20 3d 20 50 61 72 73  ol? value = Pars
16360 65 42 6f 6f 6c 65 61 6e 28 74 65 78 74 29 3b 0d  eBoolean(text);.
16370 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
16380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
16390 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c  f (value == null
163a0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
163b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
163c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
163d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
163e0 20 20 65 72 72 6f 72 20 3d 20 54 72 61 63 65 4f    error = TraceO
163f0 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65  ps.DebugAndTrace
16400 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
16410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16420 20 20 20 20 20 20 20 54 72 61 63 65 50 72 69 6f         TracePrio
16430 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62  rity.Lowest, deb
16440 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20  ugCallback,..   
16450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16470 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20   traceCallback, 
16480 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
16490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
164a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
164b0 20 20 20 20 22 49 6e 76 61 6c 69 64 20 7b 30 7d      "Invalid {0}
164c0 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 3a 20   boolean value: 
164d0 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  {1}",..         
164e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
164f0 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69             ForDi
16500 73 70 6c 61 79 28 61 72 67 29 2c 20 46 6f 72 44  splay(arg), ForD
16510 69 73 70 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a  isplay(text)),..
16520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16540 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72      traceCategor
16550 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
16560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16570 20 20 20 20 20 20 20 69 66 20 28 73 74 72 69 63         if (stric
16580 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t)..            
16590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
165a0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
165b0 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  alse;....       
165c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
165d0 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75           continu
165e0 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
165f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16600 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
16610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16620 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e   configuration.n
16630 6f 43 6f 6e 73 6f 6c 65 20 3d 20 28 62 6f 6f 6c  oConsole = (bool
16640 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20  )value;..       
16650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16660 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
16670 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65              else
16680 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e   if (MatchOption
16690 28 6e 65 77 41 72 67 2c 20 22 6e 6f 44 65 73 6b  (newArg, "noDesk
166a0 74 6f 70 22 29 29 0d 0a 20 20 20 20 20 20 20 20  top"))..        
166b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
166c0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
166d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62                 b
166e0 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d 20 50 61 72  ool? value = Par
166f0 73 65 42 6f 6f 6c 65 61 6e 28 74 65 78 74 29 3b  seBoolean(text);
16700 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
16710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16720 69 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c  if (value == nul
16730 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
16740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16750 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
16760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16770 20 20 20 65 72 72 6f 72 20 3d 20 54 72 61 63 65     error = Trace
16780 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63  Ops.DebugAndTrac
16790 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
167a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
167b0 20 20 20 20 20 20 20 20 54 72 61 63 65 50 72 69          TracePri
167c0 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65  ority.Lowest, de
167d0 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20  bugCallback,..  
167e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
167f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16800 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c    traceCallback,
16810 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d   String.Format(.
16820 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
16830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16840 20 20 20 20 20 22 49 6e 76 61 6c 69 64 20 7b 30       "Invalid {0
16850 7d 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 3a  } boolean value:
16860 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20   {1}",..        
16870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16880 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44              ForD
16890 69 73 70 6c 61 79 28 61 72 67 29 2c 20 46 6f 72  isplay(arg), For
168a0 44 69 73 70 6c 61 79 28 74 65 78 74 29 29 2c 0d  Display(text)),.
168b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
168c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
168d0 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f       traceCatego
168e0 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
168f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16900 20 20 20 20 20 20 20 20 69 66 20 28 73 74 72 69          if (stri
16910 63 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ct)..           
16920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16930 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
16940 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  false;....      
16950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16960 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e            contin
16970 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
16980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16990 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
169a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
169b0 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e    configuration.
169c0 6e 6f 44 65 73 6b 74 6f 70 20 3d 20 28 62 6f 6f  noDesktop = (boo
169d0 6c 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20  l)value;..      
169e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
169f0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
16a00 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73               els
16a10 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f  e if (MatchOptio
16a20 6e 28 6e 65 77 41 72 67 2c 20 22 6e 6f 4c 6f 67  n(newArg, "noLog
16a30 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  "))..           
16a40 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
16a50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16a60 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
16a70 3f 20 76 61 6c 75 65 20 3d 20 50 61 72 73 65 42  ? value = ParseB
16a80 6f 6f 6c 65 61 6e 28 74 65 78 74 29 3b 0d 0a 0d  oolean(text);...
16a90 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
16aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
16ab0 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d  (value == null).
16ac0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
16ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
16ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16af0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16b00 65 72 72 6f 72 20 3d 20 54 72 61 63 65 4f 70 73  error = TraceOps
16b10 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 0d  .DebugAndTrace(.
16b20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
16b30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16b40 20 20 20 20 20 54 72 61 63 65 50 72 69 6f 72 69       TracePriori
16b50 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75 67  ty.Lowest, debug
16b60 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20  Callback,..     
16b70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16b80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
16b90 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74  raceCallback, St
16ba0 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
16bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16bd0 20 20 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20 62    "Invalid {0} b
16be0 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 3a 20 7b 31  oolean value: {1
16bf0 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }",..           
16c00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16c10 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70           ForDisp
16c20 6c 61 79 28 61 72 67 29 2c 20 46 6f 72 44 69 73  lay(arg), ForDis
16c30 70 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a 20 20  play(text)),..  
16c40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16c50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16c60 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29    traceCategory)
16c70 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
16c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16c90 20 20 20 20 20 69 66 20 28 73 74 72 69 63 74 29       if (strict)
16ca0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
16cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16cc0 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
16cd0 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  se;....         
16ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16cf0 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b         continue;
16d00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
16d10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
16d20 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
16d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
16d40 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 4c  onfiguration.noL
16d50 6f 67 20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75 65  og = (bool)value
16d60 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
16d70 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
16d80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16d90 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d        else if (M
16da0 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72  atchOption(newAr
16db0 67 2c 20 22 6e 6f 4e 65 74 46 78 32 30 22 29 29  g, "noNetFx20"))
16dc0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
16dd0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
16de0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16df0 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 3f 20 76           bool? v
16e00 61 6c 75 65 20 3d 20 50 61 72 73 65 42 6f 6f 6c  alue = ParseBool
16e10 65 61 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a 20 20  ean(text);....  
16e20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16e30 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76 61            if (va
16e40 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  lue == null)..  
16e50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16e60 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
16e70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16e80 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
16e90 6f 72 20 3d 20 54 72 61 63 65 4f 70 73 2e 44 65  or = TraceOps.De
16ea0 62 75 67 41 6e 64 54 72 61 63 65 28 0d 0a 20 20  bugAndTrace(..  
16eb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16ed0 20 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e    TracePriority.
16ee0 4c 6f 77 65 73 74 2c 20 64 65 62 75 67 43 61 6c  Lowest, debugCal
16ef0 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20  lback,..        
16f00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16f10 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
16f20 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e  eCallback, Strin
16f30 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
16f40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16f50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
16f60 49 6e 76 61 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c  Invalid {0} bool
16f70 65 61 6e 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c  ean value: {1}",
16f80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
16f90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16fa0 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79        ForDisplay
16fb0 28 61 72 67 29 2c 20 46 6f 72 44 69 73 70 6c 61  (arg), ForDispla
16fc0 79 28 74 65 78 74 29 29 2c 0d 0a 20 20 20 20 20  y(text)),..     
16fd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16fe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
16ff0 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
17000 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
17010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17020 20 20 69 66 20 28 73 74 72 69 63 74 29 0d 0a 20    if (strict).. 
17030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17050 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
17060 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
17070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17080 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20      continue;.. 
17090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
170a0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
170b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
170c0 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66              conf
170d0 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 4e 65 74 46  iguration.noNetF
170e0 78 32 30 20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75  x20 = (bool)valu
170f0 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
17100 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
17110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17120 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28         else if (
17130 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41  MatchOption(newA
17140 72 67 2c 20 22 6e 6f 4e 65 74 46 78 33 35 22 29  rg, "noNetFx35")
17150 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
17160 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
17170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17180 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 3f 20            bool? 
17190 76 61 6c 75 65 20 3d 20 50 61 72 73 65 42 6f 6f  value = ParseBoo
171a0 6c 65 61 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a 20  lean(text);.... 
171b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
171c0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76             if (v
171d0 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  alue == null).. 
171e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
171f0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
17200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72                er
17220 72 6f 72 20 3d 20 54 72 61 63 65 4f 70 73 2e 44  ror = TraceOps.D
17230 65 62 75 67 41 6e 64 54 72 61 63 65 28 0d 0a 20  ebugAndTrace(.. 
17240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17260 20 20 20 54 72 61 63 65 50 72 69 6f 72 69 74 79     TracePriority
17270 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75 67 43 61  .Lowest, debugCa
17280 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20  llback,..       
17290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
172a0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
172b0 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69  ceCallback, Stri
172c0 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20  ng.Format(..    
172d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
172e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
172f0 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20 62 6f 6f  "Invalid {0} boo
17300 6c 65 61 6e 20 76 61 6c 75 65 3a 20 7b 31 7d 22  lean value: {1}"
17310 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
17320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17330 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61         ForDispla
17340 79 28 61 72 67 29 2c 20 46 6f 72 44 69 73 70 6c  y(arg), ForDispl
17350 61 79 28 74 65 78 74 29 29 2c 0d 0a 20 20 20 20  ay(text)),..    
17360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17380 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
17390 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
173a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
173b0 20 20 20 69 66 20 28 73 74 72 69 63 74 29 0d 0a     if (strict)..
173c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
173d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
173e0 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
173f0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
17400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17410 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a       continue;..
17420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17430 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
17440 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
17450 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
17460 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 4e 65 74  figuration.noNet
17470 46 78 33 35 20 3d 20 28 62 6f 6f 6c 29 76 61 6c  Fx35 = (bool)val
17480 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
17490 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
174a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
174b0 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20          else if 
174c0 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77  (MatchOption(new
174d0 41 72 67 2c 20 22 6e 6f 4e 65 74 46 78 34 30 22  Arg, "noNetFx40"
174e0 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
174f0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
17500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17510 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 3f             bool?
17520 20 76 61 6c 75 65 20 3d 20 50 61 72 73 65 42 6f   value = ParseBo
17530 6f 6c 65 61 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a  olean(text);....
17540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17550 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
17560 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  value == null)..
17570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17580 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
17590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
175a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
175b0 72 72 6f 72 20 3d 20 54 72 61 63 65 4f 70 73 2e  rror = TraceOps.
175c0 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 0d 0a  DebugAndTrace(..
175d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
175e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
175f0 20 20 20 20 54 72 61 63 65 50 72 69 6f 72 69 74      TracePriorit
17600 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75 67 43  y.Lowest, debugC
17610 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20  allback,..      
17620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
17640 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72  aceCallback, Str
17650 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
17660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17680 20 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20 62 6f   "Invalid {0} bo
17690 6f 6c 65 61 6e 20 76 61 6c 75 65 3a 20 7b 31 7d  olean value: {1}
176a0 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
176b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
176c0 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c          ForDispl
176d0 61 79 28 61 72 67 29 2c 20 46 6f 72 44 69 73 70  ay(arg), ForDisp
176e0 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a 20 20 20  lay(text)),..   
176f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17710 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
17720 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
17730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17740 20 20 20 20 69 66 20 28 73 74 72 69 63 74 29 0d      if (strict).
17750 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
17760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17770 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
17780 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e;....          
17790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
177a0 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d        continue;.
177b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
177c0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
177d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
177e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
177f0 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 4e 65  nfiguration.noNe
17800 74 46 78 34 30 20 3d 20 28 62 6f 6f 6c 29 76 61  tFx40 = (bool)va
17810 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lue;..          
17820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
17830 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
17840 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66           else if
17850 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65   (MatchOption(ne
17860 77 41 72 67 2c 20 22 6e 6f 4e 65 74 46 78 34 35  wArg, "noNetFx45
17870 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  "))..           
17880 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
17890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
178a0 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
178b0 3f 20 76 61 6c 75 65 20 3d 20 50 61 72 73 65 42  ? value = ParseB
178c0 6f 6f 6c 65 61 6e 28 74 65 78 74 29 3b 0d 0a 0d  oolean(text);...
178d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
178e0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
178f0 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d  (value == null).
17900 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
17910 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
17920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17940 65 72 72 6f 72 20 3d 20 54 72 61 63 65 4f 70 73  error = TraceOps
17950 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 0d  .DebugAndTrace(.
17960 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
17970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17980 20 20 20 20 20 54 72 61 63 65 50 72 69 6f 72 69       TracePriori
17990 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75 67  ty.Lowest, debug
179a0 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20  Callback,..     
179b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
179c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
179d0 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74  raceCallback, St
179e0 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
179f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17a00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17a10 20 20 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20 62    "Invalid {0} b
17a20 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 3a 20 7b 31  oolean value: {1
17a30 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }",..           
17a40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17a50 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70           ForDisp
17a60 6c 61 79 28 61 72 67 29 2c 20 46 6f 72 44 69 73  lay(arg), ForDis
17a70 70 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a 20 20  play(text)),..  
17a80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17a90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17aa0 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29    traceCategory)
17ab0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
17ac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17ad0 20 20 20 20 20 69 66 20 28 73 74 72 69 63 74 29       if (strict)
17ae0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
17af0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17b00 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
17b10 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  se;....         
17b20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17b30 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b         continue;
17b40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
17b50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
17b60 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
17b70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
17b80 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 4e  onfiguration.noN
17b90 65 74 46 78 34 35 20 3d 20 28 62 6f 6f 6c 29 76  etFx45 = (bool)v
17ba0 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alue;..         
17bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
17bc0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
17bd0 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69            else i
17be0 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e  f (MatchOption(n
17bf0 65 77 41 72 67 2c 20 22 6e 6f 4e 65 74 46 78 34  ewArg, "noNetFx4
17c00 35 31 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20  51"))..         
17c10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
17c20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
17c30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f                bo
17c40 6f 6c 3f 20 76 61 6c 75 65 20 3d 20 50 61 72 73  ol? value = Pars
17c50 65 42 6f 6f 6c 65 61 6e 28 74 65 78 74 29 3b 0d  eBoolean(text);.
17c60 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
17c70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
17c80 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c  f (value == null
17c90 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
17ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
17cb0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
17cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17cd0 20 20 65 72 72 6f 72 20 3d 20 54 72 61 63 65 4f    error = TraceO
17ce0 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65  ps.DebugAndTrace
17cf0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
17d00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17d10 20 20 20 20 20 20 20 54 72 61 63 65 50 72 69 6f         TracePrio
17d20 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62  rity.Lowest, deb
17d30 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20  ugCallback,..   
17d40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17d50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17d60 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20   traceCallback, 
17d70 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
17d80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17d90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17da0 20 20 20 20 22 49 6e 76 61 6c 69 64 20 7b 30 7d      "Invalid {0}
17db0 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 3a 20   boolean value: 
17dc0 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  {1}",..         
17dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17de0 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69             ForDi
17df0 73 70 6c 61 79 28 61 72 67 29 2c 20 46 6f 72 44  splay(arg), ForD
17e00 69 73 70 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a  isplay(text)),..
17e10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17e20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17e30 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72      traceCategor
17e40 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
17e50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17e60 20 20 20 20 20 20 20 69 66 20 28 73 74 72 69 63         if (stric
17e70 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t)..            
17e80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17e90 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
17ea0 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  alse;....       
17eb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17ec0 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75           continu
17ed0 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
17ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17ef0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
17f00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17f10 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e   configuration.n
17f20 6f 4e 65 74 46 78 34 35 31 20 3d 20 28 62 6f 6f  oNetFx451 = (boo
17f30 6c 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20  l)value;..      
17f40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17f50 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
17f60 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73               els
17f70 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f  e if (MatchOptio
17f80 6e 28 6e 65 77 41 72 67 2c 20 22 6e 6f 4e 65 74  n(newArg, "noNet
17f90 46 78 34 35 32 22 29 29 0d 0a 20 20 20 20 20 20  Fx452"))..      
17fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17fb0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
17fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17fd0 20 62 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d 20 50   bool? value = P
17fe0 61 72 73 65 42 6f 6f 6c 65 61 6e 28 74 65 78 74  arseBoolean(text
17ff0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
18000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18010 20 20 69 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e    if (value == n
18020 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
18030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18040 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
18050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18060 20 20 20 20 20 65 72 72 6f 72 20 3d 20 54 72 61       error = Tra
18070 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72  ceOps.DebugAndTr
18080 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ace(..          
18090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
180a0 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 50            TraceP
180b0 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20  riority.Lowest, 
180c0 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a  debugCallback,..
180d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
180e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
180f0 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63      traceCallbac
18100 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  k, String.Format
18110 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
18120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18130 20 20 20 20 20 20 20 22 49 6e 76 61 6c 69 64 20         "Invalid 
18140 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75  {0} boolean valu
18150 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20  e: {1}",..      
18160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f                Fo
18180 72 44 69 73 70 6c 61 79 28 61 72 67 29 2c 20 46  rDisplay(arg), F
18190 6f 72 44 69 73 70 6c 61 79 28 74 65 78 74 29 29  orDisplay(text))
181a0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
181b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
181c0 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65         traceCate
181d0 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
181e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
181f0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 73 74            if (st
18200 72 69 63 74 29 0d 0a 20 20 20 20 20 20 20 20 20  rict)..         
18210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18220 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
18230 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20  n false;....    
18240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18250 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74              cont
18260 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  inue;..         
18270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18280 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
18290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
182a0 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f      configuratio
182b0 6e 2e 6e 6f 4e 65 74 46 78 34 35 32 20 3d 20 28  n.noNetFx452 = (
182c0 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20 20 20  bool)value;..   
182d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
182e0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
182f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18300 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70  else if (MatchOp
18310 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 6e 6f  tion(newArg, "no
18320 4e 65 74 46 78 34 36 22 29 29 0d 0a 20 20 20 20  NetFx46"))..    
18330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18340 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
18350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18360 20 20 20 62 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d     bool? value =
18370 20 50 61 72 73 65 42 6f 6f 6c 65 61 6e 28 74 65   ParseBoolean(te
18380 78 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  xt);....        
18390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
183a0 20 20 20 20 69 66 20 28 76 61 6c 75 65 20 3d 3d      if (value ==
183b0 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
183c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
183d0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
183e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
183f0 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 54         error = T
18400 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64  raceOps.DebugAnd
18410 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20  Trace(..        
18420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18430 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
18440 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74  ePriority.Lowest
18450 2c 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c  , debugCallback,
18460 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
18470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18480 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62        traceCallb
18490 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d  ack, String.Form
184a0 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
184b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
184c0 20 20 20 20 20 20 20 20 20 22 49 6e 76 61 6c 69           "Invali
184d0 64 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 61  d {0} boolean va
184e0 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20  lue: {1}",..    
184f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18510 46 6f 72 44 69 73 70 6c 61 79 28 61 72 67 29 2c  ForDisplay(arg),
18520 20 46 6f 72 44 69 73 70 6c 61 79 28 74 65 78 74   ForDisplay(text
18530 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  )),..           
18540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18550 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
18560 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
18570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18580 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
18590 73 74 72 69 63 74 29 0d 0a 20 20 20 20 20 20 20  strict)..       
185a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
185b0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
185c0 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20  urn false;....  
185d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
185e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
185f0 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20  ntinue;..       
18600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18610 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
18620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18630 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74        configurat
18640 69 6f 6e 2e 6e 6f 4e 65 74 46 78 34 36 20 3d 20  ion.noNetFx46 = 
18650 28 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20 20  (bool)value;..  
18660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18670 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
18680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18690 20 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f   else if (MatchO
186a0 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 6e  ption(newArg, "n
186b0 6f 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 22  oRuntimeVersion"
186c0 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
186d0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
186e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
186f0 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 3f             bool?
18700 20 76 61 6c 75 65 20 3d 20 50 61 72 73 65 42 6f   value = ParseBo
18710 6f 6c 65 61 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a  olean(text);....
18720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18730 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
18740 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  value == null)..
18750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18760 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
18770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
18790 72 72 6f 72 20 3d 20 54 72 61 63 65 4f 70 73 2e  rror = TraceOps.
187a0 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 0d 0a  DebugAndTrace(..
187b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
187c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
187d0 20 20 20 20 54 72 61 63 65 50 72 69 6f 72 69 74      TracePriorit
187e0 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75 67 43  y.Lowest, debugC
187f0 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20  allback,..      
18800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
18820 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72  aceCallback, Str
18830 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
18840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18860 20 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20 62 6f   "Invalid {0} bo
18870 6f 6c 65 61 6e 20 76 61 6c 75 65 3a 20 7b 31 7d  olean value: {1}
18880 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
18890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
188a0 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c          ForDispl
188b0 61 79 28 61 72 67 29 2c 20 46 6f 72 44 69 73 70  ay(arg), ForDisp
188c0 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a 20 20 20  lay(text)),..   
188d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
188e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
188f0 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
18900 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
18910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18920 20 20 20 20 69 66 20 28 73 74 72 69 63 74 29 0d      if (strict).
18930 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
18940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18950 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
18960 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e;....          
18970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18980 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d        continue;.
18990 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
189a0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
189b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
189c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
189d0 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 52 75  nfiguration.noRu
189e0 6e 74 69 6d 65 56 65 72 73 69 6f 6e 20 3d 20 28  ntimeVersion = (
189f0 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20 20 20  bool)value;..   
18a00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18a10 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
18a20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18a30 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70  else if (MatchOp
18a40 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 6e 6f  tion(newArg, "no
18a50 54 72 61 63 65 22 29 29 0d 0a 20 20 20 20 20 20  Trace"))..      
18a60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18a70 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
18a80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18a90 20 62 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d 20 50   bool? value = P
18aa0 61 72 73 65 42 6f 6f 6c 65 61 6e 28 74 65 78 74  arseBoolean(text
18ab0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
18ac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18ad0 20 20 69 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e    if (value == n
18ae0 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
18af0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18b00 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
18b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18b20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 54 72 61       error = Tra
18b30 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72  ceOps.DebugAndTr
18b40 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ace(..          
18b50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18b60 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 50            TraceP
18b70 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20  riority.Lowest, 
18b80 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a  debugCallback,..
18b90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18bb0 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63      traceCallbac
18bc0 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  k, String.Format
18bd0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
18be0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18bf0 20 20 20 20 20 20 20 22 49 6e 76 61 6c 69 64 20         "Invalid 
18c00 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75  {0} boolean valu
18c10 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20  e: {1}",..      
18c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18c30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f                Fo
18c40 72 44 69 73 70 6c 61 79 28 61 72 67 29 2c 20 46  rDisplay(arg), F
18c50 6f 72 44 69 73 70 6c 61 79 28 74 65 78 74 29 29  orDisplay(text))
18c60 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
18c70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18c80 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65         traceCate
18c90 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
18ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18cb0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 73 74            if (st
18cc0 72 69 63 74 29 0d 0a 20 20 20 20 20 20 20 20 20  rict)..         
18cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18ce0 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
18cf0 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20  n false;....    
18d00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18d10 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74              cont
18d20 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  inue;..         
18d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18d40 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
18d50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18d60 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f      configuratio
18d70 6e 2e 6e 6f 54 72 61 63 65 20 3d 20 28 62 6f 6f  n.noTrace = (boo
18d80 6c 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20  l)value;..      
18d90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18da0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
18db0 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73               els
18dc0 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f  e if (MatchOptio
18dd0 6e 28 6e 65 77 41 72 67 2c 20 22 6e 6f 56 73 32  n(newArg, "noVs2
18de0 30 30 35 22 29 29 0d 0a 20 20 20 20 20 20 20 20  005"))..        
18df0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18e00 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
18e10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62                 b
18e20 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d 20 50 61 72  ool? value = Par
18e30 73 65 42 6f 6f 6c 65 61 6e 28 74 65 78 74 29 3b  seBoolean(text);
18e40 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
18e50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18e60 69 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c  if (value == nul
18e70 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
18e80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18e90 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
18ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18eb0 20 20 20 65 72 72 6f 72 20 3d 20 54 72 61 63 65     error = Trace
18ec0 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63  Ops.DebugAndTrac
18ed0 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
18ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18ef0 20 20 20 20 20 20 20 20 54 72 61 63 65 50 72 69          TracePri
18f00 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65  ority.Lowest, de
18f10 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20  bugCallback,..  
18f20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18f40 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c    traceCallback,
18f50 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d   String.Format(.
18f60 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
18f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18f80 20 20 20 20 20 22 49 6e 76 61 6c 69 64 20 7b 30       "Invalid {0
18f90 7d 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 3a  } boolean value:
18fa0 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20   {1}",..        
18fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18fc0 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44              ForD
18fd0 69 73 70 6c 61 79 28 61 72 67 29 2c 20 46 6f 72  isplay(arg), For
18fe0 44 69 73 70 6c 61 79 28 74 65 78 74 29 29 2c 0d  Display(text)),.
18ff0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
19000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19010 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f       traceCatego
19020 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
19030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19040 20 20 20 20 20 20 20 20 69 66 20 28 73 74 72 69          if (stri
19050 63 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ct)..           
19060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19070 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
19080 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  false;....      
19090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
190a0 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e            contin
190b0 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
190c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
190d0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
190e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
190f0 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e    configuration.
19100 6e 6f 56 73 32 30 30 35 20 3d 20 28 62 6f 6f 6c  noVs2005 = (bool
19110 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20  )value;..       
19120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19130 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
19140 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65              else
19150 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e   if (MatchOption
19160 28 6e 65 77 41 72 67 2c 20 22 6e 6f 56 73 32 30  (newArg, "noVs20
19170 30 38 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20  08"))..         
19180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
19190 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
191a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f                bo
191b0 6f 6c 3f 20 76 61 6c 75 65 20 3d 20 50 61 72 73  ol? value = Pars
191c0 65 42 6f 6f 6c 65 61 6e 28 74 65 78 74 29 3b 0d  eBoolean(text);.
191d0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
191e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
191f0 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c  f (value == null
19200 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
19210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
19220 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
19230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19240 20 20 65 72 72 6f 72 20 3d 20 54 72 61 63 65 4f    error = TraceO
19250 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65  ps.DebugAndTrace
19260 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
19270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19280 20 20 20 20 20 20 20 54 72 61 63 65 50 72 69 6f         TracePrio
19290 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62  rity.Lowest, deb
192a0 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20  ugCallback,..   
192b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
192c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
192d0 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20   traceCallback, 
192e0 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
192f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19310 20 20 20 20 22 49 6e 76 61 6c 69 64 20 7b 30 7d      "Invalid {0}
19320 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 3a 20   boolean value: 
19330 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  {1}",..         
19340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19350 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69             ForDi
19360 73 70 6c 61 79 28 61 72 67 29 2c 20 46 6f 72 44  splay(arg), ForD
19370 69 73 70 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a  isplay(text)),..
19380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
193a0 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72      traceCategor
193b0 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
193c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
193d0 20 20 20 20 20 20 20 69 66 20 28 73 74 72 69 63         if (stric
193e0 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t)..            
193f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19400 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
19410 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  alse;....       
19420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19430 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75           continu
19440 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
19450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19460 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
19470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19480 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e   configuration.n
19490 6f 56 73 32 30 30 38 20 3d 20 28 62 6f 6f 6c 29  oVs2008 = (bool)
194a0 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20  value;..        
194b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
194c0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
194d0 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20             else 
194e0 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28  if (MatchOption(
194f0 6e 65 77 41 72 67 2c 20 22 6e 6f 56 73 32 30 31  newArg, "noVs201
19500 30 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  0"))..          
19510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
19520 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
19530 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f               boo
19540 6c 3f 20 76 61 6c 75 65 20 3d 20 50 61 72 73 65  l? value = Parse
19550 42 6f 6f 6c 65 61 6e 28 74 65 78 74 29 3b 0d 0a  Boolean(text);..
19560 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
19570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
19580 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29   (value == null)
19590 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
195a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
195b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
195c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
195d0 20 65 72 72 6f 72 20 3d 20 54 72 61 63 65 4f 70   error = TraceOp
195e0 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28  s.DebugAndTrace(
195f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
19600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19610 20 20 20 20 20 20 54 72 61 63 65 50 72 69 6f 72        TracePrior
19620 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75  ity.Lowest, debu
19630 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20  gCallback,..    
19640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19660 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53  traceCallback, S
19670 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
19680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
196a0 20 20 20 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20     "Invalid {0} 
196b0 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 3a 20 7b  boolean value: {
196c0 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  1}",..          
196d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
196e0 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73            ForDis
196f0 70 6c 61 79 28 61 72 67 29 2c 20 46 6f 72 44 69  play(arg), ForDi
19700 73 70 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a 20  splay(text)),.. 
19710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19730 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
19740 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
19750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19760 20 20 20 20 20 20 69 66 20 28 73 74 72 69 63 74        if (strict
19770 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
19780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19790 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
197a0 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  lse;....        
197b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
197c0 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65          continue
197d0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
197e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
197f0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
19800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19810 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f  configuration.no
19820 56 73 32 30 31 30 20 3d 20 28 62 6f 6f 6c 29 76  Vs2010 = (bool)v
19830 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alue;..         
19840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
19850 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
19860 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69            else i
19870 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e  f (MatchOption(n
19880 65 77 41 72 67 2c 20 22 6e 6f 56 73 32 30 31 32  ewArg, "noVs2012
19890 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  "))..           
198a0 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
198b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
198c0 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
198d0 3f 20 76 61 6c 75 65 20 3d 20 50 61 72 73 65 42  ? value = ParseB
198e0 6f 6f 6c 65 61 6e 28 74 65 78 74 29 3b 0d 0a 0d  oolean(text);...
198f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
19900 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
19910 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d  (value == null).
19920 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
19930 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
19940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19960 65 72 72 6f 72 20 3d 20 54 72 61 63 65 4f 70 73  error = TraceOps
19970 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 0d  .DebugAndTrace(.
19980 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
19990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
199a0 20 20 20 20 20 54 72 61 63 65 50 72 69 6f 72 69       TracePriori
199b0 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75 67  ty.Lowest, debug
199c0 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20  Callback,..     
199d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
199e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
199f0 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74  raceCallback, St
19a00 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
19a10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19a20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19a30 20 20 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20 62    "Invalid {0} b
19a40 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 3a 20 7b 31  oolean value: {1
19a50 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }",..           
19a60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19a70 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70           ForDisp
19a80 6c 61 79 28 61 72 67 29 2c 20 46 6f 72 44 69 73  lay(arg), ForDis
19a90 70 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a 20 20  play(text)),..  
19aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19ac0 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29    traceCategory)
19ad0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
19ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19af0 20 20 20 20 20 69 66 20 28 73 74 72 69 63 74 29       if (strict)
19b00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
19b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19b20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
19b30 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  se;....         
19b40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19b50 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b         continue;
19b60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
19b70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
19b80 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
19b90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
19ba0 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 56  onfiguration.noV
19bb0 73 32 30 31 32 20 3d 20 28 62 6f 6f 6c 29 76 61  s2012 = (bool)va
19bc0 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lue;..          
19bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
19be0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
19bf0 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66           else if
19c00 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65   (MatchOption(ne
19c10 77 41 72 67 2c 20 22 6e 6f 56 73 32 30 31 33 22  wArg, "noVs2013"
19c20 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
19c30 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
19c40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19c50 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 3f             bool?
19c60 20 76 61 6c 75 65 20 3d 20 50 61 72 73 65 42 6f   value = ParseBo
19c70 6f 6c 65 61 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a  olean(text);....
19c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19c90 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
19ca0 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  value == null)..
19cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19cc0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
19cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
19cf0 72 72 6f 72 20 3d 20 54 72 61 63 65 4f 70 73 2e  rror = TraceOps.
19d00 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 0d 0a  DebugAndTrace(..
19d10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19d20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19d30 20 20 20 20 54 72 61 63 65 50 72 69 6f 72 69 74      TracePriorit
19d40 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75 67 43  y.Lowest, debugC
19d50 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20  allback,..      
19d60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19d70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
19d80 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72  aceCallback, Str
19d90 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
19da0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19db0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19dc0 20 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20 62 6f   "Invalid {0} bo
19dd0 6f 6c 65 61 6e 20 76 61 6c 75 65 3a 20 7b 31 7d  olean value: {1}
19de0 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
19df0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19e00 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c          ForDispl
19e10 61 79 28 61 72 67 29 2c 20 46 6f 72 44 69 73 70  ay(arg), ForDisp
19e20 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a 20 20 20  lay(text)),..   
19e30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19e40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19e50 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
19e60 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
19e70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19e80 20 20 20 20 69 66 20 28 73 74 72 69 63 74 29 0d      if (strict).
19e90 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
19ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19eb0 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
19ec0 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e;....          
19ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19ee0 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d        continue;.
19ef0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
19f00 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
19f10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
19f20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
19f30 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 56 73  nfiguration.noVs
19f40 32 30 31 33 20 3d 20 28 62 6f 6f 6c 29 76 61 6c  2013 = (bool)val
19f50 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
19f60 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
19f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19f80 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20          else if 
19f90 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77  (MatchOption(new
19fa0 41 72 67 2c 20 22 6e 6f 56 73 32 30 31 35 22 29  Arg, "noVs2015")
19fb0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
19fc0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
19fd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19fe0 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 3f 20            bool? 
19ff0 76 61 6c 75 65 20 3d 20 50 61 72 73 65 42 6f 6f  value = ParseBoo
1a000 6c 65 61 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a 20  lean(text);.... 
1a010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a020 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76             if (v
1a030 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  alue == null).. 
1a040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a050 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
1a060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72                er
1a080 72 6f 72 20 3d 20 54 72 61 63 65 4f 70 73 2e 44  ror = TraceOps.D
1a090 65 62 75 67 41 6e 64 54 72 61 63 65 28 0d 0a 20  ebugAndTrace(.. 
1a0a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a0b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a0c0 20 20 20 54 72 61 63 65 50 72 69 6f 72 69 74 79     TracePriority
1a0d0 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75 67 43 61  .Lowest, debugCa
1a0e0 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20  llback,..       
1a0f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a100 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
1a110 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69  ceCallback, Stri
1a120 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20  ng.Format(..    
1a130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a150 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20 62 6f 6f  "Invalid {0} boo
1a160 6c 65 61 6e 20 76 61 6c 75 65 3a 20 7b 31 7d 22  lean value: {1}"
1a170 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
1a180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a190 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61         ForDispla
1a1a0 79 28 61 72 67 29 2c 20 46 6f 72 44 69 73 70 6c  y(arg), ForDispl
1a1b0 61 79 28 74 65 78 74 29 29 2c 0d 0a 20 20 20 20  ay(text)),..    
1a1c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a1d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a1e0 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
1a1f0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
1a200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a210 20 20 20 69 66 20 28 73 74 72 69 63 74 29 0d 0a     if (strict)..
1a220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a240 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
1a250 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
1a260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a270 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a       continue;..
1a280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a290 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
1a2a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1a2b0 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
1a2c0 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 56 73 32  figuration.noVs2
1a2d0 30 31 35 20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75  015 = (bool)valu
1a2e0 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
1a2f0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
1a300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a310 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28         else if (
1a320 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41  MatchOption(newA
1a330 72 67 2c 20 22 70 65 72 55 73 65 72 22 29 29 0d  rg, "perUser")).
1a340 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1a350 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
1a360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a370 20 20 20 20 20 20 20 20 62 6f 6f 6c 3f 20 76 61          bool? va
1a380 6c 75 65 20 3d 20 50 61 72 73 65 42 6f 6f 6c 65  lue = ParseBoole
1a390 61 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a 20 20 20  an(text);....   
1a3a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a3b0 20 20 20 20 20 20 20 20 20 69 66 20 28 76 61 6c           if (val
1a3c0 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ue == null)..   
1a3d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a3e0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
1a3f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a400 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
1a410 72 20 3d 20 54 72 61 63 65 4f 70 73 2e 44 65 62  r = TraceOps.Deb
1a420 75 67 41 6e 64 54 72 61 63 65 28 0d 0a 20 20 20  ugAndTrace(..   
1a430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a450 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c   TracePriority.L
1a460 6f 77 65 73 74 2c 20 64 65 62 75 67 43 61 6c 6c  owest, debugCall
1a470 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20  back,..         
1a480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a490 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
1a4a0 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67  Callback, String
1a4b0 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  .Format(..      
1a4c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a4d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 49                "I
1a4e0 6e 76 61 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c 65  nvalid {0} boole
1a4f0 61 6e 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d  an value: {1}",.
1a500 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1a510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a520 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28       ForDisplay(
1a530 61 72 67 29 2c 20 46 6f 72 44 69 73 70 6c 61 79  arg), ForDisplay
1a540 28 74 65 78 74 29 29 2c 0d 0a 20 20 20 20 20 20  (text)),..      
1a550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
1a570 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d  aceCategory);...
1a580 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1a590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a5a0 20 69 66 20 28 73 74 72 69 63 74 29 0d 0a 20 20   if (strict)..  
1a5b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a5c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a5d0 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
1a5e0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
1a5f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a600 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20     continue;..  
1a610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a620 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
1a630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a640 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69             confi
1a650 67 75 72 61 74 69 6f 6e 2e 70 65 72 55 73 65 72  guration.perUser
1a660 20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d   = (bool)value;.
1a670 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1a680 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
1a690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a6a0 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61 74      else if (Mat
1a6b0 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c  chOption(newArg,
1a6c0 20 22 70 72 6f 76 69 64 65 72 46 6c 61 67 73 22   "providerFlags"
1a6d0 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
1a6e0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
1a6f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a700 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63             objec
1a710 74 20 76 61 6c 75 65 20 3d 20 50 61 72 73 65 45  t value = ParseE
1a720 6e 75 6d 28 0d 0a 20 20 20 20 20 20 20 20 20 20  num(..          
1a730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a740 20 20 20 20 20 20 74 79 70 65 6f 66 28 50 72 6f        typeof(Pro
1a750 76 69 64 65 72 46 6c 61 67 73 29 2c 20 74 65 78  viderFlags), tex
1a760 74 2c 20 74 72 75 65 29 3b 0d 0a 0d 0a 20 20 20  t, true);....   
1a770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a780 20 20 20 20 20 20 20 20 20 69 66 20 28 76 61 6c           if (val
1a790 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ue == null)..   
1a7a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a7b0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
1a7c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a7d0 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
1a7e0 72 20 3d 20 54 72 61 63 65 4f 70 73 2e 44 65 62  r = TraceOps.Deb
1a7f0 75 67 41 6e 64 54 72 61 63 65 28 0d 0a 20 20 20  ugAndTrace(..   
1a800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a820 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c   TracePriority.L
1a830 6f 77 65 73 74 2c 20 64 65 62 75 67 43 61 6c 6c  owest, debugCall
1a840 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20  back,..         
1a850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a860 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
1a870 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67  Callback, String
1a880 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  .Format(..      
1a890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a8a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 49                "I
1a8b0 6e 76 61 6c 69 64 20 7b 30 7d 20 76 61 6c 75 65  nvalid {0} value
1a8c0 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20  : {1}",..       
1a8d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a8e0 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72               For
1a8f0 44 69 73 70 6c 61 79 28 61 72 67 29 2c 20 46 6f  Display(arg), Fo
1a900 72 44 69 73 70 6c 61 79 28 74 65 78 74 29 29 2c  rDisplay(text)),
1a910 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1a920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a930 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67        traceCateg
1a940 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
1a950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a960 20 20 20 20 20 20 20 20 20 69 66 20 28 73 74 72           if (str
1a970 69 63 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ict)..          
1a980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a990 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
1a9a0 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20   false;....     
1a9b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a9c0 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69             conti
1a9d0 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  nue;..          
1a9e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a9f0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
1aa00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1aa10 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e     configuration
1aa20 2e 70 72 6f 76 69 64 65 72 46 6c 61 67 73 20 3d  .providerFlags =
1aa30 20 28 50 72 6f 76 69 64 65 72 46 6c 61 67 73 29   (ProviderFlags)
1aa40 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20  value;..        
1aa50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1aa60 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
1aa70 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20             else 
1aa80 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28  if (MatchOption(
1aa90 6e 65 77 41 72 67 2c 20 22 72 65 67 69 73 74 72  newArg, "registr
1aaa0 79 56 65 72 73 69 6f 6e 22 29 29 0d 0a 20 20 20  yVersion"))..   
1aab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1aac0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
1aad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1aae0 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f      configuratio
1aaf0 6e 2e 72 65 67 69 73 74 72 79 56 65 72 73 69 6f  n.registryVersio
1ab00 6e 20 3d 20 74 65 78 74 3b 0d 0a 20 20 20 20 20  n = text;..     
1ab10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ab20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
1ab30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c                el
1ab40 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69  se if (MatchOpti
1ab50 6f 6e 28 6e 65 77 41 72 67 2c 20 22 73 74 72 69  on(newArg, "stri
1ab60 63 74 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ct"))..         
1ab70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
1ab80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1ab90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f                bo
1aba0 6f 6c 3f 20 76 61 6c 75 65 20 3d 20 50 61 72 73  ol? value = Pars
1abb0 65 42 6f 6f 6c 65 61 6e 28 74 65 78 74 29 3b 0d  eBoolean(text);.
1abc0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
1abd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
1abe0 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c  f (value == null
1abf0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
1ac00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
1ac10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1ac20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ac30 20 20 65 72 72 6f 72 20 3d 20 54 72 61 63 65 4f    error = TraceO
1ac40 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65  ps.DebugAndTrace
1ac50 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
1ac60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ac70 20 20 20 20 20 20 20 54 72 61 63 65 50 72 69 6f         TracePrio
1ac80 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62  rity.Lowest, deb
1ac90 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20  ugCallback,..   
1aca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1acb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1acc0 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20   traceCallback, 
1acd0 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
1ace0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1acf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ad00 20 20 20 20 22 49 6e 76 61 6c 69 64 20 7b 30 7d      "Invalid {0}
1ad10 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 3a 20   boolean value: 
1ad20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  {1}",..         
1ad30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ad40 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69             ForDi
1ad50 73 70 6c 61 79 28 61 72 67 29 2c 20 46 6f 72 44  splay(arg), ForD
1ad60 69 73 70 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a  isplay(text)),..
1ad70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ad80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ad90 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72      traceCategor
1ada0 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
1adb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1adc0 20 20 20 20 20 20 20 69 66 20 28 73 74 72 69 63         if (stric
1add0 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t)..            
1ade0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1adf0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
1ae00 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  alse;....       
1ae10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ae20 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75           continu
1ae30 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
1ae40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ae50 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
1ae60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ae70 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
1ae80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ae90 20 2f 2f 20 4e 4f 54 45 3a 20 41 6c 6c 6f 77 20   // NOTE: Allow 
1aea0 74 68 65 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65  the command line
1aeb0 20 61 72 67 75 6d 65 6e 74 73 20 74 6f 0d 0a 20   arguments to.. 
1aec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1aed0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
1aee0 20 20 20 20 6f 76 65 72 72 69 64 65 20 74 68 65      override the
1aef0 20 22 73 74 72 69 63 74 6e 65 73 73 22 20 73 65   "strictness" se
1af00 74 74 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 20  tting..         
1af10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1af20 20 20 20 2f 2f 20 20 20 20 20 20 20 70 72 6f 76     //       prov
1af30 69 64 65 64 20 62 79 20 6f 75 72 20 63 61 6c 6c  ided by our call
1af40 65 72 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  er...           
1af50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1af60 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
1af70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1af80 20 73 74 72 69 63 74 20 3d 20 28 62 6f 6f 6c 29   strict = (bool)
1af90 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20  value;..        
1afa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1afb0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
1afc0 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20             else 
1afd0 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28  if (MatchOption(
1afe0 6e 65 77 41 72 67 2c 20 22 74 68 72 6f 77 4f 6e  newArg, "throwOn
1aff0 4d 69 73 73 69 6e 67 22 29 29 0d 0a 20 20 20 20  Missing"))..    
1b000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b010 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
1b020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b030 20 20 20 62 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d     bool? value =
1b040 20 50 61 72 73 65 42 6f 6f 6c 65 61 6e 28 74 65   ParseBoolean(te
1b050 78 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  xt);....        
1b060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b070 20 20 20 20 69 66 20 28 76 61 6c 75 65 20 3d 3d      if (value ==
1b080 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
1b090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b0a0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
1b0b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b0c0 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 54         error = T
1b0d0 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64  raceOps.DebugAnd
1b0e0 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20  Trace(..        
1b0f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b100 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
1b110 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74  ePriority.Lowest
1b120 2c 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c  , debugCallback,
1b130 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1b140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b150 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62        traceCallb
1b160 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d  ack, String.Form
1b170 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
1b180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b190 20 20 20 20 20 20 20 20 20 22 49 6e 76 61 6c 69           "Invali
1b1a0 64 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 61  d {0} boolean va
1b1b0 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20  lue: {1}",..    
1b1c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b1d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b1e0 46 6f 72 44 69 73 70 6c 61 79 28 61 72 67 29 2c  ForDisplay(arg),
1b1f0 20 46 6f 72 44 69 73 70 6c 61 79 28 74 65 78 74   ForDisplay(text
1b200 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  )),..           
1b210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b220 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
1b230 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
1b240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b250 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
1b260 73 74 72 69 63 74 29 0d 0a 20 20 20 20 20 20 20  strict)..       
1b270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b280 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
1b290 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20  urn false;....  
1b2a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b2b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
1b2c0 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20  ntinue;..       
1b2d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b2e0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
1b2f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b300 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74        configurat
1b310 69 6f 6e 2e 74 68 72 6f 77 4f 6e 4d 69 73 73 69  ion.throwOnMissi
1b320 6e 67 20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75 65  ng = (bool)value
1b330 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
1b340 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
1b350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b360 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d        else if (M
1b370 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72  atchOption(newAr
1b380 67 2c 20 22 74 72 61 63 65 46 6f 72 6d 61 74 22  g, "traceFormat"
1b390 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
1b3a0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
1b3b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b3c0 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69             confi
1b3d0 67 75 72 61 74 69 6f 6e 2e 74 72 61 63 65 46 6f  guration.traceFo
1b3e0 72 6d 61 74 20 3d 20 74 65 78 74 3b 0d 0a 20 20  rmat = text;..  
1b3f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b400 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f            TraceO
1b410 70 73 2e 54 72 61 63 65 46 6f 72 6d 61 74 20 3d  ps.TraceFormat =
1b420 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 74   configuration.t
1b430 72 61 63 65 46 6f 72 6d 61 74 3b 0d 0a 20 20 20  raceFormat;..   
1b440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b450 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
1b460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b470 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70  else if (MatchOp
1b480 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 74 72  tion(newArg, "tr
1b490 61 63 65 50 72 69 6f 72 69 74 79 22 29 29 0d 0a  acePriority"))..
1b4a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b4b0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
1b4c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b4d0 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 76 61         object va
1b4e0 6c 75 65 20 3d 20 50 61 72 73 65 45 6e 75 6d 28  lue = ParseEnum(
1b4f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1b500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b510 20 20 74 79 70 65 6f 66 28 54 72 61 63 65 50 72    typeof(TracePr
1b520 69 6f 72 69 74 79 29 2c 20 74 65 78 74 2c 20 74  iority), text, t
1b530 72 75 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  rue);....       
1b540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b550 20 20 20 20 20 69 66 20 28 76 61 6c 75 65 20 3d       if (value =
1b560 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
1b570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b580 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
1b590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b5a0 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20          error = 
1b5b0 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e  TraceOps.DebugAn
1b5c0 64 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20  dTrace(..       
1b5d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b5e0 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61               Tra
1b5f0 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73  cePriority.Lowes
1b600 74 2c 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b  t, debugCallback
1b610 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
1b620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b630 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c         traceCall
1b640 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72  back, String.For
1b650 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
1b660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b670 20 20 20 20 20 20 20 20 20 20 22 49 6e 76 61 6c            "Inval
1b680 69 64 20 7b 30 7d 20 76 61 6c 75 65 3a 20 7b 31  id {0} value: {1
1b690 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }",..           
1b6a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b6b0 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70           ForDisp
1b6c0 6c 61 79 28 61 72 67 29 2c 20 46 6f 72 44 69 73  lay(arg), ForDis
1b6d0 70 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a 20 20  play(text)),..  
1b6e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b6f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b700 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29    traceCategory)
1b710 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
1b720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b730 20 20 20 20 20 69 66 20 28 73 74 72 69 63 74 29       if (strict)
1b740 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1b750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b760 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
1b770 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  se;....         
1b780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b790 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b         continue;
1b7a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1b7b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
1b7c0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
1b7d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
1b7e0 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 74 72 61  onfiguration.tra
1b7f0 63 65 50 72 69 6f 72 69 74 79 20 3d 20 28 54 72  cePriority = (Tr
1b800 61 63 65 50 72 69 6f 72 69 74 79 29 76 61 6c 75  acePriority)valu
1b810 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
1b820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b830 54 72 61 63 65 4f 70 73 2e 54 72 61 63 65 50 72  TraceOps.TracePr
1b840 69 6f 72 69 74 79 20 3d 20 63 6f 6e 66 69 67 75  iority = configu
1b850 72 61 74 69 6f 6e 2e 74 72 61 63 65 50 72 69 6f  ration.tracePrio
1b860 72 69 74 79 3b 0d 0a 20 20 20 20 20 20 20 20 20  rity;..         
1b870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
1b880 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1b890 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69            else i
1b8a0 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e  f (MatchOption(n
1b8b0 65 77 41 72 67 2c 20 22 76 65 72 62 6f 73 65 22  ewArg, "verbose"
1b8c0 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
1b8d0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
1b8e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b8f0 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 3f             bool?
1b900 20 76 61 6c 75 65 20 3d 20 50 61 72 73 65 42 6f   value = ParseBo
1b910 6f 6c 65 61 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a  olean(text);....
1b920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b930 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
1b940 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  value == null)..
1b950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b960 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
1b970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
1b990 72 72 6f 72 20 3d 20 54 72 61 63 65 4f 70 73 2e  rror = TraceOps.
1b9a0 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 0d 0a  DebugAndTrace(..
1b9b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b9c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b9d0 20 20 20 20 54 72 61 63 65 50 72 69 6f 72 69 74      TracePriorit
1b9e0 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75 67 43  y.Lowest, debugC
1b9f0 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20  allback,..      
1ba00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ba10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
1ba20 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72  aceCallback, Str
1ba30 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
1ba40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ba50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ba60 20 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20 62 6f   "Invalid {0} bo
1ba70 6f 6c 65 61 6e 20 76 61 6c 75 65 3a 20 7b 31 7d  olean value: {1}
1ba80 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
1ba90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1baa0 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c          ForDispl
1bab0 61 79 28 61 72 67 29 2c 20 46 6f 72 44 69 73 70  ay(arg), ForDisp
1bac0 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a 20 20 20  lay(text)),..   
1bad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1baf0 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
1bb00 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1bb10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bb20 20 20 20 20 69 66 20 28 73 74 72 69 63 74 29 0d      if (strict).
1bb30 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1bb40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bb50 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
1bb60 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e;....          
1bb70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bb80 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d        continue;.
1bb90 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1bba0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
1bbb0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1bbc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
1bbd0 6e 66 69 67 75 72 61 74 69 6f 6e 2e 76 65 72 62  nfiguration.verb
1bbe0 6f 73 65 20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75  ose = (bool)valu
1bbf0 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
1bc00 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
1bc10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bc20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28         else if (
1bc30 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41  MatchOption(newA
1bc40 72 67 2c 20 22 76 73 56 65 72 73 69 6f 6e 53 75  rg, "vsVersionSu
1bc50 66 66 69 78 22 29 29 0d 0a 20 20 20 20 20 20 20  ffix"))..       
1bc60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bc70 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
1bc80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bc90 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 76 73  configuration.vs
1bca0 56 65 72 73 69 6f 6e 53 75 66 66 69 78 20 3d 20  VersionSuffix = 
1bcb0 74 65 78 74 3b 0d 0a 20 20 20 20 20 20 20 20 20  text;..         
1bcc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
1bcd0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1bce0 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69            else i
1bcf0 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e  f (MatchOption(n
1bd00 65 77 41 72 67 2c 20 22 77 68 61 74 49 66 22 29  ewArg, "whatIf")
1bd10 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
1bd20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
1bd30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bd40 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 3f 20            bool? 
1bd50 76 61 6c 75 65 20 3d 20 50 61 72 73 65 42 6f 6f  value = ParseBoo
1bd60 6c 65 61 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a 20  lean(text);.... 
1bd70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bd80 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76             if (v
1bd90 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  alue == null).. 
1bda0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bdb0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
1bdc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bdd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72                er
1bde0 72 6f 72 20 3d 20 54 72 61 63 65 4f 70 73 2e 44  ror = TraceOps.D
1bdf0 65 62 75 67 41 6e 64 54 72 61 63 65 28 0d 0a 20  ebugAndTrace(.. 
1be00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1be10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1be20 20 20 20 54 72 61 63 65 50 72 69 6f 72 69 74 79     TracePriority
1be30 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75 67 43 61  .Lowest, debugCa
1be40 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20  llback,..       
1be50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1be60 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
1be70 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69  ceCallback, Stri
1be80 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20  ng.Format(..    
1be90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1beb0 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20 62 6f 6f  "Invalid {0} boo
1bec0 6c 65 61 6e 20 76 61 6c 75 65 3a 20 7b 31 7d 22  lean value: {1}"
1bed0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
1bee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bef0 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61         ForDispla
1bf00 79 28 61 72 67 29 2c 20 46 6f 72 44 69 73 70 6c  y(arg), ForDispl
1bf10 61 79 28 74 65 78 74 29 29 2c 0d 0a 20 20 20 20  ay(text)),..    
1bf20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bf30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bf40 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
1bf50 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
1bf60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bf70 20 20 20 69 66 20 28 73 74 72 69 63 74 29 0d 0a     if (strict)..
1bf80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bf90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bfa0 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
1bfb0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
1bfc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bfd0 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a       continue;..
1bfe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bff0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
1c000 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1c010 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
1c020 66 69 67 75 72 61 74 69 6f 6e 2e 77 68 61 74 49  figuration.whatI
1c030 66 20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75 65 3b  f = (bool)value;
1c040 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1c050 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
1c060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c070 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61       else if (Ma
1c080 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67  tchOption(newArg
1c090 2c 20 22 77 6f 77 36 34 22 29 29 0d 0a 20 20 20  , "wow64"))..   
1c0a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c0b0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
1c0c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c0d0 20 20 20 20 62 6f 6f 6c 3f 20 76 61 6c 75 65 20      bool? value 
1c0e0 3d 20 50 61 72 73 65 42 6f 6f 6c 65 61 6e 28 74  = ParseBoolean(t
1c0f0 65 78 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ext);....       
1c100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c110 20 20 20 20 20 69 66 20 28 76 61 6c 75 65 20 3d       if (value =
1c120 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
1c130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c140 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
1c150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c160 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20          error = 
1c170 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e  TraceOps.DebugAn
1c180 64 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20  dTrace(..       
1c190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c1a0 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61               Tra
1c1b0 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73  cePriority.Lowes
1c1c0 74 2c 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b  t, debugCallback
1c1d0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
1c1e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c1f0 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c         traceCall
1c200 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72  back, String.For
1c210 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
1c220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c230 20 20 20 20 20 20 20 20 20 20 22 49 6e 76 61 6c            "Inval
1c240 69 64 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76  id {0} boolean v
1c250 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20  alue: {1}",..   
1c260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c280 20 46 6f 72 44 69 73 70 6c 61 79 28 61 72 67 29   ForDisplay(arg)
1c290 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 74 65 78  , ForDisplay(tex
1c2a0 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  t)),..          
1c2b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c2c0 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
1c2d0 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20  ategory);....   
1c2e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c2f0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
1c300 28 73 74 72 69 63 74 29 0d 0a 20 20 20 20 20 20  (strict)..      
1c310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
1c330 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20  turn false;.... 
1c340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
1c360 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20  ontinue;..      
1c370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c380 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
1c390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c3a0 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61         configura
1c3b0 74 69 6f 6e 2e 77 6f 77 36 34 20 3d 20 28 62 6f  tion.wow64 = (bo
1c3c0 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20  ol)value;..     
1c3d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c3e0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
1c3f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c                el
1c400 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  se..            
1c410 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
1c420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c430 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72             error
1c440 20 3d 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75   = TraceOps.Debu
1c450 67 41 6e 64 54 72 61 63 65 28 0d 0a 20 20 20 20  gAndTrace(..    
1c460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c470 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
1c480 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74  ePriority.Lowest
1c490 2c 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c  , debugCallback,
1c4a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1c4b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c4c0 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c    traceCallback,
1c4d0 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d   String.Format(.
1c4e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1c4f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c500 20 22 55 6e 73 75 70 70 6f 72 74 65 64 20 63 6f   "Unsupported co
1c510 6d 6d 61 6e 64 20 6c 69 6e 65 20 6f 70 74 69 6f  mmand line optio
1c520 6e 3a 20 7b 30 7d 22 2c 0d 0a 20 20 20 20 20 20  n: {0}",..      
1c530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c540 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73            ForDis
1c550 70 6c 61 79 28 61 72 67 29 29 2c 20 74 72 61 63  play(arg)), trac
1c560 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20  eCategory);.... 
1c570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c580 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 73             if (s
1c590 74 72 69 63 74 29 0d 0a 20 20 20 20 20 20 20 20  trict)..        
1c5a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c5b0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
1c5c0 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alse;..         
1c5d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
1c5e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1c5f0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
1c600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
1c610 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20  eturn true;..   
1c620 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
1c630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c640 63 61 74 63 68 20 28 45 78 63 65 70 74 69 6f 6e  catch (Exception
1c650 20 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20   e)..           
1c660 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
1c670 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
1c680 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61  eOps.DebugAndTra
1c690 63 65 28 54 72 61 63 65 50 72 69 6f 72 69 74 79  ce(TracePriority
1c6a0 2e 48 69 67 68 65 73 74 2c 0d 0a 20 20 20 20 20  .Highest,..     
1c6b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c6c0 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b     debugCallback
1c6d0 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c  , traceCallback,
1c6e0 20 65 2c 20 74 72 61 63 65 43 61 74 65 67 6f 72   e, traceCategor
1c6f0 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
1c700 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72             error
1c710 20 3d 20 22 46 61 69 6c 65 64 20 74 6f 20 6d 6f   = "Failed to mo
1c720 64 69 66 79 20 63 6f 6e 66 69 67 75 72 61 74 69  dify configurati
1c730 6f 6e 2e 22 3b 0d 0a 20 20 20 20 20 20 20 20 20  on.";..         
1c740 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
1c750 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
1c760 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20  rn false;..     
1c770 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
1c780 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
1c790 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c7a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c7b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c7c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
1c7d0 20 20 20 20 20 20 20 20 20 20 20 5b 4d 65 74 68             [Meth
1c7e0 6f 64 49 6d 70 6c 28 4d 65 74 68 6f 64 49 6d 70  odImpl(MethodImp
1c7f0 6c 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e  lOptions.NoInlin
1c800 69 6e 67 29 5d 0d 0a 20 20 20 20 20 20 20 20 20  ing)]..         
1c810 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63     public static
1c820 20 62 6f 6f 6c 20 50 72 6f 63 65 73 73 28 0d 0a   bool Process(..
1c830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c840 73 74 72 69 6e 67 5b 5d 20 61 72 67 73 2c 0d 0a  string[] args,..
1c850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c860 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 63 6f  Configuration co
1c870 6e 66 69 67 75 72 61 74 69 6f 6e 2c 0d 0a 20 20  nfiguration,..  
1c880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f                bo
1c890 6f 6c 20 73 74 72 69 63 74 2c 0d 0a 20 20 20 20  ol strict,..    
1c8a0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20              ref 
1c8b0 73 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20  string error..  
1c8c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d                ).
1c8d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
1c8e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c8f0 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20  try..           
1c900 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
1c910 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
1c920 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 3d 3d  configuration ==
1c930 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
1c940 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
1c950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c960 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22         error = "
1c970 49 6e 76 61 6c 69 64 20 63 6f 6e 66 69 67 75 72  Invalid configur
1c980 61 74 69 6f 6e 2e 22 3b 0d 0a 20 20 20 20 20 20  ation.";..      
1c990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c9a0 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
1c9b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1c9c0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
1c9d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 41 73                As
1c9e0 73 65 6d 62 6c 79 20 61 73 73 65 6d 62 6c 79 20  sembly assembly 
1c9f0 3d 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e  = configuration.
1ca00 61 73 73 65 6d 62 6c 79 3b 0d 0a 0d 0a 20 20 20  assembly;....   
1ca10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ca20 20 69 66 20 28 61 73 73 65 6d 62 6c 79 20 3d 3d   if (assembly ==
1ca30 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
1ca40 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
1ca50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ca60 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22         error = "
1ca70 49 6e 76 61 6c 69 64 20 61 73 73 65 6d 62 6c 79  Invalid assembly
1ca80 2e 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  .";..           
1ca90 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
1caa0 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20  urn false;..    
1cab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cac0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
1cad0 20 20 20 20 20 20 20 20 20 69 66 20 28 21 63 6f           if (!co
1cae0 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 54 72  nfiguration.noTr
1caf0 61 63 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ace)..          
1cb00 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
1cb10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cb20 20 20 20 20 20 69 66 20 28 21 63 6f 6e 66 69 67       if (!config
1cb30 75 72 61 74 69 6f 6e 2e 6e 6f 4c 6f 67 20 26 26  uration.noLog &&
1cb40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1cb50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 74                St
1cb60 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70  ring.IsNullOrEmp
1cb70 74 79 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  ty(configuration
1cb80 2e 6c 6f 67 46 69 6c 65 4e 61 6d 65 29 29 0d 0a  .logFileName))..
1cb90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cba0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
1cbb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cbc0 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
1cbd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cbe0 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20         // NOTE: 
1cbf0 55 73 65 20 74 68 65 20 64 65 66 61 75 6c 74 20  Use the default 
1cc00 6c 6f 67 20 66 69 6c 65 20 6e 61 6d 65 2e 0d 0a  log file name...
1cc10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cc20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
1cc30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cc40 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66              conf
1cc50 69 67 75 72 61 74 69 6f 6e 2e 6c 6f 67 46 69 6c  iguration.logFil
1cc60 65 4e 61 6d 65 20 3d 20 47 65 74 4c 6f 67 46 69  eName = GetLogFi
1cc70 6c 65 4e 61 6d 65 28 0d 0a 20 20 20 20 20 20 20  leName(..       
1cc80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cc90 20 20 20 20 20 20 20 20 20 22 74 72 61 63 65 22           "trace"
1cca0 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
1ccb0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
1ccc0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1ccd0 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
1cce0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ccf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1cd00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1cd10 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1cd20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
1cd30 21 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e  !configuration.n
1cd40 6f 43 6f 6e 73 6f 6c 65 29 0d 0a 20 20 20 20 20  oConsole)..     
1cd50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cd60 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
1cd70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cd80 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
1cd90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cda0 20 20 2f 2f 20 4e 4f 54 45 3a 20 49 6e 20 76 65    // NOTE: In ve
1cdb0 72 62 6f 73 65 20 6d 6f 64 65 2c 20 64 65 62 75  rbose mode, debu
1cdc0 67 20 6f 75 74 70 75 74 20 28 74 68 61 74 20 6d  g output (that m
1cdd0 65 65 74 73 0d 0a 20 20 20 20 20 20 20 20 20 20  eets..          
1cde0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cdf0 20 20 2f 2f 20 20 20 20 20 20 20 74 68 65 20 63    //       the c
1ce00 6f 6e 66 69 67 75 72 65 64 20 70 72 69 6f 72 69  onfigured priori
1ce10 74 79 20 63 72 69 74 65 72 69 61 29 20 77 69 6c  ty criteria) wil
1ce20 6c 20 62 65 0d 0a 20 20 20 20 20 20 20 20 20 20  l be..          
1ce30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ce40 20 20 2f 2f 20 20 20 20 20 20 20 64 69 73 70 6c    //       displ
1ce50 61 79 65 64 20 74 6f 20 74 68 65 20 63 6f 6e 73  ayed to the cons
1ce60 6f 6c 65 3b 20 6f 74 68 65 72 77 69 73 65 2c 20  ole; otherwise, 
1ce70 74 72 61 63 65 0d 0a 20 20 20 20 20 20 20 20 20  trace..         
1ce80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ce90 20 20 20 2f 2f 20 20 20 20 20 20 20 6f 75 74 70     //       outp
1cea0 75 74 20 28 74 68 61 74 20 6d 65 65 74 73 20 74  ut (that meets t
1ceb0 68 65 20 63 6f 6e 66 69 67 75 72 65 64 20 70 72  he configured pr
1cec0 69 6f 72 69 74 79 0d 0a 20 20 20 20 20 20 20 20  iority..        
1ced0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cee0 20 20 20 20 2f 2f 20 20 20 20 20 20 20 63 72 69      //       cri
1cef0 74 65 72 69 61 29 20 77 69 6c 6c 20 62 65 20 64  teria) will be d
1cf00 69 73 70 6c 61 79 65 64 20 74 6f 20 74 68 65 20  isplayed to the 
1cf10 63 6f 6e 73 6f 6c 65 2e 0d 0a 20 20 20 20 20 20  console...      
1cf20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cf30 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
1cf40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cf50 20 20 20 20 20 20 69 66 20 28 63 6f 6e 66 69 67        if (config
1cf60 75 72 61 74 69 6f 6e 2e 64 65 62 75 67 29 0d 0a  uration.debug)..
1cf70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cf80 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
1cf90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cfa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1cfb0 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
1cfc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cfd0 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 41 64 64 20     // NOTE: Add 
1cfe0 74 68 65 20 63 6f 6e 73 6f 6c 65 20 74 72 61 63  the console trac
1cff0 65 20 6c 69 73 74 65 6e 65 72 20 74 6f 20 74 68  e listener to th
1d000 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e..             
1d010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d020 20 20 20 2f 2f 20 20 20 20 20 20 20 6c 69 73 74     //       list
1d030 20 6f 66 20 74 72 61 63 65 20 6c 69 73 74 65 6e   of trace listen
1d040 65 72 73 20 6d 61 69 6e 74 61 69 6e 65 64 20 62  ers maintained b
1d050 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  y..             
1d060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d070 20 20 20 2f 2f 20 20 20 20 20 20 20 74 68 65 20     //       the 
1d080 54 72 61 63 65 4f 70 73 20 63 6c 61 73 73 20 28  TraceOps class (
1d090 69 2e 65 2e 20 6f 6e 6c 79 20 6d 65 73 73 61 67  i.e. only messag
1d0a0 65 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  es..            
1d0b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d0c0 20 20 20 20 2f 2f 20 20 20 20 20 20 20 74 68 61      //       tha
1d0d0 74 20 6d 65 65 74 20 74 68 65 20 64 65 62 75 67  t meet the debug
1d0e0 20 70 72 69 6f 72 69 74 79 20 77 69 6c 6c 20 62   priority will b
1d0f0 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e..             
1d100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d110 20 20 20 2f 2f 20 20 20 20 20 20 20 73 65 65 6e     //       seen
1d120 20 6f 6e 20 74 68 65 20 63 6f 6e 73 6f 6c 65 29   on the console)
1d130 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
1d140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d150 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
1d160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d170 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e         TraceOps.
1d180 53 65 74 75 70 44 65 62 75 67 4c 69 73 74 65 6e  SetupDebugListen
1d190 65 72 73 28 29 3b 0d 0a 20 20 20 20 20 20 20 20  ers();..        
1d1a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d1b0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
1d1c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d1d0 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20     else..       
1d1e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d1f0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
1d200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d210 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
1d220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d230 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e              // N
1d240 4f 54 45 3a 20 41 64 64 20 74 68 65 20 63 6f 6e  OTE: Add the con
1d250 73 6f 6c 65 20 74 72 61 63 65 20 6c 69 73 74 65  sole trace liste
1d260 6e 65 72 20 74 6f 20 74 68 65 0d 0a 20 20 20 20  ner to the..    
1d270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d280 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
1d290 20 20 20 20 20 6c 69 73 74 20 6f 66 20 62 75 69       list of bui
1d2a0 6c 74 2d 69 6e 20 74 72 61 63 65 20 6c 69 73 74  lt-in trace list
1d2b0 65 6e 65 72 73 20 28 69 2e 65 2e 0d 0a 20 20 20  eners (i.e...   
1d2c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d2d0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
1d2e0 20 20 20 20 20 20 6f 6e 6c 79 20 6d 65 73 73 61        only messa
1d2f0 67 65 73 20 74 68 61 74 20 6d 65 65 74 20 74 68  ges that meet th
1d300 65 20 74 72 61 63 65 0d 0a 20 20 20 20 20 20 20  e trace..       
1d310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d320 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
1d330 20 20 70 72 69 6f 72 69 74 79 20 77 69 6c 6c 20    priority will 
1d340 62 65 20 73 65 65 6e 20 6f 6e 20 74 68 65 20 63  be seen on the c
1d350 6f 6e 73 6f 6c 65 29 2e 0d 0a 20 20 20 20 20 20  onsole)...      
1d360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d370 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
1d380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
1d3a0 61 63 65 2e 4c 69 73 74 65 6e 65 72 73 2e 41 64  ace.Listeners.Ad
1d3b0 64 28 6e 65 77 20 43 6f 6e 73 6f 6c 65 54 72 61  d(new ConsoleTra
1d3c0 63 65 4c 69 73 74 65 6e 65 72 28 29 29 3b 0d 0a  ceListener());..
1d3d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d3e0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
1d3f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d400 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
1d410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d420 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
1d430 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d440 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d450 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
1d460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d470 20 20 20 20 20 20 20 69 66 20 28 21 63 6f 6e 66         if (!conf
1d480 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 4c 6f 67 20  iguration.noLog 
1d490 26 26 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  &&..            
1d4a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d4b0 21 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72  !String.IsNullOr
1d4c0 45 6d 70 74 79 28 63 6f 6e 66 69 67 75 72 61 74  Empty(configurat
1d4d0 69 6f 6e 2e 6c 6f 67 46 69 6c 65 4e 61 6d 65 29  ion.logFileName)
1d4e0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
1d4f0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
1d500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d510 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 2e            Trace.
1d520 4c 69 73 74 65 6e 65 72 73 2e 41 64 64 28 6e 65  Listeners.Add(ne
1d530 77 20 54 65 78 74 57 72 69 74 65 72 54 72 61 63  w TextWriterTrac
1d540 65 4c 69 73 74 65 6e 65 72 28 0d 0a 20 20 20 20  eListener(..    
1d550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d560 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66              conf
1d570 69 67 75 72 61 74 69 6f 6e 2e 6c 6f 67 46 69 6c  iguration.logFil
1d580 65 4e 61 6d 65 29 29 3b 0d 0a 0d 0a 20 20 20 20  eName));....    
1d590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d5a0 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
1d5b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d5c0 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a          // NOTE:
1d5d0 20 54 65 63 68 6e 69 63 61 6c 6c 79 2c 20 77 65   Technically, we
1d5e0 20 63 72 65 61 74 65 64 20 74 68 65 20 6c 6f 67   created the log
1d5f0 20 66 69 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20   file...        
1d600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d610 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
1d620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d630 20 20 20 20 66 69 6c 65 73 43 72 65 61 74 65 64      filesCreated
1d640 2b 2b 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ++;..           
1d650 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
1d660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d670 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
1d680 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
1d690 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1d6a0 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 44 75       // NOTE: Du
1d6b0 6d 70 20 74 68 65 20 63 6f 6e 66 69 67 75 72 61  mp the configura
1d6c0 74 69 6f 6e 20 6e 6f 77 20 69 6e 20 63 61 73 65  tion now in case
1d6d0 20 77 65 20 6e 65 65 64 20 74 6f 0d 0a 20 20 20   we need to..   
1d6e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d6f0 20 2f 2f 20 20 20 20 20 20 20 74 72 6f 75 62 6c   //       troubl
1d700 65 73 68 6f 6f 74 20 61 6e 79 20 69 73 73 75 65  eshoot any issue
1d710 73 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  s...            
1d720 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
1d730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d740 69 66 20 28 63 6f 6e 66 69 67 75 72 61 74 69 6f  if (configuratio
1d750 6e 2e 64 65 62 75 67 50 72 69 6f 72 69 74 79 20  n.debugPriority 
1d760 3c 3d 20 54 72 61 63 65 50 72 69 6f 72 69 74 79  <= TracePriority
1d770 2e 4d 65 64 69 75 6d 29 0d 0a 20 20 20 20 20 20  .Medium)..      
1d780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d790 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e    configuration.
1d7a0 44 75 6d 70 28 64 65 62 75 67 43 61 6c 6c 62 61  Dump(debugCallba
1d7b0 63 6b 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ck);....        
1d7c0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
1d7d0 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 74 72  configuration.tr
1d7e0 61 63 65 50 72 69 6f 72 69 74 79 20 3c 3d 20 54  acePriority <= T
1d7f0 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4d 65 64  racePriority.Med
1d800 69 75 6d 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ium)..          
1d810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
1d820 6e 66 69 67 75 72 61 74 69 6f 6e 2e 44 75 6d 70  nfiguration.Dump
1d830 28 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 29 3b  (traceCallback);
1d840 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1d850 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
1d860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d870 2f 2f 20 4e 4f 54 45 3a 20 53 68 6f 77 20 77 68  // NOTE: Show wh
1d880 65 72 65 20 77 65 20 61 72 65 20 72 75 6e 6e 69  ere we are runni
1d890 6e 67 20 66 72 6f 6d 20 61 6e 64 20 68 6f 77 20  ng from and how 
1d8a0 77 65 20 77 65 72 65 0d 0a 20 20 20 20 20 20 20  we were..       
1d8b0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
1d8c0 20 20 20 20 20 20 69 6e 76 6f 6b 65 64 2e 0d 0a        invoked...
1d8d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d8e0 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
1d8f0 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
1d900 6e 67 20 6c 6f 63 61 74 69 6f 6e 20 3d 20 61 73  ng location = as
1d910 73 65 6d 62 6c 79 2e 4c 6f 63 61 74 69 6f 6e 3b  sembly.Location;
1d920 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1d930 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73          TraceOps
1d940 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 54  .DebugAndTrace(T
1d950 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4d 65 64  racePriority.Med
1d960 69 75 6d 4c 6f 77 2c 0d 0a 20 20 20 20 20 20 20  iumLow,..       
1d970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d980 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20   debugCallback, 
1d990 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53  traceCallback, S
1d9a0 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
1d9b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d9c0 20 20 20 20 20 20 20 22 52 75 6e 6e 69 6e 67 20         "Running 
1d9d0 65 78 65 63 75 74 61 62 6c 65 20 69 73 3a 20 7b  executable is: {
1d9e0 30 7d 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28  0}", ForDisplay(
1d9f0 6c 6f 63 61 74 69 6f 6e 29 29 2c 0d 0a 20 20 20  location)),..   
1da00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1da10 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f       traceCatego
1da20 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
1da30 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
1da40 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61  eOps.DebugAndTra
1da50 63 65 28 54 72 61 63 65 50 72 69 6f 72 69 74 79  ce(TracePriority
1da60 2e 4d 65 64 69 75 6d 4c 6f 77 2c 0d 0a 20 20 20  .MediumLow,..   
1da70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1da80 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61       debugCallba
1da90 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63  ck, traceCallbac
1daa0 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  k, String.Format
1dab0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
1dac0 20 20 20 20 20 20 20 20 20 20 20 22 4f 72 69 67             "Orig
1dad0 69 6e 61 6c 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e  inal command lin
1dae0 65 20 69 73 3a 20 7b 30 7d 22 2c 0d 0a 20 20 20  e is: {0}",..   
1daf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1db00 20 20 20 20 20 45 6e 76 69 72 6f 6e 6d 65 6e 74       Environment
1db10 2e 43 6f 6d 6d 61 6e 64 4c 69 6e 65 29 2c 20 74  .CommandLine), t
1db20 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
1db30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1db40 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44        TraceOps.D
1db50 65 62 75 67 41 6e 64 54 72 61 63 65 28 54 72 61  ebugAndTrace(Tra
1db60 63 65 50 72 69 6f 72 69 74 79 2e 4d 65 64 69 75  cePriority.Mediu
1db70 6d 4c 6f 77 2c 0d 0a 20 20 20 20 20 20 20 20 20  mLow,..         
1db80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64                 d
1db90 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72  ebugCallback, tr
1dba0 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72  aceCallback, Str
1dbb0 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
1dbc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dbd0 20 20 20 20 20 22 52 75 6e 6e 69 6e 67 20 70 72       "Running pr
1dbe0 6f 63 65 73 73 20 69 73 20 7b 30 7d 2e 22 2c 20  ocess is {0}.", 
1dbf0 49 73 36 34 42 69 74 50 72 6f 63 65 73 73 28 29  Is64BitProcess()
1dc00 20 3f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   ?..            
1dc10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dc20 22 36 34 2d 62 69 74 22 20 3a 20 22 33 32 2d 62  "64-bit" : "32-b
1dc30 69 74 22 29 2c 20 74 72 61 63 65 43 61 74 65 67  it"), traceCateg
1dc40 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
1dc50 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
1dc60 28 21 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e  (!configuration.
1dc70 77 68 61 74 49 66 29 0d 0a 20 20 20 20 20 20 20  whatIf)..       
1dc80 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
1dc90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dca0 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
1dcb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dcc0 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 49 66 20      // NOTE: If 
1dcd0 74 68 65 20 64 65 62 75 67 67 65 72 20 69 73 20  the debugger is 
1dce0 61 74 74 61 63 68 65 64 20 61 6e 64 20 22 77 68  attached and "wh
1dcf0 61 74 2d 69 66 22 0d 0a 20 20 20 20 20 20 20 20  at-if"..        
1dd00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dd10 2f 2f 20 20 20 20 20 20 20 6d 6f 64 65 20 69 73  //       mode is
1dd20 20 5b 6e 6f 77 5d 20 64 69 73 61 62 6c 65 64 2c   [now] disabled,
1dd30 20 69 73 73 75 65 20 61 20 77 61 72 6e 69 6e 67   issue a warning
1dd40 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
1dd50 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
1dd60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dd70 20 20 20 20 20 20 20 69 66 20 28 44 65 62 75 67         if (Debug
1dd80 67 65 72 2e 49 73 41 74 74 61 63 68 65 64 29 0d  ger.IsAttached).
1dd90 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1dda0 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61               Tra
1ddb0 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72  ceOps.DebugAndTr
1ddc0 61 63 65 28 54 72 61 63 65 50 72 69 6f 72 69 74  ace(TracePriorit
1ddd0 79 2e 4d 65 64 69 75 6d 48 69 67 68 2c 0d 0a 20  y.MediumHigh,.. 
1dde0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ddf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64                 d
1de00 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72  ebugCallback, tr
1de10 61 63 65 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20  aceCallback,..  
1de20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1de30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 46                "F
1de40 6f 72 63 65 64 20 74 6f 20 64 69 73 61 62 6c 65  orced to disable
1de50 20 5c 22 77 68 61 74 2d 69 66 5c 22 20 6d 6f 64   \"what-if\" mod
1de60 65 20 77 69 74 68 20 22 20 2b 0d 0a 20 20 20 20  e with " +..    
1de70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1de80 20 20 20 20 20 20 20 20 20 20 20 20 22 64 65 62              "deb
1de90 75 67 67 65 72 20 61 74 74 61 63 68 65 64 2e 22  ugger attached."
1dea0 2c 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29  , traceCategory)
1deb0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
1dec0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
1ded0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c                el
1dee0 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  se..            
1def0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
1df00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1df10 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75     TraceOps.Debu
1df20 67 41 6e 64 54 72 61 63 65 28 54 72 61 63 65 50  gAndTrace(TraceP
1df30 72 69 6f 72 69 74 79 2e 4d 65 64 69 75 6d 48 69  riority.MediumHi
1df40 67 68 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  gh,..           
1df50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1df60 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20   debugCallback, 
1df70 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 0d 0a  traceCallback,..
1df80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1df90 20 20 20 20 20 20 20 20 20 20 20 20 22 4e 6f 20              "No 
1dfa0 61 63 74 75 61 6c 20 63 68 61 6e 67 65 73 20 77  actual changes w
1dfb0 69 6c 6c 20 62 65 20 6d 61 64 65 20 74 6f 20 74  ill be made to t
1dfc0 68 69 73 20 22 20 2b 0d 0a 20 20 20 20 20 20 20  his " +..       
1dfd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dfe0 20 20 20 20 20 22 73 79 73 74 65 6d 20 62 65 63       "system bec
1dff0 61 75 73 65 20 5c 22 77 68 61 74 2d 69 66 5c 22  ause \"what-if\"
1e000 20 6d 6f 64 65 20 69 73 20 65 6e 61 62 6c 65 64   mode is enabled
1e010 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  .",..           
1e020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e030 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
1e040 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1e050 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
1e060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1e070 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
1e080 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20         // NOTE: 
1e090 49 66 20 74 68 65 20 63 6f 6d 6d 61 6e 64 20 6c  If the command l
1e0a0 69 6e 65 20 68 61 73 20 6e 6f 74 20 62 65 65 6e  ine has not been
1e0b0 20 6d 61 6e 75 61 6c 6c 79 0d 0a 20 20 20 20 20   manually..     
1e0c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1e0d0 2f 20 20 20 20 20 20 20 63 6f 6e 66 69 72 6d 65  /       confirme
1e0e0 64 20 28 69 2e 65 2e 20 76 69 61 20 74 68 65 20  d (i.e. via the 
1e0f0 65 78 70 6c 69 63 69 74 20 63 6f 6d 6d 61 6e 64  explicit command
1e100 20 6c 69 6e 65 0d 0a 20 20 20 20 20 20 20 20 20   line..         
1e110 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
1e120 20 20 20 20 6f 70 74 69 6f 6e 29 2c 20 74 68 65      option), the
1e130 6e 20 73 74 6f 70 20 70 72 6f 63 65 73 73 69 6e  n stop processin
1e140 67 20 6e 6f 77 2e 20 20 57 65 20 65 6e 66 6f 72  g now.  We enfor
1e150 63 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ce..            
1e160 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
1e170 20 74 68 69 73 20 72 75 6c 65 20 73 6f 20 74 68   this rule so th
1e180 61 74 20 73 69 6d 70 6c 79 20 64 6f 75 62 6c 65  at simply double
1e190 2d 63 6c 69 63 6b 69 6e 67 20 74 68 65 0d 0a 20  -clicking the.. 
1e1a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e1b0 20 20 20 2f 2f 20 20 20 20 20 20 20 65 78 65 63     //       exec
1e1c0 75 74 61 62 6c 65 20 77 69 6c 6c 20 6e 6f 74 20  utable will not 
1e1d0 72 65 73 75 6c 74 20 69 6e 20 61 6e 79 20 63 68  result in any ch
1e1e0 61 6e 67 65 73 20 62 65 69 6e 67 0d 0a 20 20 20  anges being..   
1e1f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e200 20 2f 2f 20 20 20 20 20 20 20 6d 61 64 65 20 74   //       made t
1e210 6f 20 74 68 65 20 73 79 73 74 65 6d 2e 0d 0a 20  o the system... 
1e220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e230 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
1e240 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21             if (!
1e250 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 63 6f  configuration.co
1e260 6e 66 69 72 6d 29 0d 0a 20 20 20 20 20 20 20 20  nfirm)..        
1e270 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
1e280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e290 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22         error = "
1e2a0 43 61 6e 6e 6f 74 20 63 6f 6e 74 69 6e 75 65 2c  Cannot continue,
1e2b0 20 74 68 65 20 5c 22 63 6f 6e 66 69 72 6d 5c 22   the \"confirm\"
1e2c0 20 6f 70 74 69 6f 6e 20 69 73 20 22 20 2b 0d 0a   option is " +..
1e2d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e2e0 20 20 20 20 20 20 20 20 20 20 20 20 22 6e 6f 74              "not
1e2f0 20 65 6e 61 62 6c 65 64 2e 22 3b 0d 0a 0d 0a 20   enabled.";.... 
1e300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e310 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
1e320 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lse;..          
1e330 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
1e340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e350 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d     return true;.
1e360 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1e370 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
1e380 20 20 20 20 63 61 74 63 68 20 28 45 78 63 65 70      catch (Excep
1e390 74 69 6f 6e 20 65 29 0d 0a 20 20 20 20 20 20 20  tion e)..       
1e3a0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
1e3b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e3c0 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e  TraceOps.DebugAn
1e3d0 64 54 72 61 63 65 28 54 72 61 63 65 50 72 69 6f  dTrace(TracePrio
1e3e0 72 69 74 79 2e 48 69 67 68 65 73 74 2c 0d 0a 20  rity.Highest,.. 
1e3f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e400 20 20 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c         debugCall
1e410 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62  back, traceCallb
1e420 61 63 6b 2c 20 65 2c 20 74 72 61 63 65 43 61 74  ack, e, traceCat
1e430 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20  egory);....     
1e440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
1e450 72 72 6f 72 20 3d 20 22 46 61 69 6c 65 64 20 74  rror = "Failed t
1e460 6f 20 70 72 6f 63 65 73 73 20 63 6f 6e 66 69 67  o process config
1e470 75 72 61 74 69 6f 6e 2e 22 3b 0d 0a 20 20 20 20  uration.";..    
1e480 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
1e490 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1e4a0 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
1e4b0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
1e4c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
1e4d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e4e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e4f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e500 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e510 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1e520 5b 4d 65 74 68 6f 64 49 6d 70 6c 28 4d 65 74 68  [MethodImpl(Meth
1e530 6f 64 49 6d 70 6c 4f 70 74 69 6f 6e 73 2e 4e 6f  odImplOptions.No
1e540 49 6e 6c 69 6e 69 6e 67 29 5d 0d 0a 20 20 20 20  Inlining)]..    
1e550 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73          public s
1e560 74 61 74 69 63 20 62 6f 6f 6c 20 43 68 65 63 6b  tatic bool Check
1e570 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 28 0d  RuntimeVersion(.
1e580 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1e590 20 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 63   Configuration c
1e5a0 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2c 0d 0a 20  onfiguration,.. 
1e5b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62                 b
1e5c0 6f 6f 6c 20 73 74 72 69 63 74 2c 0d 0a 20 20 20  ool strict,..   
1e5d0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66               ref
1e5e0 20 73 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20   string error.. 
1e5f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29                 )
1e600 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
1e610 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1e620 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20   try..          
1e630 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
1e640 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
1e650 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 3d  (configuration =
1e660 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
1e670 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
1e680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e690 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20          error = 
1e6a0 22 49 6e 76 61 6c 69 64 20 63 6f 6e 66 69 67 75  "Invalid configu
1e6b0 72 61 74 69 6f 6e 2e 22 3b 0d 0a 20 20 20 20 20  ration.";..     
1e6c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e6d0 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
1e6e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1e6f0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
1e700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1e710 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
1e720 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20         // NOTE: 
1e730 57 68 61 74 20 76 65 72 73 69 6f 6e 20 6f 66 20  What version of 
1e740 74 68 65 20 72 75 6e 74 69 6d 65 20 77 61 73 20  the runtime was 
1e750 74 68 65 20 63 6f 72 65 20 28 70 72 69 6d 61 72  the core (primar
1e760 79 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y)..            
1e770 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
1e780 20 61 73 73 65 6d 62 6c 79 20 63 6f 6d 70 69 6c   assembly compil
1e790 65 64 20 61 67 61 69 6e 73 74 20 28 65 2e 67 2e  ed against (e.g.
1e7a0 20 22 76 32 2e 30 2e 35 30 37 32 37 22 20 6f 72   "v2.0.50727" or
1e7b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1e7c0 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 22        //       "
1e7d0 76 34 2e 30 2e 33 30 33 31 39 22 29 2e 0d 0a 20  v4.0.30319")... 
1e7e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e7f0 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
1e800 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
1e810 67 20 63 6f 72 65 49 6d 61 67 65 52 75 6e 74 69  g coreImageRunti
1e820 6d 65 56 65 72 73 69 6f 6e 20 3d 20 47 65 74 49  meVersion = GetI
1e830 6d 61 67 65 52 75 6e 74 69 6d 65 56 65 72 73 69  mageRuntimeVersi
1e840 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  on(..           
1e850 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
1e860 66 69 67 75 72 61 74 69 6f 6e 2e 63 6f 72 65 46  figuration.coreF
1e870 69 6c 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20  ileName);....   
1e880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e890 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
1e8a0 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45           // NOTE
1e8b0 3a 20 57 65 20 61 6c 6c 6f 77 20 74 68 65 20 61  : We allow the a
1e8c0 63 74 75 61 6c 20 69 6d 61 67 65 20 72 75 6e 74  ctual image runt
1e8d0 69 6d 65 20 63 68 65 63 6b 69 6e 67 20 74 6f 20  ime checking to 
1e8e0 62 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  be..            
1e8f0 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
1e900 20 62 79 70 61 73 73 65 64 20 76 69 61 20 74 68   bypassed via th
1e910 65 20 22 2d 6e 6f 52 75 6e 74 69 6d 65 56 65 72  e "-noRuntimeVer
1e920 73 69 6f 6e 22 20 63 6f 6d 6d 61 6e 64 20 6c 69  sion" command li
1e930 6e 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ne..            
1e940 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
1e950 20 6f 70 74 69 6f 6e 2e 20 20 54 68 65 20 63 6f   option.  The co
1e960 6d 6d 61 6e 64 20 6c 69 6e 65 20 6f 70 74 69 6f  mmand line optio
1e970 6e 20 69 73 20 69 6e 74 65 6e 64 65 64 20 66 6f  n is intended fo
1e980 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  r..             
1e990 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
1e9a0 65 78 70 65 72 74 20 75 73 65 20 6f 6e 6c 79 2e  expert use only.
1e9b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1e9c0 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
1e9d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
1e9e0 20 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e   (configuration.
1e9f0 6e 6f 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e  noRuntimeVersion
1ea00 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
1ea10 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
1ea20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ea30 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67    TraceOps.Debug
1ea40 41 6e 64 54 72 61 63 65 28 54 72 61 63 65 50 72  AndTrace(TracePr
1ea50 69 6f 72 69 74 79 2e 4d 65 64 69 75 6d 2c 0d 0a  iority.Medium,..
1ea60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ea70 20 20 20 20 20 20 20 20 20 20 20 20 64 65 62 75              debu
1ea80 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65  gCallback, trace
1ea90 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67  Callback, String
1eaa0 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  .Format(..      
1eab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1eac0 20 20 20 20 20 20 22 41 73 73 65 6d 62 6c 79 20        "Assembly 
1ead0 69 73 20 63 6f 6d 70 69 6c 65 64 20 66 6f 72 20  is compiled for 
1eae0 74 68 65 20 2e 4e 45 54 20 46 72 61 6d 65 77 6f  the .NET Framewo
1eaf0 72 6b 20 7b 30 7d 3b 20 22 20 2b 0d 0a 20 20 20  rk {0}; " +..   
1eb00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1eb10 20 20 20 20 20 20 20 20 20 22 68 6f 77 65 76 65           "howeve
1eb20 72 2c 20 69 6e 73 74 61 6c 6c 61 74 69 6f 6e 20  r, installation 
1eb30 72 65 73 74 72 69 63 74 69 6f 6e 73 20 62 61 73  restrictions bas
1eb40 65 64 20 6f 6e 20 74 68 69 73 20 22 20 2b 0d 0a  ed on this " +..
1eb50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1eb60 20 20 20 20 20 20 20 20 20 20 20 20 22 66 61 63              "fac
1eb70 74 20 68 61 76 65 20 62 65 65 6e 20 64 69 73 61  t have been disa
1eb80 62 6c 65 64 20 76 69 61 20 74 68 65 20 63 6f 6d  bled via the com
1eb90 6d 61 6e 64 20 6c 69 6e 65 2e 22 2c 0d 0a 20 20  mand line.",..  
1eba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ebb0 20 20 20 20 20 20 20 20 20 20 63 6f 72 65 49 6d            coreIm
1ebc0 61 67 65 52 75 6e 74 69 6d 65 56 65 72 73 69 6f  ageRuntimeVersio
1ebd0 6e 29 2c 20 74 72 61 63 65 43 61 74 65 67 6f 72  n), traceCategor
1ebe0 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
1ebf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
1ec00 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20  eturn true;..   
1ec10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ec20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
1ec30 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
1ec40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ec50 20 20 2f 2f 20 54 4f 44 4f 3a 20 52 65 73 74 72    // TODO: Restr
1ec60 69 63 74 20 74 68 65 20 63 6f 6e 66 69 67 75 72  ict the configur
1ec70 61 74 69 6f 6e 20 62 61 73 65 64 20 6f 6e 20 77  ation based on w
1ec80 68 69 63 68 20 69 6d 61 67 65 0d 0a 20 20 20 20  hich image..    
1ec90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1eca0 2f 2f 20 20 20 20 20 20 20 72 75 6e 74 69 6d 65  //       runtime
1ecb0 20 76 65 72 73 69 6f 6e 73 20 28 77 68 69 63 68   versions (which
1ecc0 20 6d 6f 72 65 2d 6f 72 2d 6c 65 73 73 20 63 6f   more-or-less co
1ecd0 72 72 65 73 70 6f 6e 64 0d 0a 20 20 20 20 20 20  rrespond..      
1ece0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
1ecf0 20 20 20 20 20 20 20 74 6f 20 2e 4e 45 54 20 46         to .NET F
1ed00 72 61 6d 65 77 6f 72 6b 20 76 65 72 73 69 6f 6e  ramework version
1ed10 73 29 20 61 72 65 20 73 75 70 70 6f 72 74 65 64  s) are supported
1ed20 20 62 79 20 74 68 65 0d 0a 20 20 20 20 20 20 20   by the..       
1ed30 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
1ed40 20 20 20 20 20 20 76 65 72 73 69 6f 6e 73 20 6f        versions o
1ed50 66 20 56 69 73 75 61 6c 20 53 74 75 64 69 6f 20  f Visual Studio 
1ed60 74 68 61 74 20 61 72 65 20 69 6e 73 74 61 6c 6c  that are install
1ed70 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ed...           
1ed80 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
1ed90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1eda0 20 69 66 20 28 53 74 72 69 6e 67 2e 49 73 4e 75   if (String.IsNu
1edb0 6c 6c 4f 72 45 6d 70 74 79 28 63 6f 72 65 49 6d  llOrEmpty(coreIm
1edc0 61 67 65 52 75 6e 74 69 6d 65 56 65 72 73 69 6f  ageRuntimeVersio
1edd0 6e 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n))..           
1ede0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
1edf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ee00 20 20 20 20 65 72 72 6f 72 20 3d 20 22 69 6e 76      error = "inv
1ee10 61 6c 69 64 20 63 6f 72 65 20 66 69 6c 65 20 69  alid core file i
1ee20 6d 61 67 65 20 72 75 6e 74 69 6d 65 20 76 65 72  mage runtime ver
1ee30 73 69 6f 6e 22 3b 0d 0a 20 20 20 20 20 20 20 20  sion";..        
1ee40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ee50 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20  return false;.. 
1ee60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ee70 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
1ee80 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69            else i
1ee90 66 20 28 53 74 72 69 6e 67 2e 45 71 75 61 6c 73  f (String.Equals
1eea0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
1eeb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
1eec0 6f 72 65 49 6d 61 67 65 52 75 6e 74 69 6d 65 56  oreImageRuntimeV
1eed0 65 72 73 69 6f 6e 2c 20 43 4c 52 76 32 49 6d 61  ersion, CLRv2Ima
1eee0 67 65 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e  geRuntimeVersion
1eef0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
1ef00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53                 S
1ef10 74 72 69 6e 67 43 6f 6d 70 61 72 69 73 6f 6e 2e  tringComparison.
1ef20 4f 72 64 69 6e 61 6c 29 29 0d 0a 20 20 20 20 20  Ordinal))..     
1ef30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
1ef40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1ef50 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
1ef60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ef70 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 46        // NOTE: F
1ef80 6f 72 20 74 68 65 20 43 4c 52 20 76 32 2e 30 20  or the CLR v2.0 
1ef90 72 75 6e 74 69 6d 65 2c 20 6d 61 6b 65 20 73 75  runtime, make su
1efa0 72 65 20 77 65 20 64 69 73 61 62 6c 65 0d 0a 20  re we disable.. 
1efb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1efc0 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
1efd0 61 6e 79 20 61 74 74 65 6d 70 74 20 74 6f 20 75  any attempt to u
1efe0 73 65 20 69 74 20 66 6f 72 20 74 68 69 6e 67 73  se it for things
1eff0 20 74 68 61 74 20 72 65 71 75 69 72 65 0d 0a 20   that require.. 
1f000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f010 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
1f020 61 6e 20 61 73 73 65 6d 62 6c 79 20 63 6f 6d 70  an assembly comp
1f030 69 6c 65 64 20 66 6f 72 20 74 68 65 20 43 4c 52  iled for the CLR
1f040 20 76 34 2e 30 2e 20 20 49 74 20 69 73 0d 0a 20   v4.0.  It is.. 
1f050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f060 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
1f070 75 6e 63 65 72 74 61 69 6e 20 69 66 20 74 68 69  uncertain if thi
1f080 73 20 69 73 20 61 63 74 75 61 6c 6c 79 20 61 20  s is actually a 
1f090 70 72 6f 62 6c 65 6d 20 69 6e 0d 0a 20 20 20 20  problem in..    
1f0a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f0b0 20 20 20 20 2f 2f 20 20 20 20 20 20 20 70 72 61      //       pra
1f0c0 63 74 69 63 65 20 61 73 20 74 68 65 20 43 4c 52  ctice as the CLR
1f0d0 20 76 34 2e 30 20 63 61 6e 20 6c 6f 61 64 20 61   v4.0 can load a
1f0e0 6e 64 20 75 73 65 20 61 6e 0d 0a 20 20 20 20 20  nd use an..     
1f0f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f100 20 20 20 2f 2f 20 20 20 20 20 20 20 61 73 73 65     //       asse
1f110 6d 62 6c 79 20 63 6f 6d 70 69 6c 65 64 20 77 69  mbly compiled wi
1f120 74 68 20 74 68 65 20 43 4c 52 20 76 32 2e 30 3b  th the CLR v2.0;
1f130 20 68 6f 77 65 76 65 72 2c 0d 0a 20 20 20 20 20   however,..     
1f140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f150 20 20 20 2f 2f 20 20 20 20 20 20 20 73 69 6e 63     //       sinc
1f160 65 20 74 68 69 73 20 70 72 6f 6a 65 63 74 20 6f  e this project o
1f170 66 66 65 72 73 20 62 6f 74 68 20 63 6f 6e 66 69  ffers both confi
1f180 67 75 72 61 74 69 6f 6e 73 2c 0d 0a 20 20 20 20  gurations,..    
1f190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f1a0 20 20 20 20 2f 2f 20 20 20 20 20 20 20 77 65 20      //       we 
1f1b0 63 75 72 72 65 6e 74 6c 79 20 64 69 73 61 6c 6c  currently disall
1f1c0 6f 77 20 74 68 69 73 20 6d 69 73 6d 61 74 63 68  ow this mismatch
1f1d0 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
1f1e0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
1f1f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f200 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61         configura
1f210 74 69 6f 6e 2e 6e 6f 4e 65 74 46 78 34 30 20 3d  tion.noNetFx40 =
1f220 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20   true;..        
1f230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f240 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f  configuration.no
1f250 4e 65 74 46 78 34 35 20 3d 20 74 72 75 65 3b 0d  NetFx45 = true;.
1f260 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1f270 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75           configu
1f280 72 61 74 69 6f 6e 2e 6e 6f 4e 65 74 46 78 34 35  ration.noNetFx45
1f290 31 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20  1 = true;..     
1f2a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f2b0 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e     configuration
1f2c0 2e 6e 6f 4e 65 74 46 78 34 35 32 20 3d 20 74 72  .noNetFx452 = tr
1f2d0 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
1f2e0 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
1f2f0 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 4e 65 74  figuration.noNet
1f300 46 78 34 36 20 3d 20 74 72 75 65 3b 0d 0a 20 20  Fx46 = true;..  
1f310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f320 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74        configurat
1f330 69 6f 6e 2e 6e 6f 56 73 32 30 31 30 20 3d 20 74  ion.noVs2010 = t
1f340 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  rue;..          
1f350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
1f360 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 56 73  nfiguration.noVs
1f370 32 30 31 32 20 3d 20 74 72 75 65 3b 0d 0a 20 20  2012 = true;..  
1f380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f390 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74        configurat
1f3a0 69 6f 6e 2e 6e 6f 56 73 32 30 31 33 20 3d 20 74  ion.noVs2013 = t
1f3b0 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  rue;..          
1f3c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
1f3d0 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 56 73  nfiguration.noVs
1f3e0 32 30 31 35 20 3d 20 74 72 75 65 3b 0d 0a 0d 0a  2015 = true;....
1f3f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f400 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73          TraceOps
1f410 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 54  .DebugAndTrace(T
1f420 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4d 65 64  racePriority.Med
1f430 69 75 6d 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ium,..          
1f440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f450 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c    debugCallback,
1f460 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20   traceCallback, 
1f470 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
1f480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f490 20 20 20 20 20 20 20 20 20 20 20 20 22 41 73 73              "Ass
1f4a0 65 6d 62 6c 79 20 69 73 20 63 6f 6d 70 69 6c 65  embly is compile
1f4b0 64 20 66 6f 72 20 74 68 65 20 2e 4e 45 54 20 46  d for the .NET F
1f4c0 72 61 6d 65 77 6f 72 6b 20 7b 30 7d 2c 20 22 20  ramework {0}, " 
1f4d0 2b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  +..             
1f4e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
1f4f0 73 75 70 70 6f 72 74 20 66 6f 72 20 74 68 65 20  support for the 
1f500 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72 6b 20 7b  .NET Framework {
1f510 31 7d 20 69 73 20 6e 6f 77 20 64 69 73 61 62 6c  1} is now disabl
1f520 65 64 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  ed.",..         
1f530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f540 20 20 20 43 4c 52 76 32 49 6d 61 67 65 52 75 6e     CLRv2ImageRun
1f550 74 69 6d 65 56 65 72 73 69 6f 6e 2c 20 43 4c 52  timeVersion, CLR
1f560 76 34 49 6d 61 67 65 52 75 6e 74 69 6d 65 56 65  v4ImageRuntimeVe
1f570 72 73 69 6f 6e 29 2c 0d 0a 20 20 20 20 20 20 20  rsion),..       
1f580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f590 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f       traceCatego
1f5a0 72 79 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ry);..          
1f5b0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
1f5c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f5d0 20 65 6c 73 65 20 69 66 20 28 53 74 72 69 6e 67   else if (String
1f5e0 2e 45 71 75 61 6c 73 28 0d 0a 20 20 20 20 20 20  .Equals(..      
1f5f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f600 20 20 20 20 20 20 63 6f 72 65 49 6d 61 67 65 52        coreImageR
1f610 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 2c 20 43  untimeVersion, C
1f620 4c 52 76 34 49 6d 61 67 65 52 75 6e 74 69 6d 65  LRv4ImageRuntime
1f630 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20  Version,..      
1f640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f650 20 20 20 20 20 20 53 74 72 69 6e 67 43 6f 6d 70        StringComp
1f660 61 72 69 73 6f 6e 2e 4f 72 64 69 6e 61 6c 29 29  arison.Ordinal))
1f670 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1f680 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
1f690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f6a0 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
1f6b0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
1f6c0 4e 4f 54 45 3a 20 46 6f 72 20 74 68 65 20 43 4c  NOTE: For the CL
1f6d0 52 20 76 34 2e 30 20 72 75 6e 74 69 6d 65 2c 20  R v4.0 runtime, 
1f6e0 6d 61 6b 65 20 73 75 72 65 20 77 65 20 64 69 73  make sure we dis
1f6f0 61 62 6c 65 0d 0a 20 20 20 20 20 20 20 20 20 20  able..          
1f700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
1f710 20 20 20 20 20 20 20 61 6e 79 20 61 74 74 65 6d         any attem
1f720 70 74 20 74 6f 20 75 73 65 20 69 74 20 66 6f 72  pt to use it for
1f730 20 74 68 69 6e 67 73 20 74 68 61 74 20 72 65 71   things that req
1f740 75 69 72 65 0d 0a 20 20 20 20 20 20 20 20 20 20  uire..          
1f750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
1f760 20 20 20 20 20 20 20 61 6e 20 61 73 73 65 6d 62         an assemb
1f770 6c 79 20 63 6f 6d 70 69 6c 65 64 20 66 6f 72 20  ly compiled for 
1f780 74 68 65 20 43 4c 52 20 76 32 2e 30 2e 0d 0a 20  the CLR v2.0... 
1f790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f7a0 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
1f7b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f7c0 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e     configuration
1f7d0 2e 6e 6f 4e 65 74 46 78 32 30 20 3d 20 74 72 75  .noNetFx20 = tru
1f7e0 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
1f7f0 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66              conf
1f800 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 4e 65 74 46  iguration.noNetF
1f810 78 33 35 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20  x35 = true;..   
1f820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f830 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69       configurati
1f840 6f 6e 2e 6e 6f 56 73 32 30 30 35 20 3d 20 74 72  on.noVs2005 = tr
1f850 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
1f860 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
1f870 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 56 73 32  figuration.noVs2
1f880 30 30 38 20 3d 20 74 72 75 65 3b 0d 0a 0d 0a 20  008 = true;.... 
1f890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f8a0 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e         TraceOps.
1f8b0 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 54 72  DebugAndTrace(Tr
1f8c0 61 63 65 50 72 69 6f 72 69 74 79 2e 4d 65 64 69  acePriority.Medi
1f8d0 75 6d 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  um,..           
1f8e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f8f0 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20   debugCallback, 
1f900 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53  traceCallback, S
1f910 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
1f920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f930 20 20 20 20 20 20 20 20 20 20 20 22 41 73 73 65             "Asse
1f940 6d 62 6c 79 20 69 73 20 63 6f 6d 70 69 6c 65 64  mbly is compiled
1f950 20 66 6f 72 20 74 68 65 20 2e 4e 45 54 20 46 72   for the .NET Fr
1f960 61 6d 65 77 6f 72 6b 20 7b 30 7d 2c 20 22 20 2b  amework {0}, " +
1f970 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1f980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 73                "s
1f990 75 70 70 6f 72 74 20 66 6f 72 20 74 68 65 20 2e  upport for the .
1f9a0 4e 45 54 20 46 72 61 6d 65 77 6f 72 6b 20 7b 31  NET Framework {1
1f9b0 7d 20 69 73 20 6e 6f 77 20 64 69 73 61 62 6c 65  } is now disable
1f9c0 64 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  d.",..          
1f9d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f9e0 20 20 46 6f 72 44 69 73 70 6c 61 79 28 43 4c 52    ForDisplay(CLR
1f9f0 76 34 49 6d 61 67 65 52 75 6e 74 69 6d 65 56 65  v4ImageRuntimeVe
1fa00 72 73 69 6f 6e 29 2c 0d 0a 20 20 20 20 20 20 20  rsion),..       
1fa10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fa20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28       ForDisplay(
1fa30 43 4c 52 76 32 49 6d 61 67 65 52 75 6e 74 69 6d  CLRv2ImageRuntim
1fa40 65 56 65 72 73 69 6f 6e 29 29 2c 0d 0a 20 20 20  eVersion)),..   
1fa50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fa60 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
1fa70 74 65 67 6f 72 79 29 3b 0d 0a 20 20 20 20 20 20  tegory);..      
1fa80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
1fa90 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1faa0 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20       else..     
1fab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
1fac0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1fad0 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20            error 
1fae0 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  = String.Format(
1faf0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1fb00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 75                "u
1fb10 6e 73 75 70 70 6f 72 74 65 64 20 63 6f 72 65 20  nsupported core 
1fb20 66 69 6c 65 20 69 6d 61 67 65 20 72 75 6e 74 69  file image runti
1fb30 6d 65 20 76 65 72 73 69 6f 6e 20 22 20 2b 0d 0a  me version " +..
1fb40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fb50 20 20 20 20 20 20 20 20 20 20 20 20 22 7b 30 7d              "{0}
1fb60 2c 20 6d 75 73 74 20 62 65 20 7b 31 7d 20 6f 72  , must be {1} or
1fb70 20 7b 32 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20   {2}",..        
1fb80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fb90 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 63      ForDisplay(c
1fba0 6f 72 65 49 6d 61 67 65 52 75 6e 74 69 6d 65 56  oreImageRuntimeV
1fbb0 65 72 73 69 6f 6e 29 2c 0d 0a 20 20 20 20 20 20  ersion),..      
1fbc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fbd0 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79        ForDisplay
1fbe0 28 43 4c 52 76 32 49 6d 61 67 65 52 75 6e 74 69  (CLRv2ImageRunti
1fbf0 6d 65 56 65 72 73 69 6f 6e 29 2c 0d 0a 20 20 20  meVersion),..   
1fc00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fc10 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70           ForDisp
1fc20 6c 61 79 28 43 4c 52 76 34 49 6d 61 67 65 52 75  lay(CLRv4ImageRu
1fc30 6e 74 69 6d 65 56 65 72 73 69 6f 6e 29 29 3b 0d  ntimeVersion));.
1fc40 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
1fc50 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
1fc60 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  n false;..      
1fc70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
1fc80 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
1fc90 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72         return tr
1fca0 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
1fcb0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
1fcc0 20 20 20 20 20 20 20 20 63 61 74 63 68 20 28 45          catch (E
1fcd0 78 63 65 70 74 69 6f 6e 20 65 29 0d 0a 20 20 20  xception e)..   
1fce0 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
1fcf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fd00 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62      TraceOps.Deb
1fd10 75 67 41 6e 64 54 72 61 63 65 28 54 72 61 63 65  ugAndTrace(Trace
1fd20 50 72 69 6f 72 69 74 79 2e 48 69 67 68 65 73 74  Priority.Highest
1fd30 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
1fd40 20 20 20 20 20 20 20 20 20 20 20 64 65 62 75 67             debug
1fd50 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43  Callback, traceC
1fd60 61 6c 6c 62 61 63 6b 2c 20 65 2c 20 74 72 61 63  allback, e, trac
1fd70 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20  eCategory);.... 
1fd80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fd90 20 20 20 65 72 72 6f 72 20 3d 20 22 46 61 69 6c     error = "Fail
1fda0 65 64 20 74 6f 20 63 68 65 63 6b 20 69 6d 61 67  ed to check imag
1fdb0 65 20 72 75 6e 74 69 6d 65 20 76 65 72 73 69 6f  e runtime versio
1fdc0 6e 2e 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  n.";..          
1fdd0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
1fde0 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
1fdf0 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  n false;..      
1fe00 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
1fe10 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d       #endregion.
1fe20 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
1fe30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fe40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fe50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fe60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fe70 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
1fe80 20 20 23 72 65 67 69 6f 6e 20 50 72 69 76 61 74    #region Privat
1fe90 65 20 4d 65 74 68 6f 64 73 0d 0a 20 20 20 20 20  e Methods..     
1fea0 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
1feb0 74 72 69 6e 67 20 47 65 74 49 6e 76 61 72 69 61  tring GetInvaria
1fec0 6e 74 4e 61 6d 65 28 0d 0a 20 20 20 20 20 20 20  ntName(..       
1fed0 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 74 72           bool tr
1fee0 61 63 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ace..           
1fef0 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
1ff00 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
1ff10 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 73         return Us
1ff20 65 45 66 36 50 72 6f 76 69 64 65 72 28 74 72 61  eEf6Provider(tra
1ff30 63 65 29 20 3f 0d 0a 20 20 20 20 20 20 20 20 20  ce) ?..         
1ff40 20 20 20 20 20 20 20 20 20 20 20 45 66 36 49 6e             Ef6In
1ff50 76 61 72 69 61 6e 74 4e 61 6d 65 20 3a 20 49 6e  variantName : In
1ff60 76 61 72 69 61 6e 74 4e 61 6d 65 3b 0d 0a 20 20  variantName;..  
1ff70 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
1ff80 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
1ff90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ffa0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ffb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ffc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
1ffd0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
1ffe0 69 76 61 74 65 20 62 6f 6f 6c 20 49 73 53 79 73  ivate bool IsSys
1fff0 74 65 6d 45 66 36 41 73 73 65 6d 62 6c 79 41 76  temEf6AssemblyAv
20000 61 69 6c 61 62 6c 65 28 0d 0a 20 20 20 20 20 20  ailable(..      
20010 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 74            bool t
20020 72 61 63 65 0d 0a 20 20 20 20 20 20 20 20 20 20  race..          
20030 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
20040 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
20050 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20          try..   
20060 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
20070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20080 20 20 20 20 69 66 20 28 73 79 73 74 65 6d 45 66      if (systemEf
20090 36 41 73 73 65 6d 62 6c 79 20 3d 3d 20 6e 75 6c  6Assembly == nul
200a0 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
200b0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
200c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
200d0 20 20 20 73 79 73 74 65 6d 45 66 36 41 73 73 65     systemEf6Asse
200e0 6d 62 6c 79 20 3d 20 41 73 73 65 6d 62 6c 79 2e  mbly = Assembly.
200f0 52 65 66 6c 65 63 74 69 6f 6e 4f 6e 6c 79 4c 6f  ReflectionOnlyLo
20100 61 64 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ad(..           
20110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20120 20 53 79 73 74 65 6d 45 66 36 41 73 73 65 6d 62   SystemEf6Assemb
20130 6c 79 4e 61 6d 65 29 3b 0d 0a 20 20 20 20 20 20  lyName);..      
20140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
20150 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
20160 20 20 20 20 20 20 20 69 66 20 28 73 79 73 74 65         if (syste
20170 6d 45 66 36 41 73 73 65 6d 62 6c 79 20 21 3d 20  mEf6Assembly != 
20180 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
20190 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
201a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
201b0 20 20 20 20 20 20 69 66 20 28 74 72 61 63 65 20        if (trace 
201c0 26 26 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  &&..            
201d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
201e0 21 48 61 73 46 6c 61 67 73 28 50 72 6f 76 69 64  !HasFlags(Provid
201f0 65 72 46 6c 61 67 73 2e 44 69 64 45 66 36 52 65  erFlags.DidEf6Re
20200 73 6f 6c 76 65 54 72 61 63 65 2c 20 74 72 75 65  solveTrace, true
20210 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
20220 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
20230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20240 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
20250 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63  Ops.DebugAndTrac
20260 65 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e  e(TracePriority.
20270 48 69 67 68 65 73 74 2c 0d 0a 20 20 20 20 20 20  Highest,..      
20280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20290 20 20 20 20 20 20 20 20 20 20 64 65 62 75 67 43            debugC
202a0 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61  allback, traceCa
202b0 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46  llback, String.F
202c0 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
202d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
202e0 20 20 20 20 20 20 20 20 22 45 6e 74 69 74 79 20          "Entity 
202f0 46 72 61 6d 65 77 6f 72 6b 20 36 20 61 73 73 65  Framework 6 asse
20300 6d 62 6c 79 20 77 61 73 20 22 20 2b 0d 0a 20 20  mbly was " +..  
20310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 72                "r
20330 65 73 6f 6c 76 65 64 20 74 6f 20 7b 30 7d 2e 22  esolved to {0}."
20340 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 0d 0a 20  , ForDisplay(.. 
20350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
20370 79 73 74 65 6d 45 66 36 41 73 73 65 6d 62 6c 79  ystemEf6Assembly
20380 2e 4c 6f 63 61 74 69 6f 6e 29 29 2c 0d 0a 20 20  .Location)),..  
20390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
203a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
203b0 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d  aceCategory);...
203c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
203d0 20 20 20 20 20 20 20 20 20 20 20 20 20 70 72 6f               pro
203e0 76 69 64 65 72 46 6c 61 67 73 20 7c 3d 20 50 72  viderFlags |= Pr
203f0 6f 76 69 64 65 72 46 6c 61 67 73 2e 44 69 64 45  oviderFlags.DidE
20400 66 36 52 65 73 6f 6c 76 65 54 72 61 63 65 3b 0d  f6ResolveTrace;.
20410 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
20420 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
20430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20440 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75        return tru
20450 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
20460 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
20470 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
20480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 61                ca
20490 74 63 68 0d 0a 20 20 20 20 20 20 20 20 20 20 20  tch..           
204a0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
204b0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64              // d
204c0 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20  o nothing...    
204d0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
204e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
204f0 20 69 66 20 28 74 72 61 63 65 20 26 26 0d 0a 20   if (trace &&.. 
20500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20510 20 20 20 21 48 61 73 46 6c 61 67 73 28 50 72 6f     !HasFlags(Pro
20520 76 69 64 65 72 46 6c 61 67 73 2e 44 69 64 45 66  viderFlags.DidEf
20530 36 52 65 73 6f 6c 76 65 54 72 61 63 65 2c 20 74  6ResolveTrace, t
20540 72 75 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20  rue))..         
20550 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
20560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
20570 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54  aceOps.DebugAndT
20580 72 61 63 65 28 54 72 61 63 65 50 72 69 6f 72 69  race(TracePriori
20590 74 79 2e 48 69 67 68 65 73 74 2c 0d 0a 20 20 20  ty.Highest,..   
205a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
205b0 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61       debugCallba
205c0 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63  ck, traceCallbac
205d0 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  k,..            
205e0 20 20 20 20 20 20 20 20 20 20 20 20 22 45 6e 74              "Ent
205f0 69 74 79 20 46 72 61 6d 65 77 6f 72 6b 20 36 20  ity Framework 6 
20600 61 73 73 65 6d 62 6c 79 20 77 61 73 20 6e 6f 74  assembly was not
20610 20 72 65 73 6f 6c 76 65 64 2e 22 2c 0d 0a 20 20   resolved.",..  
20620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20630 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67        traceCateg
20640 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
20650 20 20 20 20 20 20 20 20 20 20 20 20 20 70 72 6f               pro
20660 76 69 64 65 72 46 6c 61 67 73 20 7c 3d 20 50 72  viderFlags |= Pr
20670 6f 76 69 64 65 72 46 6c 61 67 73 2e 44 69 64 45  oviderFlags.DidE
20680 66 36 52 65 73 6f 6c 76 65 54 72 61 63 65 3b 0d  f6ResolveTrace;.
20690 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
206a0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
206b0 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
206c0 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se;..           
206d0 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
206e0 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20  #endregion....  
206f0 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
20700 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20710 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20720 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20730 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
20740 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 72 65  .            #re
20750 67 69 6f 6e 20 50 75 62 6c 69 63 20 4d 65 74 68  gion Public Meth
20760 6f 64 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ods..           
20770 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 48 61 73   public bool Has
20780 46 6c 61 67 73 28 0d 0a 20 20 20 20 20 20 20 20  Flags(..        
20790 20 20 20 20 20 20 20 20 49 6e 73 74 61 6c 6c 46          InstallF
207a0 6c 61 67 73 20 68 61 73 46 6c 61 67 73 2c 0d 0a  lags hasFlags,..
207b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
207c0 62 6f 6f 6c 20 61 6c 6c 0d 0a 20 20 20 20 20 20  bool all..      
207d0 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
207e0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
207f0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
20800 61 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  all)..          
20810 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
20820 20 28 28 69 6e 73 74 61 6c 6c 46 6c 61 67 73 20   ((installFlags 
20830 26 20 68 61 73 46 6c 61 67 73 29 20 3d 3d 20 68  & hasFlags) == h
20840 61 73 46 6c 61 67 73 29 3b 0d 0a 20 20 20 20 20  asFlags);..     
20850 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 0d             else.
20860 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
20870 20 20 20 20 20 72 65 74 75 72 6e 20 28 28 69 6e       return ((in
20880 73 74 61 6c 6c 46 6c 61 67 73 20 26 20 68 61 73  stallFlags & has
20890 46 6c 61 67 73 29 20 21 3d 20 49 6e 73 74 61 6c  Flags) != Instal
208a0 6c 46 6c 61 67 73 2e 4e 6f 6e 65 29 3b 0d 0a 20  lFlags.None);.. 
208b0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
208c0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
208d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
208e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
208f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20900 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
20910 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
20920 75 62 6c 69 63 20 62 6f 6f 6c 20 48 61 73 46 6c  ublic bool HasFl
20930 61 67 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ags(..          
20940 20 20 20 20 20 20 50 72 6f 76 69 64 65 72 46 6c        ProviderFl
20950 61 67 73 20 68 61 73 46 6c 61 67 73 2c 0d 0a 20  ags hasFlags,.. 
20960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62                 b
20970 6f 6f 6c 20 61 6c 6c 0d 0a 20 20 20 20 20 20 20  ool all..       
20980 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
20990 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
209a0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 61             if (a
209b0 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
209c0 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
209d0 28 28 70 72 6f 76 69 64 65 72 46 6c 61 67 73 20  ((providerFlags 
209e0 26 20 68 61 73 46 6c 61 67 73 29 20 3d 3d 20 68  & hasFlags) == h
209f0 61 73 46 6c 61 67 73 29 3b 0d 0a 20 20 20 20 20  asFlags);..     
20a00 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 0d             else.
20a10 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
20a20 20 20 20 20 20 72 65 74 75 72 6e 20 28 28 70 72       return ((pr
20a30 6f 76 69 64 65 72 46 6c 61 67 73 20 26 20 68 61  oviderFlags & ha
20a40 73 46 6c 61 67 73 29 20 21 3d 20 50 72 6f 76 69  sFlags) != Provi
20a50 64 65 72 46 6c 61 67 73 2e 4e 6f 6e 65 29 3b 0d  derFlags.None);.
20a60 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
20a70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
20a80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20a90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20aa0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20ab0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20ac0 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
20ad0 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 49 73 4c   public bool IsL
20ae0 69 6e 71 53 75 70 70 6f 72 74 65 64 28 0d 0a 20  inqSupported(.. 
20af0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62                 b
20b00 6f 6f 6c 20 74 72 61 63 65 0d 0a 20 20 20 20 20  ool trace..     
20b10 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
20b20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
20b30 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
20b40 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
20b50 20 2f 2f 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20   // NOTE: Check 
20b60 74 6f 20 73 65 65 20 69 66 20 74 68 65 20 63 61  to see if the ca
20b70 6c 6c 65 72 20 68 61 73 20 66 6f 72 63 65 64 20  ller has forced 
20b80 4c 49 4e 51 20 73 75 70 70 6f 72 74 20 74 6f 0d  LINQ support to.
20b90 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
20ba0 20 2f 2f 20 20 20 20 20 20 20 62 65 20 65 6e 61   //       be ena
20bb0 62 6c 65 64 20 2d 4f 52 2d 20 64 69 73 61 62 6c  bled -OR- disabl
20bc0 65 64 2c 20 74 68 65 72 65 62 79 20 62 79 70 61  ed, thereby bypa
20bd0 73 73 69 6e 67 20 74 68 65 20 6e 65 65 64 0d 0a  ssing the need..
20be0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20bf0 2f 2f 20 20 20 20 20 20 20 66 6f 72 20 22 61 75  //       for "au
20c00 74 6f 6d 61 74 69 63 20 64 65 74 65 63 74 69 6f  tomatic detectio
20c10 6e 22 20 62 79 20 74 68 69 73 20 6d 65 74 68 6f  n" by this metho
20c20 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  d...            
20c30 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
20c40 20 20 20 20 20 20 20 20 69 66 20 28 48 61 73 46          if (HasF
20c50 6c 61 67 73 28 50 72 6f 76 69 64 65 72 46 6c 61  lags(ProviderFla
20c60 67 73 2e 46 6f 72 63 65 4c 69 6e 71 45 6e 61 62  gs.ForceLinqEnab
20c70 6c 65 64 2c 20 74 72 75 65 29 29 0d 0a 20 20 20  led, true))..   
20c80 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
20c90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20ca0 20 20 20 20 69 66 20 28 74 72 61 63 65 20 26 26      if (trace &&
20cb0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
20cc0 20 20 20 20 20 20 20 20 20 20 21 48 61 73 46 6c            !HasFl
20cd0 61 67 73 28 50 72 6f 76 69 64 65 72 46 6c 61 67  ags(ProviderFlag
20ce0 73 2e 44 69 64 4c 69 6e 71 46 6f 72 63 65 54 72  s.DidLinqForceTr
20cf0 61 63 65 2c 20 74 72 75 65 29 29 0d 0a 20 20 20  ace, true))..   
20d00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20d10 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
20d20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
20d30 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61  eOps.DebugAndTra
20d40 63 65 28 54 72 61 63 65 50 72 69 6f 72 69 74 79  ce(TracePriority
20d50 2e 4d 65 64 69 75 6d 48 69 67 68 2c 0d 0a 20 20  .MediumHigh,..  
20d60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20d70 20 20 20 20 20 20 20 20 20 20 64 65 62 75 67 43            debugC
20d80 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61  allback, traceCa
20d90 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20  llback,..       
20da0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20db0 20 20 20 20 20 22 46 6f 72 63 65 64 20 74 6f 20       "Forced to 
20dc0 65 6e 61 62 6c 65 20 73 75 70 70 6f 72 74 20 66  enable support f
20dd0 6f 72 20 5c 22 4c 69 6e 71 5c 22 2e 22 2c 0d 0a  or \"Linq\".",..
20de0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20df0 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
20e00 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20  eCategory);.... 
20e10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20e20 20 20 20 20 20 20 20 70 72 6f 76 69 64 65 72 46         providerF
20e30 6c 61 67 73 20 7c 3d 20 50 72 6f 76 69 64 65 72  lags |= Provider
20e40 46 6c 61 67 73 2e 44 69 64 4c 69 6e 71 46 6f 72  Flags.DidLinqFor
20e50 63 65 54 72 61 63 65 3b 0d 0a 20 20 20 20 20 20  ceTrace;..      
20e60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
20e70 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
20e80 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72         return tr
20e90 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
20ea0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
20eb0 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20          else if 
20ec0 28 48 61 73 46 6c 61 67 73 28 50 72 6f 76 69 64  (HasFlags(Provid
20ed0 65 72 46 6c 61 67 73 2e 46 6f 72 63 65 4c 69 6e  erFlags.ForceLin
20ee0 71 44 69 73 61 62 6c 65 64 2c 20 74 72 75 65 29  qDisabled, true)
20ef0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
20f00 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
20f10 20 20 20 20 20 20 20 20 20 20 69 66 20 28 74 72            if (tr
20f20 61 63 65 20 26 26 0d 0a 20 20 20 20 20 20 20 20  ace &&..        
20f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20f40 21 48 61 73 46 6c 61 67 73 28 50 72 6f 76 69 64  !HasFlags(Provid
20f50 65 72 46 6c 61 67 73 2e 44 69 64 4c 69 6e 71 46  erFlags.DidLinqF
20f60 6f 72 63 65 54 72 61 63 65 2c 20 74 72 75 65 29  orceTrace, true)
20f70 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
20f80 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
20f90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20fa0 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67    TraceOps.Debug
20fb0 41 6e 64 54 72 61 63 65 28 54 72 61 63 65 50 72  AndTrace(TracePr
20fc0 69 6f 72 69 74 79 2e 4d 65 64 69 75 6d 48 69 67  iority.MediumHig
20fd0 68 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  h,..            
20fe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20ff0 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74  debugCallback, t
21000 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20  raceCallback,.. 
21010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21020 20 20 20 20 20 20 20 20 20 20 20 22 46 6f 72 63             "Forc
21030 65 64 20 74 6f 20 64 69 73 61 62 6c 65 20 73 75  ed to disable su
21040 70 70 6f 72 74 20 66 6f 72 20 5c 22 4c 69 6e 71  pport for \"Linq
21050 5c 22 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  \".",..         
21060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21070 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
21080 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
21090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70 72                pr
210a0 6f 76 69 64 65 72 46 6c 61 67 73 20 7c 3d 20 50  oviderFlags |= P
210b0 72 6f 76 69 64 65 72 46 6c 61 67 73 2e 44 69 64  roviderFlags.Did
210c0 4c 69 6e 71 46 6f 72 63 65 54 72 61 63 65 3b 0d  LinqForceTrace;.
210d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
210e0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
210f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
21100 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20  turn false;..   
21110 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
21120 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
21130 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
21140 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 52        // NOTE: R
21150 65 74 75 72 6e 20 6e 6f 6e 2d 7a 65 72 6f 20 69  eturn non-zero i
21160 66 20 74 68 65 20 53 79 73 74 65 6d 2e 44 61 74  f the System.Dat
21170 61 2e 53 51 4c 69 74 65 2e 4c 69 6e 71 0d 0a 20  a.SQLite.Linq.. 
21180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
21190 2f 20 20 20 20 20 20 20 61 73 73 65 6d 62 6c 79  /       assembly
211a0 20 73 68 6f 75 6c 64 20 62 65 20 70 72 6f 63 65   should be proce
211b0 73 73 65 64 20 64 75 72 69 6e 67 20 74 68 65 20  ssed during the 
211c0 69 6e 73 74 61 6c 6c 2e 0d 0a 20 20 20 20 20 20  install...      
211d0 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
211e0 20 20 20 49 66 20 74 68 65 20 74 61 72 67 65 74     If the target
211f0 20 69 73 20 56 69 73 75 61 6c 20 53 74 75 64 69   is Visual Studi
21200 6f 20 32 30 30 35 2c 20 74 68 69 73 20 6d 75 73  o 2005, this mus
21210 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  t..             
21220 20 20 20 2f 2f 20 20 20 20 20 20 20 72 65 74 75     //       retu
21230 72 6e 20 7a 65 72 6f 2e 0d 0a 20 20 20 20 20 20  rn zero...      
21240 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
21250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
21260 74 75 72 6e 20 21 6e 6f 4e 65 74 46 78 33 35 20  turn !noNetFx35 
21270 7c 7c 20 21 6e 6f 4e 65 74 46 78 34 30 20 7c 7c  || !noNetFx40 ||
21280 20 21 6e 6f 4e 65 74 46 78 34 35 20 7c 7c 0d 0a   !noNetFx45 ||..
21290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
212a0 20 20 20 20 21 6e 6f 4e 65 74 46 78 34 35 31 20      !noNetFx451 
212b0 7c 7c 20 21 6e 6f 4e 65 74 46 78 34 35 32 20 7c  || !noNetFx452 |
212c0 7c 20 21 6e 6f 4e 65 74 46 78 34 36 3b 0d 0a 20  | !noNetFx46;.. 
212d0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
212e0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
212f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21300 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21310 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21320 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
21330 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
21340 75 62 6c 69 63 20 62 6f 6f 6c 20 49 73 45 66 36  ublic bool IsEf6
21350 53 75 70 70 6f 72 74 65 64 28 0d 0a 20 20 20 20  Supported(..    
21360 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
21370 20 74 72 61 63 65 0d 0a 20 20 20 20 20 20 20 20   trace..        
21380 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
21390 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
213a0 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
213b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
213c0 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20 74 6f 20   NOTE: Check to 
213d0 73 65 65 20 69 66 20 74 68 65 20 63 61 6c 6c 65  see if the calle
213e0 72 20 68 61 73 20 66 6f 72 63 65 64 20 45 46 36  r has forced EF6
213f0 20 73 75 70 70 6f 72 74 20 74 6f 0d 0a 20 20 20   support to..   
21400 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
21410 20 20 20 20 20 20 62 65 20 65 6e 61 62 6c 65 64        be enabled
21420 20 2d 4f 52 2d 20 64 69 73 61 62 6c 65 64 2c 20   -OR- disabled, 
21430 74 68 65 72 65 62 79 20 62 79 70 61 73 73 69 6e  thereby bypassin
21440 67 20 74 68 65 20 6e 65 65 64 0d 0a 20 20 20 20  g the need..    
21450 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
21460 20 20 20 20 20 66 6f 72 20 22 61 75 74 6f 6d 61       for "automa
21470 74 69 63 20 64 65 74 65 63 74 69 6f 6e 22 20 62  tic detection" b
21480 79 20 74 68 69 73 20 6d 65 74 68 6f 64 2e 0d 0a  y this method...
21490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
214a0 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
214b0 20 20 20 20 69 66 20 28 48 61 73 46 6c 61 67 73      if (HasFlags
214c0 28 50 72 6f 76 69 64 65 72 46 6c 61 67 73 2e 46  (ProviderFlags.F
214d0 6f 72 63 65 45 66 36 45 6e 61 62 6c 65 64 2c 20  orceEf6Enabled, 
214e0 74 72 75 65 29 29 0d 0a 20 20 20 20 20 20 20 20  true))..        
214f0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
21500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
21510 66 20 28 74 72 61 63 65 20 26 26 0d 0a 20 20 20  f (trace &&..   
21520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21530 20 20 20 20 20 21 48 61 73 46 6c 61 67 73 28 50       !HasFlags(P
21540 72 6f 76 69 64 65 72 46 6c 61 67 73 2e 44 69 64  roviderFlags.Did
21550 45 66 36 46 6f 72 63 65 54 72 61 63 65 2c 20 74  Ef6ForceTrace, t
21560 72 75 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20  rue))..         
21570 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
21580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21590 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44        TraceOps.D
215a0 65 62 75 67 41 6e 64 54 72 61 63 65 28 54 72 61  ebugAndTrace(Tra
215b0 63 65 50 72 69 6f 72 69 74 79 2e 4d 65 64 69 75  cePriority.Mediu
215c0 6d 48 69 67 68 2c 0d 0a 20 20 20 20 20 20 20 20  mHigh,..        
215d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
215e0 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63      debugCallbac
215f0 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b  k, traceCallback
21600 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
21610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
21620 46 6f 72 63 65 64 20 74 6f 20 65 6e 61 62 6c 65  Forced to enable
21630 20 73 75 70 70 6f 72 74 20 66 6f 72 20 5c 22 45   support for \"E
21640 66 36 5c 22 2e 22 2c 0d 0a 20 20 20 20 20 20 20  f6\".",..       
21650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21660 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f       traceCatego
21670 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
21680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21690 70 72 6f 76 69 64 65 72 46 6c 61 67 73 20 7c 3d  providerFlags |=
216a0 20 50 72 6f 76 69 64 65 72 46 6c 61 67 73 2e 44   ProviderFlags.D
216b0 69 64 45 66 36 46 6f 72 63 65 54 72 61 63 65 3b  idEf6ForceTrace;
216c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
216d0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
216e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
216f0 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20  eturn true;..   
21700 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
21710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21720 65 6c 73 65 20 69 66 20 28 48 61 73 46 6c 61 67  else if (HasFlag
21730 73 28 50 72 6f 76 69 64 65 72 46 6c 61 67 73 2e  s(ProviderFlags.
21740 46 6f 72 63 65 45 66 36 44 69 73 61 62 6c 65 64  ForceEf6Disabled
21750 2c 20 74 72 75 65 29 29 0d 0a 20 20 20 20 20 20  , true))..      
21760 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
21770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21780 20 69 66 20 28 74 72 61 63 65 20 26 26 0d 0a 20   if (trace &&.. 
21790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
217a0 20 20 20 20 20 20 20 21 48 61 73 46 6c 61 67 73         !HasFlags
217b0 28 50 72 6f 76 69 64 65 72 46 6c 61 67 73 2e 44  (ProviderFlags.D
217c0 69 64 45 66 36 46 6f 72 63 65 54 72 61 63 65 2c  idEf6ForceTrace,
217d0 20 74 72 75 65 29 29 0d 0a 20 20 20 20 20 20 20   true))..       
217e0 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
217f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21800 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73          TraceOps
21810 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 54  .DebugAndTrace(T
21820 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4d 65 64  racePriority.Med
21830 69 75 6d 48 69 67 68 2c 0d 0a 20 20 20 20 20 20  iumHigh,..      
21840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21850 20 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62        debugCallb
21860 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61  ack, traceCallba
21870 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ck,..           
21880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21890 20 22 46 6f 72 63 65 64 20 74 6f 20 64 69 73 61   "Forced to disa
218a0 62 6c 65 20 73 75 70 70 6f 72 74 20 66 6f 72 20  ble support for 
218b0 5c 22 45 66 36 5c 22 2e 22 2c 0d 0a 20 20 20 20  \"Ef6\".",..    
218c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
218d0 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74          traceCat
218e0 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20  egory);....     
218f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21900 20 20 20 70 72 6f 76 69 64 65 72 46 6c 61 67 73     providerFlags
21910 20 7c 3d 20 50 72 6f 76 69 64 65 72 46 6c 61 67   |= ProviderFlag
21920 73 2e 44 69 64 45 66 36 46 6f 72 63 65 54 72 61  s.DidEf6ForceTra
21930 63 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ce;..           
21940 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
21950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21960 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
21970 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
21980 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
21990 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
219a0 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54            // NOT
219b0 45 3a 20 52 65 74 75 72 6e 20 6e 6f 6e 2d 7a 65  E: Return non-ze
219c0 72 6f 20 69 66 20 74 68 65 20 53 79 73 74 65 6d  ro if the System
219d0 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 45 46 36  .Data.SQLite.EF6
219e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
219f0 20 20 2f 2f 20 20 20 20 20 20 20 61 73 73 65 6d    //       assem
21a00 62 6c 79 20 73 68 6f 75 6c 64 20 62 65 20 70 72  bly should be pr
21a10 6f 63 65 73 73 65 64 20 64 75 72 69 6e 67 20 74  ocessed during t
21a20 68 65 20 69 6e 73 74 61 6c 6c 2e 0d 0a 20 20 20  he install...   
21a30 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
21a40 20 20 20 20 20 20 49 66 20 74 68 65 20 74 61 72        If the tar
21a50 67 65 74 20 69 73 20 56 69 73 75 61 6c 20 53 74  get is Visual St
21a60 75 64 69 6f 20 32 30 30 35 20 6f 72 20 56 69 73  udio 2005 or Vis
21a70 75 61 6c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ual..           
21a80 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 53 74       //       St
21a90 75 64 69 6f 20 32 30 30 38 2c 20 74 68 69 73 20  udio 2008, this 
21aa0 6d 75 73 74 20 72 65 74 75 72 6e 20 7a 65 72 6f  must return zero
21ab0 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
21ac0 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
21ad0 20 20 20 20 20 20 20 69 66 20 28 6e 6f 4e 65 74         if (noNet
21ae0 46 78 34 30 20 26 26 0d 0a 20 20 20 20 20 20 20  Fx40 &&..       
21af0 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 6f 4e               noN
21b00 65 74 46 78 34 35 20 26 26 20 6e 6f 4e 65 74 46  etFx45 && noNetF
21b10 78 34 35 31 20 26 26 20 6e 6f 4e 65 74 46 78 34  x451 && noNetFx4
21b20 35 32 20 26 26 20 6e 6f 4e 65 74 46 78 34 36 29  52 && noNetFx46)
21b30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
21b40 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
21b50 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
21b60 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20  false;..        
21b70 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
21b80 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
21b90 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
21ba0 20 2f 2f 20 4e 4f 54 45 3a 20 41 6c 73 6f 2c 20   // NOTE: Also, 
21bb0 69 66 20 74 68 65 20 45 46 36 20 63 6f 72 65 20  if the EF6 core 
21bc0 61 73 73 65 6d 62 6c 79 20 69 73 20 75 6e 61 76  assembly is unav
21bd0 61 69 6c 61 62 6c 65 2c 20 74 68 69 73 0d 0a 20  ailable, this.. 
21be0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
21bf0 2f 20 20 20 20 20 20 20 6d 75 73 74 20 72 65 74  /       must ret
21c00 75 72 6e 20 7a 65 72 6f 2e 0d 0a 20 20 20 20 20  urn zero...     
21c10 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
21c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
21c30 66 20 28 21 49 73 53 79 73 74 65 6d 45 66 36 41  f (!IsSystemEf6A
21c40 73 73 65 6d 62 6c 79 41 76 61 69 6c 61 62 6c 65  ssemblyAvailable
21c50 28 74 72 61 63 65 29 29 0d 0a 20 20 20 20 20 20  (trace))..      
21c60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
21c70 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20  turn false;.... 
21c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
21c90 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
21ca0 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 46 69 6e 61     // NOTE: Fina
21cb0 6c 6c 79 2c 20 69 66 20 74 68 65 20 45 46 36 20  lly, if the EF6 
21cc0 63 6f 72 65 20 61 73 73 65 6d 62 6c 79 20 69 73  core assembly is
21cd0 20 6e 6f 74 20 61 76 61 69 6c 61 62 6c 65 0d 0a   not available..
21ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21cf0 2f 2f 20 20 20 20 20 20 20 67 6c 6f 62 61 6c 6c  //       globall
21d00 79 20 5b 61 6e 64 20 74 68 69 73 20 69 73 20 61  y [and this is a
21d10 20 72 65 71 75 69 72 65 6d 65 6e 74 20 66 6f 72   requirement for
21d20 20 74 68 65 20 63 75 72 72 65 6e 74 0d 0a 20 20   the current..  
21d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
21d40 20 20 20 20 20 20 20 69 6e 73 74 61 6c 6c 5d 2c         install],
21d50 20 72 65 74 75 72 6e 20 7a 65 72 6f 2e 0d 0a 20   return zero... 
21d60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
21d70 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
21d80 20 20 20 72 65 74 75 72 6e 20 48 61 73 46 6c 61     return HasFla
21d90 67 73 28 50 72 6f 76 69 64 65 72 46 6c 61 67 73  gs(ProviderFlags
21da0 2e 53 79 73 74 65 6d 45 66 36 4d 75 73 74 42 65  .SystemEf6MustBe
21db0 47 6c 6f 62 61 6c 2c 20 74 72 75 65 29 20 3f 0d  Global, true) ?.
21dc0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
21dd0 20 20 20 20 20 49 73 53 79 73 74 65 6d 45 66 36       IsSystemEf6
21de0 41 73 73 65 6d 62 6c 79 47 6c 6f 62 61 6c 28 29  AssemblyGlobal()
21df0 20 3a 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20   : true;..      
21e00 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
21e10 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
21e20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21e30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21e40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21e50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
21e60 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
21e70 65 20 62 6f 6f 6c 20 49 73 45 66 36 41 73 73 65  e bool IsEf6Asse
21e80 6d 62 6c 79 47 6c 6f 62 61 6c 28 29 0d 0a 20 20  mblyGlobal()..  
21e90 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
21ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
21eb0 28 65 66 36 41 73 73 65 6d 62 6c 79 4e 61 6d 65  (ef6AssemblyName
21ec0 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
21ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
21ee0 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a  eturn false;....
21ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21f00 41 73 73 65 6d 62 6c 79 20 61 73 73 65 6d 62 6c  Assembly assembl
21f10 79 20 3d 20 41 73 73 65 6d 62 6c 79 2e 52 65 66  y = Assembly.Ref
21f20 6c 65 63 74 69 6f 6e 4f 6e 6c 79 4c 6f 61 64 28  lectionOnlyLoad(
21f30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
21f40 20 20 20 20 20 20 65 66 36 41 73 73 65 6d 62 6c        ef6Assembl
21f50 79 4e 61 6d 65 2e 54 6f 53 74 72 69 6e 67 28 29  yName.ToString()
21f60 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
21f70 20 20 20 20 20 20 72 65 74 75 72 6e 20 28 61 73        return (as
21f80 73 65 6d 62 6c 79 20 21 3d 20 6e 75 6c 6c 29 20  sembly != null) 
21f90 26 26 20 61 73 73 65 6d 62 6c 79 2e 47 6c 6f 62  && assembly.Glob
21fa0 61 6c 41 73 73 65 6d 62 6c 79 43 61 63 68 65 3b  alAssemblyCache;
21fb0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
21fc0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
21fd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21fe0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21ff0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22000 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22010 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
22020 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 55 73    public bool Us
22030 65 45 66 36 50 72 6f 76 69 64 65 72 28 0d 0a 20  eEf6Provider(.. 
22040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62                 b
22050 6f 6f 6c 20 74 72 61 63 65 0d 0a 20 20 20 20 20  ool trace..     
22060 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
22070 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
22080 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
22090 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
220a0 20 2f 2f 20 4e 4f 54 45 3a 20 57 65 20 63 61 6e   // NOTE: We can
220b0 6e 6f 74 20 75 73 65 20 74 68 65 20 45 46 36 20  not use the EF6 
220c0 61 73 73 65 6d 62 6c 79 20 61 73 20 74 68 65 20  assembly as the 
220d0 70 72 6f 76 69 64 65 72 20 69 66 20 69 74 0d 0a  provider if it..
220e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
220f0 2f 2f 20 20 20 20 20 20 20 69 73 20 6e 6f 74 20  //       is not 
22100 73 75 70 70 6f 72 74 65 64 20 62 79 20 74 68 69  supported by thi
22110 73 20 69 6e 73 74 61 6c 6c 61 74 69 6f 6e 2e 0d  s installation..
22120 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
22130 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
22140 20 20 20 20 20 69 66 20 28 21 49 73 45 66 36 53       if (!IsEf6S
22150 75 70 70 6f 72 74 65 64 28 74 72 61 63 65 29 29  upported(trace))
22160 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
22170 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
22180 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  se;....         
22190 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
221a0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f             // NO
221b0 54 45 3a 20 46 6f 72 20 74 68 65 20 45 46 36 20  TE: For the EF6 
221c0 61 73 73 65 6d 62 6c 79 20 74 6f 20 62 65 20 75  assembly to be u
221d0 73 61 62 6c 65 20 61 73 20 61 20 70 72 6f 76 69  sable as a provi
221e0 64 65 72 20 69 6e 0d 0a 20 20 20 20 20 20 20 20  der in..        
221f0 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
22200 20 74 68 65 20 6d 61 63 68 69 6e 65 20 63 6f 6e   the machine con
22210 66 69 67 75 72 61 74 69 6f 6e 20 66 69 6c 65 2c  figuration file,
22220 20 69 74 20 6d 75 73 74 20 62 65 20 69 6e 20 74   it must be in t
22230 68 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  he..            
22240 20 20 20 20 2f 2f 20 20 20 20 20 20 20 67 6c 6f      //       glo
22250 62 61 6c 20 61 73 73 65 6d 62 6c 79 20 63 61 63  bal assembly cac
22260 68 65 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  he...           
22270 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
22280 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
22290 49 73 45 66 36 41 73 73 65 6d 62 6c 79 47 6c 6f  IsEf6AssemblyGlo
222a0 62 61 6c 28 29 3b 0d 0a 20 20 20 20 20 20 20 20  bal();..        
222b0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
222c0 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
222d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
222e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
222f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22300 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
22310 20 20 20 20 20 20 20 20 2f 2a 20 52 45 51 55 49          /* REQUI
22320 52 45 44 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20  RED */..        
22330 20 20 20 20 70 75 62 6c 69 63 20 41 73 73 65 6d      public Assem
22340 62 6c 79 4e 61 6d 65 20 47 65 74 43 6f 72 65 41  blyName GetCoreA
22350 73 73 65 6d 62 6c 79 4e 61 6d 65 28 0d 0a 20 20  ssemblyName(..  
22360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f                bo
22370 6f 6c 20 74 72 61 63 65 20 2f 2a 20 4e 4f 54 20  ol trace /* NOT 
22380 55 53 45 44 20 2a 2f 0d 0a 20 20 20 20 20 20 20  USED */..       
22390 20 20 20 20 20 20 20 20 20 29 20 2f 2a 20 74 68           ) /* th
223a0 72 6f 77 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20  row */..        
223b0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
223c0 20 20 20 20 20 20 20 69 66 20 28 63 6f 72 65 41         if (coreA
223d0 73 73 65 6d 62 6c 79 4e 61 6d 65 20 3d 3d 20 6e  ssemblyName == n
223e0 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
223f0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
22400 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 72               cor
22410 65 41 73 73 65 6d 62 6c 79 4e 61 6d 65 20 3d 20  eAssemblyName = 
22420 41 73 73 65 6d 62 6c 79 4e 61 6d 65 2e 47 65 74  AssemblyName.Get
22430 41 73 73 65 6d 62 6c 79 4e 61 6d 65 28 0d 0a 20  AssemblyName(.. 
22440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22450 20 20 20 20 20 20 20 43 6f 72 65 46 69 6c 65 4e         CoreFileN
22460 61 6d 65 29 3b 20 2f 2a 20 74 68 72 6f 77 20 2a  ame); /* throw *
22470 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
22480 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
22490 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 63          return c
224a0 6f 72 65 41 73 73 65 6d 62 6c 79 4e 61 6d 65 3b  oreAssemblyName;
224b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
224c0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
224d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
224e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
224f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22500 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22510 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
22520 20 20 2f 2a 20 4f 50 54 49 4f 4e 41 4c 20 2a 2f    /* OPTIONAL */
22530 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
22540 62 6c 69 63 20 41 73 73 65 6d 62 6c 79 4e 61 6d  blic AssemblyNam
22550 65 20 47 65 74 4c 69 6e 71 41 73 73 65 6d 62 6c  e GetLinqAssembl
22560 79 4e 61 6d 65 28 0d 0a 20 20 20 20 20 20 20 20  yName(..        
22570 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 74 72 61          bool tra
22580 63 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ce..            
22590 20 20 20 20 29 20 2f 2a 20 74 68 72 6f 77 20 2a      ) /* throw *
225a0 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  /..            {
225b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
225c0 20 20 69 66 20 28 49 73 4c 69 6e 71 53 75 70 70    if (IsLinqSupp
225d0 6f 72 74 65 64 28 74 72 61 63 65 29 20 26 26 20  orted(trace) && 
225e0 28 6c 69 6e 71 41 73 73 65 6d 62 6c 79 4e 61 6d  (linqAssemblyNam
225f0 65 20 3d 3d 20 6e 75 6c 6c 29 29 0d 0a 20 20 20  e == null))..   
22600 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
22610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22620 20 20 20 20 6c 69 6e 71 41 73 73 65 6d 62 6c 79      linqAssembly
22630 4e 61 6d 65 20 3d 20 41 73 73 65 6d 62 6c 79 4e  Name = AssemblyN
22640 61 6d 65 2e 47 65 74 41 73 73 65 6d 62 6c 79 4e  ame.GetAssemblyN
22650 61 6d 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ame(..          
22660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4c 69                Li
22670 6e 71 46 69 6c 65 4e 61 6d 65 29 3b 20 2f 2a 20  nqFileName); /* 
22680 74 68 72 6f 77 20 2a 2f 0d 0a 20 20 20 20 20 20  throw */..      
22690 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
226a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
226b0 65 74 75 72 6e 20 6c 69 6e 71 41 73 73 65 6d 62  eturn linqAssemb
226c0 6c 79 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20  lyName;..       
226d0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
226e0 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
226f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22700 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22710 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22720 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
22730 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 50 54 49           /* OPTI
22740 4f 4e 41 4c 20 2a 2f 0d 0a 20 20 20 20 20 20 20  ONAL */..       
22750 20 20 20 20 20 70 75 62 6c 69 63 20 41 73 73 65       public Asse
22760 6d 62 6c 79 4e 61 6d 65 20 47 65 74 45 66 36 41  mblyName GetEf6A
22770 73 73 65 6d 62 6c 79 4e 61 6d 65 28 0d 0a 20 20  ssemblyName(..  
22780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f                bo
22790 6f 6c 20 74 72 61 63 65 0d 0a 20 20 20 20 20 20  ol trace..      
227a0 20 20 20 20 20 20 20 20 20 20 29 20 2f 2a 20 74            ) /* t
227b0 68 72 6f 77 20 2a 2f 0d 0a 20 20 20 20 20 20 20  hrow */..       
227c0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
227d0 20 20 20 20 20 20 20 20 69 66 20 28 49 73 45 66          if (IsEf
227e0 36 53 75 70 70 6f 72 74 65 64 28 74 72 61 63 65  6Supported(trace
227f0 29 20 26 26 20 28 65 66 36 41 73 73 65 6d 62 6c  ) && (ef6Assembl
22800 79 4e 61 6d 65 20 3d 3d 20 6e 75 6c 6c 29 29 0d  yName == null)).
22810 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
22820 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
22830 20 20 20 20 20 20 20 20 65 66 36 41 73 73 65 6d          ef6Assem
22840 62 6c 79 4e 61 6d 65 20 3d 20 41 73 73 65 6d 62  blyName = Assemb
22850 6c 79 4e 61 6d 65 2e 47 65 74 41 73 73 65 6d 62  lyName.GetAssemb
22860 6c 79 4e 61 6d 65 28 0d 0a 20 20 20 20 20 20 20  lyName(..       
22870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22880 20 45 66 36 46 69 6c 65 4e 61 6d 65 29 3b 20 2f   Ef6FileName); /
22890 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a 20 20 20 20  * throw */..    
228a0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
228b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
228c0 20 72 65 74 75 72 6e 20 65 66 36 41 73 73 65 6d   return ef6Assem
228d0 62 6c 79 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20  blyName;..      
228e0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
228f0 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
22900 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22910 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22920 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22930 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
22940 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 45 51            /* REQ
22950 55 49 52 45 44 20 2a 2f 0d 0a 20 20 20 20 20 20  UIRED */..      
22960 20 20 20 20 20 20 70 75 62 6c 69 63 20 41 73 73        public Ass
22970 65 6d 62 6c 79 4e 61 6d 65 20 47 65 74 44 65 73  emblyName GetDes
22980 69 67 6e 65 72 41 73 73 65 6d 62 6c 79 4e 61 6d  ignerAssemblyNam
22990 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
229a0 20 20 20 20 62 6f 6f 6c 20 74 72 61 63 65 20 2f      bool trace /
229b0 2a 20 4e 4f 54 20 55 53 45 44 20 2a 2f 0d 0a 20  * NOT USED */.. 
229c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29                 )
229d0 20 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a 20 20   /* throw */..  
229e0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
229f0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
22a00 28 64 65 73 69 67 6e 65 72 41 73 73 65 6d 62 6c  (designerAssembl
22a10 79 4e 61 6d 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  yName == null)..
22a20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22a30 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
22a40 20 20 20 20 20 20 20 64 65 73 69 67 6e 65 72 41         designerA
22a50 73 73 65 6d 62 6c 79 4e 61 6d 65 20 3d 20 41 73  ssemblyName = As
22a60 73 65 6d 62 6c 79 4e 61 6d 65 2e 47 65 74 41 73  semblyName.GetAs
22a70 73 65 6d 62 6c 79 4e 61 6d 65 28 0d 0a 20 20 20  semblyName(..   
22a80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22a90 20 20 20 20 20 44 65 73 69 67 6e 65 72 46 69 6c       DesignerFil
22aa0 65 4e 61 6d 65 29 3b 20 2f 2a 20 74 68 72 6f 77  eName); /* throw
22ab0 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   */..           
22ac0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
22ad0 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
22ae0 20 64 65 73 69 67 6e 65 72 41 73 73 65 6d 62 6c   designerAssembl
22af0 79 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20  yName;..        
22b00 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
22b10 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
22b20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22b30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22b40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22b50 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
22b60 20 20 20 20 20 20 20 20 2f 2a 20 52 45 51 55 49          /* REQUI
22b70 52 45 44 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20  RED */..        
22b80 20 20 20 20 70 75 62 6c 69 63 20 41 73 73 65 6d      public Assem
22b90 62 6c 79 4e 61 6d 65 20 47 65 74 50 72 6f 76 69  blyName GetProvi
22ba0 64 65 72 41 73 73 65 6d 62 6c 79 4e 61 6d 65 28  derAssemblyName(
22bb0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
22bc0 20 20 62 6f 6f 6c 20 74 72 61 63 65 0d 0a 20 20    bool trace..  
22bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29 20                ) 
22be0 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a 20 20 20  /* throw */..   
22bf0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
22c00 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
22c10 72 6e 20 55 73 65 45 66 36 50 72 6f 76 69 64 65  rn UseEf6Provide
22c20 72 28 74 72 61 63 65 29 20 3f 0d 0a 20 20 20 20  r(trace) ?..    
22c30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22c40 47 65 74 45 66 36 41 73 73 65 6d 62 6c 79 4e 61  GetEf6AssemblyNa
22c50 6d 65 28 74 72 61 63 65 29 20 3a 20 47 65 74 43  me(trace) : GetC
22c60 6f 72 65 41 73 73 65 6d 62 6c 79 4e 61 6d 65 28  oreAssemblyName(
22c70 74 72 61 63 65 29 3b 0d 0a 20 20 20 20 20 20 20  trace);..       
22c80 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
22c90 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
22ca0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22cb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22cc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22cd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
22ce0 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
22cf0 73 74 72 69 6e 67 20 47 65 74 43 6f 6e 66 69 67  string GetConfig
22d00 49 6e 76 61 72 69 61 6e 74 4e 61 6d 65 28 0d 0a  InvariantName(..
22d10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22d20 62 6f 6f 6c 20 74 72 61 63 65 0d 0a 20 20 20 20  bool trace..    
22d30 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
22d40 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
22d50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
22d60 74 75 72 6e 20 47 65 74 49 6e 76 61 72 69 61 6e  turn GetInvarian
22d70 74 4e 61 6d 65 28 74 72 61 63 65 29 3b 0d 0a 20  tName(trace);.. 
22d80 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
22d90 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
22da0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22db0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22dc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22dd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
22de0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
22df0 75 62 6c 69 63 20 73 74 72 69 6e 67 20 47 65 74  ublic string Get
22e00 50 72 6f 76 69 64 65 72 49 6e 76 61 72 69 61 6e  ProviderInvarian
22e10 74 4e 61 6d 65 28 0d 0a 20 20 20 20 20 20 20 20  tName(..        
22e20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 74 72 61          bool tra
22e30 63 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ce..            
22e40 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20      )..         
22e50 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
22e60 20 20 20 20 20 20 72 65 74 75 72 6e 20 47 65 74        return Get
22e70 49 6e 76 61 72 69 61 6e 74 4e 61 6d 65 28 74 72  InvariantName(tr
22e80 61 63 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ace);..         
22e90 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
22ea0 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
22eb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22ec0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22ed0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22ee0 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
22ef0 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74         public st
22f00 72 69 6e 67 20 47 65 74 46 61 63 74 6f 72 79 54  ring GetFactoryT
22f10 79 70 65 4e 61 6d 65 28 0d 0a 20 20 20 20 20 20  ypeName(..      
22f20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 74            bool t
22f30 72 61 63 65 0d 0a 20 20 20 20 20 20 20 20 20 20  race..          
22f40 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
22f50 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
22f60 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 55          return U
22f70 73 65 45 66 36 50 72 6f 76 69 64 65 72 28 74 72  seEf6Provider(tr
22f80 61 63 65 29 20 3f 0d 0a 20 20 20 20 20 20 20 20  ace) ?..        
22f90 20 20 20 20 20 20 20 20 20 20 20 20 45 66 36 46              Ef6F
22fa0 61 63 74 6f 72 79 54 79 70 65 4e 61 6d 65 20 3a  actoryTypeName :
22fb0 20 46 61 63 74 6f 72 79 54 79 70 65 4e 61 6d 65   FactoryTypeName
22fc0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
22fd0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
22fe0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22ff0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23000 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23010 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23020 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
23030 20 20 20 70 75 62 6c 69 63 20 76 6f 69 64 20 44     public void D
23040 75 6d 70 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ump(..          
23050 20 20 20 20 20 20 54 72 61 63 65 43 61 6c 6c 62        TraceCallb
23060 61 63 6b 20 74 72 61 63 65 43 61 6c 6c 62 61 63  ack traceCallbac
23070 6b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  k..             
23080 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20     )..          
23090 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
230a0 20 20 20 20 20 69 66 20 28 74 72 61 63 65 43 61       if (traceCa
230b0 6c 6c 62 61 63 6b 20 21 3d 20 6e 75 6c 6c 29 0d  llback != null).
230c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
230d0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
230e0 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c          traceCal
230f0 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72  lback(String.For
23100 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65  mat(NameAndValue
23110 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20  Format,..       
23120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23130 20 22 41 73 73 65 6d 62 6c 79 22 2c 20 46 6f 72   "Assembly", For
23140 44 69 73 70 6c 61 79 28 61 73 73 65 6d 62 6c 79  Display(assembly
23150 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  )),..           
23160 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
23170 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
23180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23190 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63      traceCallbac
231a0 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  k(String.Format(
231b0 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d  NameAndValueForm
231c0 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at,..           
231d0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 4c 6f               "Lo
231e0 67 46 69 6c 65 4e 61 6d 65 22 2c 20 46 6f 72 44  gFileName", ForD
231f0 69 73 70 6c 61 79 28 6c 6f 67 46 69 6c 65 4e 61  isplay(logFileNa
23200 6d 65 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  me)),..         
23210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
23220 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
23230 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
23240 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62        traceCallb
23250 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ack(String.Forma
23260 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f  t(NameAndValueFo
23270 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20  rmat,..         
23280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
23290 44 69 72 65 63 74 6f 72 79 22 2c 20 46 6f 72 44  Directory", ForD
232a0 69 73 70 6c 61 79 28 64 69 72 65 63 74 6f 72 79  isplay(directory
232b0 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  )),..           
232c0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
232d0 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
232e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
232f0 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63      traceCallbac
23300 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  k(String.Format(
23310 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d  NameAndValueForm
23320 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at,..           
23330 20 20 20 20 20 20 20 20 20 20 20 20 20 22 43 6f               "Co
23340 72 65 46 69 6c 65 4e 61 6d 65 22 2c 20 46 6f 72  reFileName", For
23350 44 69 73 70 6c 61 79 28 63 6f 72 65 46 69 6c 65  Display(coreFile
23360 4e 61 6d 65 29 29 2c 0d 0a 20 20 20 20 20 20 20  Name)),..       
23370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23380 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
23390 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
233a0 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c          traceCal
233b0 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72  lback(String.For
233c0 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65  mat(NameAndValue
233d0 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20  Format,..       
233e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
233f0 20 22 4c 69 6e 71 46 69 6c 65 4e 61 6d 65 22 2c   "LinqFileName",
23400 20 46 6f 72 44 69 73 70 6c 61 79 28 6c 69 6e 71   ForDisplay(linq
23410 46 69 6c 65 4e 61 6d 65 29 29 2c 0d 0a 20 20 20  FileName)),..   
23420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23430 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f       traceCatego
23440 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
23450 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
23460 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67  eCallback(String
23470 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56  .Format(NameAndV
23480 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20  alueFormat,..   
23490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
234a0 20 20 20 20 20 22 45 66 36 46 69 6c 65 4e 61 6d       "Ef6FileNam
234b0 65 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 65  e", ForDisplay(e
234c0 66 36 46 69 6c 65 4e 61 6d 65 29 29 2c 0d 0a 20  f6FileName)),.. 
234d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
234e0 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65         traceCate
234f0 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
23500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
23510 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69  aceCallback(Stri
23520 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e  ng.Format(NameAn
23530 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20  dValueFormat,.. 
23540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23550 20 20 20 20 20 20 20 22 44 65 73 69 67 6e 65 72         "Designer
23560 46 69 6c 65 4e 61 6d 65 22 2c 20 46 6f 72 44 69  FileName", ForDi
23570 73 70 6c 61 79 28 64 65 73 69 67 6e 65 72 46 69  splay(designerFi
23580 6c 65 4e 61 6d 65 29 29 2c 0d 0a 20 20 20 20 20  leName)),..     
23590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
235a0 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
235b0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
235c0 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
235d0 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46  allback(String.F
235e0 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c  ormat(NameAndVal
235f0 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20  ueFormat,..     
23600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23610 20 20 20 22 52 65 67 69 73 74 72 79 56 65 72 73     "RegistryVers
23620 69 6f 6e 22 2c 20 46 6f 72 44 69 73 70 6c 61 79  ion", ForDisplay
23630 28 72 65 67 69 73 74 72 79 56 65 72 73 69 6f 6e  (registryVersion
23640 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  )),..           
23650 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
23660 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
23670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23680 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63      traceCallbac
23690 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  k(String.Format(
236a0 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d  NameAndValueForm
236b0 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at,..           
236c0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 43 6f               "Co
236d0 6e 66 69 67 56 65 72 73 69 6f 6e 22 2c 20 46 6f  nfigVersion", Fo
236e0 72 44 69 73 70 6c 61 79 28 63 6f 6e 66 69 67 56  rDisplay(configV
236f0 65 72 73 69 6f 6e 29 29 2c 0d 0a 20 20 20 20 20  ersion)),..     
23700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23710 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
23720 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
23730 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
23740 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46  allback(String.F
23750 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c  ormat(NameAndVal
23760 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20  ueFormat,..     
23770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23780 20 20 20 22 56 73 56 65 72 73 69 6f 6e 53 75 66     "VsVersionSuf
23790 66 69 78 22 2c 20 46 6f 72 44 69 73 70 6c 61 79  fix", ForDisplay
237a0 28 76 73 56 65 72 73 69 6f 6e 53 75 66 66 69 78  (vsVersionSuffix
237b0 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  )),..           
237c0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
237d0 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
237e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
237f0 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63      traceCallbac
23800 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  k(String.Format(
23810 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d  NameAndValueForm
23820 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at,..           
23830 20 20 20 20 20 20 20 20 20 20 20 20 20 22 44 65               "De
23840 62 75 67 46 6f 72 6d 61 74 22 2c 20 46 6f 72 44  bugFormat", ForD
23850 69 73 70 6c 61 79 28 64 65 62 75 67 46 6f 72 6d  isplay(debugForm
23860 61 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  at)),..         
23870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
23880 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
23890 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
238a0 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62        traceCallb
238b0 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ack(String.Forma
238c0 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f  t(NameAndValueFo
238d0 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20  rmat,..         
238e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
238f0 54 72 61 63 65 46 6f 72 6d 61 74 22 2c 20 46 6f  TraceFormat", Fo
23900 72 44 69 73 70 6c 61 79 28 74 72 61 63 65 46 6f  rDisplay(traceFo
23910 72 6d 61 74 29 29 2c 0d 0a 20 20 20 20 20 20 20  rmat)),..       
23920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23930 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
23940 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
23950 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c          traceCal
23960 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72  lback(String.For
23970 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65  mat(NameAndValue
23980 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20  Format,..       
23990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
239a0 20 22 49 6e 73 74 61 6c 6c 46 6c 61 67 73 22 2c   "InstallFlags",
239b0 20 46 6f 72 44 69 73 70 6c 61 79 28 69 6e 73 74   ForDisplay(inst
239c0 61 6c 6c 46 6c 61 67 73 29 29 2c 0d 0a 20 20 20  allFlags)),..   
239d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
239e0 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f       traceCatego
239f0 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
23a00 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
23a10 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67  eCallback(String
23a20 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56  .Format(NameAndV
23a30 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20  alueFormat,..   
23a40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23a50 20 20 20 20 20 22 50 72 6f 76 69 64 65 72 46 6c       "ProviderFl
23a60 61 67 73 22 2c 20 46 6f 72 44 69 73 70 6c 61 79  ags", ForDisplay
23a70 28 70 72 6f 76 69 64 65 72 46 6c 61 67 73 29 29  (providerFlags))
23a80 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
23a90 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
23aa0 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  Category);....  
23ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23ac0 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28    traceCallback(
23ad0 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61  String.Format(Na
23ae0 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74  meAndValueFormat
23af0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
23b00 20 20 20 20 20 20 20 20 20 20 20 22 44 65 62 75             "Debu
23b10 67 50 72 69 6f 72 69 74 79 22 2c 20 46 6f 72 44  gPriority", ForD
23b20 69 73 70 6c 61 79 28 64 65 62 75 67 50 72 69 6f  isplay(debugPrio
23b30 72 69 74 79 29 29 2c 0d 0a 20 20 20 20 20 20 20  rity)),..       
23b40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23b50 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
23b60 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
23b70 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c          traceCal
23b80 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72  lback(String.For
23b90 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65  mat(NameAndValue
23ba0 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20  Format,..       
23bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23bc0 20 22 54 72 61 63 65 50 72 69 6f 72 69 74 79 22   "TracePriority"
23bd0 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 74 72 61  , ForDisplay(tra
23be0 63 65 50 72 69 6f 72 69 74 79 29 29 2c 0d 0a 20  cePriority)),.. 
23bf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23c00 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65         traceCate
23c10 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
23c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
23c30 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69  aceCallback(Stri
23c40 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e  ng.Format(NameAn
23c50 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20  dValueFormat,.. 
23c60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23c70 20 20 20 20 20 20 20 22 50 65 72 55 73 65 72 22         "PerUser"
23c80 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 70 65 72  , ForDisplay(per
23c90 55 73 65 72 29 29 2c 0d 0a 20 20 20 20 20 20 20  User)),..       
23ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23cb0 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
23cc0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
23cd0 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c          traceCal
23ce0 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72  lback(String.For
23cf0 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65  mat(NameAndValue
23d00 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20  Format,..       
23d10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23d20 20 22 49 6e 73 74 61 6c 6c 22 2c 20 46 6f 72 44   "Install", ForD
23d30 69 73 70 6c 61 79 28 69 6e 73 74 61 6c 6c 29 29  isplay(install))
23d40 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
23d50 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
23d60 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  Category);....  
23d70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23d80 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28    traceCallback(
23d90 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61  String.Format(Na
23da0 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74  meAndValueFormat
23db0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
23dc0 20 20 20 20 20 20 20 20 20 20 20 22 57 6f 77 36             "Wow6
23dd0 34 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 77  4", ForDisplay(w
23de0 6f 77 36 34 29 29 2c 0d 0a 20 20 20 20 20 20 20  ow64)),..       
23df0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23e00 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
23e10 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
23e20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c          traceCal
23e30 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72  lback(String.For
23e40 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65  mat(NameAndValue
23e50 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20  Format,..       
23e60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23e70 20 22 4e 6f 52 75 6e 74 69 6d 65 56 65 72 73 69   "NoRuntimeVersi
23e80 6f 6e 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28  on", ForDisplay(
23e90 6e 6f 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e  noRuntimeVersion
23ea0 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  )),..           
23eb0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
23ec0 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
23ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23ee0 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63      traceCallbac
23ef0 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  k(String.Format(
23f00 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d  NameAndValueForm
23f10 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at,..           
23f20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 4e 6f               "No
23f30 44 65 73 6b 74 6f 70 22 2c 20 46 6f 72 44 69 73  Desktop", ForDis
23f40 70 6c 61 79 28 6e 6f 44 65 73 6b 74 6f 70 29 29  play(noDesktop))
23f50 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
23f60 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
23f70 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  Category);....  
23f80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23f90 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28    traceCallback(
23fa0 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61  String.Format(Na
23fb0 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74  meAndValueFormat
23fc0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
23fd0 20 20 20 20 20 20 20 20 20 20 20 22 4e 6f 43 6f             "NoCo
23fe0 6d 70 61 63 74 22 2c 20 46 6f 72 44 69 73 70 6c  mpact", ForDispl
23ff0 61 79 28 6e 6f 43 6f 6d 70 61 63 74 29 29 2c 0d  ay(noCompact)),.
24000 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
24010 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
24020 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
24030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24040 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74  traceCallback(St
24050 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65  ring.Format(Name
24060 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d  AndValueFormat,.
24070 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
24080 20 20 20 20 20 20 20 20 20 22 4e 6f 4e 65 74 46           "NoNetF
24090 78 32 30 22 2c 20 46 6f 72 44 69 73 70 6c 61 79  x20", ForDisplay
240a0 28 6e 6f 4e 65 74 46 78 32 30 29 29 2c 0d 0a 20  (noNetFx20)),.. 
240b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
240c0 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65         traceCate
240d0 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
240e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
240f0 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69  aceCallback(Stri
24100 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e  ng.Format(NameAn
24110 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20  dValueFormat,.. 
24120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24130 20 20 20 20 20 20 20 22 4e 6f 4e 65 74 46 78 33         "NoNetFx3
24140 35 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 6e  5", ForDisplay(n
24150 6f 4e 65 74 46 78 33 35 29 29 2c 0d 0a 20 20 20  oNetFx35)),..   
24160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24170 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f       traceCatego
24180 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
24190 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
241a0 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67  eCallback(String
241b0 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56  .Format(NameAndV
241c0 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20  alueFormat,..   
241d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
241e0 20 20 20 20 20 22 4e 6f 4e 65 74 46 78 34 30 22       "NoNetFx40"
241f0 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 6e 6f 4e  , ForDisplay(noN
24200 65 74 46 78 34 30 29 29 2c 0d 0a 20 20 20 20 20  etFx40)),..     
24210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24220 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
24230 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
24240 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
24250 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46  allback(String.F
24260 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c  ormat(NameAndVal
24270 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20  ueFormat,..     
24280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24290 20 20 20 22 4e 6f 4e 65 74 46 78 34 35 22 2c 20     "NoNetFx45", 
242a0 46 6f 72 44 69 73 70 6c 61 79 28 6e 6f 4e 65 74  ForDisplay(noNet
242b0 46 78 34 35 29 29 2c 0d 0a 20 20 20 20 20 20 20  Fx45)),..       
242c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
242d0 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
242e0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
242f0 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c          traceCal
24300 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72  lback(String.For
24310 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65  mat(NameAndValue
24320 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20  Format,..       
24330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24340 20 22 4e 6f 4e 65 74 46 78 34 35 31 22 2c 20 46   "NoNetFx451", F
24350 6f 72 44 69 73 70 6c 61 79 28 6e 6f 4e 65 74 46  orDisplay(noNetF
24360 78 34 35 31 29 29 2c 0d 0a 20 20 20 20 20 20 20  x451)),..       
24370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24380 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
24390 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
243a0 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c          traceCal
243b0 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72  lback(String.For
243c0 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65  mat(NameAndValue
243d0 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20  Format,..       
243e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
243f0 20 22 4e 6f 4e 65 74 46 78 34 35 32 22 2c 20 46   "NoNetFx452", F
24400 6f 72 44 69 73 70 6c 61 79 28 6e 6f 4e 65 74 46  orDisplay(noNetF
24410 78 34 35 32 29 29 2c 0d 0a 20 20 20 20 20 20 20  x452)),..       
24420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24430 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
24440 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
24450 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c          traceCal
24460 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72  lback(String.For
24470 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65  mat(NameAndValue
24480 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20  Format,..       
24490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
244a0 20 22 4e 6f 4e 65 74 46 78 34 36 22 2c 20 46 6f   "NoNetFx46", Fo
244b0 72 44 69 73 70 6c 61 79 28 6e 6f 4e 65 74 46 78  rDisplay(noNetFx
244c0 34 36 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  46)),..         
244d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
244e0 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
244f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
24500 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62        traceCallb
24510 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ack(String.Forma
24520 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f  t(NameAndValueFo
24530 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20  rmat,..         
24540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
24550 4e 6f 56 73 32 30 30 35 22 2c 20 46 6f 72 44 69  NoVs2005", ForDi
24560 73 70 6c 61 79 28 6e 6f 56 73 32 30 30 35 29 29  splay(noVs2005))
24570 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
24580 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
24590 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  Category);....  
245a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
245b0 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28    traceCallback(
245c0 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61  String.Format(Na
245d0 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74  meAndValueFormat
245e0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
245f0 20 20 20 20 20 20 20 20 20 20 20 22 4e 6f 56 73             "NoVs
24600 32 30 30 38 22 2c 20 46 6f 72 44 69 73 70 6c 61  2008", ForDispla
24610 79 28 6e 6f 56 73 32 30 30 38 29 29 2c 0d 0a 20  y(noVs2008)),.. 
24620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24630 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65         traceCate
24640 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
24650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
24660 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69  aceCallback(Stri
24670 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e  ng.Format(NameAn
24680 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20  dValueFormat,.. 
24690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
246a0 20 20 20 20 20 20 20 22 4e 6f 56 73 32 30 31 30         "NoVs2010
246b0 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 6e 6f  ", ForDisplay(no
246c0 56 73 32 30 31 30 29 29 2c 0d 0a 20 20 20 20 20  Vs2010)),..     
246d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
246e0 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
246f0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
24700 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
24710 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46  allback(String.F
24720 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c  ormat(NameAndVal
24730 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20  ueFormat,..     
24740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24750 20 20 20 22 4e 6f 56 73 32 30 31 32 22 2c 20 46     "NoVs2012", F
24760 6f 72 44 69 73 70 6c 61 79 28 6e 6f 56 73 32 30  orDisplay(noVs20
24770 31 32 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  12)),..         
24780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
24790 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
247a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
247b0 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62        traceCallb
247c0 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ack(String.Forma
247d0 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f  t(NameAndValueFo
247e0 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20  rmat,..         
247f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
24800 4e 6f 56 73 32 30 31 33 22 2c 20 46 6f 72 44 69  NoVs2013", ForDi
24810 73 70 6c 61 79 28 6e 6f 56 73 32 30 31 33 29 29  splay(noVs2013))
24820 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
24830 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
24840 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  Category);....  
24850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24860 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28    traceCallback(
24870 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61  String.Format(Na
24880 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74  meAndValueFormat
24890 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
248a0 20 20 20 20 20 20 20 20 20 20 20 22 4e 6f 56 73             "NoVs
248b0 32 30 31 35 22 2c 20 46 6f 72 44 69 73 70 6c 61  2015", ForDispla
248c0 79 28 6e 6f 56 73 32 30 31 35 29 29 2c 0d 0a 20  y(noVs2015)),.. 
248d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
248e0 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65         traceCate
248f0 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
24900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
24910 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69  aceCallback(Stri
24920 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e  ng.Format(NameAn
24930 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20  dValueFormat,.. 
24940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24950 20 20 20 20 20 20 20 22 4e 6f 54 72 61 63 65 22         "NoTrace"
24960 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 6e 6f 54  , ForDisplay(noT
24970 72 61 63 65 29 29 2c 0d 0a 20 20 20 20 20 20 20  race)),..       
24980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24990 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
249a0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
249b0 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c          traceCal
249c0 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72  lback(String.For
249d0 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65  mat(NameAndValue
249e0 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20  Format,..       
249f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24a00 20 22 4e 6f 43 6f 6e 73 6f 6c 65 22 2c 20 46 6f   "NoConsole", Fo
24a10 72 44 69 73 70 6c 61 79 28 6e 6f 43 6f 6e 73 6f  rDisplay(noConso
24a20 6c 65 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  le)),..         
24a30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
24a40 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
24a50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
24a60 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62        traceCallb
24a70 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ack(String.Forma
24a80 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f  t(NameAndValueFo
24a90 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20  rmat,..         
24aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
24ab0 4e 6f 4c 6f 67 22 2c 20 46 6f 72 44 69 73 70 6c  NoLog", ForDispl
24ac0 61 79 28 6e 6f 4c 6f 67 29 29 2c 0d 0a 20 20 20  ay(noLog)),..   
24ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24ae0 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f       traceCatego
24af0 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
24b00 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
24b10 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67  eCallback(String
24b20 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56  .Format(NameAndV
24b30 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20  alueFormat,..   
24b40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24b50 20 20 20 20 20 22 54 68 72 6f 77 4f 6e 4d 69 73       "ThrowOnMis
24b60 73 69 6e 67 22 2c 20 46 6f 72 44 69 73 70 6c 61  sing", ForDispla
24b70 79 28 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67  y(throwOnMissing
24b80 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  )),..           
24b90 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
24ba0 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
24bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24bc0 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63      traceCallbac
24bd0 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  k(String.Format(
24be0 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d  NameAndValueForm
24bf0 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at,..           
24c00 20 20 20 20 20 20 20 20 20 20 20 20 20 22 57 68               "Wh
24c10 61 74 49 66 22 2c 20 46 6f 72 44 69 73 70 6c 61  atIf", ForDispla
24c20 79 28 77 68 61 74 49 66 29 29 2c 0d 0a 20 20 20  y(whatIf)),..   
24c30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24c40 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f       traceCatego
24c50 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
24c60 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
24c70 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67  eCallback(String
24c80 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56  .Format(NameAndV
24c90 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20  alueFormat,..   
24ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24cb0 20 20 20 20 20 22 44 65 62 75 67 22 2c 20 46 6f       "Debug", Fo
24cc0 72 44 69 73 70 6c 61 79 28 64 65 62 75 67 29 29  rDisplay(debug))
24cd0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
24ce0 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
24cf0 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  Category);....  
24d00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24d10 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28    traceCallback(
24d20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61  String.Format(Na
24d30 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74  meAndValueFormat
24d40 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
24d50 20 20 20 20 20 20 20 20 20 20 20 22 56 65 72 62             "Verb
24d60 6f 73 65 22 2c 20 46 6f 72 44 69 73 70 6c 61 79  ose", ForDisplay
24d70 28 76 65 72 62 6f 73 65 29 29 2c 0d 0a 20 20 20  (verbose)),..   
24d80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24d90 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f       traceCatego
24da0 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
24db0 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
24dc0 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67  eCallback(String
24dd0 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56  .Format(NameAndV
24de0 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20  alueFormat,..   
24df0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24e00 20 20 20 20 20 22 43 6f 6e 66 69 72 6d 22 2c 20       "Confirm", 
24e10 46 6f 72 44 69 73 70 6c 61 79 28 63 6f 6e 66 69  ForDisplay(confi
24e20 72 6d 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  rm)),..         
24e30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
24e40 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
24e50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
24e60 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
24e70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24e80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24e90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24ea0 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
24eb0 20 20 20 20 20 20 20 20 20 69 66 20 28 61 73 73           if (ass
24ec0 65 6d 62 6c 79 20 21 3d 20 6e 75 6c 6c 29 0d 0a  embly != null)..
24ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24ee0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
24ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
24f00 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72  raceCallback(Str
24f10 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41  ing.Format(NameA
24f20 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a  ndValueFormat,..
24f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24f40 20 20 20 20 20 20 20 20 20 20 20 20 22 41 73 73              "Ass
24f50 65 6d 62 6c 79 54 69 74 6c 65 22 2c 0d 0a 20 20  emblyTitle",..  
24f60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24f70 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73            ForDis
24f80 70 6c 61 79 28 47 65 74 41 73 73 65 6d 62 6c 79  play(GetAssembly
24f90 54 69 74 6c 65 28 61 73 73 65 6d 62 6c 79 29 29  Title(assembly))
24fa0 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
24fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24fc0 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
24fd0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
24fe0 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
24ff0 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e  Callback(String.
25000 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61  Format(NameAndVa
25010 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20  lueFormat,..    
25020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25030 20 20 20 20 20 20 20 20 22 41 73 73 65 6d 62 6c          "Assembl
25040 79 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 22 2c  yConfiguration",
25050 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
25060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f                Fo
25070 72 44 69 73 70 6c 61 79 28 47 65 74 41 73 73 65  rDisplay(GetAsse
25080 6d 62 6c 79 43 6f 6e 66 69 67 75 72 61 74 69 6f  mblyConfiguratio
25090 6e 28 61 73 73 65 6d 62 6c 79 29 29 29 2c 0d 0a  n(assembly))),..
250a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
250b0 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
250c0 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 20 20 20  eCategory);..   
250d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
250e0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
250f0 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
25100 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25110 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25120 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25130 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
25140 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
25150 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e  ceCallback(Strin
25160 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64  g.Format(NameAnd
25170 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20  ValueFormat,..  
25180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25190 20 20 20 20 20 20 22 49 73 53 79 73 74 65 6d 45        "IsSystemE
251a0 66 36 41 73 73 65 6d 62 6c 79 41 76 61 69 6c 61  f6AssemblyAvaila
251b0 62 6c 65 22 2c 20 46 6f 72 44 69 73 70 6c 61 79  ble", ForDisplay
251c0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
251d0 20 20 20 20 20 20 20 20 20 20 20 49 73 53 79 73             IsSys
251e0 74 65 6d 45 66 36 41 73 73 65 6d 62 6c 79 41 76  temEf6AssemblyAv
251f0 61 69 6c 61 62 6c 65 28 66 61 6c 73 65 29 29 29  ailable(false)))
25200 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
25210 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
25220 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  Category);....  
25230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25240 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28    traceCallback(
25250 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61  String.Format(Na
25260 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74  meAndValueFormat
25270 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
25280 20 20 20 20 20 20 20 20 20 20 20 22 49 73 53 79             "IsSy
25290 73 74 65 6d 45 66 36 41 73 73 65 6d 62 6c 79 47  stemEf6AssemblyG
252a0 6c 6f 62 61 6c 22 2c 20 46 6f 72 44 69 73 70 6c  lobal", ForDispl
252b0 61 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ay(..           
252c0 20 20 20 20 20 20 20 20 20 20 20 20 20 49 73 53               IsS
252d0 79 73 74 65 6d 45 66 36 41 73 73 65 6d 62 6c 79  ystemEf6Assembly
252e0 47 6c 6f 62 61 6c 28 29 29 29 2c 0d 0a 20 20 20  Global())),..   
252f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25300 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f       traceCatego
25310 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
25320 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
25330 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25340 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25350 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25360 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
25370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
25380 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72  raceCallback(Str
25390 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41  ing.Format(NameA
253a0 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a  ndValueFormat,..
253b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
253c0 20 20 20 20 20 20 20 20 22 49 73 4c 69 6e 71 53          "IsLinqS
253d0 75 70 70 6f 72 74 65 64 22 2c 20 46 6f 72 44 69  upported", ForDi
253e0 73 70 6c 61 79 28 49 73 4c 69 6e 71 53 75 70 70  splay(IsLinqSupp
253f0 6f 72 74 65 64 28 66 61 6c 73 65 29 29 29 2c 0d  orted(false))),.
25400 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
25410 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
25420 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
25430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25440 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74  traceCallback(St
25450 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65  ring.Format(Name
25460 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d  AndValueFormat,.
25470 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
25480 20 20 20 20 20 20 20 20 20 22 49 73 45 66 36 53           "IsEf6S
25490 75 70 70 6f 72 74 65 64 22 2c 20 46 6f 72 44 69  upported", ForDi
254a0 73 70 6c 61 79 28 49 73 45 66 36 53 75 70 70 6f  splay(IsEf6Suppo
254b0 72 74 65 64 28 66 61 6c 73 65 29 29 29 2c 0d 0a  rted(false))),..
254c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
254d0 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74          traceCat
254e0 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20  egory);....     
254f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
25500 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72  raceCallback(Str
25510 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41  ing.Format(NameA
25520 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a  ndValueFormat,..
25530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25540 20 20 20 20 20 20 20 20 22 49 73 45 66 36 41 73          "IsEf6As
25550 73 65 6d 62 6c 79 47 6c 6f 62 61 6c 22 2c 20 46  semblyGlobal", F
25560 6f 72 44 69 73 70 6c 61 79 28 0d 0a 20 20 20 20  orDisplay(..    
25570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25580 20 20 20 20 49 73 45 66 36 41 73 73 65 6d 62 6c      IsEf6Assembl
25590 79 47 6c 6f 62 61 6c 28 29 29 29 2c 0d 0a 20 20  yGlobal())),..  
255a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
255b0 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67        traceCateg
255c0 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
255d0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
255e0 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e  ceCallback(Strin
255f0 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64  g.Format(NameAnd
25600 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20  ValueFormat,..  
25610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25620 20 20 20 20 20 20 22 55 73 65 45 66 36 50 72 6f        "UseEf6Pro
25630 76 69 64 65 72 22 2c 20 46 6f 72 44 69 73 70 6c  vider", ForDispl
25640 61 79 28 55 73 65 45 66 36 50 72 6f 76 69 64 65  ay(UseEf6Provide
25650 72 28 66 61 6c 73 65 29 29 29 2c 0d 0a 20 20 20  r(false))),..   
25660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25670 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f       traceCatego
25680 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
25690 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
256a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
256b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
256c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
256d0 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
256e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
256f0 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ry..            
25700 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
25710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25720 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b     traceCallback
25730 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e  (String.Format(N
25740 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61  ameAndValueForma
25750 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t,..            
25760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25770 22 47 65 74 43 6f 72 65 41 73 73 65 6d 62 6c 79  "GetCoreAssembly
25780 4e 61 6d 65 22 2c 20 46 6f 72 44 69 73 70 6c 61  Name", ForDispla
25790 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y(..            
257a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
257b0 47 65 74 43 6f 72 65 41 73 73 65 6d 62 6c 79 4e  GetCoreAssemblyN
257c0 61 6d 65 28 66 61 6c 73 65 29 29 29 2c 20 74 72  ame(false))), tr
257d0 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 20  aceCategory);.. 
257e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
257f0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
25800 20 20 20 20 20 20 20 20 20 20 63 61 74 63 68 20            catch 
25810 28 45 78 63 65 70 74 69 6f 6e 20 65 29 0d 0a 20  (Exception e).. 
25820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25830 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
25840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
25850 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69  aceCallback(Stri
25860 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e  ng.Format(NameAn
25870 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20  dValueFormat,.. 
25880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25890 20 20 20 20 20 20 20 20 20 20 20 22 47 65 74 43             "GetC
258a0 6f 72 65 41 73 73 65 6d 62 6c 79 4e 61 6d 65 22  oreAssemblyName"
258b0 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 65 29 29  , ForDisplay(e))
258c0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
258d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
258e0 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
258f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25900 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
25910 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f               ///
25920 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25930 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25940 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25950 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
25960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25970 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20  try..           
25980 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
25990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
259a0 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63      traceCallbac
259b0 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  k(String.Format(
259c0 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d  NameAndValueForm
259d0 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at,..           
259e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
259f0 20 22 47 65 74 4c 69 6e 71 41 73 73 65 6d 62 6c   "GetLinqAssembl
25a00 79 4e 61 6d 65 22 2c 20 46 6f 72 44 69 73 70 6c  yName", ForDispl
25a10 61 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ay(..           
25a20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25a30 20 47 65 74 4c 69 6e 71 41 73 73 65 6d 62 6c 79   GetLinqAssembly
25a40 4e 61 6d 65 28 66 61 6c 73 65 29 29 29 2c 20 74  Name(false))), t
25a50 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
25a60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25a70 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
25a80 20 20 20 20 20 20 20 20 20 20 20 63 61 74 63 68             catch
25a90 20 28 45 78 63 65 70 74 69 6f 6e 20 65 29 0d 0a   (Exception e)..
25aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25ab0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
25ac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
25ad0 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72  raceCallback(Str
25ae0 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41  ing.Format(NameA
25af0 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a  ndValueFormat,..
25b00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25b10 20 20 20 20 20 20 20 20 20 20 20 20 22 47 65 74              "Get
25b20 4c 69 6e 71 41 73 73 65 6d 62 6c 79 4e 61 6d 65  LinqAssemblyName
25b30 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 65 29  ", ForDisplay(e)
25b40 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
25b50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25b60 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
25b70 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
25b80 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
25b90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
25ba0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25bb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25bc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25bd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
25be0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25bf0 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20   try..          
25c00 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
25c10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25c20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61       traceCallba
25c30 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  ck(String.Format
25c40 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72  (NameAndValueFor
25c50 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  mat,..          
25c60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25c70 20 20 22 47 65 74 45 66 36 41 73 73 65 6d 62 6c    "GetEf6Assembl
25c80 79 4e 61 6d 65 22 2c 20 46 6f 72 44 69 73 70 6c  yName", ForDispl
25c90 61 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ay(..           
25ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25cb0 20 47 65 74 45 66 36 41 73 73 65 6d 62 6c 79 4e   GetEf6AssemblyN
25cc0 61 6d 65 28 66 61 6c 73 65 29 29 29 2c 20 74 72  ame(false))), tr
25cd0 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 20  aceCategory);.. 
25ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25cf0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
25d00 20 20 20 20 20 20 20 20 20 20 63 61 74 63 68 20            catch 
25d10 28 45 78 63 65 70 74 69 6f 6e 20 65 29 0d 0a 20  (Exception e).. 
25d20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25d30 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
25d40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
25d50 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69  aceCallback(Stri
25d60 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e  ng.Format(NameAn
25d70 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20  dValueFormat,.. 
25d80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25d90 20 20 20 20 20 20 20 20 20 20 20 22 47 65 74 45             "GetE
25da0 66 36 41 73 73 65 6d 62 6c 79 4e 61 6d 65 22 2c  f6AssemblyName",
25db0 20 46 6f 72 44 69 73 70 6c 61 79 28 65 29 29 2c   ForDisplay(e)),
25dc0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
25dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
25de0 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 20  aceCategory);.. 
25df0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25e00 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
25e10 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
25e20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25e30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25e40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25e50 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
25e60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
25e70 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ry..            
25e80 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
25e90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25ea0 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b     traceCallback
25eb0 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e  (String.Format(N
25ec0 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61  ameAndValueForma
25ed0 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t,..            
25ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25ef0 22 47 65 74 44 65 73 69 67 6e 65 72 41 73 73 65  "GetDesignerAsse
25f00 6d 62 6c 79 4e 61 6d 65 22 2c 20 46 6f 72 44 69  mblyName", ForDi
25f10 73 70 6c 61 79 28 0d 0a 20 20 20 20 20 20 20 20  splay(..        
25f20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25f30 20 20 20 20 47 65 74 44 65 73 69 67 6e 65 72 41      GetDesignerA
25f40 73 73 65 6d 62 6c 79 4e 61 6d 65 28 66 61 6c 73  ssemblyName(fals
25f50 65 29 29 29 2c 20 74 72 61 63 65 43 61 74 65 67  e))), traceCateg
25f60 6f 72 79 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ory);..         
25f70 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
25f80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25f90 20 20 63 61 74 63 68 20 28 45 78 63 65 70 74 69    catch (Excepti
25fa0 6f 6e 20 65 29 0d 0a 20 20 20 20 20 20 20 20 20  on e)..         
25fb0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
25fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25fd0 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62        traceCallb
25fe0 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ack(String.Forma
25ff0 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f  t(NameAndValueFo
26000 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20  rmat,..         
26010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26020 20 20 20 22 47 65 74 44 65 73 69 67 6e 65 72 41     "GetDesignerA
26030 73 73 65 6d 62 6c 79 4e 61 6d 65 22 2c 20 46 6f  ssemblyName", Fo
26040 72 44 69 73 70 6c 61 79 28 65 29 29 2c 0d 0a 20  rDisplay(e)),.. 
26050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26060 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
26070 43 61 74 65 67 6f 72 79 29 3b 0d 0a 20 20 20 20  Category);..    
26080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26090 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
260a0 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
260b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
260c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
260d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
260e0 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
260f0 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
26100 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67  eCallback(String
26110 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56  .Format(NameAndV
26120 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20  alueFormat,..   
26130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26140 20 20 20 20 20 22 47 65 74 49 6e 76 61 72 69 61       "GetInvaria
26150 6e 74 4e 61 6d 65 22 2c 20 46 6f 72 44 69 73 70  ntName", ForDisp
26160 6c 61 79 28 47 65 74 49 6e 76 61 72 69 61 6e 74  lay(GetInvariant
26170 4e 61 6d 65 28 0d 0a 20 20 20 20 20 20 20 20 20  Name(..         
26180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66                 f
26190 61 6c 73 65 29 29 29 2c 20 74 72 61 63 65 43 61  alse))), traceCa
261a0 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
261b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
261c0 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74  traceCallback(St
261d0 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65  ring.Format(Name
261e0 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d  AndValueFormat,.
261f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
26200 20 20 20 20 20 20 20 20 20 22 47 65 74 43 6f 6e           "GetCon
26210 66 69 67 49 6e 76 61 72 69 61 6e 74 4e 61 6d 65  figInvariantName
26220 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 0d 0a  ", ForDisplay(..
26230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26240 20 20 20 20 20 20 20 20 47 65 74 43 6f 6e 66 69          GetConfi
26250 67 49 6e 76 61 72 69 61 6e 74 4e 61 6d 65 28 66  gInvariantName(f
26260 61 6c 73 65 29 29 29 2c 20 74 72 61 63 65 43 61  alse))), traceCa
26270 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
26280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26290 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74  traceCallback(St
262a0 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65  ring.Format(Name
262b0 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d  AndValueFormat,.
262c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
262d0 20 20 20 20 20 20 20 20 20 22 47 65 74 50 72 6f           "GetPro
262e0 76 69 64 65 72 49 6e 76 61 72 69 61 6e 74 4e 61  viderInvariantNa
262f0 6d 65 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28  me", ForDisplay(
26300 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
26310 20 20 20 20 20 20 20 20 20 20 47 65 74 50 72 6f            GetPro
26320 76 69 64 65 72 49 6e 76 61 72 69 61 6e 74 4e 61  viderInvariantNa
26330 6d 65 28 66 61 6c 73 65 29 29 29 2c 20 74 72 61  me(false))), tra
26340 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
26350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26360 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63      traceCallbac
26370 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  k(String.Format(
26380 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d  NameAndValueForm
26390 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at,..           
263a0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 47 65               "Ge
263b0 74 46 61 63 74 6f 72 79 54 79 70 65 4e 61 6d 65  tFactoryTypeName
263c0 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 0d 0a  ", ForDisplay(..
263d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
263e0 20 20 20 20 20 20 20 20 47 65 74 46 61 63 74 6f          GetFacto
263f0 72 79 54 79 70 65 4e 61 6d 65 28 66 61 6c 73 65  ryTypeName(false
26400 29 29 29 2c 20 74 72 61 63 65 43 61 74 65 67 6f  ))), traceCatego
26410 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
26420 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
26430 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26440 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26450 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26460 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
26470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
26480 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ry..            
26490 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
264a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
264b0 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b     traceCallback
264c0 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e  (String.Format(N
264d0 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61  ameAndValueForma
264e0 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t,..            
264f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26500 22 47 65 74 50 72 6f 76 69 64 65 72 41 73 73 65  "GetProviderAsse
26510 6d 62 6c 79 4e 61 6d 65 22 2c 20 46 6f 72 44 69  mblyName", ForDi
26520 73 70 6c 61 79 28 0d 0a 20 20 20 20 20 20 20 20  splay(..        
26530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26540 20 20 20 20 47 65 74 50 72 6f 76 69 64 65 72 41      GetProviderA
26550 73 73 65 6d 62 6c 79 4e 61 6d 65 28 66 61 6c 73  ssemblyName(fals
26560 65 29 29 29 2c 20 74 72 61 63 65 43 61 74 65 67  e))), traceCateg
26570 6f 72 79 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ory);..         
26580 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
26590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
265a0 20 20 63 61 74 63 68 20 28 45 78 63 65 70 74 69    catch (Excepti
265b0 6f 6e 20 65 29 0d 0a 20 20 20 20 20 20 20 20 20  on e)..         
265c0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
265d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
265e0 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62        traceCallb
265f0 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ack(String.Forma
26600 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f  t(NameAndValueFo
26610 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20  rmat,..         
26620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26630 20 20 20 22 47 65 74 50 72 6f 76 69 64 65 72 41     "GetProviderA
26640 73 73 65 6d 62 6c 79 4e 61 6d 65 22 2c 20 46 6f  ssemblyName", Fo
26650 72 44 69 73 70 6c 61 79 28 65 29 29 2c 0d 0a 20  rDisplay(e)),.. 
26660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26670 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
26680 43 61 74 65 67 6f 72 79 29 3b 0d 0a 20 20 20 20  Category);..    
26690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
266a0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
266b0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
266c0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
266d0 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20   #endregion.... 
266e0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
266f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26700 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26710 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26720 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
26730 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 72  ..            #r
26740 65 67 69 6f 6e 20 50 75 62 6c 69 63 20 50 72 6f  egion Public Pro
26750 70 65 72 74 69 65 73 0d 0a 20 20 20 20 20 20 20  perties..       
26760 20 20 20 20 20 70 72 69 76 61 74 65 20 41 73 73       private Ass
26770 65 6d 62 6c 79 20 61 73 73 65 6d 62 6c 79 3b 0d  embly assembly;.
26780 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
26790 6c 69 63 20 41 73 73 65 6d 62 6c 79 20 41 73 73  lic Assembly Ass
267a0 65 6d 62 6c 79 0d 0a 20 20 20 20 20 20 20 20 20  embly..         
267b0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
267c0 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75        get { retu
267d0 72 6e 20 61 73 73 65 6d 62 6c 79 3b 20 7d 0d 0a  rn assembly; }..
267e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
267f0 73 65 74 20 7b 20 61 73 73 65 6d 62 6c 79 20 3d  set { assembly =
26800 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20   value; }..     
26810 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
26820 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
26830 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26840 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26850 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26860 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
26870 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
26880 74 65 20 73 74 72 69 6e 67 20 6c 6f 67 46 69 6c  te string logFil
26890 65 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20  eName;..        
268a0 20 20 20 20 70 75 62 6c 69 63 20 73 74 72 69 6e      public strin
268b0 67 20 4c 6f 67 46 69 6c 65 4e 61 6d 65 0d 0a 20  g LogFileName.. 
268c0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
268d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65                ge
268e0 74 20 7b 20 72 65 74 75 72 6e 20 6c 6f 67 46 69  t { return logFi
268f0 6c 65 4e 61 6d 65 3b 20 7d 0d 0a 20 20 20 20 20  leName; }..     
26900 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b             set {
26910 20 6c 6f 67 46 69 6c 65 4e 61 6d 65 20 3d 20 76   logFileName = v
26920 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20  alue; }..       
26930 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
26940 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
26950 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26960 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26970 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26980 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
26990 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65           private
269a0 20 73 74 72 69 6e 67 20 64 69 72 65 63 74 6f 72   string director
269b0 79 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y;..            
269c0 70 75 62 6c 69 63 20 73 74 72 69 6e 67 20 44 69  public string Di
269d0 72 65 63 74 6f 72 79 0d 0a 20 20 20 20 20 20 20  rectory..       
269e0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
269f0 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65          get { re
26a00 74 75 72 6e 20 64 69 72 65 63 74 6f 72 79 3b 20  turn directory; 
26a10 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
26a20 20 20 20 73 65 74 20 7b 20 64 69 72 65 63 74 6f     set { directo
26a30 72 79 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20  ry = value; }.. 
26a40 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
26a50 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
26a60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26a70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26a80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26a90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
26aa0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
26ab0 72 69 76 61 74 65 20 73 74 72 69 6e 67 20 63 6f  rivate string co
26ac0 72 65 46 69 6c 65 4e 61 6d 65 3b 0d 0a 20 20 20  reFileName;..   
26ad0 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
26ae0 73 74 72 69 6e 67 20 43 6f 72 65 46 69 6c 65 4e  string CoreFileN
26af0 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ame..           
26b00 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
26b10 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e      get { return
26b20 20 63 6f 72 65 46 69 6c 65 4e 61 6d 65 3b 20 7d   coreFileName; }
26b30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
26b40 20 20 73 65 74 20 7b 20 63 6f 72 65 46 69 6c 65    set { coreFile
26b50 4e 61 6d 65 20 3d 20 76 61 6c 75 65 3b 20 7d 0d  Name = value; }.
26b60 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
26b70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
26b80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26b90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26ba0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26bb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26bc0 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
26bd0 20 70 72 69 76 61 74 65 20 73 74 72 69 6e 67 20   private string 
26be0 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 3b 0d 0a 20  linqFileName;.. 
26bf0 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
26c00 63 20 73 74 72 69 6e 67 20 4c 69 6e 71 46 69 6c  c string LinqFil
26c10 65 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 20  eName..         
26c20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
26c30 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75        get { retu
26c40 72 6e 20 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 3b  rn linqFileName;
26c50 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
26c60 20 20 20 20 73 65 74 20 7b 20 6c 69 6e 71 46 69      set { linqFi
26c70 6c 65 4e 61 6d 65 20 3d 20 76 61 6c 75 65 3b 20  leName = value; 
26c80 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
26c90 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
26ca0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26cb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26cc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26cd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26ce0 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
26cf0 20 20 20 70 72 69 76 61 74 65 20 73 74 72 69 6e     private strin
26d00 67 20 65 66 36 46 69 6c 65 4e 61 6d 65 3b 0d 0a  g ef6FileName;..
26d10 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
26d20 69 63 20 73 74 72 69 6e 67 20 45 66 36 46 69 6c  ic string Ef6Fil
26d30 65 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 20  eName..         
26d40 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
26d50 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75        get { retu
26d60 72 6e 20 65 66 36 46 69 6c 65 4e 61 6d 65 3b 20  rn ef6FileName; 
26d70 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
26d80 20 20 20 73 65 74 20 7b 20 65 66 36 46 69 6c 65     set { ef6File
26d90 4e 61 6d 65 20 3d 20 76 61 6c 75 65 3b 20 7d 0d  Name = value; }.
26da0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
26db0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
26dc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26dd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26de0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26df0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26e00 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
26e10 20 70 72 69 76 61 74 65 20 73 74 72 69 6e 67 20   private string 
26e20 64 65 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65  designerFileName
26e30 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ;..            p
26e40 75 62 6c 69 63 20 73 74 72 69 6e 67 20 44 65 73  ublic string Des
26e50 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65 0d 0a 20  ignerFileName.. 
26e60 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
26e70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65                ge
26e80 74 20 7b 20 72 65 74 75 72 6e 20 64 65 73 69 67  t { return desig
26e90 6e 65 72 46 69 6c 65 4e 61 6d 65 3b 20 7d 0d 0a  nerFileName; }..
26ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26eb0 73 65 74 20 7b 20 64 65 73 69 67 6e 65 72 46 69  set { designerFi
26ec0 6c 65 4e 61 6d 65 20 3d 20 76 61 6c 75 65 3b 20  leName = value; 
26ed0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
26ee0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
26ef0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26f00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26f10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26f20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26f30 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
26f40 20 20 20 70 72 69 76 61 74 65 20 73 74 72 69 6e     private strin
26f50 67 20 72 65 67 69 73 74 72 79 56 65 72 73 69 6f  g registryVersio
26f60 6e 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n;..            
26f70 70 75 62 6c 69 63 20 73 74 72 69 6e 67 20 52 65  public string Re
26f80 67 69 73 74 72 79 56 65 72 73 69 6f 6e 0d 0a 20  gistryVersion.. 
26f90 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
26fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65                ge
26fb0 74 20 7b 20 72 65 74 75 72 6e 20 72 65 67 69 73  t { return regis
26fc0 74 72 79 56 65 72 73 69 6f 6e 3b 20 7d 0d 0a 20  tryVersion; }.. 
26fd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
26fe0 65 74 20 7b 20 72 65 67 69 73 74 72 79 56 65 72  et { registryVer
26ff0 73 69 6f 6e 20 3d 20 76 61 6c 75 65 3b 20 7d 0d  sion = value; }.
27000 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
27010 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
27020 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27030 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27040 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27050 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27060 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
27070 20 70 72 69 76 61 74 65 20 73 74 72 69 6e 67 20   private string 
27080 63 6f 6e 66 69 67 56 65 72 73 69 6f 6e 3b 0d 0a  configVersion;..
27090 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
270a0 69 63 20 73 74 72 69 6e 67 20 43 6f 6e 66 69 67  ic string Config
270b0 56 65 72 73 69 6f 6e 0d 0a 20 20 20 20 20 20 20  Version..       
270c0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
270d0 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65          get { re
270e0 74 75 72 6e 20 63 6f 6e 66 69 67 56 65 72 73 69  turn configVersi
270f0 6f 6e 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  on; }..         
27100 20 20 20 20 20 20 20 73 65 74 20 7b 20 63 6f 6e         set { con
27110 66 69 67 56 65 72 73 69 6f 6e 20 3d 20 76 61 6c  figVersion = val
27120 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  ue; }..         
27130 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
27140 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
27150 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27160 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27170 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27180 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
27190 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
271a0 74 72 69 6e 67 20 76 73 56 65 72 73 69 6f 6e 53  tring vsVersionS
271b0 75 66 66 69 78 3b 0d 0a 20 20 20 20 20 20 20 20  uffix;..        
271c0 20 20 20 20 70 75 62 6c 69 63 20 73 74 72 69 6e      public strin
271d0 67 20 56 73 56 65 72 73 69 6f 6e 53 75 66 66 69  g VsVersionSuffi
271e0 78 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  x..            {
271f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
27200 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 76    get { return v
27210 73 56 65 72 73 69 6f 6e 53 75 66 66 69 78 3b 20  sVersionSuffix; 
27220 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
27230 20 20 20 73 65 74 20 7b 20 76 73 56 65 72 73 69     set { vsVersi
27240 6f 6e 53 75 66 66 69 78 20 3d 20 76 61 6c 75 65  onSuffix = value
27250 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
27260 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
27270 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
27280 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27290 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
272a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
272b0 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
272c0 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 72       private str
272d0 69 6e 67 20 64 65 62 75 67 46 6f 72 6d 61 74 3b  ing debugFormat;
272e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
272f0 62 6c 69 63 20 73 74 72 69 6e 67 20 44 65 62 75  blic string Debu
27300 67 46 6f 72 6d 61 74 0d 0a 20 20 20 20 20 20 20  gFormat..       
27310 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
27320 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65          get { re
27330 74 75 72 6e 20 64 65 62 75 67 46 6f 72 6d 61 74  turn debugFormat
27340 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
27350 20 20 20 20 20 73 65 74 20 7b 20 64 65 62 75 67       set { debug
27360 46 6f 72 6d 61 74 20 3d 20 76 61 6c 75 65 3b 20  Format = value; 
27370 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
27380 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
27390 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
273a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
273b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
273c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
273d0 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
273e0 20 20 20 70 72 69 76 61 74 65 20 73 74 72 69 6e     private strin
273f0 67 20 74 72 61 63 65 46 6f 72 6d 61 74 3b 0d 0a  g traceFormat;..
27400 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
27410 69 63 20 73 74 72 69 6e 67 20 54 72 61 63 65 46  ic string TraceF
27420 6f 72 6d 61 74 0d 0a 20 20 20 20 20 20 20 20 20  ormat..         
27430 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
27440 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75        get { retu
27450 72 6e 20 74 72 61 63 65 46 6f 72 6d 61 74 3b 20  rn traceFormat; 
27460 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
27470 20 20 20 73 65 74 20 7b 20 74 72 61 63 65 46 6f     set { traceFo
27480 72 6d 61 74 20 3d 20 76 61 6c 75 65 3b 20 7d 0d  rmat = value; }.
27490 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
274a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
274b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
274c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
274d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
274e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
274f0 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
27500 20 70 72 69 76 61 74 65 20 49 6e 73 74 61 6c 6c   private Install
27510 46 6c 61 67 73 20 69 6e 73 74 61 6c 6c 46 6c 61  Flags installFla
27520 67 73 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  gs;..           
27530 20 70 75 62 6c 69 63 20 49 6e 73 74 61 6c 6c 46   public InstallF
27540 6c 61 67 73 20 49 6e 73 74 61 6c 6c 46 6c 61 67  lags InstallFlag
27550 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  s..            {
27560 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
27570 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 69    get { return i
27580 6e 73 74 61 6c 6c 46 6c 61 67 73 3b 20 7d 0d 0a  nstallFlags; }..
27590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
275a0 73 65 74 20 7b 20 69 6e 73 74 61 6c 6c 46 6c 61  set { installFla
275b0 67 73 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20  gs = value; }.. 
275c0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
275d0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
275e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
275f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27600 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27610 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
27620 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
27630 72 69 76 61 74 65 20 50 72 6f 76 69 64 65 72 46  rivate ProviderF
27640 6c 61 67 73 20 70 72 6f 76 69 64 65 72 46 6c 61  lags providerFla
27650 67 73 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  gs;..           
27660 20 70 75 62 6c 69 63 20 50 72 6f 76 69 64 65 72   public Provider
27670 46 6c 61 67 73 20 50 72 6f 76 69 64 65 72 46 6c  Flags ProviderFl
27680 61 67 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ags..           
27690 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
276a0 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e      get { return
276b0 20 70 72 6f 76 69 64 65 72 46 6c 61 67 73 3b 20   providerFlags; 
276c0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
276d0 20 20 20 73 65 74 20 7b 20 70 72 6f 76 69 64 65     set { provide
276e0 72 46 6c 61 67 73 20 3d 20 76 61 6c 75 65 3b 20  rFlags = value; 
276f0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
27700 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
27710 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27720 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27730 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27740 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27750 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
27760 20 20 20 70 72 69 76 61 74 65 20 54 72 61 63 65     private Trace
27770 50 72 69 6f 72 69 74 79 20 64 65 62 75 67 50 72  Priority debugPr
27780 69 6f 72 69 74 79 3b 0d 0a 20 20 20 20 20 20 20  iority;..       
27790 20 20 20 20 20 70 75 62 6c 69 63 20 54 72 61 63       public Trac
277a0 65 50 72 69 6f 72 69 74 79 20 44 65 62 75 67 50  ePriority DebugP
277b0 72 69 6f 72 69 74 79 0d 0a 20 20 20 20 20 20 20  riority..       
277c0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
277d0 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65          get { re
277e0 74 75 72 6e 20 64 65 62 75 67 50 72 69 6f 72 69  turn debugPriori
277f0 74 79 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  ty; }..         
27800 20 20 20 20 20 20 20 73 65 74 20 7b 20 64 65 62         set { deb
27810 75 67 50 72 69 6f 72 69 74 79 20 3d 20 76 61 6c  ugPriority = val
27820 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  ue; }..         
27830 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
27840 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
27850 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27860 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27870 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27880 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
27890 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 54         private T
278a0 72 61 63 65 50 72 69 6f 72 69 74 79 20 74 72 61  racePriority tra
278b0 63 65 50 72 69 6f 72 69 74 79 3b 0d 0a 20 20 20  cePriority;..   
278c0 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
278d0 54 72 61 63 65 50 72 69 6f 72 69 74 79 20 54 72  TracePriority Tr
278e0 61 63 65 50 72 69 6f 72 69 74 79 0d 0a 20 20 20  acePriority..   
278f0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
27900 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20              get 
27910 7b 20 72 65 74 75 72 6e 20 74 72 61 63 65 50 72  { return tracePr
27920 69 6f 72 69 74 79 3b 20 7d 0d 0a 20 20 20 20 20  iority; }..     
27930 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b             set {
27940 20 74 72 61 63 65 50 72 69 6f 72 69 74 79 20 3d   tracePriority =
27950 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20   value; }..     
27960 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
27970 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
27980 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27990 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
279a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
279b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
279c0 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
279d0 74 65 20 62 6f 6f 6c 20 70 65 72 55 73 65 72 3b  te bool perUser;
279e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
279f0 62 6c 69 63 20 62 6f 6f 6c 20 50 65 72 55 73 65  blic bool PerUse
27a00 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  r..            {
27a10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
27a20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 70    get { return p
27a30 65 72 55 73 65 72 3b 20 7d 0d 0a 20 20 20 20 20  erUser; }..     
27a40 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b             set {
27a50 20 70 65 72 55 73 65 72 20 3d 20 76 61 6c 75 65   perUser = value
27a60 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
27a70 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
27a80 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
27a90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27aa0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27ab0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27ac0 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
27ad0 20 20 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f       private boo
27ae0 6c 20 69 6e 73 74 61 6c 6c 3b 0d 0a 20 20 20 20  l install;..    
27af0 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 62          public b
27b00 6f 6f 6c 20 49 6e 73 74 61 6c 6c 0d 0a 20 20 20  ool Install..   
27b10 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
27b20 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20              get 
27b30 7b 20 72 65 74 75 72 6e 20 69 6e 73 74 61 6c 6c  { return install
27b40 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
27b50 20 20 20 20 20 73 65 74 20 7b 20 69 6e 73 74 61       set { insta
27b60 6c 6c 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20  ll = value; }.. 
27b70 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
27b80 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
27b90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27ba0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27bb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27bc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
27bd0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
27be0 72 69 76 61 74 65 20 62 6f 6f 6c 20 77 6f 77 36  rivate bool wow6
27bf0 34 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  4;..            
27c00 70 75 62 6c 69 63 20 62 6f 6f 6c 20 57 6f 77 36  public bool Wow6
27c10 34 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  4..            {
27c20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
27c30 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 77    get { return w
27c40 6f 77 36 34 3b 20 7d 0d 0a 20 20 20 20 20 20 20  ow64; }..       
27c50 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 77           set { w
27c60 6f 77 36 34 20 3d 20 76 61 6c 75 65 3b 20 7d 0d  ow64 = value; }.
27c70 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
27c80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
27c90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27ca0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27cb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27cc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27cd0 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
27ce0 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 6e 6f   private bool no
27cf0 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 3b 0d  RuntimeVersion;.
27d00 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
27d10 6c 69 63 20 62 6f 6f 6c 20 4e 6f 52 75 6e 74 69  lic bool NoRunti
27d20 6d 65 56 65 72 73 69 6f 6e 0d 0a 20 20 20 20 20  meVersion..     
27d30 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
27d40 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20            get { 
27d50 72 65 74 75 72 6e 20 6e 6f 52 75 6e 74 69 6d 65  return noRuntime
27d60 56 65 72 73 69 6f 6e 3b 20 7d 0d 0a 20 20 20 20  Version; }..    
27d70 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20              set 
27d80 7b 20 6e 6f 52 75 6e 74 69 6d 65 56 65 72 73 69  { noRuntimeVersi
27d90 6f 6e 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20  on = value; }.. 
27da0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
27db0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
27dc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27dd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27de0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27df0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
27e00 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
27e10 72 69 76 61 74 65 20 62 6f 6f 6c 20 6e 6f 44 65  rivate bool noDe
27e20 73 6b 74 6f 70 3b 0d 0a 20 20 20 20 20 20 20 20  sktop;..        
27e30 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20      public bool 
27e40 4e 6f 44 65 73 6b 74 6f 70 0d 0a 20 20 20 20 20  NoDesktop..     
27e50 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
27e60 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20            get { 
27e70 72 65 74 75 72 6e 20 6e 6f 44 65 73 6b 74 6f 70  return noDesktop
27e80 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
27e90 20 20 20 20 20 73 65 74 20 7b 20 6e 6f 44 65 73       set { noDes
27ea0 6b 74 6f 70 20 3d 20 76 61 6c 75 65 3b 20 7d 0d  ktop = value; }.
27eb0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
27ec0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
27ed0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27ee0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27ef0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27f00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27f10 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
27f20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 6e 6f   private bool no
27f30 43 6f 6d 70 61 63 74 3b 0d 0a 20 20 20 20 20 20  Compact;..      
27f40 20 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f        public boo
27f50 6c 20 4e 6f 43 6f 6d 70 61 63 74 0d 0a 20 20 20  l NoCompact..   
27f60 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
27f70 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20              get 
27f80 7b 20 72 65 74 75 72 6e 20 6e 6f 43 6f 6d 70 61  { return noCompa
27f90 63 74 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  ct; }..         
27fa0 20 20 20 20 20 20 20 73 65 74 20 7b 20 6e 6f 43         set { noC
27fb0 6f 6d 70 61 63 74 20 3d 20 76 61 6c 75 65 3b 20  ompact = value; 
27fc0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
27fd0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
27fe0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27ff0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28000 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28010 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28020 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
28030 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20     private bool 
28040 6e 6f 4e 65 74 46 78 32 30 3b 0d 0a 20 20 20 20  noNetFx20;..    
28050 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 62          public b
28060 6f 6f 6c 20 4e 6f 4e 65 74 46 78 32 30 0d 0a 20  ool NoNetFx20.. 
28070 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
28080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65                ge
28090 74 20 7b 20 72 65 74 75 72 6e 20 6e 6f 4e 65 74  t { return noNet
280a0 46 78 32 30 3b 20 7d 0d 0a 20 20 20 20 20 20 20  Fx20; }..       
280b0 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 6e           set { n
280c0 6f 4e 65 74 46 78 32 30 20 3d 20 76 61 6c 75 65  oNetFx20 = value
280d0 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
280e0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
280f0 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
28100 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28110 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28120 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28130 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
28140 20 20 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f       private boo
28150 6c 20 6e 6f 4e 65 74 46 78 33 35 3b 0d 0a 20 20  l noNetFx35;..  
28160 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
28170 20 62 6f 6f 6c 20 4e 6f 4e 65 74 46 78 33 35 0d   bool NoNetFx35.
28180 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
28190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
281a0 67 65 74 20 7b 20 72 65 74 75 72 6e 20 6e 6f 4e  get { return noN
281b0 65 74 46 78 33 35 3b 20 7d 0d 0a 20 20 20 20 20  etFx35; }..     
281c0 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b             set {
281d0 20 6e 6f 4e 65 74 46 78 33 35 20 3d 20 76 61 6c   noNetFx35 = val
281e0 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  ue; }..         
281f0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
28200 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
28210 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28220 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28230 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28240 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
28250 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 62         private b
28260 6f 6f 6c 20 6e 6f 4e 65 74 46 78 34 30 3b 0d 0a  ool noNetFx40;..
28270 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
28280 69 63 20 62 6f 6f 6c 20 4e 6f 4e 65 74 46 78 34  ic bool NoNetFx4
28290 30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  0..            {
282a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
282b0 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 6e    get { return n
282c0 6f 4e 65 74 46 78 34 30 3b 20 7d 0d 0a 20 20 20  oNetFx40; }..   
282d0 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74               set
282e0 20 7b 20 6e 6f 4e 65 74 46 78 34 30 20 3d 20 76   { noNetFx40 = v
282f0 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20  alue; }..       
28300 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
28310 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
28320 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28330 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28340 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28350 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
28360 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65           private
28370 20 62 6f 6f 6c 20 6e 6f 4e 65 74 46 78 34 35 3b   bool noNetFx45;
28380 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
28390 62 6c 69 63 20 62 6f 6f 6c 20 4e 6f 4e 65 74 46  blic bool NoNetF
283a0 78 34 35 0d 0a 20 20 20 20 20 20 20 20 20 20 20  x45..           
283b0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
283c0 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e      get { return
283d0 20 6e 6f 4e 65 74 46 78 34 35 3b 20 7d 0d 0a 20   noNetFx45; }.. 
283e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
283f0 65 74 20 7b 20 6e 6f 4e 65 74 46 78 34 35 20 3d  et { noNetFx45 =
28400 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20   value; }..     
28410 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
28420 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
28430 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28440 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28450 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28460 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
28470 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
28480 74 65 20 62 6f 6f 6c 20 6e 6f 4e 65 74 46 78 34  te bool noNetFx4
28490 35 31 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  51;..           
284a0 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 4e 6f 4e   public bool NoN
284b0 65 74 46 78 34 35 31 0d 0a 20 20 20 20 20 20 20  etFx451..       
284c0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
284d0 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65          get { re
284e0 74 75 72 6e 20 6e 6f 4e 65 74 46 78 34 35 31 3b  turn noNetFx451;
284f0 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
28500 20 20 20 20 73 65 74 20 7b 20 6e 6f 4e 65 74 46      set { noNetF
28510 78 34 35 31 20 3d 20 76 61 6c 75 65 3b 20 7d 0d  x451 = value; }.
28520 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
28530 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
28540 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28550 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28560 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28570 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28580 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
28590 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 6e 6f   private bool no
285a0 4e 65 74 46 78 34 35 32 3b 0d 0a 20 20 20 20 20  NetFx452;..     
285b0 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f         public bo
285c0 6f 6c 20 4e 6f 4e 65 74 46 78 34 35 32 0d 0a 20  ol NoNetFx452.. 
285d0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
285e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65                ge
285f0 74 20 7b 20 72 65 74 75 72 6e 20 6e 6f 4e 65 74  t { return noNet
28600 46 78 34 35 32 3b 20 7d 0d 0a 20 20 20 20 20 20  Fx452; }..      
28610 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20            set { 
28620 6e 6f 4e 65 74 46 78 34 35 32 20 3d 20 76 61 6c  noNetFx452 = val
28630 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  ue; }..         
28640 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
28650 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
28660 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28670 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28680 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28690 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
286a0 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 62         private b
286b0 6f 6f 6c 20 6e 6f 4e 65 74 46 78 34 36 3b 0d 0a  ool noNetFx46;..
286c0 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
286d0 69 63 20 62 6f 6f 6c 20 4e 6f 4e 65 74 46 78 34  ic bool NoNetFx4
286e0 36 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  6..            {
286f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
28700 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 6e    get { return n
28710 6f 4e 65 74 46 78 34 36 3b 20 7d 0d 0a 20 20 20  oNetFx46; }..   
28720 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74               set
28730 20 7b 20 6e 6f 4e 65 74 46 78 34 36 20 3d 20 76   { noNetFx46 = v
28740 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20  alue; }..       
28750 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
28760 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
28770 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28780 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28790 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
287a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
287b0 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65           private
287c0 20 62 6f 6f 6c 20 6e 6f 56 73 32 30 30 35 3b 0d   bool noVs2005;.
287d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
287e0 6c 69 63 20 62 6f 6f 6c 20 4e 6f 56 73 32 30 30  lic bool NoVs200
287f0 35 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  5..            {
28800 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
28810 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 6e    get { return n
28820 6f 56 73 32 30 30 35 3b 20 7d 0d 0a 20 20 20 20  oVs2005; }..    
28830 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20              set 
28840 7b 20 6e 6f 56 73 32 30 30 35 20 3d 20 76 61 6c  { noVs2005 = val
28850 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  ue; }..         
28860 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
28870 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
28880 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28890 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
288a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
288b0 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
288c0 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 62         private b
288d0 6f 6f 6c 20 6e 6f 56 73 32 30 30 38 3b 0d 0a 20  ool noVs2008;.. 
288e0 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
288f0 63 20 62 6f 6f 6c 20 4e 6f 56 73 32 30 30 38 0d  c bool NoVs2008.
28900 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
28910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28920 67 65 74 20 7b 20 72 65 74 75 72 6e 20 6e 6f 56  get { return noV
28930 73 32 30 30 38 3b 20 7d 0d 0a 20 20 20 20 20 20  s2008; }..      
28940 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20            set { 
28950 6e 6f 56 73 32 30 30 38 20 3d 20 76 61 6c 75 65  noVs2008 = value
28960 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
28970 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
28980 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
28990 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
289a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
289b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
289c0 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
289d0 20 20 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f       private boo
289e0 6c 20 6e 6f 56 73 32 30 31 30 3b 0d 0a 20 20 20  l noVs2010;..   
289f0 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
28a00 62 6f 6f 6c 20 4e 6f 56 73 32 30 31 30 0d 0a 20  bool NoVs2010.. 
28a10 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
28a20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65                ge
28a30 74 20 7b 20 72 65 74 75 72 6e 20 6e 6f 56 73 32  t { return noVs2
28a40 30 31 30 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  010; }..        
28a50 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 6e 6f          set { no
28a60 56 73 32 30 31 30 20 3d 20 76 61 6c 75 65 3b 20  Vs2010 = value; 
28a70 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
28a80 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
28a90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28aa0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28ab0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28ac0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28ad0 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
28ae0 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20     private bool 
28af0 6e 6f 56 73 32 30 31 32 3b 0d 0a 20 20 20 20 20  noVs2012;..     
28b00 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f         public bo
28b10 6f 6c 20 4e 6f 56 73 32 30 31 32 0d 0a 20 20 20  ol NoVs2012..   
28b20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
28b30 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20              get 
28b40 7b 20 72 65 74 75 72 6e 20 6e 6f 56 73 32 30 31  { return noVs201
28b50 32 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  2; }..          
28b60 20 20 20 20 20 20 73 65 74 20 7b 20 6e 6f 56 73        set { noVs
28b70 32 30 31 32 20 3d 20 76 61 6c 75 65 3b 20 7d 0d  2012 = value; }.
28b80 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
28b90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
28ba0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28bb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28bc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28bd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28be0 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
28bf0 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 6e 6f   private bool no
28c00 56 73 32 30 31 33 3b 0d 0a 20 20 20 20 20 20 20  Vs2013;..       
28c10 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c       public bool
28c20 20 4e 6f 56 73 32 30 31 33 0d 0a 20 20 20 20 20   NoVs2013..     
28c30 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
28c40 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20            get { 
28c50 72 65 74 75 72 6e 20 6e 6f 56 73 32 30 31 33 3b  return noVs2013;
28c60 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
28c70 20 20 20 20 73 65 74 20 7b 20 6e 6f 56 73 32 30      set { noVs20
28c80 31 33 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20  13 = value; }.. 
28c90 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
28ca0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
28cb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28cc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28cd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28ce0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
28cf0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
28d00 72 69 76 61 74 65 20 62 6f 6f 6c 20 6e 6f 56 73  rivate bool noVs
28d10 32 30 31 35 3b 0d 0a 20 20 20 20 20 20 20 20 20  2015;..         
28d20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 4e     public bool N
28d30 6f 56 73 32 30 31 35 0d 0a 20 20 20 20 20 20 20  oVs2015..       
28d40 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
28d50 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65          get { re
28d60 74 75 72 6e 20 6e 6f 56 73 32 30 31 35 3b 20 7d  turn noVs2015; }
28d70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
28d80 20 20 73 65 74 20 7b 20 6e 6f 56 73 32 30 31 35    set { noVs2015
28d90 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20   = value; }..   
28da0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
28db0 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
28dc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28dd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28de0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28df0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
28e00 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69  .            pri
28e10 76 61 74 65 20 62 6f 6f 6c 20 6e 6f 54 72 61 63  vate bool noTrac
28e20 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
28e30 70 75 62 6c 69 63 20 62 6f 6f 6c 20 4e 6f 54 72  public bool NoTr
28e40 61 63 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ace..           
28e50 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
28e60 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e      get { return
28e70 20 6e 6f 54 72 61 63 65 3b 20 7d 0d 0a 20 20 20   noTrace; }..   
28e80 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74               set
28e90 20 7b 20 6e 6f 54 72 61 63 65 20 3d 20 76 61 6c   { noTrace = val
28ea0 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  ue; }..         
28eb0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
28ec0 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
28ed0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28ee0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28ef0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28f00 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
28f10 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 62         private b
28f20 6f 6f 6c 20 6e 6f 43 6f 6e 73 6f 6c 65 3b 0d 0a  ool noConsole;..
28f30 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
28f40 69 63 20 62 6f 6f 6c 20 4e 6f 43 6f 6e 73 6f 6c  ic bool NoConsol
28f50 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  e..            {
28f60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
28f70 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 6e    get { return n
28f80 6f 43 6f 6e 73 6f 6c 65 3b 20 7d 0d 0a 20 20 20  oConsole; }..   
28f90 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74               set
28fa0 20 7b 20 6e 6f 43 6f 6e 73 6f 6c 65 20 3d 20 76   { noConsole = v
28fb0 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20  alue; }..       
28fc0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
28fd0 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
28fe0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28ff0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29000 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29010 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
29020 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65           private
29030 20 62 6f 6f 6c 20 6e 6f 4c 6f 67 3b 0d 0a 20 20   bool noLog;..  
29040 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
29050 20 62 6f 6f 6c 20 4e 6f 4c 6f 67 0d 0a 20 20 20   bool NoLog..   
29060 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
29070 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20              get 
29080 7b 20 72 65 74 75 72 6e 20 6e 6f 4c 6f 67 3b 20  { return noLog; 
29090 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
290a0 20 20 20 73 65 74 20 7b 20 6e 6f 4c 6f 67 20 3d     set { noLog =
290b0 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20   value; }..     
290c0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
290d0 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
290e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
290f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29100 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29110 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
29120 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
29130 74 65 20 62 6f 6f 6c 20 74 68 72 6f 77 4f 6e 4d  te bool throwOnM
29140 69 73 73 69 6e 67 3b 0d 0a 20 20 20 20 20 20 20  issing;..       
29150 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c       public bool
29160 20 54 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 0d   ThrowOnMissing.
29170 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
29180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29190 67 65 74 20 7b 20 72 65 74 75 72 6e 20 74 68 72  get { return thr
291a0 6f 77 4f 6e 4d 69 73 73 69 6e 67 3b 20 7d 0d 0a  owOnMissing; }..
291b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
291c0 73 65 74 20 7b 20 74 68 72 6f 77 4f 6e 4d 69 73  set { throwOnMis
291d0 73 69 6e 67 20 3d 20 76 61 6c 75 65 3b 20 7d 0d  sing = value; }.
291e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
291f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
29200 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29210 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29220 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29230 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29240 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
29250 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 77 68   private bool wh
29260 61 74 49 66 3b 0d 0a 20 20 20 20 20 20 20 20 20  atIf;..         
29270 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 57     public bool W
29280 68 61 74 49 66 0d 0a 20 20 20 20 20 20 20 20 20  hatIf..         
29290 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
292a0 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75        get { retu
292b0 72 6e 20 77 68 61 74 49 66 3b 20 7d 0d 0a 20 20  rn whatIf; }..  
292c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65                se
292d0 74 20 7b 20 77 68 61 74 49 66 20 3d 20 76 61 6c  t { whatIf = val
292e0 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  ue; }..         
292f0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
29300 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
29310 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29320 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29330 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29340 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
29350 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 62         private b
29360 6f 6f 6c 20 64 65 62 75 67 3b 0d 0a 20 20 20 20  ool debug;..    
29370 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 62          public b
29380 6f 6f 6c 20 44 65 62 75 67 0d 0a 20 20 20 20 20  ool Debug..     
29390 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
293a0 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20            get { 
293b0 72 65 74 75 72 6e 20 64 65 62 75 67 3b 20 7d 0d  return debug; }.
293c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
293d0 20 73 65 74 20 7b 20 64 65 62 75 67 20 3d 20 76   set { debug = v
293e0 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20  alue; }..       
293f0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
29400 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
29410 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29420 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29430 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29440 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
29450 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65           private
29460 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 3b 0d 0a   bool verbose;..
29470 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
29480 69 63 20 62 6f 6f 6c 20 56 65 72 62 6f 73 65 0d  ic bool Verbose.
29490 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
294a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
294b0 67 65 74 20 7b 20 72 65 74 75 72 6e 20 76 65 72  get { return ver
294c0 62 6f 73 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20  bose; }..       
294d0 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 76           set { v
294e0 65 72 62 6f 73 65 20 3d 20 76 61 6c 75 65 3b 20  erbose = value; 
294f0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
29500 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
29510 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29520 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29530 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29540 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29550 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
29560 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20     private bool 
29570 63 6f 6e 66 69 72 6d 3b 0d 0a 20 20 20 20 20 20  confirm;..      
29580 20 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f        public boo
29590 6c 20 43 6f 6e 66 69 72 6d 0d 0a 20 20 20 20 20  l Confirm..     
295a0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
295b0 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20            get { 
295c0 72 65 74 75 72 6e 20 63 6f 6e 66 69 72 6d 3b 20  return confirm; 
295d0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
295e0 20 20 20 73 65 74 20 7b 20 63 6f 6e 66 69 72 6d     set { confirm
295f0 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20   = value; }..   
29600 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
29610 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
29620 6f 6e 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20  on..        }.. 
29630 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f         #endregio
29640 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  n....        ///
29650 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29660 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29670 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29680 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29690 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
296a0 23 72 65 67 69 6f 6e 20 46 72 61 6d 65 77 6f 72  #region Framewor
296b0 6b 4c 69 73 74 20 43 6c 61 73 73 0d 0a 20 20 20  kList Class..   
296c0 20 20 20 20 20 70 72 69 76 61 74 65 20 73 65 61       private sea
296d0 6c 65 64 20 63 6c 61 73 73 20 46 72 61 6d 65 77  led class Framew
296e0 6f 72 6b 4c 69 73 74 0d 0a 20 20 20 20 20 20 20  orkList..       
296f0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
29700 23 72 65 67 69 6f 6e 20 50 75 62 6c 69 63 20 43  #region Public C
29710 6f 6e 73 74 72 75 63 74 6f 72 73 0d 0a 20 20 20  onstructors..   
29720 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
29730 46 72 61 6d 65 77 6f 72 6b 4c 69 73 74 28 29 0d  FrameworkList().
29740 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
29750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29760 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a  // do nothing...
29770 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
29780 20 20 20 20 20 20 20 20 20 20 20 23 65 6e 64 72             #endr
29790 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20  egion....       
297a0 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
297b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
297c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
297d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
297e0 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
297f0 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20          #region 
29800 50 75 62 6c 69 63 20 4d 65 74 68 6f 64 73 0d 0a  Public Methods..
29810 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76              priv
29820 61 74 65 20 4d 6f 63 6b 52 65 67 69 73 74 72 79  ate MockRegistry
29830 4b 65 79 20 72 6f 6f 74 4b 65 79 3b 0d 0a 20 20  Key rootKey;..  
29840 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
29850 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79   MockRegistryKey
29860 20 52 6f 6f 74 4b 65 79 0d 0a 20 20 20 20 20 20   RootKey..      
29870 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
29880 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72           get { r
29890 65 74 75 72 6e 20 72 6f 6f 74 4b 65 79 3b 20 7d  eturn rootKey; }
298a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
298b0 20 20 73 65 74 20 7b 20 72 6f 6f 74 4b 65 79 20    set { rootKey 
298c0 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20  = value; }..    
298d0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
298e0 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
298f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29900 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29910 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29920 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
29930 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76              priv
29940 61 74 65 20 53 74 72 69 6e 67 4c 69 73 74 20 6e  ate StringList n
29950 61 6d 65 73 3b 0d 0a 20 20 20 20 20 20 20 20 20  ames;..         
29960 20 20 20 70 75 62 6c 69 63 20 53 74 72 69 6e 67     public String
29970 4c 69 73 74 20 4e 61 6d 65 73 0d 0a 20 20 20 20  List Names..    
29980 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
29990 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b             get {
299a0 20 72 65 74 75 72 6e 20 6e 61 6d 65 73 3b 20 7d   return names; }
299b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
299c0 20 20 73 65 74 20 7b 20 6e 61 6d 65 73 20 3d 20    set { names = 
299d0 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20  value; }..      
299e0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
299f0 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
29a00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29a10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29a20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29a30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
29a40 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
29a50 65 20 56 65 72 73 69 6f 6e 4d 61 70 20 76 65 72  e VersionMap ver
29a60 73 69 6f 6e 73 3b 0d 0a 20 20 20 20 20 20 20 20  sions;..        
29a70 20 20 20 20 70 75 62 6c 69 63 20 56 65 72 73 69      public Versi
29a80 6f 6e 4d 61 70 20 56 65 72 73 69 6f 6e 73 0d 0a  onMap Versions..
29a90 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
29aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67                 g
29ab0 65 74 20 7b 20 72 65 74 75 72 6e 20 76 65 72 73  et { return vers
29ac0 69 6f 6e 73 3b 20 7d 0d 0a 20 20 20 20 20 20 20  ions; }..       
29ad0 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 76           set { v
29ae0 65 72 73 69 6f 6e 73 20 3d 20 76 61 6c 75 65 3b  ersions = value;
29af0 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
29b00 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
29b10 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
29b20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29b30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29b40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29b50 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
29b60 20 20 20 20 70 72 69 76 61 74 65 20 53 74 72 69      private Stri
29b70 6e 67 4c 69 73 74 20 70 6c 61 74 66 6f 72 6d 4e  ngList platformN
29b80 61 6d 65 73 3b 0d 0a 20 20 20 20 20 20 20 20 20  ames;..         
29b90 20 20 20 70 75 62 6c 69 63 20 53 74 72 69 6e 67     public String
29ba0 4c 69 73 74 20 50 6c 61 74 66 6f 72 6d 4e 61 6d  List PlatformNam
29bb0 65 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  es..            
29bc0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
29bd0 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20     get { return 
29be0 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 73 3b 20 7d  platformNames; }
29bf0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
29c00 20 20 73 65 74 20 7b 20 70 6c 61 74 66 6f 72 6d    set { platform
29c10 4e 61 6d 65 73 20 3d 20 76 61 6c 75 65 3b 20 7d  Names = value; }
29c20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
29c30 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e  .            #en
29c40 64 72 65 67 69 6f 6e 0d 0a 20 20 20 20 20 20 20  dregion..       
29c50 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64   }..        #end
29c60 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20  region....      
29c70 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
29c80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29c90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29ca0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29cb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
29cc0 20 20 20 20 20 23 72 65 67 69 6f 6e 20 56 73 4c       #region VsL
29cd0 69 73 74 20 43 6c 61 73 73 0d 0a 20 20 20 20 20  ist Class..     
29ce0 20 20 20 70 72 69 76 61 74 65 20 73 65 61 6c 65     private seale
29cf0 64 20 63 6c 61 73 73 20 56 73 4c 69 73 74 0d 0a  d class VsList..
29d00 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
29d10 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50         #region P
29d20 75 62 6c 69 63 20 43 6f 6e 73 74 72 75 63 74 6f  ublic Constructo
29d30 72 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  rs..            
29d40 70 75 62 6c 69 63 20 56 73 4c 69 73 74 28 29 0d  public VsList().
29d50 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
29d60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29d70 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a  // do nothing...
29d80 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
29d90 20 20 20 20 20 20 20 20 20 20 20 23 65 6e 64 72             #endr
29da0 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20  egion....       
29db0 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
29dc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29dd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29de0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29df0 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
29e00 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20          #region 
29e10 50 75 62 6c 69 63 20 50 72 6f 70 65 72 74 69 65  Public Propertie
29e20 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  s..            p
29e30 72 69 76 61 74 65 20 4d 6f 63 6b 52 65 67 69 73  rivate MockRegis
29e40 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79 3b 0d  tryKey rootKey;.
29e50 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
29e60 6c 69 63 20 4d 6f 63 6b 52 65 67 69 73 74 72 79  lic MockRegistry
29e70 4b 65 79 20 52 6f 6f 74 4b 65 79 0d 0a 20 20 20  Key RootKey..   
29e80 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
29e90 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20              get 
29ea0 7b 20 72 65 74 75 72 6e 20 72 6f 6f 74 4b 65 79  { return rootKey
29eb0 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
29ec0 20 20 20 20 20 73 65 74 20 7b 20 72 6f 6f 74 4b       set { rootK
29ed0 65 79 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20  ey = value; }.. 
29ee0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
29ef0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
29f00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29f10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29f20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29f30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
29f40 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
29f50 72 69 76 61 74 65 20 56 65 72 73 69 6f 6e 4c 69  rivate VersionLi
29f60 73 74 20 76 65 72 73 69 6f 6e 73 3b 0d 0a 20 20  st versions;..  
29f70 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
29f80 20 56 65 72 73 69 6f 6e 4c 69 73 74 20 56 65 72   VersionList Ver
29f90 73 69 6f 6e 73 0d 0a 20 20 20 20 20 20 20 20 20  sions..         
29fa0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
29fb0 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75        get { retu
29fc0 72 6e 20 76 65 72 73 69 6f 6e 73 3b 20 7d 0d 0a  rn versions; }..
29fd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29fe0 73 65 74 20 7b 20 76 65 72 73 69 6f 6e 73 20 3d  set { versions =
29ff0 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20   value; }..     
2a000 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
2a010 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
2a020 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..   
2a030 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d       #endregion.
2a040 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67  .        #endreg
2a050 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f  ion....        /
2a060 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a070 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a080 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a090 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a0a0 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
2a0b0 20 20 23 72 65 67 69 6f 6e 20 50 72 69 76 61 74    #region Privat
2a0c0 65 20 43 6f 6e 73 74 61 6e 74 20 44 61 74 61 0d  e Constant Data.
2a0d0 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e  .        #region
2a0e0 20 50 61 63 6b 61 67 65 20 26 20 50 72 6f 76 69   Package & Provi
2a0f0 64 65 72 20 4e 61 6d 65 73 0d 0a 20 20 20 20 20  der Names..     
2a100 20 20 20 70 72 69 76 61 74 65 20 63 6f 6e 73 74     private const
2a110 20 73 74 72 69 6e 67 20 43 6f 72 65 46 69 6c 65   string CoreFile
2a120 4e 61 6d 65 20 3d 20 22 53 79 73 74 65 6d 2e 44  Name = "System.D
2a130 61 74 61 2e 53 51 4c 69 74 65 2e 64 6c 6c 22 3b  ata.SQLite.dll";
2a140 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
2a150 65 20 63 6f 6e 73 74 20 73 74 72 69 6e 67 20 4c  e const string L
2a160 69 6e 71 46 69 6c 65 4e 61 6d 65 20 3d 20 22 53  inqFileName = "S
2a170 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74  ystem.Data.SQLit
2a180 65 2e 4c 69 6e 71 2e 64 6c 6c 22 3b 0d 0a 20 20  e.Linq.dll";..  
2a190 20 20 20 20 20 20 70 72 69 76 61 74 65 20 63 6f        private co
2a1a0 6e 73 74 20 73 74 72 69 6e 67 20 45 66 36 46 69  nst string Ef6Fi
2a1b0 6c 65 4e 61 6d 65 20 3d 20 22 53 79 73 74 65 6d  leName = "System
2a1c0 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 45 46 36  .Data.SQLite.EF6
2a1d0 2e 64 6c 6c 22 3b 0d 0a 20 20 20 20 20 20 20 20  .dll";..        
2a1e0 70 72 69 76 61 74 65 20 63 6f 6e 73 74 20 73 74  private const st
2a1f0 72 69 6e 67 20 44 65 73 69 67 6e 65 72 46 69 6c  ring DesignerFil
2a200 65 4e 61 6d 65 20 3d 20 22 53 51 4c 69 74 65 2e  eName = "SQLite.
2a210 44 65 73 69 67 6e 65 72 2e 64 6c 6c 22 3b 0d 0a  Designer.dll";..
2a220 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
2a230 63 6f 6e 73 74 20 73 74 72 69 6e 67 20 50 72 6f  const string Pro
2a240 76 69 64 65 72 4e 61 6d 65 20 3d 20 22 53 51 4c  viderName = "SQL
2a250 69 74 65 20 44 61 74 61 20 50 72 6f 76 69 64 65  ite Data Provide
2a260 72 22 3b 0d 0a 20 20 20 20 20 20 20 20 70 72 69  r";..        pri
2a270 76 61 74 65 20 63 6f 6e 73 74 20 73 74 72 69 6e  vate const strin
2a280 67 20 50 72 6f 6a 65 63 74 4e 61 6d 65 20 3d 20  g ProjectName = 
2a290 22 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c  "System.Data.SQL
2a2a0 69 74 65 22 3b 0d 0a 20 20 20 20 20 20 20 20 70  ite";..        p
2a2b0 72 69 76 61 74 65 20 63 6f 6e 73 74 20 73 74 72  rivate const str
2a2c0 69 6e 67 20 4c 65 67 61 63 79 50 72 6f 6a 65 63  ing LegacyProjec
2a2d0 74 4e 61 6d 65 20 3d 20 22 53 51 4c 69 74 65 22  tName = "SQLite"
2a2e0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ;....        ///
2a2f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a300 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a310 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a320 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a330 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
2a340 70 72 69 76 61 74 65 20 63 6f 6e 73 74 20 73 74  private const st
2a350 72 69 6e 67 20 44 65 73 63 72 69 70 74 69 6f 6e  ring Description
2a360 20 3d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   =..            
2a370 22 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72 6b 20  ".NET Framework 
2a380 44 61 74 61 20 50 72 6f 76 69 64 65 72 20 66 6f  Data Provider fo
2a390 72 20 53 51 4c 69 74 65 22 3b 0d 0a 20 20 20 20  r SQLite";..    
2a3a0 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
2a3b0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
2a3c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a3d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a3e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a3f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a400 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69  /....        pri
2a410 76 61 74 65 20 63 6f 6e 73 74 20 73 74 72 69 6e  vate const strin
2a420 67 20 43 4c 52 76 32 49 6d 61 67 65 52 75 6e 74  g CLRv2ImageRunt
2a430 69 6d 65 56 65 72 73 69 6f 6e 20 3d 20 22 76 32  imeVersion = "v2
2a440 2e 30 2e 35 30 37 32 37 22 3b 0d 0a 20 20 20 20  .0.50727";..    
2a450 20 20 20 20 70 72 69 76 61 74 65 20 63 6f 6e 73      private cons
2a460 74 20 73 74 72 69 6e 67 20 43 4c 52 76 34 49 6d  t string CLRv4Im
2a470 61 67 65 52 75 6e 74 69 6d 65 56 65 72 73 69 6f  ageRuntimeVersio
2a480 6e 20 3d 20 22 76 34 2e 30 2e 33 30 33 31 39 22  n = "v4.0.30319"
2a490 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ;....        ///
2a4a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a4b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a4c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a4d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a4e0 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
2a4f0 70 72 69 76 61 74 65 20 63 6f 6e 73 74 20 73 74  private const st
2a500 72 69 6e 67 20 53 79 73 74 65 6d 45 66 36 41 73  ring SystemEf6As
2a510 73 65 6d 62 6c 79 4e 61 6d 65 20 3d 20 22 45 6e  semblyName = "En
2a520 74 69 74 79 46 72 61 6d 65 77 6f 72 6b 2c 20 22  tityFramework, "
2a530 20 2b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   +..            
2a540 22 56 65 72 73 69 6f 6e 3d 36 2e 30 2e 30 2e 30  "Version=6.0.0.0
2a550 2c 20 43 75 6c 74 75 72 65 3d 6e 65 75 74 72 61  , Culture=neutra
2a560 6c 2c 20 50 75 62 6c 69 63 4b 65 79 54 6f 6b 65  l, PublicKeyToke
2a570 6e 3d 62 37 37 61 35 63 35 36 31 39 33 34 65 30  n=b77a5c561934e0
2a580 38 39 22 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  89";....        
2a590 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a5a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a5b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a5c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a5d0 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
2a5e0 20 20 20 70 72 69 76 61 74 65 20 63 6f 6e 73 74     private const
2a5f0 20 73 74 72 69 6e 67 20 4e 61 6d 65 41 6e 64 56   string NameAndV
2a600 61 6c 75 65 46 6f 72 6d 61 74 20 3d 20 22 7b 30  alueFormat = "{0
2a610 7d 3a 20 7b 31 7d 22 3b 0d 0a 20 20 20 20 20 20  }: {1}";..      
2a620 20 20 70 72 69 76 61 74 65 20 63 6f 6e 73 74 20    private const 
2a630 73 74 72 69 6e 67 20 4c 6f 67 46 69 6c 65 53 75  string LogFileSu
2a640 66 66 69 78 20 3d 20 22 2e 6c 6f 67 22 3b 0d 0a  ffix = ".log";..
2a650 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
2a660 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a670 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a680 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a690 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a6a0 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69  /....        pri
2a6b0 76 61 74 65 20 63 6f 6e 73 74 20 73 74 72 69 6e  vate const strin
2a6c0 67 20 56 73 44 65 76 45 6e 76 53 65 74 75 70 46  g VsDevEnvSetupF
2a6d0 6f 72 6d 61 74 20 3d 20 22 7b 30 7d 3a 20 7b 31  ormat = "{0}: {1
2a6e0 7d 22 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f  }";....        /
2a6f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a700 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a710 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a720 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a730 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
2a740 20 20 70 72 69 76 61 74 65 20 63 6f 6e 73 74 20    private const 
2a750 73 74 72 69 6e 67 20 52 6f 6f 74 4b 65 79 4e 61  string RootKeyNa
2a760 6d 65 20 3d 20 22 53 6f 66 74 77 61 72 65 22 3b  me = "Software";
2a770 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
2a780 65 20 63 6f 6e 73 74 20 73 74 72 69 6e 67 20 57  e const string W
2a790 6f 77 36 34 53 75 62 4b 65 79 4e 61 6d 65 20 3d  ow64SubKeyName =
2a7a0 20 22 57 6f 77 36 34 33 32 4e 6f 64 65 22 3b 0d   "Wow6432Node";.
2a7b0 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
2a7c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a7d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a7e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a7f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a800 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  //....        //
2a810 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54  ..        // NOT
2a820 45 3a 20 54 68 65 20 2e 4e 45 54 20 46 72 61 6d  E: The .NET Fram
2a830 65 77 6f 72 6b 20 68 61 73 20 62 6f 74 68 20 33  ework has both 3
2a840 32 2d 62 69 74 20 61 6e 64 20 36 34 2d 62 69 74  2-bit and 64-bit
2a850 20 65 64 69 74 69 6f 6e 73 2e 0d 0a 20 20 20 20   editions...    
2a860 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
2a870 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 72  private static r
2a880 65 61 64 6f 6e 6c 79 20 62 6f 6f 6c 20 4e 65 74  eadonly bool Net
2a890 46 78 49 73 33 32 42 69 74 4f 6e 6c 79 20 3d 20  FxIs32BitOnly = 
2a8a0 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  false;....      
2a8b0 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
2a8c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a8d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a8e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a8f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
2a900 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
2a910 20 2f 2f 20 4e 4f 54 45 3a 20 46 6f 72 20 6e 6f   // NOTE: For no
2a920 77 2c 20 56 69 73 75 61 6c 20 53 74 75 64 69 6f  w, Visual Studio
2a930 20 69 73 20 61 6c 77 61 79 73 20 61 20 33 32 2d   is always a 32-
2a940 62 69 74 20 61 70 70 6c 69 63 61 74 69 6f 6e 2e  bit application.
2a950 0d 0a 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20  ..        //..  
2a960 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74        private st
2a970 61 74 69 63 20 72 65 61 64 6f 6e 6c 79 20 62 6f  atic readonly bo
2a980 6f 6c 20 56 73 49 73 33 32 42 69 74 4f 6e 6c 79  ol VsIs32BitOnly
2a990 20 3d 20 74 72 75 65 3b 0d 0a 0d 0a 20 20 20 20   = true;....    
2a9a0 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
2a9b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a9c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a9d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a9e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
2a9f0 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
2aa00 74 61 74 69 63 20 72 65 61 64 6f 6e 6c 79 20 73  tatic readonly s
2aa10 74 72 69 6e 67 20 56 73 49 64 46 6f 72 6d 61 74  tring VsIdFormat
2aa20 20 3d 20 22 42 22 3b 0d 0a 0d 0a 20 20 20 20 20   = "B";....     
2aa30 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
2aa40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2aa50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2aa60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2aa70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
2aa80 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74        private st
2aa90 61 74 69 63 20 72 65 61 64 6f 6e 6c 79 20 73 74  atic readonly st
2aaa0 72 69 6e 67 20 58 50 61 74 68 46 6f 72 41 64 64  ring XPathForAdd
2aab0 45 6c 65 6d 65 6e 74 20 3d 0d 0a 20 20 20 20 20  Element =..     
2aac0 20 20 20 20 20 20 20 22 63 6f 6e 66 69 67 75 72         "configur
2aad0 61 74 69 6f 6e 2f 73 79 73 74 65 6d 2e 64 61 74  ation/system.dat
2aae0 61 2f 44 62 50 72 6f 76 69 64 65 72 46 61 63 74  a/DbProviderFact
2aaf0 6f 72 69 65 73 2f 61 64 64 5b 40 69 6e 76 61 72  ories/add[@invar
2ab00 69 61 6e 74 3d 5c 22 7b 30 7d 5c 22 5d 22 3b 0d  iant=\"{0}\"]";.
2ab10 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61  ...        priva
2ab20 74 65 20 73 74 61 74 69 63 20 72 65 61 64 6f 6e  te static readon
2ab30 6c 79 20 73 74 72 69 6e 67 20 58 50 61 74 68 46  ly string XPathF
2ab40 6f 72 52 65 6d 6f 76 65 45 6c 65 6d 65 6e 74 20  orRemoveElement 
2ab50 3d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22  =..            "
2ab60 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2f 73 79  configuration/sy
2ab70 73 74 65 6d 2e 64 61 74 61 2f 44 62 50 72 6f 76  stem.data/DbProv
2ab80 69 64 65 72 46 61 63 74 6f 72 69 65 73 2f 72 65  iderFactories/re
2ab90 6d 6f 76 65 5b 40 69 6e 76 61 72 69 61 6e 74 3d  move[@invariant=
2aba0 5c 22 7b 30 7d 5c 22 5d 22 3b 0d 0a 20 20 20 20  \"{0}\"]";..    
2abb0 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
2abc0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
2abd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2abe0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2abf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ac00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ac10 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65  /....        #re
2ac20 67 69 6f 6e 20 50 72 69 76 61 74 65 20 53 74 61  gion Private Sta
2ac30 74 69 63 20 44 61 74 61 0d 0a 20 20 20 20 20 20  tic Data..      
2ac40 20 20 23 72 65 67 69 6f 6e 20 44 69 61 67 6e 6f    #region Diagno
2ac50 73 74 69 63 73 20 26 20 4c 6f 67 67 69 6e 67 0d  stics & Logging.
2ac60 0a 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20  .        //..   
2ac70 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 43 61       // NOTE: Ca
2ac80 63 68 65 20 74 68 65 20 63 75 72 72 65 6e 74 20  che the current 
2ac90 70 72 6f 63 65 73 73 20 61 6e 64 20 61 73 73 65  process and asse
2aca0 6d 62 6c 79 20 61 73 20 74 68 65 79 20 64 6f 20  mbly as they do 
2acb0 6e 6f 74 20 63 68 61 6e 67 65 0d 0a 20 20 20 20  not change..    
2acc0 20 20 20 20 2f 2f 20 20 20 20 20 20 20 61 6e 64      //       and
2acd0 20 6d 61 79 20 62 65 20 6e 65 65 64 65 64 20 69   may be needed i
2ace0 6e 20 71 75 69 74 65 20 61 20 66 65 77 20 64 69  n quite a few di
2acf0 66 66 65 72 65 6e 74 20 70 6c 61 63 65 73 2e 0d  fferent places..
2ad00 0a 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20  .        //..   
2ad10 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61       private sta
2ad20 74 69 63 20 50 72 6f 63 65 73 73 20 74 68 69 73  tic Process this
2ad30 50 72 6f 63 65 73 73 20 3d 20 50 72 6f 63 65 73  Process = Proces
2ad40 73 2e 47 65 74 43 75 72 72 65 6e 74 50 72 6f 63  s.GetCurrentProc
2ad50 65 73 73 28 29 3b 0d 0a 20 20 20 20 20 20 20 20  ess();..        
2ad60 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 41  private static A
2ad70 73 73 65 6d 62 6c 79 20 74 68 69 73 41 73 73 65  ssembly thisAsse
2ad80 6d 62 6c 79 20 3d 20 41 73 73 65 6d 62 6c 79 2e  mbly = Assembly.
2ad90 47 65 74 45 78 65 63 75 74 69 6e 67 41 73 73 65  GetExecutingAsse
2ada0 6d 62 6c 79 28 29 3b 0d 0a 0d 0a 20 20 20 20 20  mbly();....     
2adb0 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
2adc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2add0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ade0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2adf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
2ae00 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
2ae10 20 20 2f 2f 20 4e 4f 54 45 3a 20 54 68 65 20 74    // NOTE: The t
2ae20 72 61 63 65 20 63 61 74 65 67 6f 72 79 20 69 73  race category is
2ae30 20 74 68 65 20 73 61 6d 65 20 66 6f 72 20 62 6f   the same for bo
2ae40 74 68 20 74 68 65 20 64 65 62 75 67 20 61 6e 64  th the debug and
2ae50 20 74 72 61 63 65 0d 0a 20 20 20 20 20 20 20 20   trace..        
2ae60 2f 2f 20 20 20 20 20 20 20 63 61 6c 6c 62 61 63  //       callbac
2ae70 6b 73 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 0d  ks...        //.
2ae80 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65  .        private
2ae90 20 73 74 61 74 69 63 20 73 74 72 69 6e 67 20 74   static string t
2aea0 72 61 63 65 43 61 74 65 67 6f 72 79 20 3d 20 28  raceCategory = (
2aeb0 74 68 69 73 41 73 73 65 6d 62 6c 79 20 21 3d 20  thisAssembly != 
2aec0 6e 75 6c 6c 29 20 3f 0d 0a 20 20 20 20 20 20 20  null) ?..       
2aed0 20 20 20 20 20 50 61 74 68 2e 47 65 74 46 69 6c       Path.GetFil
2aee0 65 4e 61 6d 65 28 74 68 69 73 41 73 73 65 6d 62  eName(thisAssemb
2aef0 6c 79 2e 4c 6f 63 61 74 69 6f 6e 29 20 3a 20 6e  ly.Location) : n
2af00 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ull;....        
2af10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2af20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2af30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2af40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2af50 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
2af60 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 2f     //..        /
2af70 2f 20 4e 4f 54 45 3a 20 53 65 74 20 74 68 65 20  / NOTE: Set the 
2af80 64 65 62 75 67 20 61 6e 64 20 74 72 61 63 65 20  debug and trace 
2af90 6c 6f 67 67 69 6e 67 20 63 61 6c 6c 62 61 63 6b  logging callback
2afa0 73 20 75 73 65 64 20 62 79 20 74 68 65 0d 0a 20  s used by the.. 
2afb0 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
2afc0 61 70 70 6c 69 63 61 74 69 6f 6e 2e 0d 0a 20 20  application...  
2afd0 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
2afe0 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63    private static
2aff0 20 54 72 61 63 65 43 61 6c 6c 62 61 63 6b 20 64   TraceCallback d
2b000 65 62 75 67 43 61 6c 6c 62 61 63 6b 20 3d 20 41  ebugCallback = A
2b010 70 70 44 65 62 75 67 3b 0d 0a 20 20 20 20 20 20  ppDebug;..      
2b020 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63    private static
2b030 20 54 72 61 63 65 43 61 6c 6c 62 61 63 6b 20 74   TraceCallback t
2b040 72 61 63 65 43 61 6c 6c 62 61 63 6b 20 3d 20 41  raceCallback = A
2b050 70 70 54 72 61 63 65 3b 0d 0a 20 20 20 20 20 20  ppTrace;..      
2b060 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a    #endregion....
2b070 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
2b080 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b090 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b0a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b0b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
2b0c0 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69  ...        #regi
2b0d0 6f 6e 20 53 79 73 74 65 6d 20 44 69 72 65 63 74  on System Direct
2b0e0 6f 72 79 0d 0a 20 20 20 20 20 20 20 20 70 72 69  ory..        pri
2b0f0 76 61 74 65 20 73 74 61 74 69 63 20 73 74 72 69  vate static stri
2b100 6e 67 20 73 79 73 74 65 6d 44 69 72 65 63 74 6f  ng systemDirecto
2b110 72 79 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a 23 69  ry = null;....#i
2b120 66 20 57 49 4e 44 4f 57 53 0d 0a 20 20 20 20 20  f WINDOWS..     
2b130 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69     private stati
2b140 63 20 73 74 72 69 6e 67 20 73 79 73 74 65 6d 44  c string systemD
2b150 69 72 65 63 74 6f 72 79 57 6f 77 36 34 20 3d 20  irectoryWow64 = 
2b160 6e 75 6c 6c 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20  null;..#endif.. 
2b170 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f         #endregio
2b180 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  n....        ///
2b190 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b1a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b1b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b1c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b1d0 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
2b1e0 23 72 65 67 69 6f 6e 20 52 65 67 69 73 74 72 79  #region Registry
2b1f0 20 53 74 61 74 69 73 74 69 63 73 0d 0a 20 20 20   Statistics..   
2b200 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61       private sta
2b210 74 69 63 20 69 6e 74 20 66 69 6c 65 73 43 72 65  tic int filesCre
2b220 61 74 65 64 20 3d 20 30 3b 0d 0a 20 20 20 20 20  ated = 0;..     
2b230 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69     private stati
2b240 63 20 69 6e 74 20 66 69 6c 65 73 4d 6f 64 69 66  c int filesModif
2b250 69 65 64 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20  ied = 0;..      
2b260 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63    private static
2b270 20 69 6e 74 20 66 69 6c 65 73 44 65 6c 65 74 65   int filesDelete
2b280 64 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20 20 20  d = 0;..        
2b290 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 20 20 20 20  #endregion..    
2b2a0 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
2b2b0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
2b2c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b2d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b2e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b2f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b300 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65  /....        #re
2b310 67 69 6f 6e 20 54 72 61 63 65 20 48 61 6e 64 6c  gion Trace Handl
2b320 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 70 72 69  ing..        pri
2b330 76 61 74 65 20 73 74 61 74 69 63 20 73 74 72 69  vate static stri
2b340 6e 67 20 47 65 74 4c 6f 67 46 69 6c 65 4e 61 6d  ng GetLogFileNam
2b350 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
2b360 73 74 72 69 6e 67 20 74 79 70 65 4e 61 6d 65 0d  string typeName.
2b370 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 20 2f  .            ) /
2b380 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a 20 20 20 20  * throw */..    
2b390 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
2b3a0 20 20 20 73 74 72 69 6e 67 20 66 69 6c 65 4e 61     string fileNa
2b3b0 6d 65 20 3d 20 50 61 74 68 2e 47 65 74 54 65 6d  me = Path.GetTem
2b3c0 70 46 69 6c 65 4e 61 6d 65 28 29 3b 0d 0a 20 20  pFileName();..  
2b3d0 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
2b3e0 20 64 69 72 65 63 74 6f 72 79 20 3d 20 50 61 74   directory = Pat
2b3f0 68 2e 47 65 74 44 69 72 65 63 74 6f 72 79 4e 61  h.GetDirectoryNa
2b400 6d 65 28 66 69 6c 65 4e 61 6d 65 29 3b 0d 0a 20  me(fileName);.. 
2b410 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
2b420 67 20 66 69 6c 65 4e 61 6d 65 4f 6e 6c 79 20 3d  g fileNameOnly =
2b430 20 50 61 74 68 2e 47 65 74 46 69 6c 65 4e 61 6d   Path.GetFileNam
2b440 65 57 69 74 68 6f 75 74 45 78 74 65 6e 73 69 6f  eWithoutExtensio
2b450 6e 28 66 69 6c 65 4e 61 6d 65 29 3b 0d 0a 0d 0a  n(fileName);....
2b460 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
2b470 6e 67 20 6e 65 77 46 69 6c 65 4e 61 6d 65 20 3d  ng newFileName =
2b480 20 50 61 74 68 2e 43 6f 6d 62 69 6e 65 28 64 69   Path.Combine(di
2b490 72 65 63 74 6f 72 79 2c 20 53 74 72 69 6e 67 2e  rectory, String.
2b4a0 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
2b4b0 20 20 20 20 20 20 20 20 20 22 7b 30 7d 7b 31 7d           "{0}{1}
2b4c0 7b 32 7d 22 2c 20 74 72 61 63 65 43 61 74 65 67  {2}", traceCateg
2b4d0 6f 72 79 2c 20 21 53 74 72 69 6e 67 2e 49 73 4e  ory, !String.IsN
2b4e0 75 6c 6c 4f 72 45 6d 70 74 79 28 74 79 70 65 4e  ullOrEmpty(typeN
2b4f0 61 6d 65 29 20 3f 0d 0a 20 20 20 20 20 20 20 20  ame) ?..        
2b500 20 20 20 20 20 20 20 20 20 20 20 20 22 2e 22 20              "." 
2b510 2b 20 74 79 70 65 4e 61 6d 65 20 3a 20 53 74 72  + typeName : Str
2b520 69 6e 67 2e 45 6d 70 74 79 2c 20 22 2e 22 20 2b  ing.Empty, "." +
2b530 20 66 69 6c 65 4e 61 6d 65 4f 6e 6c 79 20 2b 0d   fileNameOnly +.
2b540 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2b550 20 20 20 20 20 4c 6f 67 46 69 6c 65 53 75 66 66       LogFileSuff
2b560 69 78 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ix));....       
2b570 20 20 20 20 20 46 69 6c 65 2e 4d 6f 76 65 28 66       File.Move(f
2b580 69 6c 65 4e 61 6d 65 2c 20 6e 65 77 46 69 6c 65  ileName, newFile
2b590 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  Name);....      
2b5a0 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 65 77        return new
2b5b0 46 69 6c 65 4e 61 6d 65 3b 0d 0a 20 20 20 20 20  FileName;..     
2b5c0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
2b5d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b5e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b5f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b600 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b610 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
2b620 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69     private stati
2b630 63 20 76 6f 69 64 20 41 70 70 44 65 62 75 67 28  c void AppDebug(
2b640 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74  ..            st
2b650 72 69 6e 67 20 6d 65 73 73 61 67 65 2c 0d 0a 20  ring message,.. 
2b660 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
2b670 67 20 63 61 74 65 67 6f 72 79 0d 0a 20 20 20 20  g category..    
2b680 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
2b690 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
2b6a0 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67    TraceOps.Debug
2b6b0 43 6f 72 65 28 53 74 72 69 6e 67 2e 46 6f 72 6d  Core(String.Form
2b6c0 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
2b6d0 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65       TraceOps.De
2b6e0 62 75 67 46 6f 72 6d 61 74 2c 20 54 72 61 63 65  bugFormat, Trace
2b6f0 4f 70 73 2e 4e 65 78 74 44 65 62 75 67 49 64 28  Ops.NextDebugId(
2b700 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
2b710 20 20 20 20 54 72 61 63 65 4f 70 73 2e 54 69 6d      TraceOps.Tim
2b720 65 53 74 61 6d 70 28 44 61 74 65 54 69 6d 65 2e  eStamp(DateTime.
2b730 55 74 63 4e 6f 77 29 2c 20 6d 65 73 73 61 67 65  UtcNow), message
2b740 29 2c 20 63 61 74 65 67 6f 72 79 29 3b 0d 0a 20  ), category);.. 
2b750 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
2b760 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
2b770 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b780 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b790 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b7a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
2b7b0 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
2b7c0 74 61 74 69 63 20 76 6f 69 64 20 41 70 70 54 72  tatic void AppTr
2b7d0 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ace(..          
2b7e0 20 20 73 74 72 69 6e 67 20 6d 65 73 73 61 67 65    string message
2b7f0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  ,..            s
2b800 74 72 69 6e 67 20 63 61 74 65 67 6f 72 79 0d 0a  tring category..
2b810 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
2b820 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
2b830 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 54        TraceOps.T
2b840 72 61 63 65 43 6f 72 65 28 53 74 72 69 6e 67 2e  raceCore(String.
2b850 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
2b860 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70           TraceOp
2b870 73 2e 54 72 61 63 65 46 6f 72 6d 61 74 2c 20 54  s.TraceFormat, T
2b880 72 61 63 65 4f 70 73 2e 4e 65 78 74 54 72 61 63  raceOps.NextTrac
2b890 65 49 64 28 29 2c 0d 0a 20 20 20 20 20 20 20 20  eId(),..        
2b8a0 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73          TraceOps
2b8b0 2e 54 69 6d 65 53 74 61 6d 70 28 44 61 74 65 54  .TimeStamp(DateT
2b8c0 69 6d 65 2e 55 74 63 4e 6f 77 29 2c 20 6d 65 73  ime.UtcNow), mes
2b8d0 73 61 67 65 29 2c 20 63 61 74 65 67 6f 72 79 29  sage), category)
2b8e0 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  ;..        }..  
2b8f0 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
2b900 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
2b910 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b920 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b930 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b940 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b950 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23  ///....        #
2b960 72 65 67 69 6f 6e 20 47 65 6e 65 72 69 63 20 50  region Generic P
2b970 6c 61 74 66 6f 72 6d 20 48 61 6e 64 6c 69 6e 67  latform Handling
2b980 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
2b990 65 20 73 74 61 74 69 63 20 62 6f 6f 6c 20 49 73  e static bool Is
2b9a0 36 34 42 69 74 50 72 6f 63 65 73 73 28 29 0d 0a  64BitProcess()..
2b9b0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
2b9c0 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
2b9d0 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20         // NOTE: 
2b9e0 52 65 74 75 72 6e 73 20 74 72 75 65 20 69 66 20  Returns true if 
2b9f0 74 68 65 20 63 75 72 72 65 6e 74 20 70 72 6f 63  the current proc
2ba00 65 73 73 20 69 73 20 36 34 2d 62 69 74 2e 20 20  ess is 64-bit.  
2ba10 49 66 20 74 68 69 73 0d 0a 20 20 20 20 20 20 20  If this..       
2ba20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 69 73       //       is
2ba30 20 74 72 75 65 2c 20 77 65 20 2a 6b 6e 6f 77 2a   true, we *know*
2ba40 20 74 68 61 74 20 77 65 20 6d 75 73 74 20 62 65   that we must be
2ba50 20 72 75 6e 6e 69 6e 67 20 6f 6e 20 61 20 36 34   running on a 64
2ba60 2d 62 69 74 0d 0a 20 20 20 20 20 20 20 20 20 20  -bit..          
2ba70 20 20 2f 2f 20 20 20 20 20 20 20 6f 70 65 72 61    //       opera
2ba80 74 69 6e 67 20 73 79 73 74 65 6d 20 61 73 20 77  ting system as w
2ba90 65 6c 6c 2e 20 20 48 6f 77 65 76 65 72 2c 20 69  ell.  However, i
2baa0 66 20 74 68 69 73 20 69 73 20 66 61 6c 73 65 2c  f this is false,
2bab0 20 77 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20   we..           
2bac0 20 2f 2f 20 20 20 20 20 20 20 64 6f 20 6e 6f 74   //       do not
2bad0 20 6e 65 63 65 73 73 61 72 69 6c 79 20 6b 6e 6f   necessarily kno
2bae0 77 20 74 68 61 74 20 77 65 20 61 72 65 20 72 75  w that we are ru
2baf0 6e 6e 69 6e 67 20 6f 6e 20 61 20 33 32 2d 62 69  nning on a 32-bi
2bb00 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  t..            /
2bb10 2f 20 20 20 20 20 20 20 6f 70 65 72 61 74 69 6e  /       operatin
2bb20 67 20 73 79 73 74 65 6d 2c 20 64 75 65 20 74 6f  g system, due to
2bb30 20 57 6f 57 36 34 20 28 57 69 6e 33 32 2d 6f 6e   WoW64 (Win32-on
2bb40 2d 57 69 6e 36 34 29 2c 20 65 74 63 2e 0d 0a 20  -Win64), etc... 
2bb50 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
2bb60 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
2bb70 6e 20 28 49 6e 74 50 74 72 2e 53 69 7a 65 20 3d  n (IntPtr.Size =
2bb80 3d 20 73 69 7a 65 6f 66 28 6c 6f 6e 67 29 29 3b  = sizeof(long));
2bb90 20 2f 2f 20 4e 4f 54 45 3a 20 50 6f 69 6e 74 65   // NOTE: Pointe
2bba0 72 20 69 73 20 36 34 2d 62 69 74 73 3f 0d 0a 20  r is 64-bits?.. 
2bbb0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
2bbc0 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
2bbd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2bbe0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2bbf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2bc00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
2bc10 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
2bc20 74 61 74 69 63 20 62 6f 6f 6c 20 49 73 53 75 70  tatic bool IsSup
2bc30 70 6f 72 74 65 64 52 6f 6f 74 4b 65 79 28 0d 0a  portedRootKey(..
2bc40 20 20 20 20 20 20 20 20 20 20 20 20 4d 6f 63 6b              Mock
2bc50 52 65 67 69 73 74 72 79 20 72 65 67 69 73 74 72  Registry registr
2bc60 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y,..            
2bc70 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20  MockRegistryKey 
2bc80 72 6f 6f 74 4b 65 79 0d 0a 20 20 20 20 20 20 20  rootKey..       
2bc90 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
2bca0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  {..            r
2bcb0 65 74 75 72 6e 20 4f 62 6a 65 63 74 2e 52 65 66  eturn Object.Ref
2bcc0 65 72 65 6e 63 65 45 71 75 61 6c 73 28 72 6f 6f  erenceEquals(roo
2bcd0 74 4b 65 79 2c 20 72 65 67 69 73 74 72 79 2e 43  tKey, registry.C
2bce0 75 72 72 65 6e 74 55 73 65 72 29 20 7c 7c 0d 0a  urrentUser) ||..
2bcf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bd00 4f 62 6a 65 63 74 2e 52 65 66 65 72 65 6e 63 65  Object.Reference
2bd10 45 71 75 61 6c 73 28 72 6f 6f 74 4b 65 79 2c 20  Equals(rootKey, 
2bd20 72 65 67 69 73 74 72 79 2e 4c 6f 63 61 6c 4d 61  registry.LocalMa
2bd30 63 68 69 6e 65 29 3b 0d 0a 20 20 20 20 20 20 20  chine);..       
2bd40 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f   }....        //
2bd50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2bd60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2bd70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2bd80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2bd90 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
2bda0 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20   private static 
2bdb0 73 74 72 69 6e 67 20 47 65 74 52 6f 6f 74 4b 65  string GetRootKe
2bdc0 79 4e 61 6d 65 28 0d 0a 20 20 20 20 20 20 20 20  yName(..        
2bdd0 20 20 20 20 62 6f 6f 6c 20 70 65 72 55 73 65 72      bool perUser
2bde0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  ,..            b
2bdf0 6f 6f 6c 20 77 6f 77 36 34 0d 0a 20 20 20 20 20  ool wow64..     
2be00 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
2be10 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
2be20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
2be30 20 2f 2f 20 42 55 47 46 49 58 3a 20 41 70 70 61   // BUGFIX: Appa
2be40 72 65 6e 74 6c 79 2c 20 74 68 65 20 70 65 72 2d  rently, the per-
2be50 75 73 65 72 20 72 65 67 69 73 74 72 79 20 68 69  user registry hi
2be60 76 65 20 64 6f 65 73 20 6e 6f 74 20 75 73 65 0d  ve does not use.
2be70 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20  .            // 
2be80 20 20 20 20 20 20 20 20 74 68 65 20 22 57 6f 77          the "Wow
2be90 36 34 33 32 4e 6f 64 65 22 20 6e 6f 64 65 20 74  6432Node" node t
2bea0 6f 20 73 74 6f 72 65 20 73 65 74 74 69 6e 67 73  o store settings
2beb0 20 66 6f 72 20 33 32 2d 62 69 74 0d 0a 20 20 20   for 32-bit..   
2bec0 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
2bed0 20 20 20 20 61 70 70 6c 69 63 61 74 69 6f 6e 73      applications
2bee0 20 72 75 6e 6e 69 6e 67 20 6f 6e 20 61 20 36 34   running on a 64
2bef0 2d 62 69 74 20 6f 70 65 72 61 74 69 6e 67 20 73  -bit operating s
2bf00 79 73 74 65 6d 2e 0d 0a 20 20 20 20 20 20 20 20  ystem...        
2bf10 20 20 20 20 2f 2f 20 20 20 20 20 20 20 20 20 54      //         T
2bf20 69 63 6b 65 74 20 5b 61 30 36 37 37 33 30 39 66  icket [a0677309f
2bf30 30 5d 20 68 61 73 20 66 75 72 74 68 65 72 20 64  0] has further d
2bf40 65 74 61 69 6c 73 2e 0d 0a 20 20 20 20 20 20 20  etails...       
2bf50 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
2bf60 20 20 20 20 20 72 65 74 75 72 6e 20 53 74 72 69       return Stri
2bf70 6e 67 2e 46 6f 72 6d 61 74 28 22 7b 30 7d 7b 31  ng.Format("{0}{1
2bf80 7d 22 2c 20 52 6f 6f 74 4b 65 79 4e 61 6d 65 2c  }", RootKeyName,
2bf90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2bfa0 20 20 21 70 65 72 55 73 65 72 20 26 26 20 77 6f    !perUser && wo
2bfb0 77 36 34 20 26 26 20 49 73 36 34 42 69 74 50 72  w64 && Is64BitPr
2bfc0 6f 63 65 73 73 28 29 20 3f 0d 0a 20 20 20 20 20  ocess() ?..     
2bfd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
2bfe0 5c 5c 22 20 2b 20 57 6f 77 36 34 53 75 62 4b 65  \\" + Wow64SubKe
2bff0 79 4e 61 6d 65 20 3a 20 53 74 72 69 6e 67 2e 45  yName : String.E
2c000 6d 70 74 79 29 3b 0d 0a 20 20 20 20 20 20 20 20  mpty);..        
2c010 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  }....        ///
2c020 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c030 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c040 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c050 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c060 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
2c070 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 73  private static s
2c080 74 72 69 6e 67 20 47 65 74 53 79 73 74 65 6d 44  tring GetSystemD
2c090 69 72 65 63 74 6f 72 79 28 0d 0a 20 20 20 20 20  irectory(..     
2c0a0 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36         bool wow6
2c0b0 34 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29  4..            )
2c0c0 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 23 69 66  ..        {..#if
2c0d0 20 57 49 4e 44 4f 57 53 0d 0a 20 20 20 20 20 20   WINDOWS..      
2c0e0 20 20 20 20 20 20 69 66 20 28 77 6f 77 36 34 29        if (wow64)
2c0f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
2c100 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2c110 20 69 66 20 28 73 79 73 74 65 6d 44 69 72 65 63   if (systemDirec
2c120 74 6f 72 79 57 6f 77 36 34 20 3d 3d 20 6e 75 6c  toryWow64 == nul
2c130 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
2c140 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
2c150 20 20 20 20 20 20 20 20 20 20 20 73 79 73 74 65             syste
2c160 6d 44 69 72 65 63 74 6f 72 79 57 6f 77 36 34 20  mDirectoryWow64 
2c170 3d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  =..             
2c180 20 20 20 20 20 20 20 20 20 20 20 55 6e 73 61 66             Unsaf
2c190 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 47  eNativeMethods.G
2c1a0 65 74 53 79 73 74 65 6d 44 69 72 65 63 74 6f 72  etSystemDirector
2c1b0 79 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  y();..          
2c1c0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
2c1d0 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
2c1e0 6e 20 73 79 73 74 65 6d 44 69 72 65 63 74 6f 72  n systemDirector
2c1f0 79 57 6f 77 36 34 3b 0d 0a 20 20 20 20 20 20 20  yWow64;..       
2c200 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
2c210 20 20 20 20 65 6c 73 65 0d 0a 23 65 6e 64 69 66      else..#endif
2c220 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
2c230 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2c240 20 69 66 20 28 73 79 73 74 65 6d 44 69 72 65 63   if (systemDirec
2c250 74 6f 72 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  tory == null).. 
2c260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c270 20 20 20 73 79 73 74 65 6d 44 69 72 65 63 74 6f     systemDirecto
2c280 72 79 20 3d 20 45 6e 76 69 72 6f 6e 6d 65 6e 74  ry = Environment
2c290 2e 53 79 73 74 65 6d 44 69 72 65 63 74 6f 72 79  .SystemDirectory
2c2a0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
2c2b0 20 20 20 20 20 72 65 74 75 72 6e 20 73 79 73 74       return syst
2c2c0 65 6d 44 69 72 65 63 74 6f 72 79 3b 0d 0a 20 20  emDirectory;..  
2c2d0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
2c2e0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
2c2f0 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20  #endregion....  
2c300 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
2c310 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c320 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c330 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c340 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
2c350 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e  .        #region
2c360 20 47 65 6e 65 72 69 63 20 53 74 72 69 6e 67 20   Generic String 
2c370 48 61 6e 64 6c 69 6e 67 0d 0a 20 20 20 20 20 20  Handling..      
2c380 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63    private static
2c390 20 73 74 72 69 6e 67 20 46 6f 72 44 69 73 70 6c   string ForDispl
2c3a0 61 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ay(..           
2c3b0 20 6f 62 6a 65 63 74 20 76 61 6c 75 65 0d 0a 20   object value.. 
2c3c0 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
2c3d0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
2c3e0 20 20 20 20 20 69 66 20 28 76 61 6c 75 65 20 3d       if (value =
2c3f0 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
2c400 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
2c410 22 3c 6e 75 6c 6c 3e 22 3b 0d 0a 0d 0a 20 20 20  "<null>";....   
2c420 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
2c430 72 65 73 75 6c 74 3b 0d 0a 20 20 20 20 20 20 20  result;..       
2c440 20 20 20 20 20 54 79 70 65 20 74 79 70 65 20 3d       Type type =
2c450 20 76 61 6c 75 65 2e 47 65 74 54 79 70 65 28 29   value.GetType()
2c460 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
2c470 20 69 66 20 28 74 79 70 65 20 3d 3d 20 74 79 70   if (type == typ
2c480 65 6f 66 28 58 6d 6c 45 6c 65 6d 65 6e 74 29 29  eof(XmlElement))
2c490 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
2c4a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2c4b0 20 58 6d 6c 45 6c 65 6d 65 6e 74 20 65 6c 65 6d   XmlElement elem
2c4c0 65 6e 74 20 3d 20 28 58 6d 6c 45 6c 65 6d 65 6e  ent = (XmlElemen
2c4d0 74 29 76 61 6c 75 65 3b 0d 0a 0d 0a 20 20 20 20  t)value;....    
2c4e0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 73 75              resu
2c4f0 6c 74 20 3d 20 65 6c 65 6d 65 6e 74 2e 4f 75 74  lt = element.Out
2c500 65 72 58 6d 6c 3b 0d 0a 20 20 20 20 20 20 20 20  erXml;..        
2c510 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
2c520 20 20 20 65 6c 73 65 20 69 66 20 28 74 79 70 65     else if (type
2c530 20 3d 3d 20 74 79 70 65 6f 66 28 56 65 72 73 69   == typeof(Versi
2c540 6f 6e 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  on))..          
2c550 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
2c560 20 20 20 20 20 56 65 72 73 69 6f 6e 20 76 65 72       Version ver
2c570 73 69 6f 6e 20 3d 20 28 56 65 72 73 69 6f 6e 29  sion = (Version)
2c580 76 61 6c 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  value;....      
2c590 20 20 20 20 20 20 20 20 20 20 72 65 73 75 6c 74            result
2c5a0 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74   = String.Format
2c5b0 28 22 76 7b 30 7d 22 2c 20 76 65 72 73 69 6f 6e  ("v{0}", version
2c5c0 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
2c5d0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 65  }..            e
2c5e0 6c 73 65 20 69 66 20 28 74 79 70 65 20 3d 3d 20  lse if (type == 
2c5f0 74 79 70 65 6f 66 28 50 72 6f 63 65 73 73 53 74  typeof(ProcessSt
2c600 61 72 74 49 6e 66 6f 29 29 0d 0a 20 20 20 20 20  artInfo))..     
2c610 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
2c620 20 20 20 20 20 20 20 20 20 20 50 72 6f 63 65 73            Proces
2c630 73 53 74 61 72 74 49 6e 66 6f 20 73 74 61 72 74  sStartInfo start
2c640 49 6e 66 6f 20 3d 20 28 50 72 6f 63 65 73 73 53  Info = (ProcessS
2c650 74 61 72 74 49 6e 66 6f 29 76 61 6c 75 65 3b 0d  tartInfo)value;.
2c660 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
2c670 20 20 20 72 65 73 75 6c 74 20 3d 20 53 74 72 69     result = Stri
2c680 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20  ng.Format(..    
2c690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c6a0 22 66 69 6c 65 4e 61 6d 65 20 3d 20 7b 30 7d 2c  "fileName = {0},
2c6b0 20 61 72 67 75 6d 65 6e 74 73 20 3d 20 7b 31 7d   arguments = {1}
2c6c0 2c 20 77 6f 72 6b 69 6e 67 44 69 72 65 63 74 6f  , workingDirecto
2c6d0 72 79 20 3d 20 7b 32 7d 2c 20 22 20 2b 0d 0a 20  ry = {2}, " +.. 
2c6e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c6f0 20 20 20 22 75 73 65 53 68 65 6c 6c 45 78 65 63     "useShellExec
2c700 75 74 65 20 3d 20 7b 33 7d 2c 20 72 65 64 69 72  ute = {3}, redir
2c710 65 63 74 53 74 61 6e 64 61 72 64 4f 75 74 70 75  ectStandardOutpu
2c720 74 20 3d 20 7b 34 7d 2c 20 22 20 2b 0d 0a 20 20  t = {4}, " +..  
2c730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c740 20 20 22 72 65 64 69 72 65 63 74 53 74 61 6e 64    "redirectStand
2c750 61 72 64 45 72 72 6f 72 20 3d 20 7b 35 7d 22 2c  ardError = {5}",
2c760 20 46 6f 72 44 69 73 70 6c 61 79 28 0d 0a 20 20   ForDisplay(..  
2c770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c780 20 20 73 74 61 72 74 49 6e 66 6f 2e 46 69 6c 65    startInfo.File
2c790 4e 61 6d 65 29 2c 20 46 6f 72 44 69 73 70 6c 61  Name), ForDispla
2c7a0 79 28 73 74 61 72 74 49 6e 66 6f 2e 41 72 67 75  y(startInfo.Argu
2c7b0 6d 65 6e 74 73 29 2c 0d 0a 20 20 20 20 20 20 20  ments),..       
2c7c0 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72               For
2c7d0 44 69 73 70 6c 61 79 28 73 74 61 72 74 49 6e 66  Display(startInf
2c7e0 6f 2e 57 6f 72 6b 69 6e 67 44 69 72 65 63 74 6f  o.WorkingDirecto
2c7f0 72 79 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28  ry), ForDisplay(
2c800 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2c810 20 20 20 20 20 20 73 74 61 72 74 49 6e 66 6f 2e        startInfo.
2c820 55 73 65 53 68 65 6c 6c 45 78 65 63 75 74 65 29  UseShellExecute)
2c830 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 0d 0a 20  , ForDisplay(.. 
2c840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c850 20 20 20 73 74 61 72 74 49 6e 66 6f 2e 52 65 64     startInfo.Red
2c860 69 72 65 63 74 53 74 61 6e 64 61 72 64 4f 75 74  irectStandardOut
2c870 70 75 74 29 2c 20 46 6f 72 44 69 73 70 6c 61 79  put), ForDisplay
2c880 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
2c890 20 20 20 20 20 20 20 73 74 61 72 74 49 6e 66 6f         startInfo
2c8a0 2e 52 65 64 69 72 65 63 74 53 74 61 6e 64 61 72  .RedirectStandar
2c8b0 64 45 72 72 6f 72 29 29 3b 20 2f 2a 20 52 45 43  dError)); /* REC
2c8c0 55 52 53 49 56 45 20 2a 2f 0d 0a 20 20 20 20 20  URSIVE */..     
2c8d0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
2c8e0 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 74        else if (t
2c8f0 79 70 65 20 3d 3d 20 74 79 70 65 6f 66 28 50 72  ype == typeof(Pr
2c900 6f 63 65 73 73 29 29 0d 0a 20 20 20 20 20 20 20  ocess))..       
2c910 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
2c920 20 20 20 20 20 20 20 20 50 72 6f 63 65 73 73 20          Process 
2c930 70 72 6f 63 65 73 73 20 3d 20 28 50 72 6f 63 65  process = (Proce
2c940 73 73 29 76 61 6c 75 65 3b 0d 0a 0d 0a 20 20 20  ss)value;....   
2c950 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 73               res
2c960 75 6c 74 20 3d 20 70 72 6f 63 65 73 73 2e 49 64  ult = process.Id
2c970 2e 54 6f 53 74 72 69 6e 67 28 29 3b 0d 0a 20 20  .ToString();..  
2c980 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
2c990 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66           else if
2c9a0 20 28 74 79 70 65 20 3d 3d 20 74 79 70 65 6f 66   (type == typeof
2c9b0 28 44 61 74 61 52 65 63 65 69 76 65 64 45 76 65  (DataReceivedEve
2c9c0 6e 74 41 72 67 73 29 29 0d 0a 20 20 20 20 20 20  ntArgs))..      
2c9d0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
2c9e0 20 20 20 20 20 20 20 20 20 44 61 74 61 52 65 63           DataRec
2c9f0 65 69 76 65 64 45 76 65 6e 74 41 72 67 73 20 65  eivedEventArgs e
2ca00 76 65 6e 74 41 72 67 73 20 3d 20 28 44 61 74 61  ventArgs = (Data
2ca10 52 65 63 65 69 76 65 64 45 76 65 6e 74 41 72 67  ReceivedEventArg
2ca20 73 29 76 61 6c 75 65 3b 0d 0a 0d 0a 20 20 20 20  s)value;....    
2ca30 20 20 20 20 20 20 20 20 20 20 20 20 72 65 73 75              resu
2ca40 6c 74 20 3d 20 46 6f 72 44 69 73 70 6c 61 79 28  lt = ForDisplay(
2ca50 65 76 65 6e 74 41 72 67 73 2e 44 61 74 61 29 3b  eventArgs.Data);
2ca60 20 2f 2a 20 52 45 43 55 52 53 49 56 45 20 2a 2f   /* RECURSIVE */
2ca70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
2ca80 0a 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73  .            els
2ca90 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  e..            {
2caa0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2cab0 20 20 72 65 73 75 6c 74 20 3d 20 76 61 6c 75 65    result = value
2cac0 2e 54 6f 53 74 72 69 6e 67 28 29 3b 0d 0a 0d 0a  .ToString();....
2cad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cae0 69 66 20 28 72 65 73 75 6c 74 2e 4c 65 6e 67 74  if (result.Lengt
2caf0 68 20 3d 3d 20 30 29 0d 0a 20 20 20 20 20 20 20  h == 0)..       
2cb00 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
2cb10 75 72 6e 20 22 3c 65 6d 70 74 79 3e 22 3b 0d 0a  urn "<empty>";..
2cb20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2cb30 20 20 69 66 20 28 74 79 70 65 2e 49 73 53 75 62    if (type.IsSub
2cb40 63 6c 61 73 73 4f 66 28 74 79 70 65 6f 66 28 45  classOf(typeof(E
2cb50 78 63 65 70 74 69 6f 6e 29 29 29 0d 0a 20 20 20  xception)))..   
2cb60 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
2cb70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cb80 20 20 20 20 72 65 73 75 6c 74 20 3d 20 53 74 72      result = Str
2cb90 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
2cba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cbb0 20 20 20 20 20 22 7b 30 7d 7b 31 7d 7b 30 7d 22       "{0}{1}{0}"
2cbc0 2c 20 45 6e 76 69 72 6f 6e 6d 65 6e 74 2e 4e 65  , Environment.Ne
2cbd0 77 4c 69 6e 65 2c 20 72 65 73 75 6c 74 29 3b 0d  wLine, result);.
2cbe0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2cbf0 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
2cc00 20 20 20 20 65 6c 73 65 20 69 66 20 28 21 74 79      else if (!ty
2cc10 70 65 2e 49 73 53 75 62 63 6c 61 73 73 4f 66 28  pe.IsSubclassOf(
2cc20 74 79 70 65 6f 66 28 56 61 6c 75 65 54 79 70 65  typeof(ValueType
2cc30 29 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  )))..           
2cc40 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
2cc50 20 20 20 20 20 20 20 20 20 20 20 20 72 65 73 75              resu
2cc60 6c 74 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d  lt = String.Form
2cc70 61 74 28 22 5c 22 7b 30 7d 5c 22 22 2c 20 72 65  at("\"{0}\"", re
2cc80 73 75 6c 74 29 3b 0d 0a 20 20 20 20 20 20 20 20  sult);..        
2cc90 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
2cca0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
2ccb0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 72          return r
2ccc0 65 73 75 6c 74 3b 0d 0a 20 20 20 20 20 20 20 20  esult;..        
2ccd0 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72  }..        #endr
2cce0 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20  egion....       
2ccf0 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
2cd00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2cd10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2cd20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2cd30 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
2cd40 20 20 20 20 23 72 65 67 69 6f 6e 20 41 73 73 65      #region Asse
2cd50 6d 62 6c 79 20 41 74 74 72 69 62 75 74 65 20 48  mbly Attribute H
2cd60 61 6e 64 6c 69 6e 67 0d 0a 20 20 20 20 20 20 20  andling..       
2cd70 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 73   public static s
2cd80 74 72 69 6e 67 20 47 65 74 41 73 73 65 6d 62 6c  tring GetAssembl
2cd90 79 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 28 0d  yConfiguration(.
2cda0 0a 20 20 20 20 20 20 20 20 20 20 20 20 41 73 73  .            Ass
2cdb0 65 6d 62 6c 79 20 61 73 73 65 6d 62 6c 79 0d 0a  embly assembly..
2cdc0 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
2cdd0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
2cde0 20 20 20 20 20 20 69 66 20 28 61 73 73 65 6d 62        if (assemb
2cdf0 6c 79 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ly != null)..   
2ce00 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
2ce10 20 20 20 20 20 20 20 20 20 20 20 20 74 72 79 0d              try.
2ce20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2ce30 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
2ce40 20 20 20 20 20 20 20 20 69 66 20 28 61 73 73 65          if (asse
2ce50 6d 62 6c 79 2e 49 73 44 65 66 69 6e 65 64 28 0d  mbly.IsDefined(.
2ce60 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2ce70 20 20 20 20 20 20 20 20 20 20 20 20 20 74 79 70               typ
2ce80 65 6f 66 28 41 73 73 65 6d 62 6c 79 43 6f 6e 66  eof(AssemblyConf
2ce90 69 67 75 72 61 74 69 6f 6e 41 74 74 72 69 62 75  igurationAttribu
2cea0 74 65 29 2c 20 66 61 6c 73 65 29 29 0d 0a 20 20  te), false))..  
2ceb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cec0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
2ced0 20 20 20 20 20 20 20 20 20 20 20 20 20 41 73 73               Ass
2cee0 65 6d 62 6c 79 43 6f 6e 66 69 67 75 72 61 74 69  emblyConfigurati
2cef0 6f 6e 41 74 74 72 69 62 75 74 65 20 63 6f 6e 66  onAttribute conf
2cf00 69 67 75 72 61 74 69 6f 6e 20 3d 0d 0a 20 20 20  iguration =..   
2cf10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cf20 20 20 20 20 20 20 20 20 20 28 41 73 73 65 6d 62           (Assemb
2cf30 6c 79 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 41  lyConfigurationA
2cf40 74 74 72 69 62 75 74 65 29 0d 0a 20 20 20 20 20  ttribute)..     
2cf50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cf60 20 20 20 20 20 20 20 61 73 73 65 6d 62 6c 79 2e         assembly.
2cf70 47 65 74 43 75 73 74 6f 6d 41 74 74 72 69 62 75  GetCustomAttribu
2cf80 74 65 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20  tes(..          
2cf90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cfa0 20 20 20 20 20 20 74 79 70 65 6f 66 28 41 73 73        typeof(Ass
2cfb0 65 6d 62 6c 79 43 6f 6e 66 69 67 75 72 61 74 69  emblyConfigurati
2cfc0 6f 6e 41 74 74 72 69 62 75 74 65 29 2c 0d 0a 20  onAttribute),.. 
2cfd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cfe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66                 f
2cff0 61 6c 73 65 29 5b 30 5d 3b 0d 0a 0d 0a 20 20 20  alse)[0];....   
2d000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d010 20 20 20 20 20 72 65 74 75 72 6e 20 63 6f 6e 66       return conf
2d020 69 67 75 72 61 74 69 6f 6e 2e 43 6f 6e 66 69 67  iguration.Config
2d030 75 72 61 74 69 6f 6e 3b 0d 0a 20 20 20 20 20 20  uration;..      
2d040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
2d050 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2d060 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
2d070 20 20 20 20 63 61 74 63 68 0d 0a 20 20 20 20 20      catch..     
2d080 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
2d090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d0a0 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e    // do nothing.
2d0b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2d0c0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
2d0d0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
2d0e0 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a    return null;..
2d0f0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
2d100 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
2d110 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d120 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d130 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d140 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
2d150 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73          public s
2d160 74 61 74 69 63 20 73 74 72 69 6e 67 20 47 65 74  tatic string Get
2d170 41 73 73 65 6d 62 6c 79 54 69 74 6c 65 28 0d 0a  AssemblyTitle(..
2d180 20 20 20 20 20 20 20 20 20 20 20 20 41 73 73 65              Asse
2d190 6d 62 6c 79 20 61 73 73 65 6d 62 6c 79 0d 0a 20  mbly assembly.. 
2d1a0 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
2d1b0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
2d1c0 20 20 20 20 20 69 66 20 28 61 73 73 65 6d 62 6c       if (assembl
2d1d0 79 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  y != null)..    
2d1e0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
2d1f0 20 20 20 20 20 20 20 20 20 20 20 74 72 79 0d 0a             try..
2d200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d210 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
2d220 20 20 20 20 20 20 20 69 66 20 28 61 73 73 65 6d         if (assem
2d230 62 6c 79 2e 49 73 44 65 66 69 6e 65 64 28 0d 0a  bly.IsDefined(..
2d240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d250 20 20 20 20 20 20 20 20 20 20 20 20 74 79 70 65              type
2d260 6f 66 28 41 73 73 65 6d 62 6c 79 54 69 74 6c 65  of(AssemblyTitle
2d270 41 74 74 72 69 62 75 74 65 29 2c 20 66 61 6c 73  Attribute), fals
2d280 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e))..           
2d290 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
2d2a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d2b0 20 20 20 20 41 73 73 65 6d 62 6c 79 54 69 74 6c      AssemblyTitl
2d2c0 65 41 74 74 72 69 62 75 74 65 20 74 69 74 6c 65  eAttribute title
2d2d0 20 3d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   =..            
2d2e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d2f0 28 41 73 73 65 6d 62 6c 79 54 69 74 6c 65 41 74  (AssemblyTitleAt
2d300 74 72 69 62 75 74 65 29 0d 0a 20 20 20 20 20 20  tribute)..      
2d310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d320 20 20 20 20 20 20 61 73 73 65 6d 62 6c 79 2e 47        assembly.G
2d330 65 74 43 75 73 74 6f 6d 41 74 74 72 69 62 75 74  etCustomAttribut
2d340 65 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  es(..           
2d350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d360 20 20 20 20 20 74 79 70 65 6f 66 28 41 73 73 65       typeof(Asse
2d370 6d 62 6c 79 54 69 74 6c 65 41 74 74 72 69 62 75  mblyTitleAttribu
2d380 74 65 29 2c 20 66 61 6c 73 65 29 5b 30 5d 3b 0d  te), false)[0];.
2d390 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
2d3a0 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
2d3b0 6e 20 74 69 74 6c 65 2e 54 69 74 6c 65 3b 0d 0a  n title.Title;..
2d3c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d3d0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
2d3e0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
2d3f0 20 20 20 20 20 20 20 20 20 20 63 61 74 63 68 0d            catch.
2d400 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2d410 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
2d420 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f          // do no
2d430 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20  thing...        
2d440 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
2d450 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
2d460 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e          return n
2d470 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  ull;..        }.
2d480 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67  .        #endreg
2d490 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f  ion....        /
2d4a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d4b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d4c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d4d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d4e0 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
2d4f0 20 20 23 72 65 67 69 6f 6e 20 2e 4e 45 54 20 46    #region .NET F
2d500 72 61 6d 65 77 6f 72 6b 20 48 61 6e 64 6c 69 6e  ramework Handlin
2d510 67 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61  g..        priva
2d520 74 65 20 73 74 61 74 69 63 20 73 74 72 69 6e 67  te static string
2d530 20 47 65 74 46 72 61 6d 65 77 6f 72 6b 52 6f 6f   GetFrameworkRoo
2d540 74 4b 65 79 4e 61 6d 65 28 0d 0a 20 20 20 20 20  tKeyName(..     
2d550 20 20 20 20 20 20 20 62 6f 6f 6c 20 70 65 72 55         bool perU
2d560 73 65 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ser,..          
2d570 20 20 62 6f 6f 6c 20 77 6f 77 36 34 0d 0a 20 20    bool wow64..  
2d580 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
2d590 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
2d5a0 20 20 20 20 72 65 74 75 72 6e 20 53 74 72 69 6e      return Strin
2d5b0 67 2e 46 6f 72 6d 61 74 28 22 7b 30 7d 5c 5c 4d  g.Format("{0}\\M
2d5c0 69 63 72 6f 73 6f 66 74 5c 5c 2e 4e 45 54 46 72  icrosoft\\.NETFr
2d5d0 61 6d 65 77 6f 72 6b 22 2c 0d 0a 20 20 20 20 20  amework",..     
2d5e0 20 20 20 20 20 20 20 20 20 20 20 47 65 74 52 6f             GetRo
2d5f0 6f 74 4b 65 79 4e 61 6d 65 28 70 65 72 55 73 65  otKeyName(perUse
2d600 72 2c 20 77 6f 77 36 34 29 29 3b 0d 0a 20 20 20  r, wow64));..   
2d610 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
2d620 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
2d630 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d640 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d650 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d660 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
2d670 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61       private sta
2d680 74 69 63 20 73 74 72 69 6e 67 20 47 65 74 46 72  tic string GetFr
2d690 61 6d 65 77 6f 72 6b 4b 65 79 4e 61 6d 65 28 0d  ameworkKeyName(.
2d6a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72  .            str
2d6b0 69 6e 67 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d  ing frameworkNam
2d6c0 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
2d6d0 56 65 72 73 69 6f 6e 20 66 72 61 6d 65 77 6f 72  Version framewor
2d6e0 6b 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20  kVersion,..     
2d6f0 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 70 6c         string pl
2d700 61 74 66 6f 72 6d 4e 61 6d 65 2c 0d 0a 20 20 20  atformName,..   
2d710 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 70 65           bool pe
2d720 72 55 73 65 72 2c 0d 0a 20 20 20 20 20 20 20 20  rUser,..        
2d730 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34 0d 0a      bool wow64..
2d740 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
2d750 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
2d760 20 20 20 20 20 20 73 74 72 69 6e 67 20 66 6f 72        string for
2d770 6d 61 74 20 3d 20 21 53 74 72 69 6e 67 2e 49 73  mat = !String.Is
2d780 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 70 6c 61 74  NullOrEmpty(plat
2d790 66 6f 72 6d 4e 61 6d 65 29 20 3f 0d 0a 20 20 20  formName) ?..   
2d7a0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 7b 30               "{0
2d7b0 7d 5c 5c 4d 69 63 72 6f 73 6f 66 74 5c 5c 7b 31  }\\Microsoft\\{1
2d7c0 7d 5c 5c 76 7b 32 7d 5c 5c 7b 33 7d 22 20 3a 0d  }\\v{2}\\{3}" :.
2d7d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2d7e0 20 22 7b 30 7d 5c 5c 4d 69 63 72 6f 73 6f 66 74   "{0}\\Microsoft
2d7f0 5c 5c 7b 31 7d 5c 5c 76 7b 32 7d 22 3b 0d 0a 0d  \\{1}\\v{2}";...
2d800 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
2d810 75 72 6e 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61  urn String.Forma
2d820 74 28 66 6f 72 6d 61 74 2c 20 47 65 74 52 6f 6f  t(format, GetRoo
2d830 74 4b 65 79 4e 61 6d 65 28 70 65 72 55 73 65 72  tKeyName(perUser
2d840 2c 20 77 6f 77 36 34 29 2c 0d 0a 20 20 20 20 20  , wow64),..     
2d850 20 20 20 20 20 20 20 20 20 20 20 66 72 61 6d 65             frame
2d860 77 6f 72 6b 4e 61 6d 65 2c 20 66 72 61 6d 65 77  workName, framew
2d870 6f 72 6b 56 65 72 73 69 6f 6e 2c 20 70 6c 61 74  orkVersion, plat
2d880 66 6f 72 6d 4e 61 6d 65 29 3b 0d 0a 20 20 20 20  formName);..    
2d890 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
2d8a0 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
2d8b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d8c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d8d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d8e0 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
2d8f0 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74      private stat
2d900 69 63 20 73 74 72 69 6e 67 20 47 65 74 49 6d 61  ic string GetIma
2d910 67 65 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e  geRuntimeVersion
2d920 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  (..            s
2d930 74 72 69 6e 67 20 66 69 6c 65 4e 61 6d 65 0d 0a  tring fileName..
2d940 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
2d950 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
2d960 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20        try..     
2d970 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
2d980 20 20 20 20 20 20 20 20 20 20 41 73 73 65 6d 62            Assemb
2d990 6c 79 20 61 73 73 65 6d 62 6c 79 20 3d 20 41 73  ly assembly = As
2d9a0 73 65 6d 62 6c 79 2e 52 65 66 6c 65 63 74 69 6f  sembly.Reflectio
2d9b0 6e 4f 6e 6c 79 4c 6f 61 64 46 72 6f 6d 28 0d 0a  nOnlyLoadFrom(..
2d9c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d9d0 20 20 20 20 66 69 6c 65 4e 61 6d 65 29 3b 20 2f      fileName); /
2d9e0 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a 0d 0a 20 20  * throw */....  
2d9f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
2da00 20 28 61 73 73 65 6d 62 6c 79 20 21 3d 20 6e 75   (assembly != nu
2da10 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
2da20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
2da30 61 73 73 65 6d 62 6c 79 2e 49 6d 61 67 65 52 75  assembly.ImageRu
2da40 6e 74 69 6d 65 56 65 72 73 69 6f 6e 3b 0d 0a 20  ntimeVersion;.. 
2da50 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
2da60 20 20 20 20 20 20 20 20 20 20 63 61 74 63 68 0d            catch.
2da70 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
2da80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2da90 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a  // do nothing...
2daa0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
2dab0 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
2dac0 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20  urn null;..     
2dad0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
2dae0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2daf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2db00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2db10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2db20 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
2db30 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69     private stati
2db40 63 20 73 74 72 69 6e 67 20 47 65 74 46 72 61 6d  c string GetFram
2db50 65 77 6f 72 6b 44 69 72 65 63 74 6f 72 79 28 0d  eworkDirectory(.
2db60 0a 20 20 20 20 20 20 20 20 20 20 20 20 4d 6f 63  .            Moc
2db70 6b 52 65 67 69 73 74 72 79 4b 65 79 20 72 6f 6f  kRegistryKey roo
2db80 74 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20  tKey,..         
2db90 20 20 20 56 65 72 73 69 6f 6e 20 66 72 61 6d 65     Version frame
2dba0 77 6f 72 6b 56 65 72 73 69 6f 6e 2c 0d 0a 20 20  workVersion,..  
2dbb0 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 70            bool p
2dbc0 65 72 55 73 65 72 2c 0d 0a 20 20 20 20 20 20 20  erUser,..       
2dbd0 20 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34 2c       bool wow64,
2dbe0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f  ..            bo
2dbf0 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20  ol whatIf,..    
2dc00 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65 72          bool ver
2dc10 62 6f 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20  bose..          
2dc20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a    )..        {..
2dc30 20 20 20 20 20 20 20 20 20 20 20 20 75 73 69 6e              usin
2dc40 67 20 28 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b  g (MockRegistryK
2dc50 65 79 20 6b 65 79 20 3d 20 52 65 67 69 73 74 72  ey key = Registr
2dc60 79 48 65 6c 70 65 72 2e 4f 70 65 6e 53 75 62 4b  yHelper.OpenSubK
2dc70 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ey(..           
2dc80 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79           rootKey
2dc90 2c 20 47 65 74 46 72 61 6d 65 77 6f 72 6b 52 6f  , GetFrameworkRo
2dca0 6f 74 4b 65 79 4e 61 6d 65 28 70 65 72 55 73 65  otKeyName(perUse
2dcb0 72 2c 20 77 6f 77 36 34 29 2c 0d 0a 20 20 20 20  r, wow64),..    
2dcc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2dcd0 66 61 6c 73 65 2c 20 77 68 61 74 49 66 2c 20 76  false, whatIf, v
2dce0 65 72 62 6f 73 65 29 29 0d 0a 20 20 20 20 20 20  erbose))..      
2dcf0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
2dd00 20 20 20 20 20 20 20 20 20 69 66 20 28 6b 65 79           if (key
2dd10 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
2dd20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
2dd30 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20  eturn null;.... 
2dd40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6f                 o
2dd50 62 6a 65 63 74 20 76 61 6c 75 65 20 3d 20 52 65  bject value = Re
2dd60 67 69 73 74 72 79 48 65 6c 70 65 72 2e 47 65 74  gistryHelper.Get
2dd70 56 61 6c 75 65 28 0d 0a 20 20 20 20 20 20 20 20  Value(..        
2dd80 20 20 20 20 20 20 20 20 20 20 20 20 6b 65 79 2c              key,
2dd90 20 22 49 6e 73 74 61 6c 6c 52 6f 6f 74 22 2c 20   "InstallRoot", 
2dda0 6e 75 6c 6c 2c 20 77 68 61 74 49 66 2c 20 76 65  null, whatIf, ve
2ddb0 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20  rbose);....     
2ddc0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21             if (!
2ddd0 28 76 61 6c 75 65 20 69 73 20 73 74 72 69 6e 67  (value is string
2dde0 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
2ddf0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e          return n
2de00 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ull;....        
2de10 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 50          return P
2de20 61 74 68 2e 43 6f 6d 62 69 6e 65 28 0d 0a 20 20  ath.Combine(..  
2de30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2de40 20 20 28 73 74 72 69 6e 67 29 76 61 6c 75 65 2c    (string)value,
2de50 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 22   String.Format("
2de60 76 7b 30 7d 22 2c 20 66 72 61 6d 65 77 6f 72 6b  v{0}", framework
2de70 56 65 72 73 69 6f 6e 29 29 3b 0d 0a 20 20 20 20  Version));..    
2de80 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
2de90 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65     }..        #e
2dea0 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20  ndregion....    
2deb0 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
2dec0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ded0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2dee0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2def0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
2df00 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50         #region P
2df10 65 72 2d 46 72 61 6d 65 77 6f 72 6b 2f 50 6c 61  er-Framework/Pla
2df20 74 66 6f 72 6d 20 48 61 6e 64 6c 69 6e 67 0d 0a  tform Handling..
2df30 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
2df40 73 74 61 74 69 63 20 76 6f 69 64 20 49 6e 69 74  static void Init
2df50 69 61 6c 69 7a 65 46 72 61 6d 65 77 6f 72 6b 4c  ializeFrameworkL
2df60 69 73 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ist(..          
2df70 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65    MockRegistryKe
2df80 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20 20  y rootKey,..    
2df90 20 20 20 20 20 20 20 20 43 6f 6e 66 69 67 75 72          Configur
2dfa0 61 74 69 6f 6e 20 63 6f 6e 66 69 67 75 72 61 74  ation configurat
2dfb0 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ion,..          
2dfc0 20 20 72 65 66 20 46 72 61 6d 65 77 6f 72 6b 4c    ref FrameworkL
2dfd0 69 73 74 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73  ist frameworkLis
2dfe0 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29  t..            )
2dff0 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
2e000 20 20 20 20 20 20 20 20 20 69 66 20 28 66 72 61           if (fra
2e010 6d 65 77 6f 72 6b 4c 69 73 74 20 3d 3d 20 6e 75  meworkList == nu
2e020 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
2e030 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 4c 69       frameworkLi
2e040 73 74 20 3d 20 6e 65 77 20 46 72 61 6d 65 77 6f  st = new Framewo
2e050 72 6b 4c 69 73 74 28 29 3b 0d 0a 0d 0a 20 20 20  rkList();....   
2e060 20 20 20 20 20 20 20 20 20 69 66 20 28 66 72 61           if (fra
2e070 6d 65 77 6f 72 6b 4c 69 73 74 2e 52 6f 6f 74 4b  meworkList.RootK
2e080 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ey == null)..   
2e090 20 20 20 20 20 20 20 20 20 20 20 20 20 66 72 61               fra
2e0a0 6d 65 77 6f 72 6b 4c 69 73 74 2e 52 6f 6f 74 4b  meworkList.RootK
2e0b0 65 79 20 3d 20 72 6f 6f 74 4b 65 79 3b 0d 0a 0d  ey = rootKey;...
2e0c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
2e0d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e0e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e0f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e100 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e110 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2e120 69 66 20 28 66 72 61 6d 65 77 6f 72 6b 4c 69 73  if (frameworkLis
2e130 74 2e 4e 61 6d 65 73 20 3d 3d 20 6e 75 6c 6c 29  t.Names == null)
2e140 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
2e150 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2e160 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 4e   frameworkList.N
2e170 61 6d 65 73 20 3d 20 6e 65 77 20 53 74 72 69 6e  ames = new Strin
2e180 67 4c 69 73 74 28 29 3b 0d 0a 0d 0a 20 20 20 20  gList();....    
2e190 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
2e1a0 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 3d  (configuration =
2e1b0 3d 20 6e 75 6c 6c 29 20 7c 7c 20 21 63 6f 6e 66  = null) || !conf
2e1c0 69 67 75 72 61 74 69 6f 6e 2e 4e 6f 44 65 73 6b  iguration.NoDesk
2e1d0 74 6f 70 29 0d 0a 20 20 20 20 20 20 20 20 20 20  top)..          
2e1e0 20 20 20 20 20 20 20 20 20 20 66 72 61 6d 65 77            framew
2e1f0 6f 72 6b 4c 69 73 74 2e 4e 61 6d 65 73 2e 41 64  orkList.Names.Ad
2e200 64 28 22 2e 4e 45 54 46 72 61 6d 65 77 6f 72 6b  d(".NETFramework
2e210 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ");....         
2e220 20 20 20 20 20 20 20 69 66 20 28 28 63 6f 6e 66         if ((conf
2e230 69 67 75 72 61 74 69 6f 6e 20 3d 3d 20 6e 75 6c  iguration == nul
2e240 6c 29 20 7c 7c 20 21 63 6f 6e 66 69 67 75 72 61  l) || !configura
2e250 74 69 6f 6e 2e 4e 6f 43 6f 6d 70 61 63 74 29 0d  tion.NoCompact).
2e260 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2e270 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
2e280 20 20 20 20 20 20 20 20 66 72 61 6d 65 77 6f 72          framewor
2e290 6b 4c 69 73 74 2e 4e 61 6d 65 73 2e 41 64 64 28  kList.Names.Add(
2e2a0 22 2e 4e 45 54 43 6f 6d 70 61 63 74 46 72 61 6d  ".NETCompactFram
2e2b0 65 77 6f 72 6b 22 29 3b 0d 0a 20 20 20 20 20 20  ework");..      
2e2c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 72                fr
2e2d0 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 4e 61 6d 65  ameworkList.Name
2e2e0 73 2e 41 64 64 28 22 2e 4e 45 54 43 6f 6d 70 61  s.Add(".NETCompa
2e2f0 63 74 46 72 61 6d 65 77 6f 72 6b 22 29 3b 0d 0a  ctFramework");..
2e300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e310 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73      frameworkLis
2e320 74 2e 4e 61 6d 65 73 2e 41 64 64 28 22 2e 4e 45  t.Names.Add(".NE
2e330 54 43 6f 6d 70 61 63 74 46 72 61 6d 65 77 6f 72  TCompactFramewor
2e340 6b 22 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  k");..          
2e350 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
2e360 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
2e370 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
2e380 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e390 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e3a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e3b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
2e3c0 20 20 20 20 20 20 20 20 20 69 66 20 28 66 72 61           if (fra
2e3d0 6d 65 77 6f 72 6b 4c 69 73 74 2e 56 65 72 73 69  meworkList.Versi
2e3e0 6f 6e 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  ons == null)..  
2e3f0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
2e400 20 20 20 20 20 20 20 20 20 20 20 20 20 66 72 61               fra
2e410 6d 65 77 6f 72 6b 4c 69 73 74 2e 56 65 72 73 69  meworkList.Versi
2e420 6f 6e 73 20 3d 20 6e 65 77 20 56 65 72 73 69 6f  ons = new Versio
2e430 6e 4d 61 70 28 29 3b 0d 0a 0d 0a 20 20 20 20 20  nMap();....     
2e440 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 28             if ((
2e450 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 3d 3d  configuration ==
2e460 20 6e 75 6c 6c 29 20 7c 7c 20 21 63 6f 6e 66 69   null) || !confi
2e470 67 75 72 61 74 69 6f 6e 2e 4e 6f 44 65 73 6b 74  guration.NoDeskt
2e480 6f 70 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  op)..           
2e490 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
2e4a0 20 20 20 20 20 20 20 20 20 20 20 20 56 65 72 73              Vers
2e4b0 69 6f 6e 4c 69 73 74 20 64 65 73 6b 74 6f 70 56  ionList desktopV
2e4c0 65 72 73 69 6f 6e 4c 69 73 74 20 3d 20 6e 65 77  ersionList = new
2e4d0 20 56 65 72 73 69 6f 6e 4c 69 73 74 28 29 3b 0d   VersionList();.
2e4e0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
2e4f0 20 20 20 20 20 20 20 69 66 20 28 28 63 6f 6e 66         if ((conf
2e500 69 67 75 72 61 74 69 6f 6e 20 3d 3d 20 6e 75 6c  iguration == nul
2e510 6c 29 20 7c 7c 20 21 63 6f 6e 66 69 67 75 72 61  l) || !configura
2e520 74 69 6f 6e 2e 4e 6f 4e 65 74 46 78 32 30 29 0d  tion.NoNetFx20).
2e530 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2e540 20 20 20 20 20 20 20 20 20 64 65 73 6b 74 6f 70           desktop
2e550 56 65 72 73 69 6f 6e 4c 69 73 74 2e 41 64 64 28  VersionList.Add(
2e560 6e 65 77 20 56 65 72 73 69 6f 6e 28 32 2c 20 30  new Version(2, 0
2e570 2c 20 35 30 37 32 37 29 29 3b 0d 0a 0d 0a 20 20  , 50727));....  
2e580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e590 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
2e5a0 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54            // NOT
2e5b0 45 3a 20 54 68 65 20 2e 4e 45 54 20 46 72 61 6d  E: The .NET Fram
2e5c0 65 77 6f 72 6b 20 33 2e 35 20 64 6f 65 73 20 6e  ework 3.5 does n
2e5d0 6f 74 20 68 61 76 65 20 69 74 73 20 6f 77 6e 0d  ot have its own.
2e5e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2e5f0 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 64 69       //       di
2e600 72 65 63 74 6f 72 79 3b 20 68 6f 77 65 76 65 72  rectory; however
2e610 2c 20 69 74 20 73 74 69 6c 6c 20 6d 61 79 20 68  , it still may h
2e620 61 76 65 20 61 73 73 65 6d 62 6c 79 0d 0a 20 20  ave assembly..  
2e630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e640 20 20 2f 2f 20 20 20 20 20 20 20 66 6f 6c 64 65    //       folde
2e650 72 73 20 66 6f 72 20 75 73 65 20 69 6e 20 56 69  rs for use in Vi
2e660 73 75 61 6c 20 53 74 75 64 69 6f 2c 20 65 74 63  sual Studio, etc
2e670 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
2e680 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
2e690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
2e6a0 66 20 28 28 63 6f 6e 66 69 67 75 72 61 74 69 6f  f ((configuratio
2e6b0 6e 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20 21 63  n == null) || !c
2e6c0 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 4e 6f 4e  onfiguration.NoN
2e6d0 65 74 46 78 33 35 29 0d 0a 20 20 20 20 20 20 20  etFx35)..       
2e6e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e6f0 20 64 65 73 6b 74 6f 70 56 65 72 73 69 6f 6e 4c   desktopVersionL
2e700 69 73 74 2e 41 64 64 28 6e 65 77 20 56 65 72 73  ist.Add(new Vers
2e710 69 6f 6e 28 33 2c 20 35 29 29 3b 0d 0a 0d 0a 20  ion(3, 5));.... 
2e720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e730 20 20 20 69 66 20 28 28 63 6f 6e 66 69 67 75 72     if ((configur
2e740 61 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 20 7c  ation == null) |
2e750 7c 20 21 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  | !configuration
2e760 2e 4e 6f 4e 65 74 46 78 34 30 29 0d 0a 20 20 20  .NoNetFx40)..   
2e770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e780 20 20 20 20 20 64 65 73 6b 74 6f 70 56 65 72 73       desktopVers
2e790 69 6f 6e 4c 69 73 74 2e 41 64 64 28 6e 65 77 20  ionList.Add(new 
2e7a0 56 65 72 73 69 6f 6e 28 34 2c 20 30 2c 20 33 30  Version(4, 0, 30
2e7b0 33 31 39 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  319));....      
2e7c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
2e7d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2e7e0 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 54        // NOTE: T
2e7f0 68 65 20 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72  he .NET Framewor
2e800 6b 20 34 2e 35 20 64 6f 65 73 20 6e 6f 74 20 68  k 4.5 does not h
2e810 61 76 65 20 69 74 73 20 6f 77 6e 0d 0a 20 20 20  ave its own..   
2e820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e830 20 2f 2f 20 20 20 20 20 20 20 64 69 72 65 63 74   //       direct
2e840 6f 72 79 3b 20 68 6f 77 65 76 65 72 2c 20 69 74  ory; however, it
2e850 20 73 74 69 6c 6c 20 6d 61 79 20 68 61 76 65 20   still may have 
2e860 61 73 73 65 6d 62 6c 79 0d 0a 20 20 20 20 20 20  assembly..      
2e870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
2e880 20 20 20 20 20 20 20 66 6f 6c 64 65 72 73 20 66         folders f
2e890 6f 72 20 75 73 65 20 69 6e 20 56 69 73 75 61 6c  or use in Visual
2e8a0 20 53 74 75 64 69 6f 2c 20 65 74 63 2e 0d 0a 20   Studio, etc... 
2e8b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e8c0 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
2e8d0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 28             if ((
2e8e0 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 3d 3d  configuration ==
2e8f0 20 6e 75 6c 6c 29 20 7c 7c 20 21 63 6f 6e 66 69   null) || !confi
2e900 67 75 72 61 74 69 6f 6e 2e 4e 6f 4e 65 74 46 78  guration.NoNetFx
2e910 34 35 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  45)..           
2e920 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65 73               des
2e930 6b 74 6f 70 56 65 72 73 69 6f 6e 4c 69 73 74 2e  ktopVersionList.
2e940 41 64 64 28 6e 65 77 20 56 65 72 73 69 6f 6e 28  Add(new Version(
2e950 34 2c 20 35 2c 20 35 30 37 30 39 29 29 3b 0d 0a  4, 5, 50709));..
2e960 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2e970 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
2e980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
2e990 20 4e 4f 54 45 3a 20 54 68 65 20 2e 4e 45 54 20   NOTE: The .NET 
2e9a0 46 72 61 6d 65 77 6f 72 6b 20 34 2e 35 2e 31 20  Framework 4.5.1 
2e9b0 64 6f 65 73 20 6e 6f 74 20 68 61 76 65 20 69 74  does not have it
2e9c0 73 20 6f 77 6e 0d 0a 20 20 20 20 20 20 20 20 20  s own..         
2e9d0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
2e9e0 20 20 20 20 64 69 72 65 63 74 6f 72 79 3b 20 68      directory; h
2e9f0 6f 77 65 76 65 72 2c 20 69 74 20 73 74 69 6c 6c  owever, it still
2ea00 20 6d 61 79 20 68 61 76 65 20 61 73 73 65 6d 62   may have assemb
2ea10 6c 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ly..            
2ea20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
2ea30 20 66 6f 6c 64 65 72 73 20 66 6f 72 20 75 73 65   folders for use
2ea40 20 69 6e 20 56 69 73 75 61 6c 20 53 74 75 64 69   in Visual Studi
2ea50 6f 2c 20 65 74 63 2e 0d 0a 20 20 20 20 20 20 20  o, etc...       
2ea60 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
2ea70 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2ea80 20 20 20 20 20 69 66 20 28 28 63 6f 6e 66 69 67       if ((config
2ea90 75 72 61 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29  uration == null)
2eaa0 20 7c 7c 20 21 63 6f 6e 66 69 67 75 72 61 74 69   || !configurati
2eab0 6f 6e 2e 4e 6f 4e 65 74 46 78 34 35 31 29 0d 0a  on.NoNetFx451)..
2eac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ead0 20 20 20 20 20 20 20 20 64 65 73 6b 74 6f 70 56          desktopV
2eae0 65 72 73 69 6f 6e 4c 69 73 74 2e 41 64 64 28 6e  ersionList.Add(n
2eaf0 65 77 20 56 65 72 73 69 6f 6e 28 34 2c 20 35 2c  ew Version(4, 5,
2eb00 20 31 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20   1));....       
2eb10 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
2eb20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2eb30 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 54 68       // NOTE: Th
2eb40 65 20 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72 6b  e .NET Framework
2eb50 20 34 2e 35 2e 32 20 64 6f 65 73 20 6e 6f 74 20   4.5.2 does not 
2eb60 68 61 76 65 20 69 74 73 20 6f 77 6e 0d 0a 20 20  have its own..  
2eb70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2eb80 20 20 2f 2f 20 20 20 20 20 20 20 64 69 72 65 63    //       direc
2eb90 74 6f 72 79 3b 20 68 6f 77 65 76 65 72 2c 20 69  tory; however, i
2eba0 74 20 73 74 69 6c 6c 20 6d 61 79 20 68 61 76 65  t still may have
2ebb0 20 61 73 73 65 6d 62 6c 79 0d 0a 20 20 20 20 20   assembly..     
2ebc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
2ebd0 2f 20 20 20 20 20 20 20 66 6f 6c 64 65 72 73 20  /       folders 
2ebe0 66 6f 72 20 75 73 65 20 69 6e 20 56 69 73 75 61  for use in Visua
2ebf0 6c 20 53 74 75 64 69 6f 2c 20 65 74 63 2e 0d 0a  l Studio, etc...
2ec00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ec10 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
2ec20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
2ec30 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 3d  (configuration =
2ec40 3d 20 6e 75 6c 6c 29 20 7c 7c 20 21 63 6f 6e 66  = null) || !conf
2ec50 69 67 75 72 61 74 69 6f 6e 2e 4e 6f 4e 65 74 46  iguration.NoNetF
2ec60 78 34 35 32 29 0d 0a 20 20 20 20 20 20 20 20 20  x452)..         
2ec70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64                 d
2ec80 65 73 6b 74 6f 70 56 65 72 73 69 6f 6e 4c 69 73  esktopVersionLis
2ec90 74 2e 41 64 64 28 6e 65 77 20 56 65 72 73 69 6f  t.Add(new Versio
2eca0 6e 28 34 2c 20 35 2c 20 32 29 29 3b 0d 0a 0d 0a  n(4, 5, 2));....
2ecb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ecc0 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
2ecd0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e              // N
2ece0 4f 54 45 3a 20 54 68 65 20 2e 4e 45 54 20 46 72  OTE: The .NET Fr
2ecf0 61 6d 65 77 6f 72 6b 20 34 2e 36 20 64 6f 65 73  amework 4.6 does
2ed00 20 6e 6f 74 20 68 61 76 65 20 69 74 73 20 6f 77   not have its ow
2ed10 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  n..             
2ed20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
2ed30 64 69 72 65 63 74 6f 72 79 3b 20 68 6f 77 65 76  directory; howev
2ed40 65 72 2c 20 69 74 20 73 74 69 6c 6c 20 6d 61 79  er, it still may
2ed50 20 68 61 76 65 20 61 73 73 65 6d 62 6c 79 0d 0a   have assembly..
2ed60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ed70 20 20 20 20 2f 2f 20 20 20 20 20 20 20 66 6f 6c      //       fol
2ed80 64 65 72 73 20 66 6f 72 20 75 73 65 20 69 6e 20  ders for use in 
2ed90 56 69 73 75 61 6c 20 53 74 75 64 69 6f 2c 20 65  Visual Studio, e
2eda0 74 63 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  tc...           
2edb0 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
2edc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2edd0 20 69 66 20 28 28 63 6f 6e 66 69 67 75 72 61 74   if ((configurat
2ede0 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20  ion == null) || 
2edf0 21 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 4e  !configuration.N
2ee00 6f 4e 65 74 46 78 34 36 29 0d 0a 20 20 20 20 20  oNetFx46)..     
2ee10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ee20 20 20 20 64 65 73 6b 74 6f 70 56 65 72 73 69 6f     desktopVersio
2ee30 6e 4c 69 73 74 2e 41 64 64 28 6e 65 77 20 56 65  nList.Add(new Ve
2ee40 72 73 69 6f 6e 28 34 2c 20 36 29 29 3b 0d 0a 0d  rsion(4, 6));...
2ee50 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2ee60 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 4c 69       frameworkLi
2ee70 73 74 2e 56 65 72 73 69 6f 6e 73 2e 41 64 64 28  st.Versions.Add(
2ee80 22 2e 4e 45 54 46 72 61 6d 65 77 6f 72 6b 22 2c  ".NETFramework",
2ee90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2eea0 20 20 20 20 20 20 20 20 20 20 64 65 73 6b 74 6f            deskto
2eeb0 70 56 65 72 73 69 6f 6e 4c 69 73 74 29 3b 0d 0a  pVersionList);..
2eec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2eed0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
2eee0 20 20 20 20 20 69 66 20 28 28 63 6f 6e 66 69 67       if ((config
2eef0 75 72 61 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29  uration == null)
2ef00 20 7c 7c 20 21 63 6f 6e 66 69 67 75 72 61 74 69   || !configurati
2ef10 6f 6e 2e 4e 6f 43 6f 6d 70 61 63 74 29 0d 0a 20  on.NoCompact).. 
2ef20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
2ef30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2ef40 20 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 4c        frameworkL
2ef50 69 73 74 2e 56 65 72 73 69 6f 6e 73 2e 41 64 64  ist.Versions.Add
2ef60 28 22 2e 4e 45 54 43 6f 6d 70 61 63 74 46 72 61  (".NETCompactFra
2ef70 6d 65 77 6f 72 6b 22 2c 0d 0a 20 20 20 20 20 20  mework",..      
2ef80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ef90 20 20 6e 65 77 20 56 65 72 73 69 6f 6e 4c 69 73    new VersionLis
2efa0 74 28 6e 65 77 20 56 65 72 73 69 6f 6e 5b 5d 20  t(new Version[] 
2efb0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
2efc0 20 20 20 20 20 20 20 20 20 20 20 6e 65 77 20 56             new V
2efd0 65 72 73 69 6f 6e 28 32 2c 20 30 2c 20 30 2c 20  ersion(2, 0, 0, 
2efe0 30 29 2c 20 6e 65 77 20 56 65 72 73 69 6f 6e 28  0), new Version(
2eff0 33 2c 20 35 2c 20 30 2c 20 30 29 0d 0a 20 20 20  3, 5, 0, 0)..   
2f000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f010 20 7d 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20   }));..         
2f020 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
2f030 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
2f040 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
2f050 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f060 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f070 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f080 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
2f090 20 20 20 20 20 20 20 20 20 20 69 66 20 28 66 72            if (fr
2f0a0 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 50 6c 61 74  ameworkList.Plat
2f0b0 66 6f 72 6d 4e 61 6d 65 73 20 3d 3d 20 6e 75 6c  formNames == nul
2f0c0 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
2f0d0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
2f0e0 20 20 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74     frameworkList
2f0f0 2e 50 6c 61 74 66 6f 72 6d 4e 61 6d 65 73 20 3d  .PlatformNames =
2f100 20 6e 65 77 20 53 74 72 69 6e 67 4c 69 73 74 28   new StringList(
2f110 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
2f120 20 20 20 20 20 20 69 66 20 28 28 63 6f 6e 66 69        if ((confi
2f130 67 75 72 61 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c  guration == null
2f140 29 20 7c 7c 20 21 63 6f 6e 66 69 67 75 72 61 74  ) || !configurat
2f150 69 6f 6e 2e 4e 6f 44 65 73 6b 74 6f 70 29 0d 0a  ion.NoDesktop)..
2f160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f170 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73      frameworkLis
2f180 74 2e 50 6c 61 74 66 6f 72 6d 4e 61 6d 65 73 2e  t.PlatformNames.
2f190 41 64 64 28 6e 75 6c 6c 29 3b 0d 0a 0d 0a 20 20  Add(null);....  
2f1a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
2f1b0 20 28 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e   ((configuration
2f1c0 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20 21 63 6f   == null) || !co
2f1d0 6e 66 69 67 75 72 61 74 69 6f 6e 2e 4e 6f 43 6f  nfiguration.NoCo
2f1e0 6d 70 61 63 74 29 0d 0a 20 20 20 20 20 20 20 20  mpact)..        
2f1f0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
2f200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66                 f
2f210 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 50 6c 61  rameworkList.Pla
2f220 74 66 6f 72 6d 4e 61 6d 65 73 2e 41 64 64 28 22  tformNames.Add("
2f230 50 6f 63 6b 65 74 50 43 22 29 3b 0d 0a 20 20 20  PocketPC");..   
2f240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f250 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 50   frameworkList.P
2f260 6c 61 74 66 6f 72 6d 4e 61 6d 65 73 2e 41 64 64  latformNames.Add
2f270 28 22 53 6d 61 72 74 70 68 6f 6e 65 22 29 3b 0d  ("Smartphone");.
2f280 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2f290 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 4c 69       frameworkLi
2f2a0 73 74 2e 50 6c 61 74 66 6f 72 6d 4e 61 6d 65 73  st.PlatformNames
2f2b0 2e 41 64 64 28 22 57 69 6e 64 6f 77 73 43 45 22  .Add("WindowsCE"
2f2c0 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
2f2d0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
2f2e0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d     }..        }.
2f2f0 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
2f300 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f310 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f320 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f330 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f340 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72  //....        pr
2f350 69 76 61 74 65 20 73 74 61 74 69 63 20 62 6f 6f  ivate static boo
2f360 6c 20 48 61 76 65 46 72 61 6d 65 77 6f 72 6b 44  l HaveFrameworkD
2f370 69 72 65 63 74 6f 72 79 28 0d 0a 20 20 20 20 20  irectory(..     
2f380 20 20 20 20 20 20 20 4d 6f 63 6b 52 65 67 69 73         MockRegis
2f390 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79 2c 0d  tryKey rootKey,.
2f3a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72  .            str
2f3b0 69 6e 67 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d  ing frameworkNam
2f3c0 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
2f3d0 56 65 72 73 69 6f 6e 20 66 72 61 6d 65 77 6f 72  Version framewor
2f3e0 6b 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20  kVersion,..     
2f3f0 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 70 6c         string pl
2f400 61 74 66 6f 72 6d 4e 61 6d 65 2c 0d 0a 20 20 20  atformName,..   
2f410 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 70 65           bool pe
2f420 72 55 73 65 72 2c 0d 0a 20 20 20 20 20 20 20 20  rUser,..        
2f430 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34 2c 0d      bool wow64,.
2f440 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f  .            boo
2f450 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20  l whatIf,..     
2f460 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65 72 62         bool verb
2f470 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ose,..          
2f480 20 20 72 65 66 20 73 74 72 69 6e 67 20 69 6e 73    ref string ins
2f490 74 61 6c 6c 44 69 72 65 63 74 6f 72 79 0d 0a 20  tallDirectory.. 
2f4a0 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
2f4b0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
2f4c0 20 20 20 20 20 73 74 72 69 6e 67 20 6b 65 79 4e       string keyN
2f4d0 61 6d 65 20 3d 20 47 65 74 46 72 61 6d 65 77 6f  ame = GetFramewo
2f4e0 72 6b 4b 65 79 4e 61 6d 65 28 0d 0a 20 20 20 20  rkKeyName(..    
2f4f0 20 20 20 20 20 20 20 20 20 20 20 20 66 72 61 6d              fram
2f500 65 77 6f 72 6b 4e 61 6d 65 2c 20 66 72 61 6d 65  eworkName, frame
2f510 77 6f 72 6b 56 65 72 73 69 6f 6e 2c 20 70 6c 61  workVersion, pla
2f520 74 66 6f 72 6d 4e 61 6d 65 2c 20 70 65 72 55 73  tformName, perUs
2f530 65 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  er,..           
2f540 20 20 20 20 20 77 6f 77 36 34 29 3b 0d 0a 0d 0a       wow64);....
2f550 20 20 20 20 20 20 20 20 20 20 20 20 75 73 69 6e              usin
2f560 67 20 28 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b  g (MockRegistryK
2f570 65 79 20 6b 65 79 20 3d 20 52 65 67 69 73 74 72  ey key = Registr
2f580 79 48 65 6c 70 65 72 2e 4f 70 65 6e 53 75 62 4b  yHelper.OpenSubK
2f590 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ey(..           
2f5a0 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79           rootKey
2f5b0 2c 20 6b 65 79 4e 61 6d 65 2c 20 66 61 6c 73 65  , keyName, false
2f5c0 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73  , whatIf, verbos
2f5d0 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e))..           
2f5e0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
2f5f0 20 20 20 20 69 66 20 28 6b 65 79 20 3d 3d 20 6e      if (key == n
2f600 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
2f610 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
2f620 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20   false;....     
2f630 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 70             if (p
2f640 6c 61 74 66 6f 72 6d 4e 61 6d 65 20 21 3d 20 6e  latformName != n
2f650 75 6c 6c 29 20 2f 2f 20 4e 4f 54 45 3a 20 53 6b  ull) // NOTE: Sk
2f660 69 70 20 6e 6f 6e 2d 64 65 73 6b 74 6f 70 2e 0d  ip non-desktop..
2f670 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2f680 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 65       return true
2f690 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
2f6a0 20 20 20 20 20 73 74 72 69 6e 67 20 64 69 72 65       string dire
2f6b0 63 74 6f 72 79 20 3d 20 47 65 74 46 72 61 6d 65  ctory = GetFrame
2f6c0 77 6f 72 6b 44 69 72 65 63 74 6f 72 79 28 0d 0a  workDirectory(..
2f6d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f6e0 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 66 72 61      rootKey, fra
2f6f0 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 2c 20 70  meworkVersion, p
2f700 65 72 55 73 65 72 2c 20 77 6f 77 36 34 2c 20 77  erUser, wow64, w
2f710 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20  hatIf,..        
2f720 20 20 20 20 20 20 20 20 20 20 20 20 76 65 72 62              verb
2f730 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ose);....       
2f740 20 20 20 20 20 20 20 20 20 69 66 20 28 53 74 72           if (Str
2f750 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74  ing.IsNullOrEmpt
2f760 79 28 64 69 72 65 63 74 6f 72 79 29 29 0d 0a 20  y(directory)).. 
2f770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f780 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
2f790 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2f7a0 20 20 20 20 69 66 20 28 21 44 69 72 65 63 74 6f      if (!Directo
2f7b0 72 79 2e 45 78 69 73 74 73 28 64 69 72 65 63 74  ry.Exists(direct
2f7c0 6f 72 79 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ory))..         
2f7d0 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
2f7e0 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20  n false;....    
2f7f0 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
2f800 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61  eOps.DebugAndTra
2f810 63 65 28 54 72 61 63 65 50 72 69 6f 72 69 74 79  ce(TracePriority
2f820 2e 4c 6f 77 65 72 2c 0d 0a 20 20 20 20 20 20 20  .Lower,..       
2f830 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65 62               deb
2f840 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63  ugCallback, trac
2f850 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e  eCallback, Strin
2f860 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
2f870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
2f880 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72 6b 20 7b  .NET Framework {
2f890 30 7d 20 66 6f 75 6e 64 20 76 69 61 20 64 69 72  0} found via dir
2f8a0 65 63 74 6f 72 79 20 7b 31 7d 2e 22 2c 0d 0a 20  ectory {1}.",.. 
2f8b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f8c0 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 66 72     ForDisplay(fr
2f8d0 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 29 2c  ameworkVersion),
2f8e0 20 46 6f 72 44 69 73 70 6c 61 79 28 64 69 72 65   ForDisplay(dire
2f8f0 63 74 6f 72 79 29 29 2c 0d 0a 20 20 20 20 20 20  ctory)),..      
2f900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
2f910 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d  aceCategory);...
2f920 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2f930 20 69 6e 73 74 61 6c 6c 44 69 72 65 63 74 6f 72   installDirector
2f940 79 20 3d 20 64 69 72 65 63 74 6f 72 79 3b 0d 0a  y = directory;..
2f950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f960 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20  return true;..  
2f970 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
2f980 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
2f990 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
2f9a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f9b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f9c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f9d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
2f9e0 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61       private sta
2f9f0 74 69 63 20 62 6f 6f 6c 20 48 61 76 65 46 72 61  tic bool HaveFra
2fa00 6d 65 77 6f 72 6b 52 65 67 69 73 74 72 79 28 0d  meworkRegistry(.
2fa10 0a 20 20 20 20 20 20 20 20 20 20 20 20 4d 6f 63  .            Moc
2fa20 6b 52 65 67 69 73 74 72 79 4b 65 79 20 72 6f 6f  kRegistryKey roo
2fa30 74 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20  tKey,..         
2fa40 20 20 20 73 74 72 69 6e 67 20 66 72 61 6d 65 77     string framew
2fa50 6f 72 6b 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20  orkName,..      
2fa60 20 20 20 20 20 20 56 65 72 73 69 6f 6e 20 66 72        Version fr
2fa70 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 2c 0d  ameworkVersion,.
2fa80 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72  .            str
2fa90 69 6e 67 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65  ing platformName
2faa0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  ,..            b
2fab0 6f 6f 6c 20 70 65 72 55 73 65 72 2c 0d 0a 20 20  ool perUser,..  
2fac0 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77            bool w
2fad0 6f 77 36 34 2c 0d 0a 20 20 20 20 20 20 20 20 20  ow64,..         
2fae0 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d     bool whatIf,.
2faf0 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f  .            boo
2fb00 6c 20 76 65 72 62 6f 73 65 0d 0a 20 20 20 20 20  l verbose..     
2fb10 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
2fb20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
2fb30 20 73 74 72 69 6e 67 20 6b 65 79 4e 61 6d 65 20   string keyName 
2fb40 3d 20 47 65 74 46 72 61 6d 65 77 6f 72 6b 4b 65  = GetFrameworkKe
2fb50 79 4e 61 6d 65 28 0d 0a 20 20 20 20 20 20 20 20  yName(..        
2fb60 20 20 20 20 20 20 20 20 66 72 61 6d 65 77 6f 72          framewor
2fb70 6b 4e 61 6d 65 2c 20 66 72 61 6d 65 77 6f 72 6b  kName, framework
2fb80 56 65 72 73 69 6f 6e 2c 20 70 6c 61 74 66 6f 72  Version, platfor
2fb90 6d 4e 61 6d 65 2c 20 70 65 72 55 73 65 72 2c 0d  mName, perUser,.
2fba0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2fbb0 20 77 6f 77 36 34 29 3b 0d 0a 0d 0a 20 20 20 20   wow64);....    
2fbc0 20 20 20 20 20 20 20 20 75 73 69 6e 67 20 28 4d          using (M
2fbd0 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 6b  ockRegistryKey k
2fbe0 65 79 20 3d 20 52 65 67 69 73 74 72 79 48 65 6c  ey = RegistryHel
2fbf0 70 65 72 2e 4f 70 65 6e 53 75 62 4b 65 79 28 0d  per.OpenSubKey(.
2fc00 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2fc10 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 6b 65       rootKey, ke
2fc20 79 4e 61 6d 65 2c 20 66 61 6c 73 65 2c 20 77 68  yName, false, wh
2fc30 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 29 0d  atIf, verbose)).
2fc40 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
2fc50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fc60 69 66 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29  if (key == null)
2fc70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2fc80 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
2fc90 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  se;....         
2fca0 20 20 20 20 20 20 20 69 66 20 28 70 6c 61 74 66         if (platf
2fcb0 6f 72 6d 4e 61 6d 65 20 21 3d 20 6e 75 6c 6c 29  ormName != null)
2fcc0 20 2f 2f 20 4e 4f 54 45 3a 20 53 6b 69 70 20 6e   // NOTE: Skip n
2fcd0 6f 6e 2d 64 65 73 6b 74 6f 70 2e 0d 0a 20 20 20  on-desktop...   
2fce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fcf0 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 0d   return true;...
2fd00 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2fd10 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41   TraceOps.DebugA
2fd20 6e 64 54 72 61 63 65 28 54 72 61 63 65 50 72 69  ndTrace(TracePri
2fd30 6f 72 69 74 79 2e 4c 6f 77 65 72 2c 0d 0a 20 20  ority.Lower,..  
2fd40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fd50 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c    debugCallback,
2fd60 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20   traceCallback, 
2fd70 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
2fd80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fd90 20 20 20 20 22 2e 4e 45 54 20 46 72 61 6d 65 77      ".NET Framew
2fda0 6f 72 6b 20 7b 30 7d 20 66 6f 75 6e 64 20 76 69  ork {0} found vi
2fdb0 61 20 72 65 67 69 73 74 72 79 20 7b 31 7d 2e 22  a registry {1}."
2fdc0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
2fdd0 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61         ForDispla
2fde0 79 28 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69  y(frameworkVersi
2fdf0 6f 6e 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28  on), ForDisplay(
2fe00 6b 65 79 4e 61 6d 65 29 29 2c 0d 0a 20 20 20 20  keyName)),..    
2fe10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fe20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
2fe30 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
2fe40 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d     return true;.
2fe50 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
2fe60 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
2fe70 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
2fe80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2fe90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2fea0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2feb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
2fec0 20 20 20 20 20 20 20 20 5b 4d 65 74 68 6f 64 49          [MethodI
2fed0 6d 70 6c 28 4d 65 74 68 6f 64 49 6d 70 6c 4f 70  mpl(MethodImplOp
2fee0 74 69 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e 69 6e 67  tions.NoInlining
2fef0 29 5d 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76  )]..        priv
2ff00 61 74 65 20 73 74 61 74 69 63 20 62 6f 6f 6c 20  ate static bool 
2ff10 46 6f 72 45 61 63 68 46 72 61 6d 65 77 6f 72 6b  ForEachFramework
2ff20 43 6f 6e 66 69 67 28 0d 0a 20 20 20 20 20 20 20  Config(..       
2ff30 20 20 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72       MockRegistr
2ff40 79 20 72 65 67 69 73 74 72 79 2c 0d 0a 20 20 20  y registry,..   
2ff50 20 20 20 20 20 20 20 20 20 46 72 61 6d 65 77 6f           Framewo
2ff60 72 6b 4c 69 73 74 20 66 72 61 6d 65 77 6f 72 6b  rkList framework
2ff70 4c 69 73 74 2c 0d 0a 20 20 20 20 20 20 20 20 20  List,..         
2ff80 20 20 20 46 72 61 6d 65 77 6f 72 6b 43 6f 6e 66     FrameworkConf
2ff90 69 67 43 61 6c 6c 62 61 63 6b 20 63 61 6c 6c 62  igCallback callb
2ffa0 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ack,..          
2ffb0 20 20 73 74 72 69 6e 67 20 76 65 72 73 69 6f 6e    string version
2ffc0 2c 20 2f 2a 20 4e 4f 54 45 3a 20 4f 70 74 69 6f  , /* NOTE: Optio
2ffd0 6e 61 6c 2e 20 2a 2f 0d 0a 20 20 20 20 20 20 20  nal. */..       
2ffe0 20 20 20 20 20 73 74 72 69 6e 67 20 69 6e 76 61       string inva
2fff0 72 69 61 6e 74 4e 61 6d 65 2c 0d 0a 20 20 20 20  riantName,..    
30000 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6e          string n
30010 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ame,..          
30020 20 20 73 74 72 69 6e 67 20 64 65 73 63 72 69 70    string descrip
30030 74 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20  tion,..         
30040 20 20 20 73 74 72 69 6e 67 20 74 79 70 65 4e 61     string typeNa
30050 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me,..           
30060 20 41 73 73 65 6d 62 6c 79 4e 61 6d 65 20 61 73   AssemblyName as
30070 73 65 6d 62 6c 79 4e 61 6d 65 2c 0d 0a 20 20 20  semblyName,..   
30080 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20           object 
30090 63 6c 69 65 6e 74 44 61 74 61 2c 0d 0a 20 20 20  clientData,..   
300a0 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 70 65           bool pe
300b0 72 55 73 65 72 2c 0d 0a 20 20 20 20 20 20 20 20  rUser,..        
300c0 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34 2c 0d      bool wow64,.
300d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f  .            boo
300e0 6c 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67  l throwOnMissing
300f0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  ,..            b
30100 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20  ool whatIf,..   
30110 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65           bool ve
30120 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20 20  rbose,..        
30130 20 20 20 20 72 65 66 20 62 6f 6f 6c 20 73 61 76      ref bool sav
30140 65 64 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ed,..           
30150 20 72 65 66 20 73 74 72 69 6e 67 20 65 72 72 6f   ref string erro
30160 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29  r..            )
30170 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
30180 20 20 20 20 20 20 20 20 20 69 66 20 28 72 65 67           if (reg
30190 69 73 74 72 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  istry == null)..
301a0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
301b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
301c0 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64 20  rror = "invalid 
301d0 72 65 67 69 73 74 72 79 22 3b 0d 0a 20 20 20 20  registry";..    
301e0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
301f0 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20  rn false;..     
30200 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
30210 20 20 20 20 20 20 20 20 69 66 20 28 66 72 61 6d          if (fram
30220 65 77 6f 72 6b 4c 69 73 74 20 3d 3d 20 6e 75 6c  eworkList == nul
30230 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
30240 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
30250 20 20 20 65 72 72 6f 72 20 3d 20 22 69 6e 76 61     error = "inva
30260 6c 69 64 20 66 72 61 6d 65 77 6f 72 6b 20 6c 69  lid framework li
30270 73 74 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  st";..          
30280 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
30290 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se;..           
302a0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
302b0 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65    MockRegistryKe
302c0 79 20 72 6f 6f 74 4b 65 79 20 3d 20 66 72 61 6d  y rootKey = fram
302d0 65 77 6f 72 6b 4c 69 73 74 2e 52 6f 6f 74 4b 65  eworkList.RootKe
302e0 79 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  y;....          
302f0 20 20 69 66 20 28 72 6f 6f 74 4b 65 79 20 3d 3d    if (rootKey ==
30300 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
30310 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
30320 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22         error = "
30330 69 6e 76 61 6c 69 64 20 72 6f 6f 74 20 6b 65 79  invalid root key
30340 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ";..            
30350 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
30360 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
30370 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
30380 69 66 20 28 21 49 73 53 75 70 70 6f 72 74 65 64  if (!IsSupported
30390 52 6f 6f 74 4b 65 79 28 72 65 67 69 73 74 72 79  RootKey(registry
303a0 2c 20 72 6f 6f 74 4b 65 79 29 29 0d 0a 20 20 20  , rootKey))..   
303b0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
303c0 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
303d0 72 20 3d 20 22 72 6f 6f 74 20 6b 65 79 20 6d 75  r = "root key mu
303e0 73 74 20 62 65 20 70 65 72 2d 75 73 65 72 20 6f  st be per-user o
303f0 72 20 70 65 72 2d 6d 61 63 68 69 6e 65 22 3b 0d  r per-machine";.
30400 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
30410 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
30420 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
30430 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
30440 28 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 4e  (frameworkList.N
30450 61 6d 65 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  ames == null).. 
30460 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
30470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72                er
30480 72 6f 72 20 3d 20 22 6e 6f 20 66 72 61 6d 65 77  ror = "no framew
30490 6f 72 6b 20 6e 61 6d 65 73 20 66 6f 75 6e 64 22  ork names found"
304a0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
304b0 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
304c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
304d0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
304e0 66 20 28 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74  f (frameworkList
304f0 2e 56 65 72 73 69 6f 6e 73 20 3d 3d 20 6e 75 6c  .Versions == nul
30500 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
30510 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
30520 20 20 20 65 72 72 6f 72 20 3d 20 22 6e 6f 20 66     error = "no f
30530 72 61 6d 65 77 6f 72 6b 20 76 65 72 73 69 6f 6e  ramework version
30540 73 20 66 6f 75 6e 64 22 3b 0d 0a 20 20 20 20 20  s found";..     
30550 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
30560 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  n false;..      
30570 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
30580 20 20 20 20 20 20 20 69 66 20 28 66 72 61 6d 65         if (frame
30590 77 6f 72 6b 4c 69 73 74 2e 50 6c 61 74 66 6f 72  workList.Platfor
305a0 6d 4e 61 6d 65 73 20 3d 3d 20 6e 75 6c 6c 29 0d  mNames == null).
305b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
305c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
305d0 65 72 72 6f 72 20 3d 20 22 6e 6f 20 70 6c 61 74  error = "no plat
305e0 66 6f 72 6d 20 6e 61 6d 65 73 20 66 6f 75 6e 64  form names found
305f0 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ";..            
30600 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
30610 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
30620 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
30630 69 66 20 28 66 72 61 6d 65 77 6f 72 6b 4c 69 73  if (frameworkLis
30640 74 2e 4e 61 6d 65 73 2e 43 6f 75 6e 74 20 21 3d  t.Names.Count !=
30650 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 50   frameworkList.P
30660 6c 61 74 66 6f 72 6d 4e 61 6d 65 73 2e 43 6f 75  latformNames.Cou
30670 6e 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  nt)..           
30680 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
30690 20 20 20 20 65 72 72 6f 72 20 3d 20 53 74 72 69      error = Stri
306a0 6e 67 2e 46 6f 72 6d 61 74 28 22 66 72 61 6d 65  ng.Format("frame
306b0 77 6f 72 6b 20 6e 61 6d 65 20 63 6f 75 6e 74 20  work name count 
306c0 7b 30 7d 20 64 6f 65 73 20 6e 6f 74 20 22 20 2b  {0} does not " +
306d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
306e0 20 20 20 20 20 20 22 6d 61 74 63 68 20 70 6c 61        "match pla
306f0 74 66 6f 72 6d 20 6e 61 6d 65 20 63 6f 75 6e 74  tform name count
30700 20 7b 31 7d 22 2c 20 66 72 61 6d 65 77 6f 72 6b   {1}", framework
30710 4c 69 73 74 2e 4e 61 6d 65 73 2e 43 6f 75 6e 74  List.Names.Count
30720 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
30730 20 20 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b         framework
30740 4c 69 73 74 2e 50 6c 61 74 66 6f 72 6d 4e 61 6d  List.PlatformNam
30750 65 73 2e 43 6f 75 6e 74 29 3b 0d 0a 0d 0a 20 20  es.Count);....  
30760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
30770 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20  turn false;..   
30780 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
30790 20 20 20 20 20 20 20 20 20 20 66 6f 72 20 28 69            for (i
307a0 6e 74 20 69 6e 64 65 78 20 3d 20 30 3b 20 69 6e  nt index = 0; in
307b0 64 65 78 20 3c 20 66 72 61 6d 65 77 6f 72 6b 4c  dex < frameworkL
307c0 69 73 74 2e 4e 61 6d 65 73 2e 43 6f 75 6e 74 3b  ist.Names.Count;
307d0 20 69 6e 64 65 78 2b 2b 29 0d 0a 20 20 20 20 20   index++)..     
307e0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
307f0 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
30800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
30810 20 4e 4f 54 45 3a 20 47 72 61 62 20 74 68 65 20   NOTE: Grab the 
30820 6e 61 6d 65 20 6f 66 20 74 68 65 20 66 72 61 6d  name of the fram
30830 65 77 6f 72 6b 20 28 65 2e 67 2e 20 22 2e 4e 45  ework (e.g. ".NE
30840 54 46 72 61 6d 65 77 6f 72 6b 22 29 0d 0a 20 20  TFramework")..  
30850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
30860 20 20 20 20 20 20 20 61 6e 64 20 74 68 65 20 6e         and the n
30870 61 6d 65 20 6f 66 20 74 68 65 20 70 6c 61 74 66  ame of the platf
30880 6f 72 6d 20 28 65 2e 67 2e 20 22 57 69 6e 64 6f  orm (e.g. "Windo
30890 77 73 43 45 22 29 2e 0d 0a 20 20 20 20 20 20 20  wsCE")...       
308a0 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
308b0 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72               str
308c0 69 6e 67 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d  ing frameworkNam
308d0 65 20 3d 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73  e = frameworkLis
308e0 74 2e 4e 61 6d 65 73 5b 69 6e 64 65 78 5d 3b 0d  t.Names[index];.
308f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
30900 20 73 74 72 69 6e 67 20 70 6c 61 74 66 6f 72 6d   string platform
30910 4e 61 6d 65 20 3d 20 66 72 61 6d 65 77 6f 72 6b  Name = framework
30920 4c 69 73 74 2e 50 6c 61 74 66 6f 72 6d 4e 61 6d  List.PlatformNam
30930 65 73 5b 69 6e 64 65 78 5d 3b 0d 0a 0d 0a 20 20  es[index];....  
30940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
30950 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
30960 20 20 2f 2f 20 4e 4f 54 45 3a 20 53 6b 69 70 20    // NOTE: Skip 
30970 61 6c 6c 20 6e 6f 6e 2d 64 65 73 6b 74 6f 70 20  all non-desktop 
30980 66 72 61 6d 65 77 6f 72 6b 73 20 28 69 2e 65 2e  frameworks (i.e.
30990 20 69 66 20 74 68 65 20 70 6c 61 74 66 6f 72 6d   if the platform
309a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
309b0 20 20 2f 2f 20 20 20 20 20 20 20 6e 61 6d 65 20    //       name 
309c0 69 73 20 6e 6f 74 20 6e 75 6c 6c 29 2e 0d 0a 20  is not null)... 
309d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
309e0 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
309f0 20 20 20 69 66 20 28 70 6c 61 74 66 6f 72 6d 4e     if (platformN
30a00 61 6d 65 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20  ame != null)..  
30a10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30a20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 0d 0a 20    continue;.... 
30a30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
30a40 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
30a50 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 47 72 61 62     // NOTE: Grab
30a60 20 74 68 65 20 73 75 70 70 6f 72 74 65 64 20 76   the supported v
30a70 65 72 73 69 6f 6e 73 20 6f 66 20 74 68 69 73 20  ersions of this 
30a80 70 61 72 74 69 63 75 6c 61 72 0d 0a 20 20 20 20  particular..    
30a90 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
30aa0 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 2e 0d       framework..
30ab0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
30ac0 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
30ad0 20 20 20 20 20 56 65 72 73 69 6f 6e 4c 69 73 74       VersionList
30ae0 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f   frameworkVersio
30af0 6e 4c 69 73 74 3b 0d 0a 0d 0a 20 20 20 20 20 20  nList;....      
30b00 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76 65            if (ve
30b10 72 73 69 6f 6e 20 21 3d 20 6e 75 6c 6c 29 0d 0a  rsion != null)..
30b20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30b30 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
30b40 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
30b50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
30b60 2f 20 4e 4f 54 45 3a 20 4d 61 6e 75 61 6c 20 6f  / NOTE: Manual o
30b70 76 65 72 72 69 64 65 20 6f 66 20 74 68 65 20 2a  verride of the *
30b80 4f 4e 45 2a 20 66 72 61 6d 65 77 6f 72 6b 20 76  ONE* framework v
30b90 65 72 73 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20  ersion..        
30ba0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
30bb0 20 20 20 20 20 74 6f 20 70 72 6f 63 65 73 73 2e       to process.
30bc0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
30bd0 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
30be0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 72                fr
30bf0 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 4c 69  ameworkVersionLi
30c00 73 74 20 3d 20 6e 65 77 20 56 65 72 73 69 6f 6e  st = new Version
30c10 4c 69 73 74 28 29 3b 0d 0a 20 20 20 20 20 20 20  List();..       
30c20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 72 61               fra
30c30 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 4c 69 73  meworkVersionLis
30c40 74 2e 41 64 64 28 6e 65 77 20 56 65 72 73 69 6f  t.Add(new Versio
30c50 6e 28 76 65 72 73 69 6f 6e 29 29 3b 0d 0a 20 20  n(version));..  
30c60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
30c70 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
30c80 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20   else..         
30c90 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
30ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
30cb0 20 28 21 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74   (!frameworkList
30cc0 2e 56 65 72 73 69 6f 6e 73 2e 54 72 79 47 65 74  .Versions.TryGet
30cd0 56 61 6c 75 65 28 0d 0a 20 20 20 20 20 20 20 20  Value(..        
30ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30cf0 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d      frameworkNam
30d00 65 2c 20 6f 75 74 20 66 72 61 6d 65 77 6f 72 6b  e, out framework
30d10 56 65 72 73 69 6f 6e 4c 69 73 74 29 20 7c 7c 0d  VersionList) ||.
30d20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
30d30 20 20 20 20 20 20 20 20 20 28 66 72 61 6d 65 77           (framew
30d40 6f 72 6b 56 65 72 73 69 6f 6e 4c 69 73 74 20 3d  orkVersionList =
30d50 3d 20 6e 75 6c 6c 29 29 0d 0a 20 20 20 20 20 20  = null))..      
30d60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
30d70 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
30d80 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75           continu
30d90 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
30da0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
30db0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
30dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30dd0 66 6f 72 65 61 63 68 20 28 56 65 72 73 69 6f 6e  foreach (Version
30de0 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f   frameworkVersio
30df0 6e 20 69 6e 20 66 72 61 6d 65 77 6f 72 6b 56 65  n in frameworkVe
30e00 72 73 69 6f 6e 4c 69 73 74 29 0d 0a 20 20 20 20  rsionList)..    
30e10 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
30e20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30e30 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75     TraceOps.Debu
30e40 67 41 6e 64 54 72 61 63 65 28 54 72 61 63 65 50  gAndTrace(TraceP
30e50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 72 2c 0d 0a  riority.Lower,..
30e60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30e70 20 20 20 20 20 20 20 20 64 65 62 75 67 43 61 6c          debugCal
30e80 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c  lback, traceCall
30e90 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72  back, String.For
30ea0 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
30eb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 66                "f
30ec0 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 20 3d 20 7b  rameworkName = {
30ed0 30 7d 2c 20 66 72 61 6d 65 77 6f 72 6b 56 65 72  0}, frameworkVer
30ee0 73 69 6f 6e 20 3d 20 7b 31 7d 2c 20 22 20 2b 0d  sion = {1}, " +.
30ef0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
30f00 20 20 20 20 20 20 20 20 20 22 70 6c 61 74 66 6f           "platfo
30f10 72 6d 4e 61 6d 65 20 3d 20 7b 32 7d 22 2c 20 46  rmName = {2}", F
30f20 6f 72 44 69 73 70 6c 61 79 28 66 72 61 6d 65 77  orDisplay(framew
30f30 6f 72 6b 4e 61 6d 65 29 2c 0d 0a 20 20 20 20 20  orkName),..     
30f40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30f50 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 66 72     ForDisplay(fr
30f60 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 29 2c  ameworkVersion),
30f70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
30f80 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73            ForDis
30f90 70 6c 61 79 28 70 6c 61 74 66 6f 72 6d 4e 61 6d  play(platformNam
30fa0 65 29 29 2c 20 74 72 61 63 65 43 61 74 65 67 6f  e)), traceCatego
30fb0 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
30fc0 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
30fd0 6e 67 20 69 6e 73 74 61 6c 6c 44 69 72 65 63 74  ng installDirect
30fe0 6f 72 79 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20  ory = null;.... 
30ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31000 20 20 20 69 66 20 28 21 48 61 76 65 46 72 61 6d     if (!HaveFram
31010 65 77 6f 72 6b 44 69 72 65 63 74 6f 72 79 28 0d  eworkDirectory(.
31020 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
31030 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f               roo
31040 74 4b 65 79 2c 20 66 72 61 6d 65 77 6f 72 6b 4e  tKey, frameworkN
31050 61 6d 65 2c 20 66 72 61 6d 65 77 6f 72 6b 56 65  ame, frameworkVe
31060 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20  rsion,..        
31070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31080 20 20 20 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65      platformName
31090 2c 20 70 65 72 55 73 65 72 2c 20 77 6f 77 36 34  , perUser, wow64
310a0 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73  , whatIf, verbos
310b0 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
310c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
310d0 72 65 66 20 69 6e 73 74 61 6c 6c 44 69 72 65 63  ref installDirec
310e0 74 6f 72 79 29 29 0d 0a 20 20 20 20 20 20 20 20  tory))..        
310f0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
31100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31110 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e         TraceOps.
31120 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 54 72  DebugAndTrace(Tr
31130 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 2c  acePriority.Low,
31140 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
31150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65                de
31160 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61  bugCallback, tra
31170 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69  ceCallback, Stri
31180 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20  ng.Format(..    
31190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
311a0 20 20 20 20 20 20 20 20 22 2e 4e 45 54 20 46 72          ".NET Fr
311b0 61 6d 65 77 6f 72 6b 20 7b 30 7d 20 64 69 72 65  amework {0} dire
311c0 63 74 6f 72 79 20 6e 6f 74 20 66 6f 75 6e 64 2c  ctory not found,
311d0 20 22 20 2b 0d 0a 20 20 20 20 20 20 20 20 20 20   " +..          
311e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
311f0 20 20 22 73 6b 69 70 70 69 6e 67 2e 2e 2e 22 2c    "skipping...",
31200 20 46 6f 72 44 69 73 70 6c 61 79 28 66 72 61 6d   ForDisplay(fram
31210 65 77 6f 72 6b 56 65 72 73 69 6f 6e 29 29 2c 0d  eworkVersion)),.
31220 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
31230 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
31240 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
31250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31260 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65          continue
31270 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
31280 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
31290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
312a0 69 66 20 28 63 61 6c 6c 62 61 63 6b 20 3d 3d 20  if (callback == 
312b0 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
312c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
312d0 6f 6e 74 69 6e 75 65 3b 0d 0a 0d 0a 20 20 20 20  ontinue;....    
312e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
312f0 73 74 72 69 6e 67 20 64 69 72 65 63 74 6f 72 79  string directory
31300 20 3d 20 69 6e 73 74 61 6c 6c 44 69 72 65 63 74   = installDirect
31310 6f 72 79 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ory;....        
31320 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
31330 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45  String.IsNullOrE
31340 6d 70 74 79 28 64 69 72 65 63 74 6f 72 79 29 29  mpty(directory))
31350 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
31360 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
31370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31380 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41   TraceOps.DebugA
31390 6e 64 54 72 61 63 65 28 54 72 61 63 65 50 72 69  ndTrace(TracePri
313a0 6f 72 69 74 79 2e 4c 6f 77 2c 0d 0a 20 20 20 20  ority.Low,..    
313b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
313c0 20 20 20 20 20 20 20 20 64 65 62 75 67 43 61 6c          debugCal
313d0 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c  lback, traceCall
313e0 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72  back, String.For
313f0 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
31400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31410 20 20 22 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72    ".NET Framewor
31420 6b 20 7b 30 7d 20 64 69 72 65 63 74 6f 72 79 20  k {0} directory 
31430 69 73 20 69 6e 76 61 6c 69 64 2c 20 22 20 2b 0d  is invalid, " +.
31440 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
31450 20 20 20 20 20 20 20 20 20 20 20 20 20 22 73 6b               "sk
31460 69 70 70 69 6e 67 2e 2e 2e 22 2c 20 46 6f 72 44  ipping...", ForD
31470 69 73 70 6c 61 79 28 66 72 61 6d 65 77 6f 72 6b  isplay(framework
31480 56 65 72 73 69 6f 6e 29 29 2c 0d 0a 20 20 20 20  Version)),..    
31490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
314a0 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74          traceCat
314b0 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20  egory);....     
314c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
314d0 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20     continue;..  
314e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
314f0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
31500 20 20 20 20 20 20 20 20 20 20 20 64 69 72 65 63             direc
31510 74 6f 72 79 20 3d 20 50 61 74 68 2e 43 6f 6d 62  tory = Path.Comb
31520 69 6e 65 28 64 69 72 65 63 74 6f 72 79 2c 20 22  ine(directory, "
31530 43 6f 6e 66 69 67 22 29 3b 0d 0a 0d 0a 20 20 20  Config");....   
31540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31550 20 69 66 20 28 21 44 69 72 65 63 74 6f 72 79 2e   if (!Directory.
31560 45 78 69 73 74 73 28 64 69 72 65 63 74 6f 72 79  Exists(directory
31570 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
31580 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
31590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
315a0 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75     TraceOps.Debu
315b0 67 41 6e 64 54 72 61 63 65 28 54 72 61 63 65 50  gAndTrace(TraceP
315c0 72 69 6f 72 69 74 79 2e 4c 6f 77 2c 0d 0a 20 20  riority.Low,..  
315d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
315e0 20 20 20 20 20 20 20 20 20 20 64 65 62 75 67 43            debugC
315f0 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61  allback, traceCa
31600 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46  llback, String.F
31610 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
31620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31630 20 20 20 20 22 2e 4e 45 54 20 46 72 61 6d 65 77      ".NET Framew
31640 6f 72 6b 20 7b 30 7d 20 64 69 72 65 63 74 6f 72  ork {0} director
31650 79 20 7b 31 7d 20 64 6f 65 73 20 6e 6f 74 20 22  y {1} does not "
31660 20 2b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   +..            
31670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31680 22 65 78 69 73 74 2c 20 73 6b 69 70 70 69 6e 67  "exist, skipping
31690 2e 2e 2e 22 2c 20 46 6f 72 44 69 73 70 6c 61 79  ...", ForDisplay
316a0 28 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f  (frameworkVersio
316b0 6e 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n),..           
316c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
316d0 20 46 6f 72 44 69 73 70 6c 61 79 28 64 69 72 65   ForDisplay(dire
316e0 63 74 6f 72 79 29 29 2c 20 74 72 61 63 65 43 61  ctory)), traceCa
316f0 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
31700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31710 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20      continue;.. 
31720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31730 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
31740 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
31750 6e 67 20 66 69 6c 65 4e 61 6d 65 20 3d 20 50 61  ng fileName = Pa
31760 74 68 2e 43 6f 6d 62 69 6e 65 28 64 69 72 65 63  th.Combine(direc
31770 74 6f 72 79 2c 20 22 6d 61 63 68 69 6e 65 2e 63  tory, "machine.c
31780 6f 6e 66 69 67 22 29 3b 0d 0a 0d 0a 20 20 20 20  onfig");....    
31790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
317a0 69 66 20 28 21 46 69 6c 65 2e 45 78 69 73 74 73  if (!File.Exists
317b0 28 66 69 6c 65 4e 61 6d 65 29 29 0d 0a 20 20 20  (fileName))..   
317c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
317d0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
317e0 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
317f0 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61  eOps.DebugAndTra
31800 63 65 28 54 72 61 63 65 50 72 69 6f 72 69 74 79  ce(TracePriority
31810 2e 4c 6f 77 2c 0d 0a 20 20 20 20 20 20 20 20 20  .Low,..         
31820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31830 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b     debugCallback
31840 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c  , traceCallback,
31850 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d   String.Format(.
31860 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
31870 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2e 4e               ".N
31880 45 54 20 46 72 61 6d 65 77 6f 72 6b 20 7b 30 7d  ET Framework {0}
31890 20 66 69 6c 65 20 7b 31 7d 20 64 6f 65 73 20 6e   file {1} does n
318a0 6f 74 20 65 78 69 73 74 2c 20 22 20 2b 0d 0a 20  ot exist, " +.. 
318b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
318c0 20 20 20 20 20 20 20 20 20 20 20 22 73 6b 69 70             "skip
318d0 70 69 6e 67 2e 2e 2e 22 2c 20 46 6f 72 44 69 73  ping...", ForDis
318e0 70 6c 61 79 28 66 72 61 6d 65 77 6f 72 6b 56 65  play(frameworkVe
318f0 72 73 69 6f 6e 29 2c 0d 0a 20 20 20 20 20 20 20  rsion),..       
31900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31910 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28       ForDisplay(
31920 66 69 6c 65 4e 61 6d 65 29 29 2c 20 74 72 61 63  fileName)), trac
31930 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20  eCategory);.... 
31940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31950 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b         continue;
31960 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
31970 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
31980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62                 b
31990 6f 6f 6c 20 6c 6f 63 61 6c 53 61 76 65 64 20 3d  ool localSaved =
319a0 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20   false;....     
319b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
319c0 66 20 28 21 63 61 6c 6c 62 61 63 6b 28 0d 0a 20  f (!callback(.. 
319d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
319e0 20 20 20 20 20 20 20 20 20 20 20 66 69 6c 65 4e             fileN
319f0 61 6d 65 2c 20 69 6e 76 61 72 69 61 6e 74 4e 61  ame, invariantNa
31a00 6d 65 2c 20 6e 61 6d 65 2c 20 64 65 73 63 72 69  me, name, descri
31a10 70 74 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20  ption,..        
31a20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31a30 20 20 20 20 74 79 70 65 4e 61 6d 65 2c 20 61 73      typeName, as
31a40 73 65 6d 62 6c 79 4e 61 6d 65 2c 20 69 6e 73 74  semblyName, inst
31a50 61 6c 6c 44 69 72 65 63 74 6f 72 79 2c 0d 0a 20  allDirectory,.. 
31a60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31a70 20 20 20 20 20 20 20 20 20 20 20 63 6c 69 65 6e             clien
31a80 74 44 61 74 61 2c 20 70 65 72 55 73 65 72 2c 20  tData, perUser, 
31a90 77 6f 77 36 34 2c 20 74 68 72 6f 77 4f 6e 4d 69  wow64, throwOnMi
31aa0 73 73 69 6e 67 2c 0d 0a 20 20 20 20 20 20 20 20  ssing,..        
31ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31ac0 20 20 20 20 77 68 61 74 49 66 2c 20 76 65 72 62      whatIf, verb
31ad0 6f 73 65 2c 20 72 65 66 20 6c 6f 63 61 6c 53 61  ose, ref localSa
31ae0 76 65 64 2c 20 72 65 66 20 65 72 72 6f 72 29 29  ved, ref error))
31af0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
31b00 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
31b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31b20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
31b30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31b40 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
31b50 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 0d             else.
31b60 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
31b70 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
31b80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31b90 69 66 20 28 6c 6f 63 61 6c 53 61 76 65 64 20 26  if (localSaved &
31ba0 26 20 21 73 61 76 65 64 29 0d 0a 20 20 20 20 20  & !saved)..     
31bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31bc0 20 20 20 20 20 20 20 73 61 76 65 64 20 3d 20 74         saved = t
31bd0 72 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  rue;....        
31be0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31bf0 69 66 20 28 76 65 72 62 6f 73 65 29 0d 0a 20 20  if (verbose)..  
31c00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31c10 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f            TraceO
31c20 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65  ps.DebugAndTrace
31c30 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c  (TracePriority.L
31c40 6f 77 65 73 74 2c 0d 0a 20 20 20 20 20 20 20 20  owest,..        
31c50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31c60 20 20 20 20 20 20 20 20 64 65 62 75 67 43 61 6c          debugCal
31c70 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c  lback, traceCall
31c80 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72  back, String.For
31c90 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
31ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31cb0 20 20 20 20 20 20 22 6c 6f 63 61 6c 53 61 76 65        "localSave
31cc0 64 20 3d 20 7b 30 7d 2c 20 73 61 76 65 64 20 3d  d = {0}, saved =
31cd0 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20   {1}",..        
31ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31cf0 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c          ForDispl
31d00 61 79 28 6c 6f 63 61 6c 53 61 76 65 64 29 2c 20  ay(localSaved), 
31d10 46 6f 72 44 69 73 70 6c 61 79 28 73 61 76 65 64  ForDisplay(saved
31d20 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  )),..           
31d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31d40 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f       traceCatego
31d50 72 79 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ry);..          
31d60 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
31d70 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
31d80 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
31d90 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
31da0 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20 20  urn true;..     
31db0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
31dc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31dd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31de0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31df0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31e00 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
31e10 20 20 20 5b 4d 65 74 68 6f 64 49 6d 70 6c 28 4d     [MethodImpl(M
31e20 65 74 68 6f 64 49 6d 70 6c 4f 70 74 69 6f 6e 73  ethodImplOptions
31e30 2e 4e 6f 49 6e 6c 69 6e 69 6e 67 29 5d 0d 0a 20  .NoInlining)].. 
31e40 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
31e50 74 61 74 69 63 20 62 6f 6f 6c 20 46 6f 72 45 61  tatic bool ForEa
31e60 63 68 46 72 61 6d 65 77 6f 72 6b 52 65 67 69 73  chFrameworkRegis
31e70 74 72 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20  try(..          
31e80 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 20 72    MockRegistry r
31e90 65 67 69 73 74 72 79 2c 0d 0a 20 20 20 20 20 20  egistry,..      
31ea0 20 20 20 20 20 20 46 72 61 6d 65 77 6f 72 6b 4c        FrameworkL
31eb0 69 73 74 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73  ist frameworkLis
31ec0 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t,..            
31ed0 46 72 61 6d 65 77 6f 72 6b 52 65 67 69 73 74 72  FrameworkRegistr
31ee0 79 43 61 6c 6c 62 61 63 6b 20 63 61 6c 6c 62 61  yCallback callba
31ef0 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ck,..           
31f00 20 73 74 72 69 6e 67 20 76 65 72 73 69 6f 6e 2c   string version,
31f10 20 2f 2a 20 4e 4f 54 45 3a 20 4f 70 74 69 6f 6e   /* NOTE: Option
31f20 61 6c 2e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20  al. */..        
31f30 20 20 20 20 6f 62 6a 65 63 74 20 63 6c 69 65 6e      object clien
31f40 74 44 61 74 61 2c 0d 0a 20 20 20 20 20 20 20 20  tData,..        
31f50 20 20 20 20 62 6f 6f 6c 20 70 65 72 55 73 65 72      bool perUser
31f60 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  ,..            b
31f70 6f 6f 6c 20 77 6f 77 36 34 2c 0d 0a 20 20 20 20  ool wow64,..    
31f80 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 74 68 72          bool thr
31f90 6f 77 4f 6e 4d 69 73 73 69 6e 67 2c 0d 0a 20 20  owOnMissing,..  
31fa0 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77            bool w
31fb0 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20  hatIf,..        
31fc0 20 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65      bool verbose
31fd0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  ,..            r
31fe0 65 66 20 73 74 72 69 6e 67 20 65 72 72 6f 72 0d  ef string error.
31ff0 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a  .            )..
32000 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
32010 20 20 20 20 20 20 20 69 66 20 28 72 65 67 69 73         if (regis
32020 74 72 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  try == null)..  
32030 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
32040 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
32050 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64 20 72 65  or = "invalid re
32060 67 69 73 74 72 79 22 3b 0d 0a 20 20 20 20 20 20  gistry";..      
32070 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
32080 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20   false;..       
32090 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
320a0 20 20 20 20 20 20 69 66 20 28 66 72 61 6d 65 77        if (framew
320b0 6f 72 6b 4c 69 73 74 20 3d 3d 20 6e 75 6c 6c 29  orkList == null)
320c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
320d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
320e0 20 65 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69   error = "invali
320f0 64 20 66 72 61 6d 65 77 6f 72 6b 20 6c 69 73 74  d framework list
32100 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ";..            
32110 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
32120 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
32130 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
32140 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20  MockRegistryKey 
32150 72 6f 6f 74 4b 65 79 20 3d 20 66 72 61 6d 65 77  rootKey = framew
32160 6f 72 6b 4c 69 73 74 2e 52 6f 6f 74 4b 65 79 3b  orkList.RootKey;
32170 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
32180 69 66 20 28 72 6f 6f 74 4b 65 79 20 3d 3d 20 6e  if (rootKey == n
32190 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
321a0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
321b0 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 69 6e       error = "in
321c0 76 61 6c 69 64 20 72 6f 6f 74 20 6b 65 79 22 3b  valid root key";
321d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
321e0 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
321f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
32200 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
32210 20 28 21 49 73 53 75 70 70 6f 72 74 65 64 52 6f   (!IsSupportedRo
32220 6f 74 4b 65 79 28 72 65 67 69 73 74 72 79 2c 20  otKey(registry, 
32230 72 6f 6f 74 4b 65 79 29 29 0d 0a 20 20 20 20 20  rootKey))..     
32240 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
32250 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20            error 
32260 3d 20 22 72 6f 6f 74 20 6b 65 79 20 6d 75 73 74  = "root key must
32270 20 62 65 20 70 65 72 2d 75 73 65 72 20 6f 72 20   be per-user or 
32280 70 65 72 2d 6d 61 63 68 69 6e 65 22 3b 0d 0a 20  per-machine";.. 
32290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
322a0 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20  eturn false;..  
322b0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
322c0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 66             if (f
322d0 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 4e 61 6d  rameworkList.Nam
322e0 65 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  es == null)..   
322f0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
32300 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
32310 72 20 3d 20 22 6e 6f 20 66 72 61 6d 65 77 6f 72  r = "no framewor
32320 6b 20 6e 61 6d 65 73 20 66 6f 75 6e 64 22 3b 0d  k names found";.
32330 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
32340 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
32350 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
32360 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
32370 28 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 56  (frameworkList.V
32380 65 72 73 69 6f 6e 73 20 3d 3d 20 6e 75 6c 6c 29  ersions == null)
32390 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
323a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
323b0 20 65 72 72 6f 72 20 3d 20 22 6e 6f 20 66 72 61   error = "no fra
323c0 6d 65 77 6f 72 6b 20 76 65 72 73 69 6f 6e 73 20  mework versions 
323d0 66 6f 75 6e 64 22 3b 0d 0a 20 20 20 20 20 20 20  found";..       
323e0 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
323f0 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20  false;..        
32400 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
32410 20 20 20 20 20 69 66 20 28 66 72 61 6d 65 77 6f       if (framewo
32420 72 6b 4c 69 73 74 2e 50 6c 61 74 66 6f 72 6d 4e  rkList.PlatformN
32430 61 6d 65 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  ames == null).. 
32440 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
32450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72                er
32460 72 6f 72 20 3d 20 22 6e 6f 20 70 6c 61 74 66 6f  ror = "no platfo
32470 72 6d 20 6e 61 6d 65 73 20 66 6f 75 6e 64 22 3b  rm names found";
32480 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
32490 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
324a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
324b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
324c0 20 28 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e   (frameworkList.
324d0 4e 61 6d 65 73 2e 43 6f 75 6e 74 20 21 3d 20 66  Names.Count != f
324e0 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 50 6c 61  rameworkList.Pla
324f0 74 66 6f 72 6d 4e 61 6d 65 73 2e 43 6f 75 6e 74  tformNames.Count
32500 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
32510 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
32520 20 20 65 72 72 6f 72 20 3d 20 53 74 72 69 6e 67    error = String
32530 2e 46 6f 72 6d 61 74 28 22 66 72 61 6d 65 77 6f  .Format("framewo
32540 72 6b 20 6e 61 6d 65 20 63 6f 75 6e 74 20 7b 30  rk name count {0
32550 7d 20 64 6f 65 73 20 6e 6f 74 20 22 20 2b 0d 0a  } does not " +..
32560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32570 20 20 20 20 22 6d 61 74 63 68 20 70 6c 61 74 66      "match platf
32580 6f 72 6d 20 6e 61 6d 65 20 63 6f 75 6e 74 20 7b  orm name count {
32590 31 7d 22 2c 20 66 72 61 6d 65 77 6f 72 6b 4c 69  1}", frameworkLi
325a0 73 74 2e 4e 61 6d 65 73 2e 43 6f 75 6e 74 2c 0d  st.Names.Count,.
325b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
325c0 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 4c 69       frameworkLi
325d0 73 74 2e 50 6c 61 74 66 6f 72 6d 4e 61 6d 65 73  st.PlatformNames
325e0 2e 43 6f 75 6e 74 29 3b 0d 0a 0d 0a 20 20 20 20  .Count);....    
325f0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
32600 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20  rn false;..     
32610 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
32620 20 20 20 20 20 20 20 20 66 6f 72 20 28 69 6e 74          for (int
32630 20 69 6e 64 65 78 20 3d 20 30 3b 20 69 6e 64 65   index = 0; inde
32640 78 20 3c 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73  x < frameworkLis
32650 74 2e 4e 61 6d 65 73 2e 43 6f 75 6e 74 3b 20 69  t.Names.Count; i
32660 6e 64 65 78 2b 2b 29 0d 0a 20 20 20 20 20 20 20  ndex++)..       
32670 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
32680 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
32690 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e              // N
326a0 4f 54 45 3a 20 47 72 61 62 20 74 68 65 20 6e 61  OTE: Grab the na
326b0 6d 65 20 6f 66 20 74 68 65 20 66 72 61 6d 65 77  me of the framew
326c0 6f 72 6b 20 28 65 2e 67 2e 20 22 2e 4e 45 54 46  ork (e.g. ".NETF
326d0 72 61 6d 65 77 6f 72 6b 22 29 0d 0a 20 20 20 20  ramework")..    
326e0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
326f0 20 20 20 20 20 61 6e 64 20 74 68 65 20 6e 61 6d       and the nam
32700 65 20 6f 66 20 74 68 65 20 70 6c 61 74 66 6f 72  e of the platfor
32710 6d 20 28 65 2e 67 2e 20 22 57 69 6e 64 6f 77 73  m (e.g. "Windows
32720 43 45 22 29 2e 0d 0a 20 20 20 20 20 20 20 20 20  CE")...         
32730 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
32740 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
32750 67 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 20  g frameworkName 
32760 3d 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e  = frameworkList.
32770 4e 61 6d 65 73 5b 69 6e 64 65 78 5d 3b 0d 0a 20  Names[index];.. 
32780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
32790 74 72 69 6e 67 20 70 6c 61 74 66 6f 72 6d 4e 61  tring platformNa
327a0 6d 65 20 3d 20 66 72 61 6d 65 77 6f 72 6b 4c 69  me = frameworkLi
327b0 73 74 2e 50 6c 61 74 66 6f 72 6d 4e 61 6d 65 73  st.PlatformNames
327c0 5b 69 6e 64 65 78 5d 3b 0d 0a 0d 0a 20 20 20 20  [index];....    
327d0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
327e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
327f0 2f 2f 20 4e 4f 54 45 3a 20 47 72 61 62 20 74 68  // NOTE: Grab th
32800 65 20 73 75 70 70 6f 72 74 65 64 20 76 65 72 73  e supported vers
32810 69 6f 6e 73 20 6f 66 20 74 68 69 73 20 70 61 72  ions of this par
32820 74 69 63 75 6c 61 72 0d 0a 20 20 20 20 20 20 20  ticular..       
32830 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
32840 20 20 66 72 61 6d 65 77 6f 72 6b 2e 0d 0a 20 20    framework...  
32850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
32860 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
32870 20 20 56 65 72 73 69 6f 6e 4c 69 73 74 20 66 72    VersionList fr
32880 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 4c 69  ameworkVersionLi
32890 73 74 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  st;....         
328a0 20 20 20 20 20 20 20 69 66 20 28 76 65 72 73 69         if (versi
328b0 6f 6e 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  on != null)..   
328c0 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
328d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
328e0 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
328f0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e              // N
32900 4f 54 45 3a 20 4d 61 6e 75 61 6c 20 6f 76 65 72  OTE: Manual over
32910 72 69 64 65 20 6f 66 20 74 68 65 20 2a 4f 4e 45  ride of the *ONE
32920 2a 20 66 72 61 6d 65 77 6f 72 6b 20 76 65 72 73  * framework vers
32930 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ion..           
32940 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
32950 20 20 74 6f 20 70 72 6f 63 65 73 73 2e 0d 0a 20    to process... 
32960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32970 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
32980 20 20 20 20 20 20 20 20 20 20 20 66 72 61 6d 65             frame
32990 77 6f 72 6b 56 65 72 73 69 6f 6e 4c 69 73 74 20  workVersionList 
329a0 3d 20 6e 65 77 20 56 65 72 73 69 6f 6e 4c 69 73  = new VersionLis
329b0 74 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  t();..          
329c0 20 20 20 20 20 20 20 20 20 20 66 72 61 6d 65 77            framew
329d0 6f 72 6b 56 65 72 73 69 6f 6e 4c 69 73 74 2e 41  orkVersionList.A
329e0 64 64 28 6e 65 77 20 56 65 72 73 69 6f 6e 28 76  dd(new Version(v
329f0 65 72 73 69 6f 6e 29 29 3b 0d 0a 20 20 20 20 20  ersion));..     
32a00 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
32a10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c                el
32a20 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  se..            
32a30 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
32a40 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21             if (!
32a50 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 56 65  frameworkList.Ve
32a60 72 73 69 6f 6e 73 2e 54 72 79 47 65 74 56 61 6c  rsions.TryGetVal
32a70 75 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue(..           
32a80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32a90 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c 20   frameworkName, 
32aa0 6f 75 74 20 66 72 61 6d 65 77 6f 72 6b 56 65 72  out frameworkVer
32ab0 73 69 6f 6e 4c 69 73 74 29 20 7c 7c 0d 0a 20 20  sionList) ||..  
32ac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32ad0 20 20 20 20 20 20 28 66 72 61 6d 65 77 6f 72 6b        (framework
32ae0 56 65 72 73 69 6f 6e 4c 69 73 74 20 3d 3d 20 6e  VersionList == n
32af0 75 6c 6c 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ull))..         
32b00 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
32b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32b20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d        continue;.
32b30 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
32b40 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
32b50 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
32b60 20 20 20 20 20 20 20 20 20 20 20 20 20 66 6f 72               for
32b70 65 61 63 68 20 28 56 65 72 73 69 6f 6e 20 66 72  each (Version fr
32b80 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 20 69  ameworkVersion i
32b90 6e 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69  n frameworkVersi
32ba0 6f 6e 4c 69 73 74 29 0d 0a 20 20 20 20 20 20 20  onList)..       
32bb0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
32bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32bd0 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e  TraceOps.DebugAn
32be0 64 54 72 61 63 65 28 54 72 61 63 65 50 72 69 6f  dTrace(TracePrio
32bf0 72 69 74 79 2e 4c 6f 77 65 72 2c 0d 0a 20 20 20  rity.Lower,..   
32c00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32c10 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61       debugCallba
32c20 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63  ck, traceCallbac
32c30 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  k, String.Format
32c40 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
32c50 20 20 20 20 20 20 20 20 20 20 20 22 66 72 61 6d             "fram
32c60 65 77 6f 72 6b 4e 61 6d 65 20 3d 20 7b 30 7d 2c  eworkName = {0},
32c70 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f   frameworkVersio
32c80 6e 20 3d 20 7b 31 7d 2c 20 22 20 2b 0d 0a 20 20  n = {1}, " +..  
32c90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32ca0 20 20 20 20 20 20 22 70 6c 61 74 66 6f 72 6d 4e        "platformN
32cb0 61 6d 65 20 3d 20 7b 32 7d 22 2c 20 46 6f 72 44  ame = {2}", ForD
32cc0 69 73 70 6c 61 79 28 66 72 61 6d 65 77 6f 72 6b  isplay(framework
32cd0 4e 61 6d 65 29 2c 0d 0a 20 20 20 20 20 20 20 20  Name),..        
32ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32cf0 46 6f 72 44 69 73 70 6c 61 79 28 66 72 61 6d 65  ForDisplay(frame
32d00 77 6f 72 6b 56 65 72 73 69 6f 6e 29 2c 0d 0a 20  workVersion),.. 
32d10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32d20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61         ForDispla
32d30 79 28 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 29 29  y(platformName))
32d40 2c 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29  , traceCategory)
32d50 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
32d60 20 20 20 20 20 20 20 20 20 69 66 20 28 21 48 61           if (!Ha
32d70 76 65 46 72 61 6d 65 77 6f 72 6b 52 65 67 69 73  veFrameworkRegis
32d80 74 72 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20  try(..          
32d90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32da0 20 20 72 6f 6f 74 4b 65 79 2c 20 66 72 61 6d 65    rootKey, frame
32db0 77 6f 72 6b 4e 61 6d 65 2c 20 66 72 61 6d 65 77  workName, framew
32dc0 6f 72 6b 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20  orkVersion,..   
32dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32de0 20 20 20 20 20 20 20 20 20 70 6c 61 74 66 6f 72           platfor
32df0 6d 4e 61 6d 65 2c 20 70 65 72 55 73 65 72 2c 20  mName, perUser, 
32e00 77 6f 77 36 34 2c 20 77 68 61 74 49 66 2c 20 76  wow64, whatIf, v
32e10 65 72 62 6f 73 65 29 29 0d 0a 20 20 20 20 20 20  erbose))..      
32e20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
32e30 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
32e40 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70           TraceOp
32e50 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28  s.DebugAndTrace(
32e60 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f  TracePriority.Lo
32e70 77 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  w,..            
32e80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32e90 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74  debugCallback, t
32ea0 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74  raceCallback, St
32eb0 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
32ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32ed0 20 20 20 20 20 20 20 20 20 20 22 2e 4e 45 54 20            ".NET 
32ee0 46 72 61 6d 65 77 6f 72 6b 20 7b 30 7d 20 72 65  Framework {0} re
32ef0 67 69 73 74 72 79 20 6e 6f 74 20 66 6f 75 6e 64  gistry not found
32f00 2c 20 22 20 2b 0d 0a 20 20 20 20 20 20 20 20 20  , " +..         
32f10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32f20 20 20 20 22 73 6b 69 70 70 69 6e 67 2e 2e 2e 22     "skipping..."
32f30 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 66 72 61  , ForDisplay(fra
32f40 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 29 29 2c  meworkVersion)),
32f50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
32f60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
32f70 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d  aceCategory);...
32f80 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
32f90 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75           continu
32fa0 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
32fb0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
32fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32fd0 20 69 66 20 28 63 61 6c 6c 62 61 63 6b 20 3d 3d   if (callback ==
32fe0 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
32ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33000 63 6f 6e 74 69 6e 75 65 3b 0d 0a 0d 0a 20 20 20  continue;....   
33010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33020 20 69 66 20 28 21 63 61 6c 6c 62 61 63 6b 28 0d   if (!callback(.
33030 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
33040 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f               roo
33050 74 4b 65 79 2c 20 66 72 61 6d 65 77 6f 72 6b 4e  tKey, frameworkN
33060 61 6d 65 2c 20 66 72 61 6d 65 77 6f 72 6b 56 65  ame, frameworkVe
33070 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20  rsion,..        
33080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33090 20 20 20 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65      platformName
330a0 2c 20 6e 75 6c 6c 2c 20 63 6c 69 65 6e 74 44 61  , null, clientDa
330b0 74 61 2c 20 70 65 72 55 73 65 72 2c 0d 0a 20 20  ta, perUser,..  
330c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
330d0 20 20 20 20 20 20 20 20 20 20 77 6f 77 36 34 2c            wow64,
330e0 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 2c   throwOnMissing,
330f0 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65   whatIf, verbose
33100 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
33110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
33120 65 66 20 65 72 72 6f 72 29 29 0d 0a 20 20 20 20  ef error))..    
33130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33140 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
33150 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
33160 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  n false;..      
33170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
33180 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
33190 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
331a0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
331b0 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20   return true;.. 
331c0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
331d0 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a    #endregion....
331e0 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
331f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33200 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33210 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33220 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
33230 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69  ...        #regi
33240 6f 6e 20 50 65 72 2d 56 69 73 75 61 6c 20 53 74  on Per-Visual St
33250 75 64 69 6f 20 56 65 72 73 69 6f 6e 20 48 61 6e  udio Version Han
33260 64 6c 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 70  dling..        p
33270 72 69 76 61 74 65 20 73 74 61 74 69 63 20 76 6f  rivate static vo
33280 69 64 20 49 6e 69 74 69 61 6c 69 7a 65 56 73 4c  id InitializeVsL
33290 69 73 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ist(..          
332a0 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65    MockRegistryKe
332b0 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20 20  y rootKey,..    
332c0 20 20 20 20 20 20 20 20 43 6f 6e 66 69 67 75 72          Configur
332d0 61 74 69 6f 6e 20 63 6f 6e 66 69 67 75 72 61 74  ation configurat
332e0 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ion,..          
332f0 20 20 72 65 66 20 56 73 4c 69 73 74 20 76 73 4c    ref VsList vsL
33300 69 73 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ist..           
33310 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20   )..        {.. 
33320 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76             if (v
33330 73 4c 69 73 74 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  sList == null)..
33340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33350 76 73 4c 69 73 74 20 3d 20 6e 65 77 20 56 73 4c  vsList = new VsL
33360 69 73 74 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  ist();....      
33370 20 20 20 20 20 20 69 66 20 28 76 73 4c 69 73 74        if (vsList
33380 2e 52 6f 6f 74 4b 65 79 20 3d 3d 20 6e 75 6c 6c  .RootKey == null
33390 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
333a0 20 20 20 76 73 4c 69 73 74 2e 52 6f 6f 74 4b 65     vsList.RootKe
333b0 79 20 3d 20 72 6f 6f 74 4b 65 79 3b 0d 0a 0d 0a  y = rootKey;....
333c0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
333d0 76 73 4c 69 73 74 2e 56 65 72 73 69 6f 6e 73 20  vsList.Versions 
333e0 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
333f0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
33400 20 20 20 20 20 20 20 20 20 76 73 4c 69 73 74 2e           vsList.
33410 56 65 72 73 69 6f 6e 73 20 3d 20 6e 65 77 20 56  Versions = new V
33420 65 72 73 69 6f 6e 4c 69 73 74 28 29 3b 0d 0a 0d  ersionList();...
33430 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
33440 20 69 66 20 28 28 63 6f 6e 66 69 67 75 72 61 74   if ((configurat
33450 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20  ion == null) || 
33460 21 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 4e  !configuration.N
33470 6f 56 73 32 30 30 35 29 0d 0a 20 20 20 20 20 20  oVs2005)..      
33480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 76 73                vs
33490 4c 69 73 74 2e 56 65 72 73 69 6f 6e 73 2e 41 64  List.Versions.Ad
334a0 64 28 6e 65 77 20 56 65 72 73 69 6f 6e 28 38 2c  d(new Version(8,
334b0 20 30 29 29 3b 20 2f 2f 20 32 30 30 35 0d 0a 0d   0)); // 2005...
334c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
334d0 20 69 66 20 28 28 63 6f 6e 66 69 67 75 72 61 74   if ((configurat
334e0 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20  ion == null) || 
334f0 21 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 4e  !configuration.N
33500 6f 56 73 32 30 30 38 29 0d 0a 20 20 20 20 20 20  oVs2008)..      
33510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 76 73                vs
33520 4c 69 73 74 2e 56 65 72 73 69 6f 6e 73 2e 41 64  List.Versions.Ad
33530 64 28 6e 65 77 20 56 65 72 73 69 6f 6e 28 39 2c  d(new Version(9,
33540 20 30 29 29 3b 20 2f 2f 20 32 30 30 38 0d 0a 0d   0)); // 2008...
33550 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
33560 20 69 66 20 28 28 63 6f 6e 66 69 67 75 72 61 74   if ((configurat
33570 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20  ion == null) || 
33580 21 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 4e  !configuration.N
33590 6f 56 73 32 30 31 30 29 0d 0a 20 20 20 20 20 20  oVs2010)..      
335a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 76 73                vs
335b0 4c 69 73 74 2e 56 65 72 73 69 6f 6e 73 2e 41 64  List.Versions.Ad
335c0 64 28 6e 65 77 20 56 65 72 73 69 6f 6e 28 31 30  d(new Version(10
335d0 2c 20 30 29 29 3b 2f 2f 20 32 30 31 30 0d 0a 0d  , 0));// 2010...
335e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
335f0 20 69 66 20 28 28 63 6f 6e 66 69 67 75 72 61 74   if ((configurat
33600 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20  ion == null) || 
33610 21 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 4e  !configuration.N
33620 6f 56 73 32 30 31 32 29 0d 0a 20 20 20 20 20 20  oVs2012)..      
33630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 76 73                vs
33640 4c 69 73 74 2e 56 65 72 73 69 6f 6e 73 2e 41 64  List.Versions.Ad
33650 64 28 6e 65 77 20 56 65 72 73 69 6f 6e 28 31 31  d(new Version(11
33660 2c 20 30 29 29 3b 2f 2f 20 32 30 31 32 0d 0a 0d  , 0));// 2012...
33670 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
33680 20 69 66 20 28 28 63 6f 6e 66 69 67 75 72 61 74   if ((configurat
33690 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20  ion == null) || 
336a0 21 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 4e  !configuration.N
336b0 6f 56 73 32 30 31 33 29 0d 0a 20 20 20 20 20 20  oVs2013)..      
336c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 76 73                vs
336d0 4c 69 73 74 2e 56 65 72 73 69 6f 6e 73 2e 41 64  List.Versions.Ad
336e0 64 28 6e 65 77 20 56 65 72 73 69 6f 6e 28 31 32  d(new Version(12
336f0 2c 20 30 29 29 3b 2f 2f 20 32 30 31 33 0d 0a 0d  , 0));// 2013...
33700 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
33710 20 69 66 20 28 28 63 6f 6e 66 69 67 75 72 61 74   if ((configurat
33720 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20  ion == null) || 
33730 21 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 4e  !configuration.N
33740 6f 56 73 32 30 31 35 29 0d 0a 20 20 20 20 20 20  oVs2015)..      
33750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 76 73                vs
33760 4c 69 73 74 2e 56 65 72 73 69 6f 6e 73 2e 41 64  List.Versions.Ad
33770 64 28 6e 65 77 20 56 65 72 73 69 6f 6e 28 31 34  d(new Version(14
33780 2c 20 30 29 29 3b 2f 2f 20 32 30 31 35 0d 0a 20  , 0));// 2015.. 
33790 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
337a0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
337b0 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
337c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
337d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
337e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
337f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
33800 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74        private st
33810 61 74 69 63 20 62 6f 6f 6c 20 48 61 76 65 56 73  atic bool HaveVs
33820 56 65 72 73 69 6f 6e 44 69 72 65 63 74 6f 72 79  VersionDirectory
33830 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 4d  (..            M
33840 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 72  ockRegistryKey r
33850 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20  ootKey,..       
33860 20 20 20 20 20 56 65 72 73 69 6f 6e 20 76 73 56       Version vsV
33870 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20  ersion,..       
33880 20 20 20 20 20 73 74 72 69 6e 67 20 73 75 66 66       string suff
33890 69 78 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ix,..           
338a0 20 62 6f 6f 6c 20 70 65 72 55 73 65 72 2c 0d 0a   bool perUser,..
338b0 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
338c0 20 77 6f 77 36 34 2c 0d 0a 20 20 20 20 20 20 20   wow64,..       
338d0 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66       bool whatIf
338e0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  ,..            b
338f0 6f 6f 6c 20 76 65 72 62 6f 73 65 2c 0d 0a 20 20  ool verbose,..  
33900 20 20 20 20 20 20 20 20 20 20 72 65 66 20 73 74            ref st
33910 72 69 6e 67 20 69 6e 73 74 61 6c 6c 44 69 72 65  ring installDire
33920 63 74 6f 72 79 0d 0a 20 20 20 20 20 20 20 20 20  ctory..         
33930 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d     )..        {.
33940 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
33950 28 76 73 56 65 72 73 69 6f 6e 20 3d 3d 20 6e 75  (vsVersion == nu
33960 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
33970 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
33980 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e;....          
33990 20 20 73 74 72 69 6e 67 20 6b 65 79 4e 61 6d 65    string keyName
339a0 20 3d 20 47 65 74 56 73 4b 65 79 4e 61 6d 65 28   = GetVsKeyName(
339b0 76 73 56 65 72 73 69 6f 6e 2c 20 73 75 66 66 69  vsVersion, suffi
339c0 78 2c 20 70 65 72 55 73 65 72 2c 20 77 6f 77 36  x, perUser, wow6
339d0 34 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  4);....         
339e0 20 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65     using (MockRe
339f0 67 69 73 74 72 79 4b 65 79 20 6b 65 79 20 3d 20  gistryKey key = 
33a00 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 4f  RegistryHelper.O
33a10 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20 20  penSubKey(..    
33a20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33a30 72 6f 6f 74 4b 65 79 2c 20 6b 65 79 4e 61 6d 65  rootKey, keyName
33a40 2c 20 66 61 6c 73 65 2c 20 77 68 61 74 49 66 2c  , false, whatIf,
33a50 20 76 65 72 62 6f 73 65 29 29 0d 0a 20 20 20 20   verbose))..    
33a60 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
33a70 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6b             if (k
33a80 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ey == null)..   
33a90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33aa0 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
33ab0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
33ac0 20 20 6f 62 6a 65 63 74 20 76 61 6c 75 65 20 3d    object value =
33ad0 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e   RegistryHelper.
33ae0 47 65 74 56 61 6c 75 65 28 0d 0a 20 20 20 20 20  GetValue(..     
33af0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6b                 k
33b00 65 79 2c 20 22 49 6e 73 74 61 6c 6c 44 69 72 22  ey, "InstallDir"
33b10 2c 20 6e 75 6c 6c 2c 20 77 68 61 74 49 66 2c 20  , null, whatIf, 
33b20 76 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20  verbose);....   
33b30 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
33b40 28 21 28 76 61 6c 75 65 20 69 73 20 73 74 72 69  (!(value is stri
33b50 6e 67 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ng))..          
33b60 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
33b70 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20   false;....     
33b80 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
33b90 67 20 64 69 72 65 63 74 6f 72 79 20 3d 20 28 73  g directory = (s
33ba0 74 72 69 6e 67 29 76 61 6c 75 65 3b 0d 0a 0d 0a  tring)value;....
33bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33bc0 69 66 20 28 53 74 72 69 6e 67 2e 49 73 4e 75 6c  if (String.IsNul
33bd0 6c 4f 72 45 6d 70 74 79 28 64 69 72 65 63 74 6f  lOrEmpty(directo
33be0 72 79 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ry))..          
33bf0 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
33c00 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20   false;....     
33c10 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21             if (!
33c20 44 69 72 65 63 74 6f 72 79 2e 45 78 69 73 74 73  Directory.Exists
33c30 28 64 69 72 65 63 74 6f 72 79 29 29 0d 0a 20 20  (directory))..  
33c40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33c50 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
33c60 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
33c70 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75     TraceOps.Debu
33c80 67 41 6e 64 54 72 61 63 65 28 54 72 61 63 65 50  gAndTrace(TraceP
33c90 72 69 6f 72 69 74 79 2e 4c 6f 77 65 72 2c 0d 0a  riority.Lower,..
33ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33cb0 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63      debugCallbac
33cc0 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b  k, traceCallback
33cd0 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  , String.Format(
33ce0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
33cf0 20 20 20 20 20 20 22 56 69 73 75 61 6c 20 53 74        "Visual St
33d00 75 64 69 6f 20 7b 30 7d 20 66 6f 75 6e 64 20 69  udio {0} found i
33d10 6e 20 64 69 72 65 63 74 6f 72 79 20 7b 31 7d 2e  n directory {1}.
33d20 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
33d30 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c          ForDispl
33d40 61 79 28 76 73 56 65 72 73 69 6f 6e 29 2c 20 46  ay(vsVersion), F
33d50 6f 72 44 69 73 70 6c 61 79 28 64 69 72 65 63 74  orDisplay(direct
33d60 6f 72 79 29 29 2c 0d 0a 20 20 20 20 20 20 20 20  ory)),..        
33d70 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
33d80 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20  eCategory);.... 
33d90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
33da0 6e 73 74 61 6c 6c 44 69 72 65 63 74 6f 72 79 20  nstallDirectory 
33db0 3d 20 64 69 72 65 63 74 6f 72 79 3b 0d 0a 20 20  = directory;..  
33dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
33dd0 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20  turn true;..    
33de0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
33df0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
33e00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33e10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33e20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33e30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33e40 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
33e50 20 20 20 5b 4d 65 74 68 6f 64 49 6d 70 6c 28 4d     [MethodImpl(M
33e60 65 74 68 6f 64 49 6d 70 6c 4f 70 74 69 6f 6e 73  ethodImplOptions
33e70 2e 4e 6f 49 6e 6c 69 6e 69 6e 67 29 5d 0d 0a 20  .NoInlining)].. 
33e80 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
33e90 74 61 74 69 63 20 62 6f 6f 6c 20 46 6f 72 45 61  tatic bool ForEa
33ea0 63 68 56 73 56 65 72 73 69 6f 6e 52 65 67 69 73  chVsVersionRegis
33eb0 74 72 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20  try(..          
33ec0 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 20 72    MockRegistry r
33ed0 65 67 69 73 74 72 79 2c 0d 0a 20 20 20 20 20 20  egistry,..      
33ee0 20 20 20 20 20 20 56 73 4c 69 73 74 20 76 73 4c        VsList vsL
33ef0 69 73 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ist,..          
33f00 20 20 56 69 73 75 61 6c 53 74 75 64 69 6f 52 65    VisualStudioRe
33f10 67 69 73 74 72 79 43 61 6c 6c 62 61 63 6b 20 63  gistryCallback c
33f20 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20  allback,..      
33f30 20 20 20 20 20 20 73 74 72 69 6e 67 20 73 75 66        string suf
33f40 66 69 78 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  fix,..          
33f50 20 20 50 61 63 6b 61 67 65 20 70 61 63 6b 61 67    Package packag
33f60 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
33f70 6f 62 6a 65 63 74 20 63 6c 69 65 6e 74 44 61 74  object clientDat
33f80 61 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  a,..            
33f90 62 6f 6f 6c 20 70 65 72 55 73 65 72 2c 0d 0a 20  bool perUser,.. 
33fa0 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
33fb0 77 6f 77 36 34 2c 0d 0a 20 20 20 20 20 20 20 20  wow64,..        
33fc0 20 20 20 20 62 6f 6f 6c 20 74 68 72 6f 77 4f 6e      bool throwOn
33fd0 4d 69 73 73 69 6e 67 2c 0d 0a 20 20 20 20 20 20  Missing,..      
33fe0 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49        bool whatI
33ff0 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  f,..            
34000 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c 0d 0a 20  bool verbose,.. 
34010 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20 73             ref s
34020 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20  tring error..   
34030 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
34040 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
34050 20 20 20 69 66 20 28 72 65 67 69 73 74 72 79 20     if (registry 
34060 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
34070 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
34080 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d           error =
34090 20 22 69 6e 76 61 6c 69 64 20 72 65 67 69 73 74   "invalid regist
340a0 72 79 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ry";..          
340b0 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
340c0 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se;..           
340d0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
340e0 20 20 69 66 20 28 76 73 4c 69 73 74 20 3d 3d 20    if (vsList == 
340f0 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
34100 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
34110 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 69        error = "i
34120 6e 76 61 6c 69 64 20 56 53 20 6c 69 73 74 22 3b  nvalid VS list";
34130 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
34140 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
34150 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
34160 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 4d 6f  ..            Mo
34170 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 72 6f  ckRegistryKey ro
34180 6f 74 4b 65 79 20 3d 20 76 73 4c 69 73 74 2e 52  otKey = vsList.R
34190 6f 6f 74 4b 65 79 3b 0d 0a 0d 0a 20 20 20 20 20  ootKey;....     
341a0 20 20 20 20 20 20 20 69 66 20 28 72 6f 6f 74 4b         if (rootK
341b0 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ey == null)..   
341c0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
341d0 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
341e0 72 20 3d 20 22 69 6e 76 61 6c 69 64 20 72 6f 6f  r = "invalid roo
341f0 74 20 6b 65 79 22 3b 0d 0a 20 20 20 20 20 20 20  t key";..       
34200 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
34210 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20  false;..        
34220 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
34230 20 20 20 20 20 69 66 20 28 21 49 73 53 75 70 70       if (!IsSupp
34240 6f 72 74 65 64 52 6f 6f 74 4b 65 79 28 72 65 67  ortedRootKey(reg
34250 69 73 74 72 79 2c 20 72 6f 6f 74 4b 65 79 29 29  istry, rootKey))
34260 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
34270 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
34280 20 65 72 72 6f 72 20 3d 20 22 72 6f 6f 74 20 6b   error = "root k
34290 65 79 20 6d 75 73 74 20 62 65 20 70 65 72 2d 75  ey must be per-u
342a0 73 65 72 20 6f 72 20 70 65 72 2d 6d 61 63 68 69  ser or per-machi
342b0 6e 65 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ne";..          
342c0 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
342d0 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se;..           
342e0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
342f0 20 20 69 66 20 28 76 73 4c 69 73 74 2e 56 65 72    if (vsList.Ver
34300 73 69 6f 6e 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  sions == null)..
34310 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
34320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
34330 72 72 6f 72 20 3d 20 22 6e 6f 20 56 53 20 76 65  rror = "no VS ve
34340 72 73 69 6f 6e 73 20 66 6f 75 6e 64 22 3b 0d 0a  rsions found";..
34350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34360 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20  return false;.. 
34370 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
34380 20 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 65              fore
34390 61 63 68 20 28 56 65 72 73 69 6f 6e 20 76 73 56  ach (Version vsV
343a0 65 72 73 69 6f 6e 20 69 6e 20 76 73 4c 69 73 74  ersion in vsList
343b0 2e 56 65 72 73 69 6f 6e 73 29 0d 0a 20 20 20 20  .Versions)..    
343c0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
343d0 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
343e0 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63  Ops.DebugAndTrac
343f0 65 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e  e(TracePriority.
34400 4c 6f 77 65 72 2c 0d 0a 20 20 20 20 20 20 20 20  Lower,..        
34410 20 20 20 20 20 20 20 20 20 20 20 20 64 65 62 75              debu
34420 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65  gCallback, trace
34430 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67  Callback, String
34440 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  .Format(..      
34450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 76                "v
34460 73 56 65 72 73 69 6f 6e 20 3d 20 7b 30 7d 22 2c  sVersion = {0}",
34470 20 46 6f 72 44 69 73 70 6c 61 79 28 76 73 56 65   ForDisplay(vsVe
34480 72 73 69 6f 6e 29 29 2c 0d 0a 20 20 20 20 20 20  rsion)),..      
34490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
344a0 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d  aceCategory);...
344b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
344c0 20 73 74 72 69 6e 67 20 69 6e 73 74 61 6c 6c 44   string installD
344d0 69 72 65 63 74 6f 72 79 20 3d 20 6e 75 6c 6c 3b  irectory = null;
344e0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
344f0 20 20 20 20 69 66 20 28 21 48 61 76 65 56 73 56      if (!HaveVsV
34500 65 72 73 69 6f 6e 44 69 72 65 63 74 6f 72 79 28  ersionDirectory(
34510 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
34520 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65            rootKe
34530 79 2c 20 76 73 56 65 72 73 69 6f 6e 2c 20 73 75  y, vsVersion, su
34540 66 66 69 78 2c 20 70 65 72 55 73 65 72 2c 20 77  ffix, perUser, w
34550 6f 77 36 34 2c 20 77 68 61 74 49 66 2c 0d 0a 20  ow64, whatIf,.. 
34560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34570 20 20 20 20 20 20 20 76 65 72 62 6f 73 65 2c 20         verbose, 
34580 72 65 66 20 69 6e 73 74 61 6c 6c 44 69 72 65 63  ref installDirec
34590 74 6f 72 79 29 29 0d 0a 20 20 20 20 20 20 20 20  tory))..        
345a0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
345b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
345c0 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64  raceOps.DebugAnd
345d0 54 72 61 63 65 28 54 72 61 63 65 50 72 69 6f 72  Trace(TracePrior
345e0 69 74 79 2e 4c 6f 77 2c 0d 0a 20 20 20 20 20 20  ity.Low,..      
345f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34600 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c    debugCallback,
34610 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20   traceCallback, 
34620 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
34630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34640 20 20 20 20 20 20 20 20 22 56 69 73 75 61 6c 20          "Visual 
34650 53 74 75 64 69 6f 20 7b 30 7d 20 6e 6f 74 20 66  Studio {0} not f
34660 6f 75 6e 64 2c 20 73 6b 69 70 70 69 6e 67 2e 2e  ound, skipping..
34670 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  .",..           
34680 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72               For
34690 44 69 73 70 6c 61 79 28 76 73 56 65 72 73 69 6f  Display(vsVersio
346a0 6e 29 29 2c 20 74 72 61 63 65 43 61 74 65 67 6f  n)), traceCatego
346b0 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
346c0 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74              cont
346d0 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  inue;..         
346e0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
346f0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
34700 63 61 6c 6c 62 61 63 6b 20 3d 3d 20 6e 75 6c 6c  callback == null
34710 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
34720 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b         continue;
34730 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
34740 20 20 20 20 69 66 20 28 21 63 61 6c 6c 62 61 63      if (!callbac
34750 6b 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  k(..            
34760 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74              root
34770 4b 65 79 2c 20 76 73 56 65 72 73 69 6f 6e 2c 20  Key, vsVersion, 
34780 73 75 66 66 69 78 2c 20 70 61 63 6b 61 67 65 2c  suffix, package,
34790 20 69 6e 73 74 61 6c 6c 44 69 72 65 63 74 6f 72   installDirector
347a0 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y,..            
347b0 20 20 20 20 20 20 20 20 20 20 20 20 63 6c 69 65              clie
347c0 6e 74 44 61 74 61 2c 20 70 65 72 55 73 65 72 2c  ntData, perUser,
347d0 20 77 6f 77 36 34 2c 20 74 68 72 6f 77 4f 6e 4d   wow64, throwOnM
347e0 69 73 73 69 6e 67 2c 20 77 68 61 74 49 66 2c 0d  issing, whatIf,.
347f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
34800 20 20 20 20 20 20 20 20 20 76 65 72 62 6f 73 65           verbose
34810 2c 20 72 65 66 20 65 72 72 6f 72 29 29 0d 0a 20  , ref error)).. 
34820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
34830 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
34840 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
34850 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se;..           
34860 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
34870 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
34880 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 65       return true
34890 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  ;..        }..  
348a0 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
348b0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
348c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
348d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
348e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
348f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34900 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23  ///....        #
34910 72 65 67 69 6f 6e 20 43 6f 6e 66 69 67 75 72 61  region Configura
34920 74 69 6f 6e 20 46 69 6c 65 20 48 61 6e 64 6c 69  tion File Handli
34930 6e 67 0d 0a 20 20 20 20 20 20 20 20 5b 4d 65 74  ng..        [Met
34940 68 6f 64 49 6d 70 6c 28 4d 65 74 68 6f 64 49 6d  hodImpl(MethodIm
34950 70 6c 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e 6c 69  plOptions.NoInli
34960 6e 69 6e 67 29 5d 0d 0a 20 20 20 20 20 20 20 20  ning)]..        
34970 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 62  private static b
34980 6f 6f 6c 20 41 64 64 44 62 50 72 6f 76 69 64 65  ool AddDbProvide
34990 72 46 61 63 74 6f 72 79 28 0d 0a 20 20 20 20 20  rFactory(..     
349a0 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 66 69         string fi
349b0 6c 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20  leName,..       
349c0 20 20 20 20 20 73 74 72 69 6e 67 20 69 6e 76 61       string inva
349d0 72 69 61 6e 74 4e 61 6d 65 2c 0d 0a 20 20 20 20  riantName,..    
349e0 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6e          string n
349f0 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ame,..          
34a00 20 20 73 74 72 69 6e 67 20 64 65 73 63 72 69 70    string descrip
34a10 74 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20  tion,..         
34a20 20 20 20 73 74 72 69 6e 67 20 74 79 70 65 4e 61     string typeNa
34a30 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me,..           
34a40 20 41 73 73 65 6d 62 6c 79 4e 61 6d 65 20 61 73   AssemblyName as
34a50 73 65 6d 62 6c 79 4e 61 6d 65 2c 0d 0a 20 20 20  semblyName,..   
34a60 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68           bool wh
34a70 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20  atIf,..         
34a80 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c     bool verbose,
34a90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
34aa0 66 20 62 6f 6f 6c 20 73 61 76 65 64 2c 0d 0a 20  f bool saved,.. 
34ab0 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20 73             ref s
34ac0 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20  tring error..   
34ad0 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
34ae0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
34af0 20 20 20 62 6f 6f 6c 20 64 69 72 74 79 20 3d 20     bool dirty = 
34b00 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20  false;..        
34b10 20 20 20 20 58 6d 6c 44 6f 63 75 6d 65 6e 74 20      XmlDocument 
34b20 64 6f 63 75 6d 65 6e 74 20 3d 20 6e 65 77 20 58  document = new X
34b30 6d 6c 44 6f 63 75 6d 65 6e 74 28 29 3b 0d 0a 0d  mlDocument();...
34b40 0a 20 20 20 20 20 20 20 20 20 20 20 20 64 6f 63  .            doc
34b50 75 6d 65 6e 74 2e 50 72 65 73 65 72 76 65 57 68  ument.PreserveWh
34b60 69 74 65 73 70 61 63 65 20 3d 20 74 72 75 65 3b  itespace = true;
34b70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 64 6f  ..            do
34b80 63 75 6d 65 6e 74 2e 4c 6f 61 64 28 66 69 6c 65  cument.Load(file
34b90 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  Name);....      
34ba0 20 20 20 20 20 20 58 6d 6c 45 6c 65 6d 65 6e 74        XmlElement
34bb0 20 61 64 64 45 6c 65 6d 65 6e 74 20 3d 20 64 6f   addElement = do
34bc0 63 75 6d 65 6e 74 2e 53 65 6c 65 63 74 53 69 6e  cument.SelectSin
34bd0 67 6c 65 4e 6f 64 65 28 0d 0a 20 20 20 20 20 20  gleNode(..      
34be0 20 20 20 20 20 20 20 20 20 20 53 74 72 69 6e 67            String
34bf0 2e 46 6f 72 6d 61 74 28 58 50 61 74 68 46 6f 72  .Format(XPathFor
34c00 41 64 64 45 6c 65 6d 65 6e 74 2c 20 69 6e 76 61  AddElement, inva
34c10 72 69 61 6e 74 4e 61 6d 65 29 29 20 61 73 20 58  riantName)) as X
34c20 6d 6c 45 6c 65 6d 65 6e 74 3b 0d 0a 0d 0a 20 20  mlElement;....  
34c30 20 20 20 20 20 20 20 20 20 20 69 66 20 28 61 64            if (ad
34c40 64 45 6c 65 6d 65 6e 74 20 3d 3d 20 6e 75 6c 6c  dElement == null
34c50 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
34c60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
34c70 20 20 73 74 72 69 6e 67 5b 5d 20 65 6c 65 6d 65    string[] eleme
34c80 6e 74 4e 61 6d 65 73 20 3d 20 7b 0d 0a 20 20 20  ntNames = {..   
34c90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34ca0 20 22 73 79 73 74 65 6d 2e 64 61 74 61 22 2c 20   "system.data", 
34cb0 22 44 62 50 72 6f 76 69 64 65 72 46 61 63 74 6f  "DbProviderFacto
34cc0 72 69 65 73 22 0d 0a 20 20 20 20 20 20 20 20 20  ries"..         
34cd0 20 20 20 20 20 20 20 7d 3b 0d 0a 0d 0a 20 20 20         };....   
34ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 58 6d 6c               Xml
34cf0 45 6c 65 6d 65 6e 74 20 70 72 65 76 69 6f 75 73  Element previous
34d00 45 6c 65 6d 65 6e 74 20 3d 0d 0a 20 20 20 20 20  Element =..     
34d10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64                 d
34d20 6f 63 75 6d 65 6e 74 2e 44 6f 63 75 6d 65 6e 74  ocument.Document
34d30 45 6c 65 6d 65 6e 74 3b 20 2f 2a 20 63 6f 6e 66  Element; /* conf
34d40 69 67 75 72 61 74 69 6f 6e 20 2a 2f 0d 0a 0d 0a  iguration */....
34d50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34d60 66 6f 72 65 61 63 68 20 28 73 74 72 69 6e 67 20  foreach (string 
34d70 65 6c 65 6d 65 6e 74 4e 61 6d 65 20 69 6e 20 65  elementName in e
34d80 6c 65 6d 65 6e 74 4e 61 6d 65 73 29 0d 0a 20 20  lementNames)..  
34d90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
34da0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
34db0 20 20 20 20 20 61 64 64 45 6c 65 6d 65 6e 74 20       addElement 
34dc0 3d 20 70 72 65 76 69 6f 75 73 45 6c 65 6d 65 6e  = previousElemen
34dd0 74 2e 53 65 6c 65 63 74 53 69 6e 67 6c 65 4e 6f  t.SelectSingleNo
34de0 64 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  de(..           
34df0 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 65               ele
34e00 6d 65 6e 74 4e 61 6d 65 29 20 61 73 20 58 6d 6c  mentName) as Xml
34e10 45 6c 65 6d 65 6e 74 3b 0d 0a 0d 0a 20 20 20 20  Element;....    
34e20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34e30 69 66 20 28 61 64 64 45 6c 65 6d 65 6e 74 20 3d  if (addElement =
34e40 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
34e50 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
34e60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34e70 20 20 20 20 20 20 20 20 61 64 64 45 6c 65 6d 65          addEleme
34e80 6e 74 20 3d 20 64 6f 63 75 6d 65 6e 74 2e 43 72  nt = document.Cr
34e90 65 61 74 65 45 6c 65 6d 65 6e 74 28 0d 0a 20 20  eateElement(..  
34ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34eb0 20 20 20 20 20 20 20 20 20 20 65 6c 65 6d 65 6e            elemen
34ec0 74 4e 61 6d 65 2c 20 53 74 72 69 6e 67 2e 45 6d  tName, String.Em
34ed0 70 74 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  pty);....       
34ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34ef0 20 70 72 65 76 69 6f 75 73 45 6c 65 6d 65 6e 74   previousElement
34f00 2e 41 70 70 65 6e 64 43 68 69 6c 64 28 61 64 64  .AppendChild(add
34f10 45 6c 65 6d 65 6e 74 29 3b 0d 0a 20 20 20 20 20  Element);..     
34f20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
34f30 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
34f40 20 20 20 20 20 20 20 20 70 72 65 76 69 6f 75 73          previous
34f50 45 6c 65 6d 65 6e 74 20 3d 20 61 64 64 45 6c 65  Element = addEle
34f60 6d 65 6e 74 3b 0d 0a 20 20 20 20 20 20 20 20 20  ment;..         
34f70 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
34f80 20 20 20 20 20 20 20 20 20 20 20 20 61 64 64 45              addE
34f90 6c 65 6d 65 6e 74 20 3d 20 64 6f 63 75 6d 65 6e  lement = documen
34fa0 74 2e 43 72 65 61 74 65 45 6c 65 6d 65 6e 74 28  t.CreateElement(
34fb0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
34fc0 20 20 20 20 20 20 22 61 64 64 22 2c 20 53 74 72        "add", Str
34fd0 69 6e 67 2e 45 6d 70 74 79 29 3b 0d 0a 0d 0a 20  ing.Empty);.... 
34fe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70                 p
34ff0 72 65 76 69 6f 75 73 45 6c 65 6d 65 6e 74 2e 41  reviousElement.A
35000 70 70 65 6e 64 43 68 69 6c 64 28 61 64 64 45 6c  ppendChild(addEl
35010 65 6d 65 6e 74 29 3b 0d 0a 0d 0a 20 20 20 20 20  ement);....     
35020 20 20 20 20 20 20 20 20 20 20 20 64 69 72 74 79             dirty
35030 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20   = true;..      
35040 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
35050 20 20 20 20 20 20 20 69 66 20 28 21 53 74 72 69         if (!Stri
35060 6e 67 2e 45 71 75 61 6c 73 28 61 64 64 45 6c 65  ng.Equals(addEle
35070 6d 65 6e 74 2e 47 65 74 41 74 74 72 69 62 75 74  ment.GetAttribut
35080 65 28 22 6e 61 6d 65 22 29 2c 0d 0a 20 20 20 20  e("name"),..    
35090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
350a0 6e 61 6d 65 2c 20 53 74 72 69 6e 67 43 6f 6d 70  name, StringComp
350b0 61 72 69 73 6f 6e 2e 4f 72 64 69 6e 61 6c 29 29  arison.Ordinal))
350c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
350d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
350e0 20 61 64 64 45 6c 65 6d 65 6e 74 2e 53 65 74 41   addElement.SetA
350f0 74 74 72 69 62 75 74 65 28 22 6e 61 6d 65 22 2c  ttribute("name",
35100 20 6e 61 6d 65 29 3b 0d 0a 20 20 20 20 20 20 20   name);..       
35110 20 20 20 20 20 20 20 20 20 64 69 72 74 79 20 3d           dirty =
35120 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20   true;..        
35130 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
35140 20 20 20 20 20 69 66 20 28 21 53 74 72 69 6e 67       if (!String
35150 2e 45 71 75 61 6c 73 28 61 64 64 45 6c 65 6d 65  .Equals(addEleme
35160 6e 74 2e 47 65 74 41 74 74 72 69 62 75 74 65 28  nt.GetAttribute(
35170 22 69 6e 76 61 72 69 61 6e 74 22 29 2c 0d 0a 20  "invariant"),.. 
35180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35190 20 20 20 69 6e 76 61 72 69 61 6e 74 4e 61 6d 65     invariantName
351a0 2c 20 53 74 72 69 6e 67 43 6f 6d 70 61 72 69 73  , StringComparis
351b0 6f 6e 2e 4f 72 64 69 6e 61 6c 29 29 0d 0a 20 20  on.Ordinal))..  
351c0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
351d0 20 20 20 20 20 20 20 20 20 20 20 20 20 61 64 64               add
351e0 45 6c 65 6d 65 6e 74 2e 53 65 74 41 74 74 72 69  Element.SetAttri
351f0 62 75 74 65 28 22 69 6e 76 61 72 69 61 6e 74 22  bute("invariant"
35200 2c 20 69 6e 76 61 72 69 61 6e 74 4e 61 6d 65 29  , invariantName)
35210 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
35220 20 20 20 64 69 72 74 79 20 3d 20 74 72 75 65 3b     dirty = true;
35230 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
35240 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
35250 66 20 28 21 53 74 72 69 6e 67 2e 45 71 75 61 6c  f (!String.Equal
35260 73 28 61 64 64 45 6c 65 6d 65 6e 74 2e 47 65 74  s(addElement.Get
35270 41 74 74 72 69 62 75 74 65 28 22 64 65 73 63 72  Attribute("descr
35280 69 70 74 69 6f 6e 22 29 2c 0d 0a 20 20 20 20 20  iption"),..     
35290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64                 d
352a0 65 73 63 72 69 70 74 69 6f 6e 2c 20 53 74 72 69  escription, Stri
352b0 6e 67 43 6f 6d 70 61 72 69 73 6f 6e 2e 4f 72 64  ngComparison.Ord
352c0 69 6e 61 6c 29 29 0d 0a 20 20 20 20 20 20 20 20  inal))..        
352d0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
352e0 20 20 20 20 20 20 20 61 64 64 45 6c 65 6d 65 6e         addElemen
352f0 74 2e 53 65 74 41 74 74 72 69 62 75 74 65 28 22  t.SetAttribute("
35300 64 65 73 63 72 69 70 74 69 6f 6e 22 2c 20 64 65  description", de
35310 73 63 72 69 70 74 69 6f 6e 29 3b 0d 0a 20 20 20  scription);..   
35320 20 20 20 20 20 20 20 20 20 20 20 20 20 64 69 72               dir
35330 74 79 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20  ty = true;..    
35340 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
35350 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
35360 66 75 6c 6c 54 79 70 65 4e 61 6d 65 20 3d 20 53  fullTypeName = S
35370 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 22 7b 30  tring.Format("{0
35380 7d 2c 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20  }, {1}",..      
35390 20 20 20 20 20 20 20 20 20 20 74 79 70 65 4e 61            typeNa
353a0 6d 65 2c 20 61 73 73 65 6d 62 6c 79 4e 61 6d 65  me, assemblyName
353b0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
353c0 20 20 69 66 20 28 21 53 74 72 69 6e 67 2e 45 71    if (!String.Eq
353d0 75 61 6c 73 28 61 64 64 45 6c 65 6d 65 6e 74 2e  uals(addElement.
353e0 47 65 74 41 74 74 72 69 62 75 74 65 28 22 74 79  GetAttribute("ty
353f0 70 65 22 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  pe"),..         
35400 20 20 20 20 20 20 20 20 20 20 20 66 75 6c 6c 54             fullT
35410 79 70 65 4e 61 6d 65 2c 20 53 74 72 69 6e 67 43  ypeName, StringC
35420 6f 6d 70 61 72 69 73 6f 6e 2e 4f 72 64 69 6e 61  omparison.Ordina
35430 6c 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  l))..           
35440 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
35450 20 20 20 20 61 64 64 45 6c 65 6d 65 6e 74 2e 53      addElement.S
35460 65 74 41 74 74 72 69 62 75 74 65 28 22 74 79 70  etAttribute("typ
35470 65 22 2c 20 66 75 6c 6c 54 79 70 65 4e 61 6d 65  e", fullTypeName
35480 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
35490 20 20 20 20 64 69 72 74 79 20 3d 20 74 72 75 65      dirty = true
354a0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
354b0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
354c0 69 66 20 28 64 69 72 74 79 20 7c 7c 20 77 68 61  if (dirty || wha
354d0 74 49 66 29 0d 0a 20 20 20 20 20 20 20 20 20 20  tIf)..          
354e0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
354f0 20 20 20 20 20 69 66 20 28 76 65 72 62 6f 73 65       if (verbose
35500 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
35510 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e         TraceOps.
35520 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 54 72  DebugAndTrace(Tr
35530 61 63 65 50 72 69 6f 72 69 74 79 2e 48 69 67 68  acePriority.High
35540 65 73 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  est,..          
35550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65                de
35560 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61  bugCallback, tra
35570 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69  ceCallback, Stri
35580 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20  ng.Format(..    
35590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
355a0 20 20 20 20 22 61 64 64 45 6c 65 6d 65 6e 74 20      "addElement 
355b0 3d 20 7b 30 7d 22 2c 20 46 6f 72 44 69 73 70 6c  = {0}", ForDispl
355c0 61 79 28 61 64 64 45 6c 65 6d 65 6e 74 29 29 2c  ay(addElement)),
355d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
355e0 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
355f0 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20  ategory);....   
35600 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
35610 28 21 77 68 61 74 49 66 29 0d 0a 20 20 20 20 20  (!whatIf)..     
35620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64                 d
35630 6f 63 75 6d 65 6e 74 2e 53 61 76 65 28 66 69 6c  ocument.Save(fil
35640 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20  eName);....     
35650 20 20 20 20 20 20 20 20 20 20 20 66 69 6c 65 73             files
35660 4d 6f 64 69 66 69 65 64 2b 2b 3b 0d 0a 0d 0a 20  Modified++;.... 
35670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
35680 61 76 65 64 20 3d 20 74 72 75 65 3b 0d 0a 20 20  aved = true;..  
35690 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
356a0 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
356b0 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20  n true;..       
356c0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f   }....        //
356d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
356e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
356f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35700 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35710 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
35720 20 5b 4d 65 74 68 6f 64 49 6d 70 6c 28 4d 65 74   [MethodImpl(Met
35730 68 6f 64 49 6d 70 6c 4f 70 74 69 6f 6e 73 2e 4e  hodImplOptions.N
35740 6f 49 6e 6c 69 6e 69 6e 67 29 5d 0d 0a 20 20 20  oInlining)]..   
35750 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61       private sta
35760 74 69 63 20 62 6f 6f 6c 20 52 65 6d 6f 76 65 44  tic bool RemoveD
35770 62 50 72 6f 76 69 64 65 72 46 61 63 74 6f 72 79  bProviderFactory
35780 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  (..            s
35790 74 72 69 6e 67 20 66 69 6c 65 4e 61 6d 65 2c 0d  tring fileName,.
357a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72  .            str
357b0 69 6e 67 20 69 6e 76 61 72 69 61 6e 74 4e 61 6d  ing invariantNam
357c0 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
357d0 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20  bool whatIf,..  
357e0 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76            bool v
357f0 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20  erbose,..       
35800 20 20 20 20 20 72 65 66 20 62 6f 6f 6c 20 73 61       ref bool sa
35810 76 65 64 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ved,..          
35820 20 20 72 65 66 20 73 74 72 69 6e 67 20 65 72 72    ref string err
35830 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  or..            
35840 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
35850 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 64            bool d
35860 69 72 74 79 20 3d 20 66 61 6c 73 65 3b 0d 0a 20  irty = false;.. 
35870 20 20 20 20 20 20 20 20 20 20 20 58 6d 6c 44 6f             XmlDo
35880 63 75 6d 65 6e 74 20 64 6f 63 75 6d 65 6e 74 20  cument document 
35890 3d 20 6e 65 77 20 58 6d 6c 44 6f 63 75 6d 65 6e  = new XmlDocumen
358a0 74 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  t();....        
358b0 20 20 20 20 64 6f 63 75 6d 65 6e 74 2e 50 72 65      document.Pre
358c0 73 65 72 76 65 57 68 69 74 65 73 70 61 63 65 20  serveWhitespace 
358d0 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20  = true;..       
358e0 20 20 20 20 20 64 6f 63 75 6d 65 6e 74 2e 4c 6f       document.Lo
358f0 61 64 28 66 69 6c 65 4e 61 6d 65 29 3b 0d 0a 0d  ad(fileName);...
35900 0a 20 20 20 20 20 20 20 20 20 20 20 20 58 6d 6c  .            Xml
35910 45 6c 65 6d 65 6e 74 20 61 64 64 45 6c 65 6d 65  Element addEleme
35920 6e 74 20 3d 20 64 6f 63 75 6d 65 6e 74 2e 53 65  nt = document.Se
35930 6c 65 63 74 53 69 6e 67 6c 65 4e 6f 64 65 28 0d  lectSingleNode(.
35940 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
35950 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 58   String.Format(X
35960 50 61 74 68 46 6f 72 41 64 64 45 6c 65 6d 65 6e  PathForAddElemen
35970 74 2c 20 69 6e 76 61 72 69 61 6e 74 4e 61 6d 65  t, invariantName
35980 29 29 20 61 73 20 58 6d 6c 45 6c 65 6d 65 6e 74  )) as XmlElement
35990 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
359a0 20 69 66 20 28 61 64 64 45 6c 65 6d 65 6e 74 20   if (addElement 
359b0 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  != null)..      
359c0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
359d0 20 20 20 20 20 20 20 20 20 61 64 64 45 6c 65 6d           addElem
359e0 65 6e 74 2e 50 61 72 65 6e 74 4e 6f 64 65 2e 52  ent.ParentNode.R
359f0 65 6d 6f 76 65 43 68 69 6c 64 28 61 64 64 45 6c  emoveChild(addEl
35a00 65 6d 65 6e 74 29 3b 0d 0a 20 20 20 20 20 20 20  ement);..       
35a10 20 20 20 20 20 20 20 20 20 64 69 72 74 79 20 3d           dirty =
35a20 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20   true;..        
35a30 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
35a40 20 20 20 20 20 58 6d 6c 45 6c 65 6d 65 6e 74 20       XmlElement 
35a50 72 65 6d 6f 76 65 45 6c 65 6d 65 6e 74 20 3d 20  removeElement = 
35a60 64 6f 63 75 6d 65 6e 74 2e 53 65 6c 65 63 74 53  document.SelectS
35a70 69 6e 67 6c 65 4e 6f 64 65 28 0d 0a 20 20 20 20  ingleNode(..    
35a80 20 20 20 20 20 20 20 20 20 20 20 20 53 74 72 69              Stri
35a90 6e 67 2e 46 6f 72 6d 61 74 28 58 50 61 74 68 46  ng.Format(XPathF
35aa0 6f 72 52 65 6d 6f 76 65 45 6c 65 6d 65 6e 74 2c  orRemoveElement,
35ab0 20 69 6e 76 61 72 69 61 6e 74 4e 61 6d 65 29 29   invariantName))
35ac0 20 61 73 20 58 6d 6c 45 6c 65 6d 65 6e 74 3b 0d   as XmlElement;.
35ad0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
35ae0 66 20 28 72 65 6d 6f 76 65 45 6c 65 6d 65 6e 74  f (removeElement
35af0 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   != null)..     
35b00 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
35b10 20 20 20 20 20 20 20 20 20 20 72 65 6d 6f 76 65            remove
35b20 45 6c 65 6d 65 6e 74 2e 50 61 72 65 6e 74 4e 6f  Element.ParentNo
35b30 64 65 2e 52 65 6d 6f 76 65 43 68 69 6c 64 28 72  de.RemoveChild(r
35b40 65 6d 6f 76 65 45 6c 65 6d 65 6e 74 29 3b 0d 0a  emoveElement);..
35b50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35b60 64 69 72 74 79 20 3d 20 74 72 75 65 3b 0d 0a 20  dirty = true;.. 
35b70 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
35b80 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
35b90 64 69 72 74 79 20 7c 7c 20 77 68 61 74 49 66 29  dirty || whatIf)
35ba0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
35bb0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
35bc0 20 69 66 20 28 76 65 72 62 6f 73 65 29 0d 0a 20   if (verbose).. 
35bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35be0 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75     TraceOps.Debu
35bf0 67 41 6e 64 54 72 61 63 65 28 54 72 61 63 65 50  gAndTrace(TraceP
35c00 72 69 6f 72 69 74 79 2e 48 69 67 68 65 73 74 2c  riority.Highest,
35c10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
35c20 20 20 20 20 20 20 20 20 20 20 64 65 62 75 67 43            debugC
35c30 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61  allback, traceCa
35c40 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46  llback, String.F
35c50 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
35c60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35c70 22 61 64 64 45 6c 65 6d 65 6e 74 20 3d 20 7b 30  "addElement = {0
35c80 7d 2c 20 72 65 6d 6f 76 65 45 6c 65 6d 65 6e 74  }, removeElement
35c90 20 3d 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20   = {1}",..      
35ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35cb0 20 20 46 6f 72 44 69 73 70 6c 61 79 28 61 64 64    ForDisplay(add
35cc0 45 6c 65 6d 65 6e 74 29 2c 20 46 6f 72 44 69 73  Element), ForDis
35cd0 70 6c 61 79 28 72 65 6d 6f 76 65 45 6c 65 6d 65  play(removeEleme
35ce0 6e 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  nt)),..         
35cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
35d00 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
35d10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
35d20 20 20 69 66 20 28 21 77 68 61 74 49 66 29 0d 0a    if (!whatIf)..
35d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35d40 20 20 20 20 64 6f 63 75 6d 65 6e 74 2e 53 61 76      document.Sav
35d50 65 28 66 69 6c 65 4e 61 6d 65 29 3b 0d 0a 0d 0a  e(fileName);....
35d60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35d70 66 69 6c 65 73 4d 6f 64 69 66 69 65 64 2b 2b 3b  filesModified++;
35d80 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
35d90 20 20 20 20 73 61 76 65 64 20 3d 20 74 72 75 65      saved = true
35da0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
35db0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
35dc0 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20  return true;..  
35dd0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
35de0 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
35df0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35e00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35e10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35e20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
35e30 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74        private st
35e40 61 74 69 63 20 62 6f 6f 6c 20 50 72 6f 63 65 73  atic bool Proces
35e50 73 44 62 50 72 6f 76 69 64 65 72 46 61 63 74 6f  sDbProviderFacto
35e60 72 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ry(..           
35e70 20 73 74 72 69 6e 67 20 66 69 6c 65 4e 61 6d 65   string fileName
35e80 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  ,..            s
35e90 74 72 69 6e 67 20 69 6e 76 61 72 69 61 6e 74 4e  tring invariantN
35ea0 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ame,..          
35eb0 20 20 73 74 72 69 6e 67 20 6e 61 6d 65 2c 0d 0a    string name,..
35ec0 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
35ed0 6e 67 20 64 65 73 63 72 69 70 74 69 6f 6e 2c 0d  ng description,.
35ee0 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72  .            str
35ef0 69 6e 67 20 74 79 70 65 4e 61 6d 65 2c 0d 0a 20  ing typeName,.. 
35f00 20 20 20 20 20 20 20 20 20 20 20 41 73 73 65 6d             Assem
35f10 62 6c 79 4e 61 6d 65 20 61 73 73 65 6d 62 6c 79  blyName assembly
35f20 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  Name,..         
35f30 20 20 20 73 74 72 69 6e 67 20 64 69 72 65 63 74     string direct
35f40 6f 72 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ory,..          
35f50 20 20 6f 62 6a 65 63 74 20 63 6c 69 65 6e 74 44    object clientD
35f60 61 74 61 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ata,..          
35f70 20 20 62 6f 6f 6c 20 70 65 72 55 73 65 72 2c 0d    bool perUser,.
35f80 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f  .            boo
35f90 6c 20 77 6f 77 36 34 2c 0d 0a 20 20 20 20 20 20  l wow64,..      
35fa0 20 20 20 20 20 20 62 6f 6f 6c 20 74 68 72 6f 77        bool throw
35fb0 4f 6e 4d 69 73 73 69 6e 67 2c 0d 0a 20 20 20 20  OnMissing,..    
35fc0 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61          bool wha
35fd0 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  tIf,..          
35fe0 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c 0d    bool verbose,.
35ff0 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66  .            ref
36000 20 62 6f 6f 6c 20 73 61 76 65 64 2c 0d 0a 20 20   bool saved,..  
36010 20 20 20 20 20 20 20 20 20 20 72 65 66 20 73 74            ref st
36020 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20 20  ring error..    
36030 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
36040 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
36050 20 20 41 6e 79 50 61 69 72 3c 73 74 72 69 6e 67    AnyPair<string
36060 2c 20 62 6f 6f 6c 3e 20 70 61 69 72 20 3d 20 63  , bool> pair = c
36070 6c 69 65 6e 74 44 61 74 61 20 61 73 20 41 6e 79  lientData as Any
36080 50 61 69 72 3c 73 74 72 69 6e 67 2c 20 62 6f 6f  Pair<string, boo
36090 6c 3e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  l>;....         
360a0 20 20 20 69 66 20 28 70 61 69 72 20 3d 3d 20 6e     if (pair == n
360b0 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
360c0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
360d0 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 69 6e       error = "in
360e0 76 61 6c 69 64 20 66 72 61 6d 65 77 6f 72 6b 20  valid framework 
360f0 63 6f 6e 66 69 67 20 63 61 6c 6c 62 61 63 6b 20  config callback 
36100 64 61 74 61 22 3b 0d 0a 20 20 20 20 20 20 20 20  data";..        
36110 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
36120 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alse;..         
36130 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
36140 20 20 20 20 69 66 20 28 70 61 69 72 2e 59 29 0d      if (pair.Y).
36150 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
36160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36170 72 65 74 75 72 6e 20 52 65 6d 6f 76 65 44 62 50  return RemoveDbP
36180 72 6f 76 69 64 65 72 46 61 63 74 6f 72 79 28 0d  roviderFactory(.
36190 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
361a0 20 20 20 20 20 66 69 6c 65 4e 61 6d 65 2c 20 69       fileName, i
361b0 6e 76 61 72 69 61 6e 74 4e 61 6d 65 2c 20 77 68  nvariantName, wh
361c0 61 74 49 66 2c 20 76 65 72 62 6f 73 65 2c 20 72  atIf, verbose, r
361d0 65 66 20 73 61 76 65 64 2c 0d 0a 20 20 20 20 20  ef saved,..     
361e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
361f0 65 66 20 65 72 72 6f 72 29 20 26 26 0d 0a 20 20  ef error) &&..  
36200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 41 64                Ad
36210 64 44 62 50 72 6f 76 69 64 65 72 46 61 63 74 6f  dDbProviderFacto
36220 72 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ry(..           
36230 20 20 20 20 20 20 20 20 20 66 69 6c 65 4e 61 6d           fileNam
36240 65 2c 20 69 6e 76 61 72 69 61 6e 74 4e 61 6d 65  e, invariantName
36250 2c 20 6e 61 6d 65 2c 20 64 65 73 63 72 69 70 74  , name, descript
36260 69 6f 6e 2c 20 74 79 70 65 4e 61 6d 65 2c 0d 0a  ion, typeName,..
36270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36280 20 20 20 20 61 73 73 65 6d 62 6c 79 4e 61 6d 65      assemblyName
36290 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73  , whatIf, verbos
362a0 65 2c 20 72 65 66 20 73 61 76 65 64 2c 20 72 65  e, ref saved, re
362b0 66 20 65 72 72 6f 72 29 3b 0d 0a 20 20 20 20 20  f error);..     
362c0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
362d0 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20        else..    
362e0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
362f0 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
36300 6e 20 52 65 6d 6f 76 65 44 62 50 72 6f 76 69 64  n RemoveDbProvid
36310 65 72 46 61 63 74 6f 72 79 28 0d 0a 20 20 20 20  erFactory(..    
36320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36330 66 69 6c 65 4e 61 6d 65 2c 20 69 6e 76 61 72 69  fileName, invari
36340 61 6e 74 4e 61 6d 65 2c 20 77 68 61 74 49 66 2c  antName, whatIf,
36350 20 76 65 72 62 6f 73 65 2c 20 72 65 66 20 73 61   verbose, ref sa
36360 76 65 64 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ved,..          
36370 20 20 20 20 20 20 20 20 20 20 72 65 66 20 65 72            ref er
36380 72 6f 72 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ror);..         
36390 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d     }..        }.
363a0 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67  .        #endreg
363b0 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f  ion....        /
363c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
363d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
363e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
363f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36400 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
36410 20 20 23 72 65 67 69 6f 6e 20 41 73 73 65 6d 62    #region Assemb
36420 6c 79 20 46 6f 6c 64 65 72 73 20 48 61 6e 64 6c  ly Folders Handl
36430 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 70 72 69  ing..        pri
36440 76 61 74 65 20 73 74 61 74 69 63 20 73 74 72 69  vate static stri
36450 6e 67 20 47 65 74 41 73 73 65 6d 62 6c 79 46 6f  ng GetAssemblyFo
36460 6c 64 65 72 73 4b 65 79 4e 61 6d 65 28 0d 0a 20  ldersKeyName(.. 
36470 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
36480 67 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c  g frameworkName,
36490 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 56 65  ..            Ve
364a0 72 73 69 6f 6e 20 66 72 61 6d 65 77 6f 72 6b 56  rsion frameworkV
364b0 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20  ersion,..       
364c0 20 20 20 20 20 73 74 72 69 6e 67 20 70 6c 61 74       string plat
364d0 66 6f 72 6d 4e 61 6d 65 2c 0d 0a 20 20 20 20 20  formName,..     
364e0 20 20 20 20 20 20 20 62 6f 6f 6c 20 70 65 72 55         bool perU
364f0 73 65 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ser,..          
36500 20 20 62 6f 6f 6c 20 77 6f 77 36 34 0d 0a 20 20    bool wow64..  
36510 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
36520 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
36530 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
36540 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 54 68 69      // NOTE: Thi
36550 73 20 72 65 67 69 73 74 72 79 20 6b 65 79 20 61  s registry key a
36560 70 70 65 61 72 73 20 74 6f 20 61 6c 77 61 79 73  ppears to always
36570 20 62 65 20 33 32 2d 62 69 74 20 6f 6e 6c 79 0d   be 32-bit only.
36580 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20  .            // 
36590 20 20 20 20 20 20 28 69 2e 65 2e 20 70 72 6f 62        (i.e. prob
365a0 61 62 6c 79 20 62 65 63 61 75 73 65 20 69 74 20  ably because it 
365b0 69 73 20 6f 6e 6c 79 20 75 73 65 64 20 62 79 20  is only used by 
365c0 56 69 73 75 61 6c 0d 0a 20 20 20 20 20 20 20 20  Visual..        
365d0 20 20 20 20 2f 2f 20 20 20 20 20 20 20 53 74 75      //       Stu
365e0 64 69 6f 2c 20 77 68 69 63 68 20 69 73 20 63 75  dio, which is cu
365f0 72 72 65 6e 74 6c 79 20 61 6c 77 61 79 73 20 33  rrently always 3
36600 32 2d 62 69 74 20 6f 6e 6c 79 29 2e 0d 0a 20 20  2-bit only)...  
36610 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
36620 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
36630 20 66 6f 72 6d 61 74 20 3d 20 21 53 74 72 69 6e   format = !Strin
36640 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28  g.IsNullOrEmpty(
36650 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 29 20 3f 0d  platformName) ?.
36660 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
36670 20 22 7b 30 7d 5c 5c 4d 69 63 72 6f 73 6f 66 74   "{0}\\Microsoft
36680 5c 5c 7b 31 7d 5c 5c 76 7b 32 7d 5c 5c 7b 33 7d  \\{1}\\v{2}\\{3}
36690 5c 5c 41 73 73 65 6d 62 6c 79 46 6f 6c 64 65 72  \\AssemblyFolder
366a0 73 45 78 22 20 3a 0d 0a 20 20 20 20 20 20 20 20  sEx" :..        
366b0 20 20 20 20 20 20 20 20 22 7b 30 7d 5c 5c 4d 69          "{0}\\Mi
366c0 63 72 6f 73 6f 66 74 5c 5c 7b 31 7d 5c 5c 76 7b  crosoft\\{1}\\v{
366d0 32 7d 5c 5c 41 73 73 65 6d 62 6c 79 46 6f 6c 64  2}\\AssemblyFold
366e0 65 72 73 45 78 22 3b 0d 0a 0d 0a 20 20 20 20 20  ersEx";....     
366f0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 74         return St
36700 72 69 6e 67 2e 46 6f 72 6d 61 74 28 66 6f 72 6d  ring.Format(form
36710 61 74 2c 20 47 65 74 52 6f 6f 74 4b 65 79 4e 61  at, GetRootKeyNa
36720 6d 65 28 70 65 72 55 73 65 72 2c 20 77 6f 77 36  me(perUser, wow6
36730 34 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  4),..           
36740 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 4e 61       frameworkNa
36750 6d 65 2c 20 66 72 61 6d 65 77 6f 72 6b 56 65 72  me, frameworkVer
36760 73 69 6f 6e 2c 20 70 6c 61 74 66 6f 72 6d 4e 61  sion, platformNa
36770 6d 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  me);..        }.
36780 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
36790 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
367a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
367b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
367c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
367d0 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72  //....        pr
367e0 69 76 61 74 65 20 73 74 61 74 69 63 20 62 6f 6f  ivate static boo
367f0 6c 20 41 64 64 54 6f 41 73 73 65 6d 62 6c 79 46  l AddToAssemblyF
36800 6f 6c 64 65 72 73 28 0d 0a 20 20 20 20 20 20 20  olders(..       
36810 20 20 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72       MockRegistr
36820 79 4b 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20  yKey rootKey,.. 
36830 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
36840 67 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c  g frameworkName,
36850 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 56 65  ..            Ve
36860 72 73 69 6f 6e 20 66 72 61 6d 65 77 6f 72 6b 56  rsion frameworkV
36870 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20  ersion,..       
36880 20 20 20 20 20 73 74 72 69 6e 67 20 70 6c 61 74       string plat
36890 66 6f 72 6d 4e 61 6d 65 2c 0d 0a 20 20 20 20 20  formName,..     
368a0 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 73 75         string su
368b0 62 4b 65 79 4e 61 6d 65 2c 0d 0a 20 20 20 20 20  bKeyName,..     
368c0 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 64 69         string di
368d0 72 65 63 74 6f 72 79 2c 0d 0a 20 20 20 20 20 20  rectory,..      
368e0 20 20 20 20 20 20 62 6f 6f 6c 20 70 65 72 55 73        bool perUs
368f0 65 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  er,..           
36900 20 62 6f 6f 6c 20 77 6f 77 36 34 2c 0d 0a 20 20   bool wow64,..  
36910 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77            bool w
36920 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20  hatIf,..        
36930 20 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65      bool verbose
36940 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  ,..            r
36950 65 66 20 73 74 72 69 6e 67 20 65 72 72 6f 72 0d  ef string error.
36960 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a  .            )..
36970 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
36980 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6b 65         string ke
36990 79 4e 61 6d 65 20 3d 20 47 65 74 41 73 73 65 6d  yName = GetAssem
369a0 62 6c 79 46 6f 6c 64 65 72 73 4b 65 79 4e 61 6d  blyFoldersKeyNam
369b0 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
369c0 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d      frameworkNam
369d0 65 2c 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73  e, frameworkVers
369e0 69 6f 6e 2c 20 70 6c 61 74 66 6f 72 6d 4e 61 6d  ion, platformNam
369f0 65 2c 20 70 65 72 55 73 65 72 2c 0d 0a 20 20 20  e, perUser,..   
36a00 20 20 20 20 20 20 20 20 20 20 20 20 20 77 6f 77               wow
36a10 36 34 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  64);....        
36a20 20 20 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52      using (MockR
36a30 65 67 69 73 74 72 79 4b 65 79 20 6b 65 79 20 3d  egistryKey key =
36a40 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e   RegistryHelper.
36a50 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20  OpenSubKey(..   
36a60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36a70 20 72 6f 6f 74 4b 65 79 2c 20 6b 65 79 4e 61 6d   rootKey, keyNam
36a80 65 2c 20 74 72 75 65 2c 20 77 68 61 74 49 66 2c  e, true, whatIf,
36a90 20 76 65 72 62 6f 73 65 29 29 0d 0a 20 20 20 20   verbose))..    
36aa0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
36ab0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6b             if (k
36ac0 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ey == null)..   
36ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
36ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36af0 20 20 20 20 65 72 72 6f 72 20 3d 20 53 74 72 69      error = Stri
36b00 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20  ng.Format(..    
36b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36b20 20 20 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20 6f      "could not o
36b30 70 65 6e 20 72 65 67 69 73 74 72 79 20 6b 65 79  pen registry key
36b40 3a 20 7b 30 7d 5c 5c 7b 31 7d 22 2c 0d 0a 20 20  : {0}\\{1}",..  
36b50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36b60 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 6b        rootKey, k
36b70 65 79 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20  eyName);....    
36b80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36b90 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20  return false;.. 
36ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
36bb0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
36bc0 20 20 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52      using (MockR
36bd0 65 67 69 73 74 72 79 4b 65 79 20 73 75 62 4b 65  egistryKey subKe
36be0 79 20 3d 20 52 65 67 69 73 74 72 79 48 65 6c 70  y = RegistryHelp
36bf0 65 72 2e 43 72 65 61 74 65 53 75 62 4b 65 79 28  er.CreateSubKey(
36c00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
36c10 20 20 20 20 20 20 20 20 20 20 6b 65 79 2c 20 73            key, s
36c20 75 62 4b 65 79 4e 61 6d 65 2c 20 77 68 61 74 49  ubKeyName, whatI
36c30 66 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a 20 20  f, verbose))..  
36c40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
36c50 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
36c60 20 20 20 20 20 69 66 20 28 73 75 62 4b 65 79 20       if (subKey 
36c70 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
36c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
36c90 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
36ca0 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d           error =
36cb0 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d   String.Format(.
36cc0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
36cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 63 6f               "co
36ce0 75 6c 64 20 6e 6f 74 20 63 72 65 61 74 65 20 72  uld not create r
36cf0 65 67 69 73 74 72 79 20 6b 65 79 3a 20 7b 30 7d  egistry key: {0}
36d00 5c 5c 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20  \\{1}",..       
36d10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36d20 20 20 20 20 20 6b 65 79 2c 20 73 75 62 4b 65 79       key, subKey
36d30 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  Name);....      
36d40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36d50 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
36d60 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
36d70 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
36d80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65                Re
36d90 67 69 73 74 72 79 48 65 6c 70 65 72 2e 53 65 74  gistryHelper.Set
36da0 56 61 6c 75 65 28 0d 0a 20 20 20 20 20 20 20 20  Value(..        
36db0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36dc0 73 75 62 4b 65 79 2c 20 6e 75 6c 6c 2c 20 64 69  subKey, null, di
36dd0 72 65 63 74 6f 72 79 2c 20 77 68 61 74 49 66 2c  rectory, whatIf,
36de0 20 76 65 72 62 6f 73 65 29 3b 0d 0a 20 20 20 20   verbose);..    
36df0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
36e00 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
36e10 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
36e20 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20  rn true;..      
36e30 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f    }....        /
36e40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36e50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36e60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36e70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36e80 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
36e90 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63    private static
36ea0 20 62 6f 6f 6c 20 52 65 6d 6f 76 65 46 72 6f 6d   bool RemoveFrom
36eb0 41 73 73 65 6d 62 6c 79 46 6f 6c 64 65 72 73 28  AssemblyFolders(
36ec0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 4d 6f  ..            Mo
36ed0 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 72 6f  ckRegistryKey ro
36ee0 6f 74 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20  otKey,..        
36ef0 20 20 20 20 73 74 72 69 6e 67 20 66 72 61 6d 65      string frame
36f00 77 6f 72 6b 4e 61 6d 65 2c 0d 0a 20 20 20 20 20  workName,..     
36f10 20 20 20 20 20 20 20 56 65 72 73 69 6f 6e 20 66         Version f
36f20 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 2c  rameworkVersion,
36f30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74  ..            st
36f40 72 69 6e 67 20 70 6c 61 74 66 6f 72 6d 4e 61 6d  ring platformNam
36f50 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
36f60 73 74 72 69 6e 67 20 73 75 62 4b 65 79 4e 61 6d  string subKeyNam
36f70 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
36f80 62 6f 6f 6c 20 70 65 72 55 73 65 72 2c 0d 0a 20  bool perUser,.. 
36f90 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
36fa0 77 6f 77 36 34 2c 0d 0a 20 20 20 20 20 20 20 20  wow64,..        
36fb0 20 20 20 20 62 6f 6f 6c 20 74 68 72 6f 77 4f 6e      bool throwOn
36fc0 4d 69 73 73 69 6e 67 2c 0d 0a 20 20 20 20 20 20  Missing,..      
36fd0 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49        bool whatI
36fe0 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  f,..            
36ff0 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c 0d 0a 20  bool verbose,.. 
37000 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20 73             ref s
37010 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20  tring error..   
37020 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
37030 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
37040 20 20 20 73 74 72 69 6e 67 20 6b 65 79 4e 61 6d     string keyNam
37050 65 20 3d 20 47 65 74 41 73 73 65 6d 62 6c 79 46  e = GetAssemblyF
37060 6f 6c 64 65 72 73 4b 65 79 4e 61 6d 65 28 0d 0a  oldersKeyName(..
37070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37080 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c 20 66  frameworkName, f
37090 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 2c  rameworkVersion,
370a0 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 2c 20 70   platformName, p
370b0 65 72 55 73 65 72 2c 0d 0a 20 20 20 20 20 20 20  erUser,..       
370c0 20 20 20 20 20 20 20 20 20 77 6f 77 36 34 29 3b           wow64);
370d0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
370e0 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73  using (MockRegis
370f0 74 72 79 4b 65 79 20 6b 65 79 20 3d 20 52 65 67  tryKey key = Reg
37100 69 73 74 72 79 48 65 6c 70 65 72 2e 4f 70 65 6e  istryHelper.Open
37110 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20 20  SubKey(..       
37120 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f               roo
37130 74 4b 65 79 2c 20 6b 65 79 4e 61 6d 65 2c 20 74  tKey, keyName, t
37140 72 75 65 2c 20 77 68 61 74 49 66 2c 20 76 65 72  rue, whatIf, ver
37150 62 6f 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20  bose))..        
37160 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
37170 20 20 20 20 20 20 20 69 66 20 28 6b 65 79 20 3d         if (key =
37180 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
37190 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
371a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
371b0 65 72 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46  error = String.F
371c0 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
371d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
371e0 22 63 6f 75 6c 64 20 6e 6f 74 20 6f 70 65 6e 20  "could not open 
371f0 72 65 67 69 73 74 72 79 20 6b 65 79 3a 20 7b 30  registry key: {0
37200 7d 5c 5c 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20  }\\{1}",..      
37210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37220 20 20 72 6f 6f 74 4b 65 79 2c 20 6b 65 79 4e 61    rootKey, keyNa
37230 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  me);....        
37240 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
37250 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20  rn false;..     
37260 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
37270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37280 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 44  RegistryHelper.D
37290 65 6c 65 74 65 53 75 62 4b 65 79 28 0d 0a 20 20  eleteSubKey(..  
372a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
372b0 20 20 6b 65 79 2c 20 73 75 62 4b 65 79 4e 61 6d    key, subKeyNam
372c0 65 2c 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e  e, throwOnMissin
372d0 67 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f  g, whatIf, verbo
372e0 73 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  se);..          
372f0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
37300 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d     return true;.
37310 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....  
37320 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
37330 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37340 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37350 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37360 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
37370 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65  .        private
37380 20 73 74 61 74 69 63 20 62 6f 6f 6c 20 50 72 6f   static bool Pro
37390 63 65 73 73 41 73 73 65 6d 62 6c 79 46 6f 6c 64  cessAssemblyFold
373a0 65 72 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ers(..          
373b0 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65    MockRegistryKe
373c0 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20 20  y rootKey,..    
373d0 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 66          string f
373e0 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c 0d 0a 20  rameworkName,.. 
373f0 20 20 20 20 20 20 20 20 20 20 20 56 65 72 73 69             Versi
37400 6f 6e 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73  on frameworkVers
37410 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ion,..          
37420 20 20 73 74 72 69 6e 67 20 70 6c 61 74 66 6f 72    string platfor
37430 6d 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20  mName,..        
37440 20 20 20 20 73 74 72 69 6e 67 20 64 69 72 65 63      string direc
37450 74 6f 72 79 2c 0d 0a 20 20 20 20 20 20 20 20 20  tory,..         
37460 20 20 20 6f 62 6a 65 63 74 20 63 6c 69 65 6e 74     object client
37470 44 61 74 61 2c 0d 0a 20 20 20 20 20 20 20 20 20  Data,..         
37480 20 20 20 62 6f 6f 6c 20 70 65 72 55 73 65 72 2c     bool perUser,
37490 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f  ..            bo
374a0 6f 6c 20 77 6f 77 36 34 2c 0d 0a 20 20 20 20 20  ol wow64,..     
374b0 20 20 20 20 20 20 20 62 6f 6f 6c 20 74 68 72 6f         bool thro
374c0 77 4f 6e 4d 69 73 73 69 6e 67 2c 0d 0a 20 20 20  wOnMissing,..   
374d0 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68           bool wh
374e0 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20  atIf,..         
374f0 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c     bool verbose,
37500 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
37510 66 20 73 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a  f string error..
37520 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
37530 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
37540 20 20 20 20 20 20 41 6e 79 50 61 69 72 3c 73 74        AnyPair<st
37550 72 69 6e 67 2c 20 62 6f 6f 6c 3e 20 70 61 69 72  ring, bool> pair
37560 20 3d 20 63 6c 69 65 6e 74 44 61 74 61 20 61 73   = clientData as
37570 20 41 6e 79 50 61 69 72 3c 73 74 72 69 6e 67 2c   AnyPair<string,
37580 20 62 6f 6f 6c 3e 3b 0d 0a 0d 0a 20 20 20 20 20   bool>;....     
37590 20 20 20 20 20 20 20 69 66 20 28 70 61 69 72 20         if (pair 
375a0 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
375b0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
375c0 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d           error =
375d0 20 22 69 6e 76 61 6c 69 64 20 66 72 61 6d 65 77   "invalid framew
375e0 6f 72 6b 20 63 61 6c 6c 62 61 63 6b 20 64 61 74  ork callback dat
375f0 61 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  a";..           
37600 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
37610 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
37620 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
37630 20 69 66 20 28 70 61 69 72 2e 59 29 0d 0a 20 20   if (pair.Y)..  
37640 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
37650 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
37660 75 72 6e 20 52 65 6d 6f 76 65 46 72 6f 6d 41 73  urn RemoveFromAs
37670 73 65 6d 62 6c 79 46 6f 6c 64 65 72 73 28 0d 0a  semblyFolders(..
37680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37690 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 66 72 61      rootKey, fra
376a0 6d 65 77 6f 72 6b 4e 61 6d 65 2c 20 66 72 61 6d  meworkName, fram
376b0 65 77 6f 72 6b 56 65 72 73 69 6f 6e 2c 20 70 6c  eworkVersion, pl
376c0 61 74 66 6f 72 6d 4e 61 6d 65 2c 0d 0a 20 20 20  atformName,..   
376d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
376e0 20 4c 65 67 61 63 79 50 72 6f 6a 65 63 74 4e 61   LegacyProjectNa
376f0 6d 65 2c 20 70 65 72 55 73 65 72 2c 20 77 6f 77  me, perUser, wow
37700 36 34 2c 20 66 61 6c 73 65 2c 20 77 68 61 74 49  64, false, whatI
37710 66 2c 20 76 65 72 62 6f 73 65 2c 0d 0a 20 20 20  f, verbose,..   
37720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37730 20 72 65 66 20 65 72 72 6f 72 29 20 26 26 0d 0a   ref error) &&..
37740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37750 41 64 64 54 6f 41 73 73 65 6d 62 6c 79 46 6f 6c  AddToAssemblyFol
37760 64 65 72 73 28 0d 0a 20 20 20 20 20 20 20 20 20  ders(..         
37770 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b             rootK
37780 65 79 2c 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d  ey, frameworkNam
37790 65 2c 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73  e, frameworkVers
377a0 69 6f 6e 2c 20 70 6c 61 74 66 6f 72 6d 4e 61 6d  ion, platformNam
377b0 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
377c0 20 20 20 20 20 20 20 20 50 72 6f 6a 65 63 74 4e          ProjectN
377d0 61 6d 65 2c 20 70 61 69 72 2e 58 2c 20 70 65 72  ame, pair.X, per
377e0 55 73 65 72 2c 20 77 6f 77 36 34 2c 20 77 68 61  User, wow64, wha
377f0 74 49 66 2c 20 76 65 72 62 6f 73 65 2c 0d 0a 20  tIf, verbose,.. 
37800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37810 20 20 20 72 65 66 20 65 72 72 6f 72 29 3b 0d 0a     ref error);..
37820 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
37830 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 0d             else.
37840 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
37850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37860 72 65 74 75 72 6e 20 52 65 6d 6f 76 65 46 72 6f  return RemoveFro
37870 6d 41 73 73 65 6d 62 6c 79 46 6f 6c 64 65 72 73  mAssemblyFolders
37880 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
37890 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20         rootKey, 
378a0 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c 20 66  frameworkName, f
378b0 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 2c  rameworkVersion,
378c0 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 2c 0d 0a   platformName,..
378d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
378e0 20 20 20 20 50 72 6f 6a 65 63 74 4e 61 6d 65 2c      ProjectName,
378f0 20 70 65 72 55 73 65 72 2c 20 77 6f 77 36 34 2c   perUser, wow64,
37900 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 2c   throwOnMissing,
37910 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20   whatIf,..      
37920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 76 65                ve
37930 72 62 6f 73 65 2c 20 72 65 66 20 65 72 72 6f 72  rbose, ref error
37940 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
37950 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  }..        }..  
37960 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
37970 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
37980 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37990 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
379a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
379b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
379c0 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23  ///....        #
379d0 72 65 67 69 6f 6e 20 56 69 73 75 61 6c 20 53 74  region Visual St
379e0 75 64 69 6f 20 48 61 6e 64 6c 69 6e 67 0d 0a 20  udio Handling.. 
379f0 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
37a00 74 61 74 69 63 20 73 74 72 69 6e 67 20 47 65 74  tatic string Get
37a10 56 73 52 6f 6f 74 4b 65 79 4e 61 6d 65 28 0d 0a  VsRootKeyName(..
37a20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
37a30 20 70 65 72 55 73 65 72 2c 0d 0a 20 20 20 20 20   perUser,..     
37a40 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36         bool wow6
37a50 34 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29  4..            )
37a60 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
37a70 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
37a80 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 22 7b  String.Format("{
37a90 30 7d 5c 5c 4d 69 63 72 6f 73 6f 66 74 5c 5c 56  0}\\Microsoft\\V
37aa0 69 73 75 61 6c 53 74 75 64 69 6f 22 2c 0d 0a 20  isualStudio",.. 
37ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 47                 G
37ac0 65 74 52 6f 6f 74 4b 65 79 4e 61 6d 65 28 70 65  etRootKeyName(pe
37ad0 72 55 73 65 72 2c 20 77 6f 77 36 34 29 29 3b 0d  rUser, wow64));.
37ae0 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....  
37af0 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
37b00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37b10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37b20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37b30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
37b40 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65  .        private
37b50 20 73 74 61 74 69 63 20 73 74 72 69 6e 67 20 47   static string G
37b60 65 74 56 73 4b 65 79 4e 61 6d 65 28 0d 0a 20 20  etVsKeyName(..  
37b70 20 20 20 20 20 20 20 20 20 20 56 65 72 73 69 6f            Versio
37b80 6e 20 76 73 56 65 72 73 69 6f 6e 2c 0d 0a 20 20  n vsVersion,..  
37b90 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
37ba0 20 73 75 66 66 69 78 2c 0d 0a 20 20 20 20 20 20   suffix,..      
37bb0 20 20 20 20 20 20 62 6f 6f 6c 20 70 65 72 55 73        bool perUs
37bc0 65 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  er,..           
37bd0 20 62 6f 6f 6c 20 77 6f 77 36 34 0d 0a 20 20 20   bool wow64..   
37be0 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
37bf0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
37c00 20 20 20 69 66 20 28 76 73 56 65 72 73 69 6f 6e     if (vsVersion
37c10 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
37c20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
37c30 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20  n null;....     
37c40 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 74         return St
37c50 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
37c60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 7b                "{
37c70 30 7d 5c 5c 7b 31 7d 7b 32 7d 22 2c 20 47 65 74  0}\\{1}{2}", Get
37c80 56 73 52 6f 6f 74 4b 65 79 4e 61 6d 65 28 70 65  VsRootKeyName(pe
37c90 72 55 73 65 72 2c 20 77 6f 77 36 34 29 2c 20 76  rUser, wow64), v
37ca0 73 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20  sVersion,..     
37cb0 20 20 20 20 20 20 20 20 20 20 20 73 75 66 66 69             suffi
37cc0 78 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  x);..        }..
37cd0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
37ce0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37cf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37d00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37d10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37d20 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65  /....        #re
37d30 67 69 6f 6e 20 56 69 73 75 61 6c 20 53 74 75 64  gion Visual Stud
37d40 69 6f 20 44 61 74 61 20 53 6f 75 72 63 65 20 48  io Data Source H
37d50 61 6e 64 6c 69 6e 67 0d 0a 20 20 20 20 20 20 20  andling..       
37d60 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20   private static 
37d70 62 6f 6f 6c 20 41 64 64 56 73 44 61 74 61 53 6f  bool AddVsDataSo
37d80 75 72 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20  urce(..         
37d90 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b     MockRegistryK
37da0 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20  ey rootKey,..   
37db0 20 20 20 20 20 20 20 20 20 56 65 72 73 69 6f 6e           Version
37dc0 20 76 73 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20   vsVersion,..   
37dd0 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
37de0 73 75 66 66 69 78 2c 0d 0a 20 20 20 20 20 20 20  suffix,..       
37df0 20 20 20 20 20 50 61 63 6b 61 67 65 20 70 61 63       Package pac
37e00 6b 61 67 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  kage,..         
37e10 20 20 20 62 6f 6f 6c 20 70 65 72 55 73 65 72 2c     bool perUser,
37e20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f  ..            bo
37e30 6f 6c 20 77 6f 77 36 34 2c 0d 0a 20 20 20 20 20  ol wow64,..     
37e40 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74         bool what
37e50 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  If,..           
37e60 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c 0d 0a   bool verbose,..
37e70 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20              ref 
37e80 73 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20  string error..  
37e90 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
37ea0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
37eb0 20 20 20 20 69 66 20 28 76 73 56 65 72 73 69 6f      if (vsVersio
37ec0 6e 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  n == null)..    
37ed0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
37ee0 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72             error
37ef0 20 3d 20 22 69 6e 76 61 6c 69 64 20 56 53 20 76   = "invalid VS v
37f00 65 72 73 69 6f 6e 22 3b 0d 0a 20 20 20 20 20 20  ersion";..      
37f10 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
37f20 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20   false;..       
37f30 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
37f40 20 20 20 20 20 20 69 66 20 28 70 61 63 6b 61 67        if (packag
37f50 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  e == null)..    
37f60 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
37f70 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72             error
37f80 20 3d 20 22 69 6e 76 61 6c 69 64 20 56 53 20 70   = "invalid VS p
37f90 61 63 6b 61 67 65 22 3b 0d 0a 20 20 20 20 20 20  ackage";..      
37fa0 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
37fb0 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20   false;..       
37fc0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
37fd0 20 20 20 20 20 20 73 74 72 69 6e 67 20 6b 65 79        string key
37fe0 4e 61 6d 65 20 3d 20 47 65 74 56 73 4b 65 79 4e  Name = GetVsKeyN
37ff0 61 6d 65 28 76 73 56 65 72 73 69 6f 6e 2c 20 73  ame(vsVersion, s
38000 75 66 66 69 78 2c 20 70 65 72 55 73 65 72 2c 20  uffix, perUser, 
38010 77 6f 77 36 34 29 3b 0d 0a 0d 0a 20 20 20 20 20  wow64);....     
38020 20 20 20 20 20 20 20 75 73 69 6e 67 20 28 4d 6f         using (Mo
38030 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 6b 65  ckRegistryKey ke
38040 79 20 3d 20 52 65 67 69 73 74 72 79 48 65 6c 70  y = RegistryHelp
38050 65 72 2e 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a  er.OpenSubKey(..
38060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38070 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 6b 65 79      rootKey, key
38080 4e 61 6d 65 2c 20 66 61 6c 73 65 2c 20 77 68 61  Name, false, wha
38090 74 49 66 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a  tIf, verbose))..
380a0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
380b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
380c0 66 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d  f (key == null).
380d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
380e0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
380f0 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20          error = 
38100 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
38110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38120 20 20 20 20 20 20 20 20 22 63 6f 75 6c 64 20 6e          "could n
38130 6f 74 20 6f 70 65 6e 20 72 65 67 69 73 74 72 79  ot open registry
38140 20 6b 65 79 3a 20 7b 30 7d 5c 5c 7b 31 7d 22 2c   key: {0}\\{1}",
38150 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
38160 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65            rootKe
38170 79 2c 20 6b 65 79 4e 61 6d 65 29 3b 0d 0a 0d 0a  y, keyName);....
38180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38190 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
381a0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
381b0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
381c0 20 20 20 20 20 20 20 20 75 73 69 6e 67 20 28 4d          using (M
381d0 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 73  ockRegistryKey s
381e0 75 62 4b 65 79 20 3d 20 52 65 67 69 73 74 72 79  ubKey = Registry
381f0 48 65 6c 70 65 72 2e 4f 70 65 6e 53 75 62 4b 65  Helper.OpenSubKe
38200 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y(..            
38210 20 20 20 20 20 20 20 20 20 20 20 20 6b 65 79 2c              key,
38220 20 22 44 61 74 61 53 6f 75 72 63 65 73 22 2c 20   "DataSources", 
38230 74 72 75 65 2c 20 77 68 61 74 49 66 2c 20 76 65  true, whatIf, ve
38240 72 62 6f 73 65 29 29 0d 0a 20 20 20 20 20 20 20  rbose))..       
38250 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
38260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38270 69 66 20 28 73 75 62 4b 65 79 20 3d 3d 20 6e 75  if (subKey == nu
38280 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
38290 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
382a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
382b0 20 20 20 20 65 72 72 6f 72 20 3d 20 53 74 72 69      error = Stri
382c0 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20  ng.Format(..    
382d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
382e0 20 20 20 20 20 20 20 20 22 63 6f 75 6c 64 20 6e          "could n
382f0 6f 74 20 6f 70 65 6e 20 72 65 67 69 73 74 72 79  ot open registry
38300 20 6b 65 79 3a 20 7b 30 7d 5c 5c 44 61 74 61 53   key: {0}\\DataS
38310 6f 75 72 63 65 73 22 2c 0d 0a 20 20 20 20 20 20  ources",..      
38320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38330 20 20 20 20 20 20 6b 65 79 29 3b 0d 0a 0d 0a 20        key);.... 
38340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38350 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
38360 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lse;..          
38370 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
38380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38390 20 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65     using (MockRe
383a0 67 69 73 74 72 79 4b 65 79 20 64 61 74 61 53 6f  gistryKey dataSo
383b0 75 72 63 65 4b 65 79 20 3d 0d 0a 20 20 20 20 20  urceKey =..     
383c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
383d0 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79 48         RegistryH
383e0 65 6c 70 65 72 2e 43 72 65 61 74 65 53 75 62 4b  elper.CreateSubK
383f0 65 79 28 73 75 62 4b 65 79 2c 0d 0a 20 20 20 20  ey(subKey,..    
38400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38410 20 20 20 20 20 20 20 20 70 61 63 6b 61 67 65 2e          package.
38420 44 61 74 61 53 6f 75 72 63 65 49 64 2e 54 6f 53  DataSourceId.ToS
38430 74 72 69 6e 67 28 56 73 49 64 46 6f 72 6d 61 74  tring(VsIdFormat
38440 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
38450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38460 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29  whatIf, verbose)
38470 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
38480 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
38490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
384a0 20 20 69 66 20 28 64 61 74 61 53 6f 75 72 63 65    if (dataSource
384b0 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  Key == null)..  
384c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
384d0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
384e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
384f0 20 20 20 20 20 65 72 72 6f 72 20 3d 20 53 74 72       error = Str
38500 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
38510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38520 20 20 20 20 20 20 20 20 20 20 20 20 20 22 63 6f               "co
38530 75 6c 64 20 6e 6f 74 20 63 72 65 61 74 65 20 72  uld not create r
38540 65 67 69 73 74 72 79 20 6b 65 79 3a 20 7b 30 7d  egistry key: {0}
38550 5c 5c 7b 31 7d 22 2c 20 6b 65 79 2c 0d 0a 20 20  \\{1}", key,..  
38560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70 61                pa
38580 63 6b 61 67 65 2e 44 61 74 61 53 6f 75 72 63 65  ckage.DataSource
38590 49 64 2e 54 6f 53 74 72 69 6e 67 28 56 73 49 64  Id.ToString(VsId
385a0 46 6f 72 6d 61 74 29 29 3b 0d 0a 0d 0a 20 20 20  Format));....   
385b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
385c0 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
385d0 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20  false;..        
385e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
385f0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
38600 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67               Reg
38610 69 73 74 72 79 48 65 6c 70 65 72 2e 53 65 74 56  istryHelper.SetV
38620 61 6c 75 65 28 0d 0a 20 20 20 20 20 20 20 20 20  alue(..         
38630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38640 20 20 20 64 61 74 61 53 6f 75 72 63 65 4b 65 79     dataSourceKey
38650 2c 20 6e 75 6c 6c 2c 20 53 74 72 69 6e 67 2e 46  , null, String.F
38660 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
38670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38680 20 20 20 20 22 7b 30 7d 20 44 61 74 61 62 61 73      "{0} Databas
38690 65 20 46 69 6c 65 22 2c 20 50 72 6f 6a 65 63 74  e File", Project
386a0 4e 61 6d 65 29 2c 20 77 68 61 74 49 66 2c 0d 0a  Name), whatIf,..
386b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
386c0 20 20 20 20 20 20 20 20 20 20 20 20 76 65 72 62              verb
386d0 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ose);....       
386e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
386f0 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
38700 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
38710 4e 4f 54 45 3a 20 54 68 69 73 20 76 61 6c 75 65  NOTE: This value
38720 20 69 73 20 6e 65 77 20 61 73 20 6f 66 20 31 2e   is new as of 1.
38730 30 2e 38 33 2e 30 2e 0d 0a 20 20 20 20 20 20 20  0.83.0...       
38740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38750 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
38760 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67               Reg
38770 69 73 74 72 79 48 65 6c 70 65 72 2e 53 65 74 56  istryHelper.SetV
38780 61 6c 75 65 28 0d 0a 20 20 20 20 20 20 20 20 20  alue(..         
38790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
387a0 20 20 20 64 61 74 61 53 6f 75 72 63 65 4b 65 79     dataSourceKey
387b0 2c 20 22 44 65 66 61 75 6c 74 50 72 6f 76 69 64  , "DefaultProvid
387c0 65 72 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  er",..          
387d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
387e0 20 20 70 61 63 6b 61 67 65 2e 44 61 74 61 50 72    package.DataPr
387f0 6f 76 69 64 65 72 49 64 2e 54 6f 53 74 72 69 6e  oviderId.ToStrin
38800 67 28 56 73 49 64 46 6f 72 6d 61 74 29 2c 0d 0a  g(VsIdFormat),..
38810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38820 20 20 20 20 20 20 20 20 20 20 20 20 77 68 61 74              what
38830 49 66 2c 20 76 65 72 62 6f 73 65 29 3b 0d 0a 0d  If, verbose);..