System.Data.SQLite
Hex Artifact Content
Not logged in

Artifact 4fac78851edac779e9f1840315248be5bfe1b494:


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 65 78 74 3b 0d 0a 75 73 69 6e 67 20 53  m.Text;..using S
0200: 79 73 74 65 6d 2e 54 68 72 65 61 64 69 6e 67 3b  ystem.Threading;
0210: 0d 0a 75 73 69 6e 67 20 53 79 73 74 65 6d 2e 57  ..using System.W
0220: 69 6e 64 6f 77 73 2e 46 6f 72 6d 73 3b 0d 0a 75  indows.Forms;..u
0230: 73 69 6e 67 20 53 79 73 74 65 6d 2e 58 6d 6c 3b  sing System.Xml;
0240: 0d 0a 75 73 69 6e 67 20 4d 69 63 72 6f 73 6f 66  ..using Microsof
0250: 74 2e 57 69 6e 33 32 3b 0d 0a 0d 0a 6e 61 6d 65  t.Win32;....name
0260: 73 70 61 63 65 20 53 79 73 74 65 6d 2e 44 61 74  space System.Dat
0270: 61 2e 53 51 4c 69 74 65 0d 0a 7b 0d 0a 20 20 20  a.SQLite..{..   
0280: 20 23 72 65 67 69 6f 6e 20 50 75 62 6c 69 63 20   #region Public 
0290: 44 65 6c 65 67 61 74 65 73 0d 0a 20 20 20 20 69  Delegates..    i
02a0: 6e 74 65 72 6e 61 6c 20 64 65 6c 65 67 61 74 65  nternal delegate
02b0: 20 76 6f 69 64 20 54 72 61 63 65 43 61 6c 6c 62   void TraceCallb
02c0: 61 63 6b 28 0d 0a 20 20 20 20 20 20 20 20 73 74  ack(..        st
02d0: 72 69 6e 67 20 6d 65 73 73 61 67 65 2c 20 2f 2a  ring message, /*
02e0: 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20   in */..        
02f0: 73 74 72 69 6e 67 20 63 61 74 65 67 6f 72 79 20  string category 
0300: 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 29 3b  /* in */..    );
0310: 0d 0a 0d 0a 20 20 20 20 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 2f  ////////////////
0350: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0360: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72  ///....    inter
0370: 6e 61 6c 20 64 65 6c 65 67 61 74 65 20 62 6f 6f  nal delegate boo
0380: 6c 20 46 72 61 6d 65 77 6f 72 6b 43 6f 6e 66 69  l FrameworkConfi
0390: 67 43 61 6c 6c 62 61 63 6b 28 0d 0a 20 20 20 20  gCallback(..    
03a0: 20 20 20 20 73 74 72 69 6e 67 20 66 69 6c 65 4e      string fileN
03b0: 61 6d 65 2c 20 20 20 20 20 20 20 20 20 20 20 2f  ame,           /
03c0: 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20  * in */..       
03d0: 20 73 74 72 69 6e 67 20 69 6e 76 61 72 69 61 6e   string invarian
03e0: 74 4e 61 6d 65 2c 20 20 20 20 20 20 2f 2a 20 69  tName,      /* i
03f0: 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 73 74  n */..        st
0400: 72 69 6e 67 20 6e 61 6d 65 2c 20 20 20 20 20 20  ring name,      
0410: 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 20 2a           /* in *
0420: 2f 0d 0a 20 20 20 20 20 20 20 20 73 74 72 69 6e  /..        strin
0430: 67 20 64 65 73 63 72 69 70 74 69 6f 6e 2c 20 20  g description,  
0440: 20 20 20 20 20 20 2f 2a 20 69 6e 20 2a 2f 0d 0a        /* in */..
0450: 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 74          string t
0460: 79 70 65 4e 61 6d 65 2c 20 20 20 20 20 20 20 20  ypeName,        
0470: 20 20 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20     /* in */..   
0480: 20 20 20 20 20 41 73 73 65 6d 62 6c 79 4e 61 6d       AssemblyNam
0490: 65 20 61 73 73 65 6d 62 6c 79 4e 61 6d 65 2c 20  e assemblyName, 
04a0: 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20  /* in */..      
04b0: 20 20 73 74 72 69 6e 67 20 64 69 72 65 63 74 6f    string directo
04c0: 72 79 2c 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ry,          /* 
04d0: 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 6f  in */..        o
04e0: 62 6a 65 63 74 20 63 6c 69 65 6e 74 44 61 74 61  bject clientData
04f0: 2c 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 20  ,         /* in 
0500: 2a 2f 0d 0a 20 20 20 20 20 20 20 20 62 6f 6f 6c  */..        bool
0510: 20 70 65 72 55 73 65 72 2c 20 20 20 20 20 20 20   perUser,       
0520: 20 20 20 20 20 20 20 2f 2a 20 69 6e 20 2a 2f 0d         /* in */.
0530: 0a 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 6f  .        bool wo
0540: 77 36 34 2c 20 20 20 20 20 20 20 20 20 20 20 20  w64,            
0550: 20 20 20 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20      /* in */..  
0560: 20 20 20 20 20 20 62 6f 6f 6c 20 74 68 72 6f 77        bool throw
0570: 4f 6e 4d 69 73 73 69 6e 67 2c 20 20 20 20 20 20  OnMissing,      
0580: 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20   /* in */..     
0590: 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 20     bool whatIf, 
05a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
05b0: 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20   in */..        
05c0: 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c 20 20 20  bool verbose,   
05d0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e             /* in
05e0: 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 72 65 66   */..        ref
05f0: 20 62 6f 6f 6c 20 73 61 76 65 64 2c 20 20 20 20   bool saved,    
0600: 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 20 2a          /* out *
0610: 2f 0d 0a 20 20 20 20 20 20 20 20 72 65 66 20 73  /..        ref s
0620: 74 72 69 6e 67 20 65 72 72 6f 72 20 20 20 20 20  tring error     
0630: 20 20 20 20 20 20 2f 2a 20 6f 75 74 20 2a 2f 0d        /* out */.
0640: 0a 20 20 20 20 29 3b 0d 0a 0d 0a 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0690: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
06a0: 20 20 69 6e 74 65 72 6e 61 6c 20 64 65 6c 65 67    internal deleg
06b0: 61 74 65 20 62 6f 6f 6c 20 46 72 61 6d 65 77 6f  ate bool Framewo
06c0: 72 6b 52 65 67 69 73 74 72 79 43 61 6c 6c 62 61  rkRegistryCallba
06d0: 63 6b 28 0d 0a 20 20 20 20 20 20 20 20 49 6e 73  ck(..        Ins
06e0: 74 61 6c 6c 65 72 2e 4d 6f 63 6b 52 65 67 69 73  taller.MockRegis
06f0: 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79 2c 20  tryKey rootKey, 
0700: 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20  /* in */..      
0710: 20 20 73 74 72 69 6e 67 20 66 72 61 6d 65 77 6f    string framewo
0720: 72 6b 4e 61 6d 65 2c 20 20 20 20 20 20 20 20 20  rkName,         
0730: 20 20 20 20 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20       /* in */.. 
0740: 20 20 20 20 20 20 20 56 65 72 73 69 6f 6e 20 66         Version f
0750: 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 2c  rameworkVersion,
0760: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 20            /* in 
0770: 2a 2f 0d 0a 20 20 20 20 20 20 20 20 73 74 72 69  */..        stri
0780: 6e 67 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 2c  ng platformName,
0790: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
07a0: 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20  * in */..       
07b0: 20 73 74 72 69 6e 67 20 64 69 72 65 63 74 6f 72   string director
07c0: 79 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20  y,              
07d0: 20 20 20 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20      /* in */..  
07e0: 20 20 20 20 20 20 6f 62 6a 65 63 74 20 63 6c 69        object cli
07f0: 65 6e 74 44 61 74 61 2c 20 20 20 20 20 20 20 20  entData,        
0800: 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 20 2a           /* in *
0810: 2f 0d 0a 20 20 20 20 20 20 20 20 62 6f 6f 6c 20  /..        bool 
0820: 70 65 72 55 73 65 72 2c 20 20 20 20 20 20 20 20  perUser,        
0830: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
0840: 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20   in */..        
0850: 62 6f 6f 6c 20 77 6f 77 36 34 2c 20 20 20 20 20  bool wow64,     
0860: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0870: 20 20 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20     /* in */..   
0880: 20 20 20 20 20 62 6f 6f 6c 20 74 68 72 6f 77 4f       bool throwO
0890: 6e 4d 69 73 73 69 6e 67 2c 20 20 20 20 20 20 20  nMissing,       
08a0: 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 20 2a 2f          /* in */
08b0: 0d 0a 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77  ..        bool w
08c0: 68 61 74 49 66 2c 20 20 20 20 20 20 20 20 20 20  hatIf,          
08d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
08e0: 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 62  in */..        b
08f0: 6f 6f 6c 20 76 65 72 62 6f 73 65 2c 20 20 20 20  ool verbose,    
0900: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0910: 20 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20    /* in */..    
0920: 20 20 20 20 72 65 66 20 73 74 72 69 6e 67 20 65      ref string e
0930: 72 72 6f 72 20 20 20 20 20 20 20 20 20 20 20 20  rror            
0940: 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 20 2a 2f         /* out */
0950: 0d 0a 20 20 20 20 29 3b 0d 0a 0d 0a 20 20 20 20  ..    );....    
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 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
09a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
09b0: 20 20 20 69 6e 74 65 72 6e 61 6c 20 64 65 6c 65     internal dele
09c0: 67 61 74 65 20 62 6f 6f 6c 20 56 69 73 75 61 6c  gate bool Visual
09d0: 53 74 75 64 69 6f 52 65 67 69 73 74 72 79 43 61  StudioRegistryCa
09e0: 6c 6c 62 61 63 6b 28 0d 0a 20 20 20 20 20 20 20  llback(..       
09f0: 20 49 6e 73 74 61 6c 6c 65 72 2e 4d 6f 63 6b 52   Installer.MockR
0a00: 65 67 69 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b  egistryKey rootK
0a10: 65 79 2c 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20  ey, /* in */..  
0a20: 20 20 20 20 20 20 56 65 72 73 69 6f 6e 20 76 73        Version vs
0a30: 56 65 72 73 69 6f 6e 2c 20 20 20 20 20 20 20 20  Version,        
0a40: 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 20 2a           /* in *
0a50: 2f 0d 0a 20 20 20 20 20 20 20 20 73 74 72 69 6e  /..        strin
0a60: 67 20 73 75 66 66 69 78 2c 20 20 20 20 20 20 20  g suffix,       
0a70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
0a80: 20 69 6e 2c 20 6f 70 74 69 6f 6e 61 6c 20 2a 2f   in, optional */
0a90: 0d 0a 20 20 20 20 20 20 20 20 49 6e 73 74 61 6c  ..        Instal
0aa0: 6c 65 72 2e 50 61 63 6b 61 67 65 20 70 61 63 6b  ler.Package pack
0ab0: 61 67 65 2c 20 20 20 20 20 20 20 20 20 2f 2a 20  age,         /* 
0ac0: 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 73  in */..        s
0ad0: 74 72 69 6e 67 20 64 69 72 65 63 74 6f 72 79 2c  tring directory,
0ae0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0af0: 20 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20    /* in */..    
0b00: 20 20 20 20 6f 62 6a 65 63 74 20 63 6c 69 65 6e      object clien
0b10: 74 44 61 74 61 2c 20 20 20 20 20 20 20 20 20 20  tData,          
0b20: 20 20 20 20 20 20 20 2f 2a 20 69 6e 20 2a 2f 0d         /* in */.
0b30: 0a 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 70 65  .        bool pe
0b40: 72 55 73 65 72 2c 20 20 20 20 20 20 20 20 20 20  rUser,          
0b50: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69              /* i
0b60: 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 62 6f  n */..        bo
0b70: 6f 6c 20 77 6f 77 36 34 2c 20 20 20 20 20 20 20  ol wow64,       
0b80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0b90: 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20   /* in */..     
0ba0: 20 20 20 62 6f 6f 6c 20 74 68 72 6f 77 4f 6e 4d     bool throwOnM
0bb0: 69 73 73 69 6e 67 2c 20 20 20 20 20 20 20 20 20  issing,         
0bc0: 20 20 20 20 20 20 2f 2a 20 69 6e 20 2a 2f 0d 0a        /* in */..
0bd0: 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61          bool wha
0be0: 74 49 66 2c 20 20 20 20 20 20 20 20 20 20 20 20  tIf,            
0bf0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e             /* in
0c00: 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 62 6f 6f   */..        boo
0c10: 6c 20 76 65 72 62 6f 73 65 2c 20 20 20 20 20 20  l verbose,      
0c20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0c30: 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20  /* in */..      
0c40: 20 20 72 65 66 20 73 74 72 69 6e 67 20 65 72 72    ref string err
0c50: 6f 72 20 20 20 20 20 20 20 20 20 20 20 20 20 20  or              
0c60: 20 20 20 20 20 2f 2a 20 6f 75 74 20 2a 2f 0d 0a       /* out */..
0c70: 20 20 20 20 29 3b 0d 0a 20 20 20 20 23 65 6e 64      );..    #end
0c80: 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 2f 2f  region....    //
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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0cd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
0ce0: 20 23 72 65 67 69 6f 6e 20 50 75 62 6c 69 63 20   #region Public 
0cf0: 45 6e 75 6d 65 72 61 74 69 6f 6e 73 0d 0a 20 20  Enumerations..  
0d00: 20 20 5b 46 6c 61 67 73 28 29 5d 0d 0a 20 20 20    [Flags()]..   
0d10: 20 70 75 62 6c 69 63 20 65 6e 75 6d 20 49 6e 73   public enum Ins
0d20: 74 61 6c 6c 46 6c 61 67 73 0d 0a 20 20 20 20 7b  tallFlags..    {
0d30: 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f  ..        #regio
0d40: 6e 20 4e 6f 72 6d 61 6c 20 56 61 6c 75 65 73 0d  n Normal Values.
0d50: 0a 20 20 20 20 20 20 20 20 4e 6f 6e 65 20 3d 20  .        None = 
0d60: 30 78 30 2c 0d 0a 20 20 20 20 20 20 20 20 43 6f  0x0,..        Co
0d70: 72 65 47 6c 6f 62 61 6c 41 73 73 65 6d 62 6c 79  reGlobalAssembly
0d80: 43 61 63 68 65 20 3d 20 30 78 31 2c 0d 0a 20 20  Cache = 0x1,..  
0d90: 20 20 20 20 20 20 4c 69 6e 71 47 6c 6f 62 61 6c        LinqGlobal
0da0: 41 73 73 65 6d 62 6c 79 43 61 63 68 65 20 3d 20  AssemblyCache = 
0db0: 30 78 32 2c 0d 0a 20 20 20 20 20 20 20 20 45 66  0x2,..        Ef
0dc0: 36 47 6c 6f 62 61 6c 41 73 73 65 6d 62 6c 79 43  6GlobalAssemblyC
0dd0: 61 63 68 65 20 3d 20 30 78 34 2c 0d 0a 20 20 20  ache = 0x4,..   
0de0: 20 20 20 20 20 41 73 73 65 6d 62 6c 79 46 6f 6c       AssemblyFol
0df0: 64 65 72 73 20 3d 20 30 78 38 2c 0d 0a 20 20 20  ders = 0x8,..   
0e00: 20 20 20 20 20 44 62 50 72 6f 76 69 64 65 72 46       DbProviderF
0e10: 61 63 74 6f 72 79 20 3d 20 30 78 31 30 2c 0d 0a  actory = 0x10,..
0e20: 20 20 20 20 20 20 20 20 56 73 50 61 63 6b 61 67          VsPackag
0e30: 65 20 3d 20 30 78 32 30 2c 0d 0a 20 20 20 20 20  e = 0x20,..     
0e40: 20 20 20 56 73 50 61 63 6b 61 67 65 47 6c 6f 62     VsPackageGlob
0e50: 61 6c 41 73 73 65 6d 62 6c 79 43 61 63 68 65 20  alAssemblyCache 
0e60: 3d 20 30 78 34 30 2c 0d 0a 20 20 20 20 20 20 20  = 0x40,..       
0e70: 20 56 73 44 61 74 61 53 6f 75 72 63 65 20 3d 20   VsDataSource = 
0e80: 30 78 38 30 2c 0d 0a 20 20 20 20 20 20 20 20 56  0x80,..        V
0e90: 73 44 61 74 61 50 72 6f 76 69 64 65 72 20 3d 20  sDataProvider = 
0ea0: 30 78 31 30 30 2c 0d 0a 20 20 20 20 20 20 20 20  0x100,..        
0eb0: 56 73 44 65 76 45 6e 76 53 65 74 75 70 20 3d 20  VsDevEnvSetup = 
0ec0: 30 78 32 30 30 2c 0d 0a 20 20 20 20 20 20 20 20  0x200,..        
0ed0: 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20  #endregion....  
0ee0: 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f  ////////////////
0f20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
0f30: 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e  .        #region
0f40: 20 43 6f 6d 70 6f 73 69 74 65 20 56 61 6c 75 65   Composite Value
0f50: 73 0d 0a 20 20 20 20 20 20 20 20 46 72 61 6d 65  s..        Frame
0f60: 77 6f 72 6b 47 6c 6f 62 61 6c 41 73 73 65 6d 62  workGlobalAssemb
0f70: 6c 79 43 61 63 68 65 20 3d 20 43 6f 72 65 47 6c  lyCache = CoreGl
0f80: 6f 62 61 6c 41 73 73 65 6d 62 6c 79 43 61 63 68  obalAssemblyCach
0f90: 65 20 7c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e |..           
0fa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0fb0: 20 20 20 20 20 20 20 20 20 20 20 20 4c 69 6e 71              Linq
0fc0: 47 6c 6f 62 61 6c 41 73 73 65 6d 62 6c 79 43 61  GlobalAssemblyCa
0fd0: 63 68 65 20 7c 0d 0a 20 20 20 20 20 20 20 20 20  che |..         
0fe0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0ff0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 45 66                Ef
1000: 36 47 6c 6f 62 61 6c 41 73 73 65 6d 62 6c 79 43  6GlobalAssemblyC
1010: 61 63 68 65 2c 0d 0a 0d 0a 20 20 20 20 20 20 20  ache,....       
1020: 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1060: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
1070: 20 20 20 20 46 72 61 6d 65 77 6f 72 6b 20 3d 20      Framework = 
1080: 46 72 61 6d 65 77 6f 72 6b 47 6c 6f 62 61 6c 41  FrameworkGlobalA
1090: 73 73 65 6d 62 6c 79 43 61 63 68 65 20 7c 20 41  ssemblyCache | A
10a0: 73 73 65 6d 62 6c 79 46 6f 6c 64 65 72 73 20 7c  ssemblyFolders |
10b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
10c0: 20 20 20 20 20 20 44 62 50 72 6f 76 69 64 65 72        DbProvider
10d0: 46 61 63 74 6f 72 79 2c 0d 0a 0d 0a 20 20 20 20  Factory,....    
10e0: 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1120: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
1130: 20 20 20 20 20 20 20 56 73 20 3d 20 56 73 50 61         Vs = VsPa
1140: 63 6b 61 67 65 20 7c 20 56 73 50 61 63 6b 61 67  ckage | VsPackag
1150: 65 47 6c 6f 62 61 6c 41 73 73 65 6d 62 6c 79 43  eGlobalAssemblyC
1160: 61 63 68 65 20 7c 20 56 73 44 61 74 61 53 6f 75  ache | VsDataSou
1170: 72 63 65 20 7c 0d 0a 20 20 20 20 20 20 20 20 20  rce |..         
1180: 20 20 20 20 56 73 44 61 74 61 50 72 6f 76 69 64      VsDataProvid
1190: 65 72 20 7c 20 56 73 44 65 76 45 6e 76 53 65 74  er | VsDevEnvSet
11a0: 75 70 2c 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f  up,....        /
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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11f0: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
1200: 20 20 41 6c 6c 47 6c 6f 62 61 6c 41 73 73 65 6d    AllGlobalAssem
1210: 62 6c 79 43 61 63 68 65 20 3d 20 46 72 61 6d 65  blyCache = Frame
1220: 77 6f 72 6b 47 6c 6f 62 61 6c 41 73 73 65 6d 62  workGlobalAssemb
1230: 6c 79 43 61 63 68 65 20 7c 0d 0a 20 20 20 20 20  lyCache |..     
1240: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1250: 20 20 20 20 20 20 20 20 20 20 20 20 56 73 50 61              VsPa
1260: 63 6b 61 67 65 47 6c 6f 62 61 6c 41 73 73 65 6d  ckageGlobalAssem
1270: 62 6c 79 43 61 63 68 65 2c 0d 0a 0d 0a 20 20 20  blyCache,....   
1280: 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
12d0: 20 20 20 20 20 20 20 20 41 6c 6c 20 3d 20 46 72          All = Fr
12e0: 61 6d 65 77 6f 72 6b 20 7c 20 56 73 2c 0d 0a 0d  amework | Vs,...
12f0: 0a 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f  ////////////////
1330: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1340: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 41 6c 6c 45  ....        AllE
1350: 78 63 65 70 74 47 6c 6f 62 61 6c 41 73 73 65 6d  xceptGlobalAssem
1360: 62 6c 79 43 61 63 68 65 20 3d 20 41 6c 6c 20 26  blyCache = All &
1370: 20 7e 41 6c 6c 47 6c 6f 62 61 6c 41 73 73 65 6d   ~AllGlobalAssem
1380: 62 6c 79 43 61 63 68 65 2c 0d 0a 20 20 20 20 20  blyCache,..     
1390: 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
13a0: 0a 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f  ////////////////
13e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
13f0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67  ....        #reg
1400: 69 6f 6e 20 53 75 67 67 65 73 74 65 64 20 44 65  ion Suggested De
1410: 66 61 75 6c 74 20 56 61 6c 75 65 73 0d 0a 20 20  fault Values..  
1420: 20 20 20 20 20 20 44 65 66 61 75 6c 74 20 3d 20        Default = 
1430: 41 6c 6c 0d 0a 20 20 20 20 20 20 20 20 23 65 6e  All..        #en
1440: 64 72 65 67 69 6f 6e 0d 0a 20 20 20 20 7d 0d 0a  dregion..    }..
1450: 0d 0a 20 20 20 20 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 2f 2f 2f  ////////////////
1490: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14a0: 2f 0d 0a 0d 0a 20 20 20 20 5b 46 6c 61 67 73 28  /....    [Flags(
14b0: 29 5d 0d 0a 20 20 20 20 70 75 62 6c 69 63 20 65  )]..    public e
14c0: 6e 75 6d 20 50 72 6f 76 69 64 65 72 46 6c 61 67  num ProviderFlag
14d0: 73 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  s..    {..      
14e0: 20 20 23 72 65 67 69 6f 6e 20 4e 6f 72 6d 61 6c    #region Normal
14f0: 20 56 61 6c 75 65 73 0d 0a 20 20 20 20 20 20 20   Values..       
1500: 20 4e 6f 6e 65 20 3d 20 30 78 30 2c 0d 0a 20 20   None = 0x0,..  
1510: 20 20 20 20 20 20 53 79 73 74 65 6d 45 66 36 4d        SystemEf6M
1520: 75 73 74 42 65 47 6c 6f 62 61 6c 20 3d 20 30 78  ustBeGlobal = 0x
1530: 31 2c 0d 0a 20 20 20 20 20 20 20 20 44 69 64 4c  1,..        DidL
1540: 69 6e 71 46 6f 72 63 65 54 72 61 63 65 20 3d 20  inqForceTrace = 
1550: 30 78 32 2c 0d 0a 20 20 20 20 20 20 20 20 44 69  0x2,..        Di
1560: 64 45 66 36 46 6f 72 63 65 54 72 61 63 65 20 3d  dEf6ForceTrace =
1570: 20 30 78 34 2c 0d 0a 20 20 20 20 20 20 20 20 44   0x4,..        D
1580: 69 64 45 66 36 52 65 73 6f 6c 76 65 54 72 61 63  idEf6ResolveTrac
1590: 65 20 3d 20 30 78 38 2c 0d 0a 20 20 20 20 20 20  e = 0x8,..      
15a0: 20 20 46 6f 72 63 65 4c 69 6e 71 45 6e 61 62 6c    ForceLinqEnabl
15b0: 65 64 20 3d 20 30 78 31 30 2c 0d 0a 20 20 20 20  ed = 0x10,..    
15c0: 20 20 20 20 46 6f 72 63 65 4c 69 6e 71 44 69 73      ForceLinqDis
15d0: 61 62 6c 65 64 20 3d 20 30 78 32 30 2c 0d 0a 20  abled = 0x20,.. 
15e0: 20 20 20 20 20 20 20 46 6f 72 63 65 45 66 36 45         ForceEf6E
15f0: 6e 61 62 6c 65 64 20 3d 20 30 78 34 30 2c 0d 0a  nabled = 0x40,..
1600: 20 20 20 20 20 20 20 20 46 6f 72 63 65 45 66 36          ForceEf6
1610: 44 69 73 61 62 6c 65 64 20 3d 20 30 78 38 30 2c  Disabled = 0x80,
1620: 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65  ..        #endre
1630: 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20  gion....        
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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1680: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
1690: 20 20 20 23 72 65 67 69 6f 6e 20 53 75 67 67 65     #region Sugge
16a0: 73 74 65 64 20 44 65 66 61 75 6c 74 20 56 61 6c  sted Default Val
16b0: 75 65 73 0d 0a 20 20 20 20 20 20 20 20 44 65 66  ues..        Def
16c0: 61 75 6c 74 20 3d 20 4e 6f 6e 65 0d 0a 20 20 20  ault = None..   
16d0: 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d       #endregion.
16e0: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1730: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
1740: 20 5b 46 6c 61 67 73 28 29 5d 0d 0a 20 20 20 20   [Flags()]..    
1750: 70 75 62 6c 69 63 20 65 6e 75 6d 20 54 72 61 63  public enum Trac
1760: 65 50 72 69 6f 72 69 74 79 0d 0a 20 20 20 20 7b  ePriority..    {
1770: 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f  ..        #regio
1780: 6e 20 4e 6f 72 6d 61 6c 20 56 61 6c 75 65 73 0d  n Normal Values.
1790: 0a 20 20 20 20 20 20 20 20 4e 6f 6e 65 20 3d 20  .        None = 
17a0: 30 78 30 2c 0d 0a 20 20 20 20 20 20 20 20 4c 6f  0x0,..        Lo
17b0: 77 65 73 74 20 3d 20 30 78 31 2c 0d 0a 20 20 20  west = 0x1,..   
17c0: 20 20 20 20 20 4c 6f 77 65 72 20 3d 20 30 78 32       Lower = 0x2
17d0: 2c 0d 0a 20 20 20 20 20 20 20 20 4c 6f 77 20 3d  ,..        Low =
17e0: 20 30 78 34 2c 0d 0a 20 20 20 20 20 20 20 20 4d   0x4,..        M
17f0: 65 64 69 75 6d 4c 6f 77 20 3d 20 30 78 38 2c 0d  ediumLow = 0x8,.
1800: 0a 20 20 20 20 20 20 20 20 4d 65 64 69 75 6d 20  .        Medium 
1810: 3d 20 30 78 31 30 2c 0d 0a 20 20 20 20 20 20 20  = 0x10,..       
1820: 20 4d 65 64 69 75 6d 48 69 67 68 20 3d 20 30 78   MediumHigh = 0x
1830: 32 30 2c 0d 0a 20 20 20 20 20 20 20 20 48 69 67  20,..        Hig
1840: 68 20 3d 20 30 78 34 30 2c 0d 0a 20 20 20 20 20  h = 0x40,..     
1850: 20 20 20 48 69 67 68 65 72 20 3d 20 30 78 38 30     Higher = 0x80
1860: 2c 0d 0a 20 20 20 20 20 20 20 20 48 69 67 68 65  ,..        Highe
1870: 73 74 20 3d 20 30 78 31 30 30 2c 0d 0a 20 20 20  st = 0x100,..   
1880: 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d       #endregion.
1890: 0a 0d 0a 20 20 20 20 20 20 20 20 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 2f 2f  ////////////////
18d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18e0: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72  //....        #r
18f0: 65 67 69 6f 6e 20 53 75 67 67 65 73 74 65 64 20  egion Suggested 
1900: 44 65 66 61 75 6c 74 20 46 6c 61 67 73 0d 0a 20  Default Flags.. 
1910: 20 20 20 20 20 20 20 44 65 66 61 75 6c 74 20 3d         Default =
1920: 20 4d 65 64 69 75 6d 0d 0a 20 20 20 20 20 20 20   Medium..       
1930: 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 20 20 20   #endregion..   
1940: 20 7d 0d 0a 20 20 20 20 23 65 6e 64 72 65 67 69   }..    #endregi
1950: 6f 6e 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f  on....    //////
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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19a0: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 23 72 65  /////....    #re
19b0: 67 69 6f 6e 20 49 6e 73 74 61 6c 6c 65 72 20 43  gion Installer C
19c0: 6c 61 73 73 0d 0a 23 69 66 20 4e 45 54 5f 34 30  lass..#if NET_40
19d0: 20 7c 7c 20 4e 45 54 5f 34 35 20 7c 7c 20 4e 45   || NET_45 || NE
19e0: 54 5f 34 35 31 20 7c 7c 20 4e 45 54 5f 34 35 32  T_451 || NET_452
19f0: 20 7c 7c 20 4e 45 54 5f 34 36 20 7c 7c 20 4e 45   || NET_46 || NE
1a00: 54 5f 34 36 31 20 7c 7c 20 4e 45 54 5f 34 36 32  T_461 || NET_462
1a10: 20 7c 7c 20 4e 45 54 5f 34 37 0d 0a 20 20 20 20   || NET_47..    
1a20: 5b 53 65 63 75 72 69 74 79 43 72 69 74 69 63 61  [SecurityCritica
1a30: 6c 28 29 5d 0d 0a 23 65 6c 73 65 0d 0a 20 20 20  l()]..#else..   
1a40: 20 5b 53 65 63 75 72 69 74 79 50 65 72 6d 69 73   [SecurityPermis
1a50: 73 69 6f 6e 28 53 65 63 75 72 69 74 79 41 63 74  sion(SecurityAct
1a60: 69 6f 6e 2e 4c 69 6e 6b 44 65 6d 61 6e 64 2c 20  ion.LinkDemand, 
1a70: 55 6e 6d 61 6e 61 67 65 64 43 6f 64 65 20 3d 20  UnmanagedCode = 
1a80: 74 72 75 65 29 5d 0d 0a 23 65 6e 64 69 66 0d 0a  true)]..#endif..
1a90: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 73 74 61      internal sta
1aa0: 74 69 63 20 63 6c 61 73 73 20 49 6e 73 74 61 6c  tic class Instal
1ab0: 6c 65 72 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  ler..    {..    
1ac0: 20 20 20 20 23 72 65 67 69 6f 6e 20 55 6e 73 61      #region Unsa
1ad0: 66 65 20 4e 61 74 69 76 65 20 4d 65 74 68 6f 64  fe Native Method
1ae0: 73 20 43 6c 61 73 73 0d 0a 20 20 20 20 20 20 20  s Class..       
1af0: 20 5b 53 75 70 70 72 65 73 73 55 6e 6d 61 6e 61   [SuppressUnmana
1b00: 67 65 64 43 6f 64 65 53 65 63 75 72 69 74 79 28  gedCodeSecurity(
1b10: 29 5d 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76  )]..        priv
1b20: 61 74 65 20 73 65 61 6c 65 64 20 63 6c 61 73 73  ate sealed class
1b30: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
1b40: 68 6f 64 73 0d 0a 20 20 20 20 20 20 20 20 7b 0d  hods..        {.
1b50: 0a 23 69 66 20 57 49 4e 44 4f 57 53 0d 0a 20 20  .#if WINDOWS..  
1b60: 20 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f            #regio
1b70: 6e 20 4e 61 74 69 76 65 20 57 69 6e 33 32 20 43  n Native Win32 C
1b80: 6f 6e 73 74 61 6e 74 73 0d 0a 20 20 20 20 20 20  onstants..      
1b90: 20 20 20 20 20 20 70 72 69 76 61 74 65 20 63 6f        private co
1ba0: 6e 73 74 20 69 6e 74 20 4d 41 58 5f 50 41 54 48  nst int MAX_PATH
1bb0: 20 3d 20 32 36 30 3b 0d 0a 0d 0a 20 20 20 20 20   = 260;....     
1bc0: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
1bd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1be0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1bf0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
1c10: 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
1c20: 65 20 63 6f 6e 73 74 20 69 6e 74 20 43 53 49 44  e const int CSID
1c30: 4c 5f 53 59 53 54 45 4d 58 38 36 20 3d 20 30 78  L_SYSTEMX86 = 0x
1c40: 30 30 32 39 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  0029;....       
1c50: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
1c60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c90: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
1ca0: 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
1cb0: 63 6f 6e 73 74 20 69 6e 74 20 53 48 47 46 50 5f  const int SHGFP_
1cc0: 54 59 50 45 5f 43 55 52 52 45 4e 54 20 3d 20 30  TYPE_CURRENT = 0
1cd0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
1ce0: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
1cf0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d20: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
1d30: 20 20 20 20 70 72 69 76 61 74 65 20 63 6f 6e 73      private cons
1d40: 74 20 69 6e 74 20 53 5f 4f 4b 20 3d 20 30 3b 20  t int S_OK = 0; 
1d50: 2f 2a 20 48 52 45 53 55 4c 54 20 2a 2f 0d 0a 20  /* HRESULT */.. 
1d60: 20 20 20 20 20 20 20 20 20 20 20 23 65 6e 64 72             #endr
1d70: 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20  egion....       
1d80: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
1d90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1da0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1db0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1dc0: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
1dd0: 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20          #region 
1de0: 4e 61 74 69 76 65 20 57 69 6e 64 6f 77 73 20 4d  Native Windows M
1df0: 65 74 68 6f 64 73 0d 0a 20 20 20 20 20 20 20 20  ethods..        
1e00: 20 20 20 20 5b 44 6c 6c 49 6d 70 6f 72 74 28 22      [DllImport("
1e10: 73 68 66 6f 6c 64 65 72 2e 64 6c 6c 22 2c 0d 0a  shfolder.dll",..
1e20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e30: 43 61 6c 6c 69 6e 67 43 6f 6e 76 65 6e 74 69 6f  CallingConventio
1e40: 6e 20 3d 20 43 61 6c 6c 69 6e 67 43 6f 6e 76 65  n = CallingConve
1e50: 6e 74 69 6f 6e 2e 57 69 6e 61 70 69 2c 0d 0a 20  ntion.Winapi,.. 
1e60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43                 C
1e70: 68 61 72 53 65 74 20 3d 20 43 68 61 72 53 65 74  harSet = CharSet
1e80: 2e 41 75 74 6f 2c 20 42 65 73 74 46 69 74 4d 61  .Auto, BestFitMa
1e90: 70 70 69 6e 67 20 3d 20 66 61 6c 73 65 2c 0d 0a  pping = false,..
1ea0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1eb0: 54 68 72 6f 77 4f 6e 55 6e 6d 61 70 70 61 62 6c  ThrowOnUnmappabl
1ec0: 65 43 68 61 72 20 3d 20 74 72 75 65 2c 20 53 65  eChar = true, Se
1ed0: 74 4c 61 73 74 45 72 72 6f 72 20 3d 20 74 72 75  tLastError = tru
1ee0: 65 29 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e)]..           
1ef0: 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20   private static 
1f00: 65 78 74 65 72 6e 20 69 6e 74 20 53 48 47 65 74  extern int SHGet
1f10: 46 6f 6c 64 65 72 50 61 74 68 28 0d 0a 20 20 20  FolderPath(..   
1f20: 20 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 74               Int
1f30: 50 74 72 20 68 57 6e 64 4f 77 6e 65 72 2c 20 69  Ptr hWndOwner, i
1f40: 6e 74 20 6e 46 6f 6c 64 65 72 2c 20 49 6e 74 50  nt nFolder, IntP
1f50: 74 72 20 68 54 6f 6b 65 6e 2c 20 75 69 6e 74 20  tr hToken, uint 
1f60: 66 6c 61 67 73 2c 0d 0a 20 20 20 20 20 20 20 20  flags,..        
1f70: 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 62          IntPtr b
1f80: 75 66 66 65 72 20 2f 2a 20 3e 3d 20 4d 41 58 5f  uffer /* >= MAX_
1f90: 50 41 54 48 20 2a 2f 29 3b 0d 0a 20 20 20 20 20  PATH */);..     
1fa0: 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f         #endregio
1fb0: 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n....           
1fc0: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
1fd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fe0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ff0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2000: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
2010: 20 20 20 20 23 72 65 67 69 6f 6e 20 50 75 62 6c      #region Publ
2020: 69 63 20 57 72 61 70 70 65 72 20 4d 65 74 68 6f  ic Wrapper Metho
2030: 64 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ds..            
2040: 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 73 74  public static st
2050: 72 69 6e 67 20 47 65 74 53 79 73 74 65 6d 44 69  ring GetSystemDi
2060: 72 65 63 74 6f 72 79 28 29 0d 0a 20 20 20 20 20  rectory()..     
2070: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
2080: 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72            IntPtr
2090: 20 62 75 66 66 65 72 20 3d 20 49 6e 74 50 74 72   buffer = IntPtr
20a0: 2e 5a 65 72 6f 3b 0d 0a 0d 0a 20 20 20 20 20 20  .Zero;....      
20b0: 20 20 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20            try.. 
20c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
20d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
20e0: 20 20 20 20 20 20 62 75 66 66 65 72 20 3d 20 4d        buffer = M
20f0: 61 72 73 68 61 6c 2e 41 6c 6c 6f 63 43 6f 54 61  arshal.AllocCoTa
2100: 73 6b 4d 65 6d 28 0d 0a 20 20 20 20 20 20 20 20  skMem(..        
2110: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2120: 73 69 7a 65 6f 66 28 63 68 61 72 29 20 2a 20 28  sizeof(char) * (
2130: 4d 41 58 5f 50 41 54 48 20 2b 20 31 29 29 3b 0d  MAX_PATH + 1));.
2140: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
2150: 20 20 20 20 20 20 20 69 66 20 28 62 75 66 66 65         if (buffe
2160: 72 20 21 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f  r != IntPtr.Zero
2170: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
2180: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
2190: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21a0: 20 20 69 66 20 28 53 48 47 65 74 46 6f 6c 64 65    if (SHGetFolde
21b0: 72 50 61 74 68 28 49 6e 74 50 74 72 2e 5a 65 72  rPath(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 43 53 49 44 4c 5f 53 59 53 54 45 4d      CSIDL_SYSTEM
21f0: 58 38 36 2c 20 49 6e 74 50 74 72 2e 5a 65 72 6f  X86, IntPtr.Zero
2200: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
2210: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2220: 20 20 20 53 48 47 46 50 5f 54 59 50 45 5f 43 55     SHGFP_TYPE_CU
2230: 52 52 45 4e 54 2c 20 62 75 66 66 65 72 29 20 3d  RRENT, buffer) =
2240: 3d 20 53 5f 4f 4b 29 0d 0a 20 20 20 20 20 20 20  = S_OK)..       
2250: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2260: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
2270: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2280: 72 65 74 75 72 6e 20 4d 61 72 73 68 61 6c 2e 50  return Marshal.P
2290: 74 72 54 6f 53 74 72 69 6e 67 41 75 74 6f 28 62  trToStringAuto(b
22a0: 75 66 66 65 72 29 3b 0d 0a 20 20 20 20 20 20 20  uffer);..       
22b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22c0: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
22d0: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
22e0: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
22f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 61                ca
2300: 74 63 68 20 28 45 78 63 65 70 74 69 6f 6e 20 65  tch (Exception e
2310: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
2320: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
2330: 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
2340: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2350: 20 20 2f 2f 20 54 4f 44 4f 3a 20 49 73 20 74 68    // TODO: Is th
2360: 69 73 20 74 68 65 20 72 69 67 68 74 20 65 72 72  is the right err
2370: 6f 72 20 68 61 6e 64 6c 69 6e 67 20 73 6f 6c 75  or handling solu
2380: 74 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20 20 20  tion..          
2390: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
23a0: 20 20 20 74 6f 20 75 73 65 20 61 74 20 74 68 69     to use at thi
23b0: 73 20 70 6f 69 6e 74 3f 0d 0a 20 20 20 20 20 20  s point?..      
23c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
23d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
23e0: 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44        TraceOps.D
23f0: 65 62 75 67 41 6e 64 54 72 61 63 65 28 54 72 61  ebugAndTrace(Tra
2400: 63 65 50 72 69 6f 72 69 74 79 2e 4d 65 64 69 75  cePriority.Mediu
2410: 6d 48 69 67 68 2c 0d 0a 20 20 20 20 20 20 20 20  mHigh,..        
2420: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2430: 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74  debugCallback, t
2440: 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74  raceCallback, St
2450: 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
2460: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2470: 20 20 20 20 20 20 22 43 6f 75 6c 64 20 6e 6f 74        "Could not
2480: 20 67 65 74 20 73 79 73 74 65 6d 20 64 69 72 65   get system dire
2490: 63 74 6f 72 79 3a 20 7b 30 7d 22 2c 20 65 29 2c  ctory: {0}", e),
24a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
24b0: 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
24c0: 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20  ategory);....   
24d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24e0: 20 74 68 72 6f 77 3b 0d 0a 20 20 20 20 20 20 20   throw;..       
24f0: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
2500: 20 20 20 20 20 20 20 20 20 20 20 20 66 69 6e 61              fina
2510: 6c 6c 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20  lly..           
2520: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
2530: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
2540: 62 75 66 66 65 72 20 21 3d 20 49 6e 74 50 74 72  buffer != IntPtr
2550: 2e 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20 20 20  .Zero)..        
2560: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
2570: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2580: 20 20 20 20 20 20 20 4d 61 72 73 68 61 6c 2e 46         Marshal.F
2590: 72 65 65 43 6f 54 61 73 6b 4d 65 6d 28 62 75 66  reeCoTaskMem(buf
25a0: 66 65 72 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  fer);..         
25b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62                 b
25c0: 75 66 66 65 72 20 3d 20 49 6e 74 50 74 72 2e 5a  uffer = IntPtr.Z
25d0: 65 72 6f 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ero;..          
25e0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
25f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
2600: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2610: 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a    return null;..
2620: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
2630: 20 20 20 20 20 20 20 20 20 20 20 23 65 6e 64 72             #endr
2640: 65 67 69 6f 6e 0d 0a 23 65 6e 64 69 66 0d 0a 20  egion..#endif.. 
2650: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
2660: 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a    #endregion....
2670: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
2680: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2690: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
26c0: 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69  ...        #regi
26d0: 6f 6e 20 50 72 69 76 61 74 65 20 48 65 6c 70 65  on Private Helpe
26e0: 72 20 43 6c 61 73 73 65 73 0d 0a 20 20 20 20 20  r Classes..     
26f0: 20 20 20 23 72 65 67 69 6f 6e 20 41 6e 79 50 61     #region AnyPa
2700: 69 72 20 43 6c 61 73 73 0d 0a 20 20 20 20 20 20  ir Class..      
2710: 20 20 70 72 69 76 61 74 65 20 73 65 61 6c 65 64    private sealed
2720: 20 63 6c 61 73 73 20 41 6e 79 50 61 69 72 3c 54   class AnyPair<T
2730: 31 2c 20 54 32 3e 0d 0a 20 20 20 20 20 20 20 20  1, T2>..        
2740: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  {..            #
2750: 72 65 67 69 6f 6e 20 50 75 62 6c 69 63 20 43 6f  region Public Co
2760: 6e 73 74 72 75 63 74 6f 72 73 0d 0a 20 20 20 20  nstructors..    
2770: 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
2780: 20 20 20 20 20 20 20 20 2f 2f 20 57 41 52 4e 49          // WARNI
2790: 4e 47 3a 20 54 68 69 73 20 63 6f 6e 73 74 72 75  NG: This constru
27a0: 63 74 6f 72 20 70 72 6f 64 75 63 65 73 20 61 6e  ctor produces an
27b0: 20 69 6d 6d 75 74 61 62 6c 65 20 22 65 6d 70 74   immutable "empt
27c0: 79 22 20 70 61 69 72 0d 0a 20 20 20 20 20 20 20  y" pair..       
27d0: 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 20 20       //         
27e0: 20 6f 62 6a 65 63 74 2e 0d 0a 20 20 20 20 20 20   object...      
27f0: 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
2800: 20 20 20 20 20 20 70 75 62 6c 69 63 20 41 6e 79        public Any
2810: 50 61 69 72 28 29 0d 0a 20 20 20 20 20 20 20 20  Pair()..        
2820: 20 20 20 20 20 20 20 20 3a 20 62 61 73 65 28 29          : base()
2830: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
2840: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2850: 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d   // do nothing..
2860: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
2870: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
2880: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2890: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28c0: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
28d0: 20 70 75 62 6c 69 63 20 41 6e 79 50 61 69 72 28   public AnyPair(
28e0: 54 31 20 78 29 0d 0a 20 20 20 20 20 20 20 20 20  T1 x)..         
28f0: 20 20 20 20 20 20 20 3a 20 74 68 69 73 28 29 0d         : this().
2900: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
2910: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2920: 74 68 69 73 2e 78 20 3d 20 78 3b 0d 0a 20 20 20  this.x = x;..   
2930: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
2940: 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
2950: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2960: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2970: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2980: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
2990: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
29a0: 6c 69 63 20 41 6e 79 50 61 69 72 28 54 31 20 78  lic AnyPair(T1 x
29b0: 2c 20 54 32 20 79 29 0d 0a 20 20 20 20 20 20 20  , T2 y)..       
29c0: 20 20 20 20 20 20 20 20 20 3a 20 74 68 69 73 28           : this(
29d0: 78 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  x)..            
29e0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
29f0: 20 20 20 74 68 69 73 2e 79 20 3d 20 79 3b 0d 0a     this.y = y;..
2a00: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
2a10: 20 20 20 20 20 20 20 20 20 20 20 23 65 6e 64 72             #endr
2a20: 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20  egion....       
2a30: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
2a40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a70: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
2a80: 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20          #region 
2a90: 50 75 62 6c 69 63 20 50 72 6f 70 65 72 74 69 65  Public Propertie
2aa0: 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  s..            p
2ab0: 72 69 76 61 74 65 20 54 31 20 78 3b 0d 0a 20 20  rivate T1 x;..  
2ac0: 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
2ad0: 20 54 31 20 58 0d 0a 20 20 20 20 20 20 20 20 20   T1 X..         
2ae0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
2af0: 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75        get { retu
2b00: 72 6e 20 78 3b 20 7d 0d 0a 20 20 20 20 20 20 20  rn x; }..       
2b10: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
2b20: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
2b30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
2b70: 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65           private
2b80: 20 54 32 20 79 3b 0d 0a 20 20 20 20 20 20 20 20   T2 y;..        
2b90: 20 20 20 20 70 75 62 6c 69 63 20 54 32 20 59 0d      public T2 Y.
2ba0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
2bb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bc0: 67 65 74 20 7b 20 72 65 74 75 72 6e 20 79 3b 20  get { return y; 
2bd0: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
2be0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 65  ..            #e
2bf0: 6e 64 72 65 67 69 6f 6e 0d 0a 20 20 20 20 20 20  ndregion..      
2c00: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e    }..        #en
2c10: 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20  dregion....     
2c20: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
2c30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
2c70: 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 54 72        #region Tr
2c80: 61 63 65 4f 70 73 20 43 6c 61 73 73 0d 0a 20 20  aceOps Class..  
2c90: 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74        private st
2ca0: 61 74 69 63 20 63 6c 61 73 73 20 54 72 61 63 65  atic class Trace
2cb0: 4f 70 73 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  Ops..        {..
2cc0: 20 20 20 20 20 20 20 20 20 20 20 20 23 72 65 67              #reg
2cd0: 69 6f 6e 20 50 72 69 76 61 74 65 20 43 6f 6e 73  ion Private Cons
2ce0: 74 61 6e 74 73 0d 0a 20 20 20 20 20 20 20 20 20  tants..         
2cf0: 20 20 20 70 72 69 76 61 74 65 20 63 6f 6e 73 74     private const
2d00: 20 73 74 72 69 6e 67 20 44 65 66 61 75 6c 74 44   string DefaultD
2d10: 65 62 75 67 46 6f 72 6d 61 74 20 3d 20 22 23 7b  ebugFormat = "#{
2d20: 30 3a 30 30 30 7d 20 40 20 7b 31 7d 3a 20 7b 32  0:000} @ {1}: {2
2d30: 7d 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }";..           
2d40: 20 70 72 69 76 61 74 65 20 63 6f 6e 73 74 20 73   private const s
2d50: 74 72 69 6e 67 20 44 65 66 61 75 6c 74 54 72 61  tring DefaultTra
2d60: 63 65 46 6f 72 6d 61 74 20 3d 20 22 23 7b 30 3a  ceFormat = "#{0:
2d70: 30 30 30 7d 20 40 20 7b 31 7d 3a 20 7b 32 7d 22  000} @ {1}: {2}"
2d80: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
2d90: 20 70 72 69 76 61 74 65 20 63 6f 6e 73 74 20 73   private const s
2da0: 74 72 69 6e 67 20 49 73 6f 38 36 30 31 44 61 74  tring Iso8601Dat
2db0: 65 54 69 6d 65 4f 75 74 70 75 74 46 6f 72 6d 61  eTimeOutputForma
2dc0: 74 20 3d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  t =..           
2dd0: 20 20 20 20 20 22 79 79 79 79 2e 4d 4d 2e 64 64       "yyyy.MM.dd
2de0: 54 48 48 3a 6d 6d 3a 73 73 2e 66 66 66 66 66 66  THH:mm:ss.ffffff
2df0: 66 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  f";..           
2e00: 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20   #endregion.... 
2e10: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
2e20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
2e60: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 72  ..            #r
2e70: 65 67 69 6f 6e 20 50 72 69 76 61 74 65 20 53 74  egion Private St
2e80: 61 74 69 63 20 44 61 74 61 0d 0a 20 20 20 20 20  atic Data..     
2e90: 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
2ea0: 74 61 74 69 63 20 6f 62 6a 65 63 74 20 73 79 6e  tatic object syn
2eb0: 63 52 6f 6f 74 20 3d 20 6e 65 77 20 6f 62 6a 65  cRoot = new obje
2ec0: 63 74 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ct();..         
2ed0: 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69     private stati
2ee0: 63 20 6c 6f 6e 67 20 6e 65 78 74 44 65 62 75 67  c long nextDebug
2ef0: 49 64 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  Id;..           
2f00: 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20   private static 
2f10: 6c 6f 6e 67 20 6e 65 78 74 54 72 61 63 65 49 64  long nextTraceId
2f20: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ;..            p
2f30: 72 69 76 61 74 65 20 73 74 61 74 69 63 20 49 4c  rivate static IL
2f40: 69 73 74 3c 54 72 61 63 65 4c 69 73 74 65 6e 65  ist<TraceListene
2f50: 72 3e 20 64 65 62 75 67 4c 69 73 74 65 6e 65 72  r> debugListener
2f60: 73 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  s;..            
2f70: 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 54  private static T
2f80: 72 61 63 65 50 72 69 6f 72 69 74 79 20 64 65 62  racePriority deb
2f90: 75 67 50 72 69 6f 72 69 74 79 20 3d 20 54 72 61  ugPriority = Tra
2fa0: 63 65 50 72 69 6f 72 69 74 79 2e 44 65 66 61 75  cePriority.Defau
2fb0: 6c 74 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  lt;..           
2fc0: 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20   private static 
2fd0: 54 72 61 63 65 50 72 69 6f 72 69 74 79 20 74 72  TracePriority tr
2fe0: 61 63 65 50 72 69 6f 72 69 74 79 20 3d 20 54 72  acePriority = Tr
2ff0: 61 63 65 50 72 69 6f 72 69 74 79 2e 44 65 66 61  acePriority.Defa
3000: 75 6c 74 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ult;..          
3010: 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63    private static
3020: 20 73 74 72 69 6e 67 20 64 65 62 75 67 46 6f 72   string debugFor
3030: 6d 61 74 20 3d 20 44 65 66 61 75 6c 74 44 65 62  mat = DefaultDeb
3040: 75 67 46 6f 72 6d 61 74 3b 0d 0a 20 20 20 20 20  ugFormat;..     
3050: 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
3060: 74 61 74 69 63 20 73 74 72 69 6e 67 20 74 72 61  tatic string tra
3070: 63 65 46 6f 72 6d 61 74 20 3d 20 44 65 66 61 75  ceFormat = Defau
3080: 6c 74 54 72 61 63 65 46 6f 72 6d 61 74 3b 0d 0a  ltTraceFormat;..
3090: 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e 64              #end
30a0: 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20  region....      
30b0: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
30c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
3100: 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e           #region
3110: 20 50 75 62 6c 69 63 20 53 74 61 74 69 63 20 50   Public Static P
3120: 72 6f 70 65 72 74 69 65 73 0d 0a 20 20 20 20 20  roperties..     
3130: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74         public st
3140: 61 74 69 63 20 54 72 61 63 65 50 72 69 6f 72 69  atic TracePriori
3150: 74 79 20 44 65 62 75 67 50 72 69 6f 72 69 74 79  ty DebugPriority
3160: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
3170: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
3180: 20 67 65 74 20 7b 20 6c 6f 63 6b 20 28 73 79 6e   get { lock (syn
3190: 63 52 6f 6f 74 29 20 7b 20 72 65 74 75 72 6e 20  cRoot) { return 
31a0: 64 65 62 75 67 50 72 69 6f 72 69 74 79 3b 20 7d  debugPriority; }
31b0: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
31c0: 20 20 20 20 73 65 74 20 7b 20 6c 6f 63 6b 20 28      set { lock (
31d0: 73 79 6e 63 52 6f 6f 74 29 20 7b 20 64 65 62 75  syncRoot) { debu
31e0: 67 50 72 69 6f 72 69 74 79 20 3d 20 76 61 6c 75  gPriority = valu
31f0: 65 3b 20 7d 20 7d 0d 0a 20 20 20 20 20 20 20 20  e; } }..        
3200: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
3210: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
3220: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3230: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3240: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3250: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
3260: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73          public s
3270: 74 61 74 69 63 20 54 72 61 63 65 50 72 69 6f 72  tatic TracePrior
3280: 69 74 79 20 54 72 61 63 65 50 72 69 6f 72 69 74  ity TracePriorit
3290: 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  y..            {
32a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
32b0: 20 20 67 65 74 20 7b 20 6c 6f 63 6b 20 28 73 79    get { lock (sy
32c0: 6e 63 52 6f 6f 74 29 20 7b 20 72 65 74 75 72 6e  ncRoot) { return
32d0: 20 74 72 61 63 65 50 72 69 6f 72 69 74 79 3b 20   tracePriority; 
32e0: 7d 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  } }..           
32f0: 20 20 20 20 20 73 65 74 20 7b 20 6c 6f 63 6b 20       set { lock 
3300: 28 73 79 6e 63 52 6f 6f 74 29 20 7b 20 74 72 61  (syncRoot) { tra
3310: 63 65 50 72 69 6f 72 69 74 79 20 3d 20 76 61 6c  cePriority = val
3320: 75 65 3b 20 7d 20 7d 0d 0a 20 20 20 20 20 20 20  ue; } }..       
3330: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
3340: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
3350: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3360: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3370: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3380: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
3390: 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
33a0: 73 74 61 74 69 63 20 73 74 72 69 6e 67 20 44 65  static string De
33b0: 62 75 67 46 6f 72 6d 61 74 0d 0a 20 20 20 20 20  bugFormat..     
33c0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
33d0: 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20            get { 
33e0: 6c 6f 63 6b 20 28 73 79 6e 63 52 6f 6f 74 29 20  lock (syncRoot) 
33f0: 7b 20 72 65 74 75 72 6e 20 64 65 62 75 67 46 6f  { return debugFo
3400: 72 6d 61 74 3b 20 7d 20 7d 0d 0a 20 20 20 20 20  rmat; } }..     
3410: 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b             set {
3420: 20 6c 6f 63 6b 20 28 73 79 6e 63 52 6f 6f 74 29   lock (syncRoot)
3430: 20 7b 20 64 65 62 75 67 46 6f 72 6d 61 74 20 3d   { debugFormat =
3440: 20 76 61 6c 75 65 3b 20 7d 20 7d 0d 0a 20 20 20   value; } }..   
3450: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
3460: 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
3470: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3480: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3490: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
34b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
34c0: 6c 69 63 20 73 74 61 74 69 63 20 73 74 72 69 6e  lic static strin
34d0: 67 20 54 72 61 63 65 46 6f 72 6d 61 74 0d 0a 20  g TraceFormat.. 
34e0: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
34f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65                ge
3500: 74 20 7b 20 6c 6f 63 6b 20 28 73 79 6e 63 52 6f  t { lock (syncRo
3510: 6f 74 29 20 7b 20 72 65 74 75 72 6e 20 74 72 61  ot) { return tra
3520: 63 65 46 6f 72 6d 61 74 3b 20 7d 20 7d 0d 0a 20  ceFormat; } }.. 
3530: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
3540: 65 74 20 7b 20 6c 6f 63 6b 20 28 73 79 6e 63 52  et { lock (syncR
3550: 6f 6f 74 29 20 7b 20 74 72 61 63 65 46 6f 72 6d  oot) { traceForm
3560: 61 74 20 3d 20 76 61 6c 75 65 3b 20 7d 20 7d 0d  at = value; } }.
3570: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
3580: 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e 64              #end
3590: 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20  region....      
35a0: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
35b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
35f0: 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e           #region
3600: 20 49 6e 74 65 72 61 63 74 69 76 65 20 53 75 70   Interactive Sup
3610: 70 6f 72 74 20 4d 65 74 68 6f 64 73 0d 0a 20 20  port Methods..  
3620: 20 20 20 20 20 20 20 20 20 20 5b 4d 65 74 68 6f            [Metho
3630: 64 49 6d 70 6c 28 4d 65 74 68 6f 64 49 6d 70 6c  dImpl(MethodImpl
3640: 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e 69  Options.NoInlini
3650: 6e 67 29 5d 0d 0a 20 20 20 20 20 20 20 20 20 20  ng)]..          
3660: 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20    public static 
3670: 44 69 61 6c 6f 67 52 65 73 75 6c 74 20 53 68 6f  DialogResult Sho
3680: 77 4d 65 73 73 61 67 65 28 0d 0a 20 20 20 20 20  wMessage(..     
3690: 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
36a0: 50 72 69 6f 72 69 74 79 20 74 72 61 63 65 50 72  Priority tracePr
36b0: 69 6f 72 69 74 79 2c 0d 0a 20 20 20 20 20 20 20  iority,..       
36c0: 20 20 20 20 20 20 20 20 20 54 72 61 63 65 43 61           TraceCa
36d0: 6c 6c 62 61 63 6b 20 64 65 62 75 67 43 61 6c 6c  llback debugCall
36e0: 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20  back,..         
36f0: 20 20 20 20 20 20 20 54 72 61 63 65 43 61 6c 6c         TraceCall
3700: 62 61 63 6b 20 74 72 61 63 65 43 61 6c 6c 62 61  back traceCallba
3710: 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ck,..           
3720: 20 20 20 20 20 41 73 73 65 6d 62 6c 79 20 61 73       Assembly as
3730: 73 65 6d 62 6c 79 2c 0d 0a 20 20 20 20 20 20 20  sembly,..       
3740: 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
3750: 6d 65 73 73 61 67 65 2c 0d 0a 20 20 20 20 20 20  message,..      
3760: 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
3770: 20 63 61 74 65 67 6f 72 79 2c 0d 0a 20 20 20 20   category,..    
3780: 20 20 20 20 20 20 20 20 20 20 20 20 4d 65 73 73              Mess
3790: 61 67 65 42 6f 78 42 75 74 74 6f 6e 73 20 62 75  ageBoxButtons bu
37a0: 74 74 6f 6e 73 2c 0d 0a 20 20 20 20 20 20 20 20  ttons,..        
37b0: 20 20 20 20 20 20 20 20 4d 65 73 73 61 67 65 42          MessageB
37c0: 6f 78 49 63 6f 6e 20 69 63 6f 6e 0d 0a 20 20 20  oxIcon icon..   
37d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a               )..
37e0: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
37f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 44                 D
3800: 69 61 6c 6f 67 52 65 73 75 6c 74 20 72 65 73 75  ialogResult resu
3810: 6c 74 20 3d 20 44 69 61 6c 6f 67 52 65 73 75 6c  lt = DialogResul
3820: 74 2e 4f 4b 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  t.OK;....       
3830: 20 20 20 20 20 20 20 20 20 44 65 62 75 67 41 6e           DebugAn
3840: 64 54 72 61 63 65 28 74 72 61 63 65 50 72 69 6f  dTrace(tracePrio
3850: 72 69 74 79 2c 0d 0a 20 20 20 20 20 20 20 20 20  rity,..         
3860: 20 20 20 20 20 20 20 20 20 20 20 64 65 62 75 67             debug
3870: 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43  Callback, traceC
3880: 61 6c 6c 62 61 63 6b 2c 20 6d 65 73 73 61 67 65  allback, message
3890: 2c 20 63 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  , category);....
38a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38b0: 69 66 20 28 53 79 73 74 65 6d 49 6e 66 6f 72 6d  if (SystemInform
38c0: 61 74 69 6f 6e 2e 55 73 65 72 49 6e 74 65 72 61  ation.UserIntera
38d0: 63 74 69 76 65 29 0d 0a 20 20 20 20 20 20 20 20  ctive)..        
38e0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
38f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
3900: 74 72 69 6e 67 20 74 69 74 6c 65 20 3d 20 47 65  tring title = Ge
3910: 74 41 73 73 65 6d 62 6c 79 54 69 74 6c 65 28 61  tAssemblyTitle(a
3920: 73 73 65 6d 62 6c 79 29 3b 0d 0a 0d 0a 20 20 20  ssembly);....   
3930: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3940: 20 69 66 20 28 74 69 74 6c 65 20 3d 3d 20 6e 75   if (title == nu
3950: 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
3960: 20 20 20 20 20 20 20 20 20 20 20 20 20 74 69 74               tit
3970: 6c 65 20 3d 20 41 70 70 6c 69 63 61 74 69 6f 6e  le = Application
3980: 2e 50 72 6f 64 75 63 74 4e 61 6d 65 3b 0d 0a 0d  .ProductName;...
3990: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
39a0: 20 20 20 20 20 72 65 73 75 6c 74 20 3d 20 4d 65       result = Me
39b0: 73 73 61 67 65 42 6f 78 2e 53 68 6f 77 28 6d 65  ssageBox.Show(me
39c0: 73 73 61 67 65 2c 20 74 69 74 6c 65 2c 20 62 75  ssage, title, bu
39d0: 74 74 6f 6e 73 2c 20 69 63 6f 6e 29 3b 0d 0a 0d  ttons, icon);...
39e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
39f0: 20 20 20 20 20 44 65 62 75 67 41 6e 64 54 72 61       DebugAndTra
3a00: 63 65 28 74 72 61 63 65 50 72 69 6f 72 69 74 79  ce(tracePriority
3a10: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
3a20: 20 20 20 20 20 20 20 20 20 20 20 64 65 62 75 67             debug
3a30: 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43  Callback, traceC
3a40: 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e  allback, String.
3a50: 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
3a60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3a70: 20 22 55 73 65 72 20 63 68 6f 69 63 65 20 6f 66   "User choice of
3a80: 20 7b 30 7d 2e 22 2c 20 46 6f 72 44 69 73 70 6c   {0}.", ForDispl
3a90: 61 79 28 72 65 73 75 6c 74 29 29 2c 0d 0a 20 20  ay(result)),..  
3aa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3ab0: 20 20 20 20 20 20 63 61 74 65 67 6f 72 79 29 3b        category);
3ac0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
3ad0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 72          return r
3ae0: 65 73 75 6c 74 3b 0d 0a 20 20 20 20 20 20 20 20  esult;..        
3af0: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
3b00: 20 20 20 20 20 20 20 20 20 20 20 20 20 44 65 62               Deb
3b10: 75 67 41 6e 64 54 72 61 63 65 28 74 72 61 63 65  ugAndTrace(trace
3b20: 50 72 69 6f 72 69 74 79 2c 0d 0a 20 20 20 20 20  Priority,..     
3b30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64                 d
3b40: 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72  ebugCallback, tr
3b50: 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72  aceCallback, Str
3b60: 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
3b70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3b80: 20 22 44 65 66 61 75 6c 74 20 63 68 6f 69 63 65   "Default choice
3b90: 20 6f 66 20 7b 30 7d 2e 22 2c 20 46 6f 72 44 69   of {0}.", ForDi
3ba0: 73 70 6c 61 79 28 72 65 73 75 6c 74 29 29 2c 0d  splay(result)),.
3bb0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
3bc0: 20 20 20 20 20 63 61 74 65 67 6f 72 79 29 3b 0d       category);.
3bd0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
3be0: 20 20 20 72 65 74 75 72 6e 20 72 65 73 75 6c 74     return result
3bf0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
3c00: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 65  ..            #e
3c10: 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20  ndregion....    
3c20: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
3c30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3c40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3c50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3c60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
3c70: 20 20 20 20 20 20 20 20 20 20 20 23 72 65 67 69             #regi
3c80: 6f 6e 20 54 72 61 63 69 6e 67 20 53 75 70 70 6f  on Tracing Suppo
3c90: 72 74 20 4d 65 74 68 6f 64 73 0d 0a 20 20 20 20  rt Methods..    
3ca0: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73          public s
3cb0: 74 61 74 69 63 20 76 6f 69 64 20 53 65 74 75 70  tatic void Setup
3cc0: 44 65 62 75 67 4c 69 73 74 65 6e 65 72 73 28 29  DebugListeners()
3cd0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
3ce0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
3cf0: 20 69 66 20 28 64 65 62 75 67 4c 69 73 74 65 6e   if (debugListen
3d00: 65 72 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  ers == null)..  
3d10: 20 20 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: 20 3d 20 6e 65 77 20 4c 69 73 74 3c 54 72 61 63   = new List<Trac
3d40: 65 4c 69 73 74 65 6e 65 72 3e 28 29 3b 0d 0a 0d  eListener>();...
3d50: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
3d60: 20 64 65 62 75 67 4c 69 73 74 65 6e 65 72 73 2e   debugListeners.
3d70: 41 64 64 28 6e 65 77 20 43 6f 6e 73 6f 6c 65 54  Add(new ConsoleT
3d80: 72 61 63 65 4c 69 73 74 65 6e 65 72 28 29 29 3b  raceListener());
3d90: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
3da0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
3db0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3dc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3dd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3de0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3df0: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
3e00: 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20    public static 
3e10: 6c 6f 6e 67 20 4e 65 78 74 44 65 62 75 67 49 64  long NextDebugId
3e20: 28 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ()..            
3e30: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
3e40: 20 20 20 72 65 74 75 72 6e 20 49 6e 74 65 72 6c     return Interl
3e50: 6f 63 6b 65 64 2e 49 6e 63 72 65 6d 65 6e 74 28  ocked.Increment(
3e60: 72 65 66 20 6e 65 78 74 44 65 62 75 67 49 64 29  ref nextDebugId)
3e70: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
3e80: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
3e90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3ea0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3eb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3ec0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3ed0: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
3ee0: 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63     public static
3ef0: 20 6c 6f 6e 67 20 4e 65 78 74 54 72 61 63 65 49   long NextTraceI
3f00: 64 28 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  d()..           
3f10: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
3f20: 20 20 20 20 72 65 74 75 72 6e 20 49 6e 74 65 72      return Inter
3f30: 6c 6f 63 6b 65 64 2e 49 6e 63 72 65 6d 65 6e 74  locked.Increment
3f40: 28 72 65 66 20 6e 65 78 74 54 72 61 63 65 49 64  (ref nextTraceId
3f50: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
3f60: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
3f70: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
3f80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3f90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3fa0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3fb0: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
3fc0: 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69      public stati
3fd0: 63 20 73 74 72 69 6e 67 20 54 69 6d 65 53 74 61  c string TimeSta
3fe0: 6d 70 28 44 61 74 65 54 69 6d 65 20 64 61 74 65  mp(DateTime date
3ff0: 54 69 6d 65 29 0d 0a 20 20 20 20 20 20 20 20 20  Time)..         
4000: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
4010: 20 20 20 20 20 20 72 65 74 75 72 6e 20 64 61 74        return dat
4020: 65 54 69 6d 65 2e 54 6f 53 74 72 69 6e 67 28 49  eTime.ToString(I
4030: 73 6f 38 36 30 31 44 61 74 65 54 69 6d 65 4f 75  so8601DateTimeOu
4040: 74 70 75 74 46 6f 72 6d 61 74 29 3b 0d 0a 20 20  tputFormat);..  
4050: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
4060: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
4070: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4080: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4090: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
40a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
40b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 4d  ..            [M
40c0: 65 74 68 6f 64 49 6d 70 6c 28 4d 65 74 68 6f 64  ethodImpl(Method
40d0: 49 6d 70 6c 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e  ImplOptions.NoIn
40e0: 6c 69 6e 69 6e 67 29 5d 0d 0a 20 20 20 20 20 20  lining)]..      
40f0: 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74        private st
4100: 61 74 69 63 20 73 74 72 69 6e 67 20 47 65 74 4d  atic string GetM
4110: 65 74 68 6f 64 4e 61 6d 65 28 0d 0a 20 20 20 20  ethodName(..    
4120: 20 20 20 20 20 20 20 20 20 20 20 20 53 74 61 63              Stac
4130: 6b 54 72 61 63 65 20 73 74 61 63 6b 54 72 61 63  kTrace stackTrac
4140: 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
4150: 20 20 20 20 69 6e 74 20 6c 65 76 65 6c 0d 0a 20      int level.. 
4160: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29                 )
4170: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
4180: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
4190: 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20   try..          
41a0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
41b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
41c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
41d0: 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 49 66       // NOTE: If
41e0: 20 61 20 76 61 6c 69 64 20 73 74 61 63 6b 20 74   a valid stack t
41f0: 72 61 63 65 20 77 61 73 20 6e 6f 74 20 73 75 70  race was not sup
4200: 70 6c 69 65 64 20 62 79 20 74 68 65 0d 0a 20 20  plied by the..  
4210: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4220: 20 20 2f 2f 20 20 20 20 20 20 20 63 61 6c 6c 65    //       calle
4230: 72 2c 20 63 72 65 61 74 65 20 6f 6e 65 20 6e 6f  r, create one no
4240: 77 20 62 61 73 65 64 20 6f 6e 20 74 68 65 20 63  w based on the c
4250: 75 72 72 65 6e 74 0d 0a 20 20 20 20 20 20 20 20  urrent..        
4260: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
4270: 20 20 20 20 20 65 78 65 63 75 74 69 6f 6e 20 73       execution s
4280: 74 61 63 6b 2e 0d 0a 20 20 20 20 20 20 20 20 20  tack...         
4290: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
42a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
42b0: 20 20 20 69 66 20 28 73 74 61 63 6b 54 72 61 63     if (stackTrac
42c0: 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  e == null)..    
42d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
42e0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
42f0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
4300: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4310: 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20         // NOTE: 
4320: 47 72 61 62 20 74 68 65 20 63 75 72 72 65 6e 74  Grab the current
4330: 20 65 78 65 63 75 74 69 6f 6e 20 73 74 61 63 6b   execution stack
4340: 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
4350: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
4360: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4370: 20 20 20 20 20 20 20 73 74 61 63 6b 54 72 61 63         stackTrac
4380: 65 20 3d 20 6e 65 77 20 53 74 61 63 6b 54 72 61  e = new StackTra
4390: 63 65 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ce();....       
43a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
43b0: 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
43c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
43d0: 4e 4f 54 45 3a 20 41 6c 77 61 79 73 20 73 6b 69  NOTE: Always ski
43e0: 70 20 74 68 69 73 20 63 61 6c 6c 20 66 72 61 6d  p this call fram
43f0: 65 20 77 68 65 6e 20 77 65 20 63 61 70 74 75 72  e when we captur
4400: 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e..             
4410: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
4420: 20 20 20 20 74 68 65 20 73 74 61 63 6b 20 74 72      the stack tr
4430: 61 63 65 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  ace...          
4440: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
4450: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
4460: 20 20 20 20 20 20 20 20 20 20 6c 65 76 65 6c 2b            level+
4470: 2b 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  +;..            
4480: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
4490: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
44a0: 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
44b0: 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45           // NOTE
44c0: 3a 20 47 65 74 20 74 68 65 20 73 70 65 63 69 66  : Get the specif
44d0: 69 65 64 20 73 74 61 63 6b 20 66 72 61 6d 65 20  ied stack frame 
44e0: 28 61 6c 77 61 79 73 20 61 64 64 20 6f 6e 65 20  (always add one 
44f0: 74 6f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  to..            
4500: 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
4510: 20 73 6b 69 70 20 74 68 69 73 20 6d 65 74 68 6f   skip this metho
4520: 64 29 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  d)...           
4530: 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
4540: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4550: 20 53 74 61 63 6b 46 72 61 6d 65 20 73 74 61 63   StackFrame stac
4560: 6b 46 72 61 6d 65 20 3d 20 73 74 61 63 6b 54 72  kFrame = stackTr
4570: 61 63 65 2e 47 65 74 46 72 61 6d 65 28 6c 65 76  ace.GetFrame(lev
4580: 65 6c 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  el);....        
4590: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
45a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
45b0: 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 47 65 74      // NOTE: Get
45c0: 20 74 68 65 20 6d 65 74 68 6f 64 20 66 6f 72 20   the method for 
45d0: 74 68 65 20 73 74 61 63 6b 20 66 72 61 6d 65 2e  the stack frame.
45e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
45f0: 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
4600: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4d 65                Me
4610: 74 68 6f 64 42 61 73 65 20 6d 65 74 68 6f 64 42  thodBase methodB
4620: 61 73 65 20 3d 20 73 74 61 63 6b 46 72 61 6d 65  ase = stackFrame
4630: 2e 47 65 74 4d 65 74 68 6f 64 28 29 3b 0d 0a 0d  .GetMethod();...
4640: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
4650: 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
4660: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
4670: 4e 4f 54 45 3a 20 47 65 74 20 74 68 65 20 74 79  NOTE: Get the ty
4680: 70 65 20 66 6f 72 20 74 68 65 20 6d 65 74 68 6f  pe for the metho
4690: 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  d...            
46a0: 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
46b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
46c0: 54 79 70 65 20 74 79 70 65 20 3d 20 6d 65 74 68  Type type = meth
46d0: 6f 64 42 61 73 65 2e 44 65 63 6c 61 72 69 6e 67  odBase.Declaring
46e0: 54 79 70 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  Type;....       
46f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
4700: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
4710: 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 47 65       // NOTE: Ge
4720: 74 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68  t the name of th
4730: 65 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20  e method...     
4740: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
4750: 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
4760: 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6e 61         string na
4770: 6d 65 20 3d 20 6d 65 74 68 6f 64 42 61 73 65 2e  me = methodBase.
4780: 4e 61 6d 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  Name;....       
4790: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
47a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
47b0: 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 52 65       // NOTE: Re
47c0: 74 75 72 6e 20 74 68 65 20 70 72 6f 70 65 72 6c  turn the properl
47d0: 79 20 66 6f 72 6d 61 74 74 65 64 20 72 65 73 75  y formatted resu
47e0: 6c 74 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  lt...           
47f0: 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
4800: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4810: 20 72 65 74 75 72 6e 20 53 74 72 69 6e 67 2e 46   return String.F
4820: 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
4830: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4840: 22 7b 30 7d 7b 31 7d 7b 32 7d 22 2c 20 74 79 70  "{0}{1}{2}", typ
4850: 65 2e 4e 61 6d 65 2c 20 54 79 70 65 2e 44 65 6c  e.Name, Type.Del
4860: 69 6d 69 74 65 72 2c 20 6e 61 6d 65 29 3b 0d 0a  imiter, name);..
4870: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4880: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
4890: 20 20 20 63 61 74 63 68 0d 0a 20 20 20 20 20 20     catch..      
48a0: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
48b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
48c0: 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d   // do nothing..
48d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
48e0: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
48f0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 75 6c        return nul
4900: 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l;..            
4910: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
4920: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
4930: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4940: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4950: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4960: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
4970: 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69      public stati
4980: 63 20 76 6f 69 64 20 44 65 62 75 67 43 6f 72 65  c void DebugCore
4990: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
49a0: 20 20 20 73 74 72 69 6e 67 20 6d 65 73 73 61 67     string messag
49b0: 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
49c0: 20 20 20 20 73 74 72 69 6e 67 20 63 61 74 65 67      string categ
49d0: 6f 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ory..           
49e0: 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
49f0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
4a00: 20 20 20 20 20 20 20 6c 6f 63 6b 20 28 73 79 6e         lock (syn
4a10: 63 52 6f 6f 74 29 0d 0a 20 20 20 20 20 20 20 20  cRoot)..        
4a20: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
4a30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
4a40: 66 20 28 64 65 62 75 67 4c 69 73 74 65 6e 65 72  f (debugListener
4a50: 73 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  s != null)..    
4a60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4a70: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
4a80: 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 65 61             forea
4a90: 63 68 20 28 54 72 61 63 65 4c 69 73 74 65 6e 65  ch (TraceListene
4aa0: 72 20 6c 69 73 74 65 6e 65 72 20 69 6e 20 64 65  r listener in de
4ab0: 62 75 67 4c 69 73 74 65 6e 65 72 73 29 0d 0a 20  bugListeners).. 
4ac0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4ad0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
4ae0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4af0: 20 20 20 20 20 20 6c 69 73 74 65 6e 65 72 2e 57        listener.W
4b00: 72 69 74 65 4c 69 6e 65 28 6d 65 73 73 61 67 65  riteLine(message
4b10: 2c 20 63 61 74 65 67 6f 72 79 29 3b 0d 0a 20 20  , category);..  
4b20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4b30: 20 20 20 20 20 20 20 20 20 20 6c 69 73 74 65 6e            listen
4b40: 65 72 2e 46 6c 75 73 68 28 29 3b 0d 0a 20 20 20  er.Flush();..   
4b50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4b60: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
4b70: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
4b80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
4b90: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
4ba0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
4bb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4bc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4bd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4be0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4bf0: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
4c00: 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20    public static 
4c10: 76 6f 69 64 20 54 72 61 63 65 43 6f 72 65 28 0d  void TraceCore(.
4c20: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
4c30: 20 73 74 72 69 6e 67 20 6d 65 73 73 61 67 65 2c   string message,
4c40: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
4c50: 20 20 73 74 72 69 6e 67 20 63 61 74 65 67 6f 72    string categor
4c60: 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  y..             
4c70: 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20     )..          
4c80: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
4c90: 20 20 20 20 20 6c 6f 63 6b 20 28 73 79 6e 63 52       lock (syncR
4ca0: 6f 6f 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20  oot)..          
4cb0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
4cc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
4cd0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
4ce0: 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 57 72       // NOTE: Wr
4cf0: 69 74 65 20 74 68 65 20 6d 65 73 73 61 67 65 20  ite the message 
4d00: 74 6f 20 61 6c 6c 20 74 68 65 20 61 63 74 69 76  to all the activ
4d10: 65 20 74 72 61 63 65 0d 0a 20 20 20 20 20 20 20  e trace..       
4d20: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
4d30: 20 20 20 20 20 20 6c 69 73 74 65 6e 65 72 73 2e        listeners.
4d40: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
4d50: 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
4d60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
4d70: 61 63 65 2e 57 72 69 74 65 4c 69 6e 65 28 6d 65  ace.WriteLine(me
4d80: 73 73 61 67 65 2c 20 63 61 74 65 67 6f 72 79 29  ssage, category)
4d90: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
4da0: 20 20 20 20 20 20 20 54 72 61 63 65 2e 46 6c 75         Trace.Flu
4db0: 73 68 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  sh();..         
4dc0: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
4dd0: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
4de0: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
4df0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4e00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4e10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4e20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
4e30: 20 20 20 20 20 20 20 20 20 20 5b 4d 65 74 68 6f            [Metho
4e40: 64 49 6d 70 6c 28 4d 65 74 68 6f 64 49 6d 70 6c  dImpl(MethodImpl
4e50: 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e 69  Options.NoInlini
4e60: 6e 67 29 5d 0d 0a 20 20 20 20 20 20 20 20 20 20  ng)]..          
4e70: 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20    public static 
4e80: 73 74 72 69 6e 67 20 44 65 62 75 67 41 6e 64 54  string DebugAndT
4e90: 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20  race(..         
4ea0: 20 20 20 20 20 20 20 54 72 61 63 65 50 72 69 6f         TracePrio
4eb0: 72 69 74 79 20 74 72 61 63 65 50 72 69 6f 72 69  rity tracePriori
4ec0: 74 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ty,..           
4ed0: 20 20 20 20 20 54 72 61 63 65 43 61 6c 6c 62 61       TraceCallba
4ee0: 63 6b 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b  ck debugCallback
4ef0: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
4f00: 20 20 20 54 72 61 63 65 43 61 6c 6c 62 61 63 6b     TraceCallback
4f10: 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 0d   traceCallback,.
4f20: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
4f30: 20 45 78 63 65 70 74 69 6f 6e 20 65 78 63 65 70   Exception excep
4f40: 74 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20  tion,..         
4f50: 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 63 61         string ca
4f60: 74 65 67 6f 72 79 0d 0a 20 20 20 20 20 20 20 20  tegory..        
4f70: 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
4f80: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
4f90: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 65 78            if (ex
4fa0: 63 65 70 74 69 6f 6e 20 21 3d 20 6e 75 6c 6c 29  ception != null)
4fb0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
4fc0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 44 65 62        return Deb
4fd0: 75 67 41 6e 64 54 72 61 63 65 28 74 72 61 63 65  ugAndTrace(trace
4fe0: 50 72 69 6f 72 69 74 79 2c 20 64 65 62 75 67 43  Priority, debugC
4ff0: 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20  allback,..      
5000: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5010: 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c    traceCallback,
5020: 20 6e 65 77 20 53 74 61 63 6b 54 72 61 63 65 28   new StackTrace(
5030: 65 78 63 65 70 74 69 6f 6e 2c 20 74 72 75 65 29  exception, true)
5040: 2c 20 30 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  , 0,..          
5050: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 78                ex
5060: 63 65 70 74 69 6f 6e 2e 54 6f 53 74 72 69 6e 67  ception.ToString
5070: 28 29 2c 20 63 61 74 65 67 6f 72 79 29 3b 0d 0a  (), category);..
5080: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
5090: 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a    return null;..
50a0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
50b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
50c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
50d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
50e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
50f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5100: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
5110: 5b 4d 65 74 68 6f 64 49 6d 70 6c 28 4d 65 74 68  [MethodImpl(Meth
5120: 6f 64 49 6d 70 6c 4f 70 74 69 6f 6e 73 2e 4e 6f  odImplOptions.No
5130: 49 6e 6c 69 6e 69 6e 67 29 5d 0d 0a 20 20 20 20  Inlining)]..    
5140: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73          public s
5150: 74 61 74 69 63 20 73 74 72 69 6e 67 20 44 65 62  tatic string Deb
5160: 75 67 41 6e 64 54 72 61 63 65 28 0d 0a 20 20 20  ugAndTrace(..   
5170: 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61               Tra
5180: 63 65 50 72 69 6f 72 69 74 79 20 74 72 61 63 65  cePriority trace
5190: 50 72 69 6f 72 69 74 79 2c 0d 0a 20 20 20 20 20  Priority,..     
51a0: 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
51b0: 43 61 6c 6c 62 61 63 6b 20 64 65 62 75 67 43 61  Callback debugCa
51c0: 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20  llback,..       
51d0: 20 20 20 20 20 20 20 20 20 54 72 61 63 65 43 61           TraceCa
51e0: 6c 6c 62 61 63 6b 20 74 72 61 63 65 43 61 6c 6c  llback traceCall
51f0: 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20  back,..         
5200: 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6d 65         string me
5210: 73 73 61 67 65 2c 0d 0a 20 20 20 20 20 20 20 20  ssage,..        
5220: 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 63          string c
5230: 61 74 65 67 6f 72 79 0d 0a 20 20 20 20 20 20 20  ategory..       
5240: 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
5250: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
5260: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
5270: 6e 20 44 65 62 75 67 41 6e 64 54 72 61 63 65 28  n DebugAndTrace(
5280: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
5290: 20 20 20 20 20 20 74 72 61 63 65 50 72 69 6f 72        tracePrior
52a0: 69 74 79 2c 20 64 65 62 75 67 43 61 6c 6c 62 61  ity, debugCallba
52b0: 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63  ck, traceCallbac
52c0: 6b 2c 20 6e 75 6c 6c 2c 20 31 2c 0d 0a 20 20 20  k, null, 1,..   
52d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
52e0: 20 6d 65 73 73 61 67 65 2c 20 63 61 74 65 67 6f   message, catego
52f0: 72 79 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ry);..          
5300: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
5310: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
5320: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5330: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5340: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5350: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
5360: 20 20 20 20 20 20 5b 4d 65 74 68 6f 64 49 6d 70        [MethodImp
5370: 6c 28 4d 65 74 68 6f 64 49 6d 70 6c 4f 70 74 69  l(MethodImplOpti
5380: 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e 69 6e 67 29 5d  ons.NoInlining)]
5390: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
53a0: 69 76 61 74 65 20 73 74 61 74 69 63 20 73 74 72  ivate static str
53b0: 69 6e 67 20 44 65 62 75 67 41 6e 64 54 72 61 63  ing DebugAndTrac
53c0: 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
53d0: 20 20 20 20 54 72 61 63 65 50 72 69 6f 72 69 74      TracePriorit
53e0: 79 20 74 72 61 63 65 50 72 69 6f 72 69 74 79 2c  y tracePriority,
53f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
5400: 20 20 54 72 61 63 65 43 61 6c 6c 62 61 63 6b 20    TraceCallback 
5410: 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a  debugCallback,..
5420: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5430: 54 72 61 63 65 43 61 6c 6c 62 61 63 6b 20 74 72  TraceCallback tr
5440: 61 63 65 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20  aceCallback,..  
5450: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 74                St
5460: 61 63 6b 54 72 61 63 65 20 73 74 61 63 6b 54 72  ackTrace stackTr
5470: 61 63 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ace,..          
5480: 20 20 20 20 20 20 69 6e 74 20 6c 65 76 65 6c 2c        int level,
5490: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
54a0: 20 20 73 74 72 69 6e 67 20 6d 65 73 73 61 67 65    string message
54b0: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
54c0: 20 20 20 73 74 72 69 6e 67 20 63 61 74 65 67 6f     string catego
54d0: 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ry..            
54e0: 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20      )..         
54f0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
5500: 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
5510: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54            // NOT
5520: 45 3a 20 41 6c 77 61 79 73 20 73 6b 69 70 20 74  E: Always skip t
5530: 68 69 73 20 63 61 6c 6c 20 66 72 61 6d 65 20 69  his call frame i
5540: 66 20 74 68 65 20 73 74 61 63 6b 20 74 72 61 63  f the stack trac
5550: 65 20 69 73 0d 0a 20 20 20 20 20 20 20 20 20 20  e is..          
5560: 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 67        //       g
5570: 6f 69 6e 67 20 74 6f 20 62 65 20 63 61 70 74 75  oing to be captu
5580: 72 65 64 20 62 79 20 47 65 74 4d 65 74 68 6f 64  red by GetMethod
5590: 4e 61 6d 65 2e 0d 0a 20 20 20 20 20 20 20 20 20  Name...         
55a0: 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
55b0: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 73             if (s
55c0: 74 61 63 6b 54 72 61 63 65 20 3d 3d 20 6e 75 6c  tackTrace == nul
55d0: 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
55e0: 20 20 20 20 20 20 20 20 6c 65 76 65 6c 2b 2b 3b          level++;
55f0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
5600: 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
5610: 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a          // NOTE:
5620: 20 46 6f 72 6d 61 74 20 74 68 65 20 6d 65 73 73   Format the mess
5630: 61 67 65 20 66 6f 72 20 64 69 73 70 6c 61 79 20  age for display 
5640: 28 6f 6e 63 65 29 2e 0d 0a 20 20 20 20 20 20 20  (once)...       
5650: 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
5660: 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72               str
5670: 69 6e 67 20 66 6f 72 6d 61 74 74 65 64 20 3d 20  ing formatted = 
5680: 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 22 7b  String.Format("{
5690: 30 7d 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20  0}: {1}",..     
56a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 47                 G
56b0: 65 74 4d 65 74 68 6f 64 4e 61 6d 65 28 73 74 61  etMethodName(sta
56c0: 63 6b 54 72 61 63 65 2c 20 6c 65 76 65 6c 29 2c  ckTrace, level),
56d0: 20 6d 65 73 73 61 67 65 29 3b 0d 0a 0d 0a 20 20   message);....  
56e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
56f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
5700: 20 20 2f 2f 20 4e 4f 54 45 3a 20 49 66 20 74 68    // NOTE: If th
5710: 65 20 64 65 62 75 67 20 63 61 6c 6c 62 61 63 6b  e debug callback
5720: 20 69 73 20 69 6e 76 61 6c 69 64 20 6f 72 20 74   is invalid or t
5730: 68 65 20 74 72 61 63 65 20 70 72 69 6f 72 69 74  he trace priorit
5740: 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  y..             
5750: 20 20 20 2f 2f 20 20 20 20 20 20 20 6f 66 20 74     //       of t
5760: 68 69 73 20 6d 65 73 73 61 67 65 20 69 73 20 6c  his message is l
5770: 65 73 73 20 74 68 61 6e 20 77 68 61 74 20 77 65  ess than what we
5780: 20 63 75 72 72 65 6e 74 6c 79 20 77 61 6e 74 20   currently want 
5790: 74 6f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  to..            
57a0: 20 20 20 20 2f 2f 20 20 20 20 20 20 20 64 65 62      //       deb
57b0: 75 67 2c 20 73 6b 69 70 20 69 74 2e 0d 0a 20 20  ug, skip it...  
57c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
57d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
57e0: 20 20 69 66 20 28 28 64 65 62 75 67 43 61 6c 6c    if ((debugCall
57f0: 62 61 63 6b 20 21 3d 20 6e 75 6c 6c 29 20 26 26  back != null) &&
5800: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
5810: 20 20 20 20 20 20 28 74 72 61 63 65 50 72 69 6f        (tracePrio
5820: 72 69 74 79 20 3e 3d 20 44 65 62 75 67 50 72 69  rity >= DebugPri
5830: 6f 72 69 74 79 29 29 0d 0a 20 20 20 20 20 20 20  ority))..       
5840: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
5850: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5860: 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
5870: 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a          // NOTE:
5880: 20 49 6e 76 6f 6b 65 20 74 68 65 20 64 65 62 75   Invoke the debu
5890: 67 20 63 61 6c 6c 62 61 63 6b 20 77 69 74 68 20  g callback with 
58a0: 74 68 65 20 66 6f 72 6d 61 74 74 65 64 0d 0a 20  the formatted.. 
58b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
58c0: 20 20 20 2f 2f 20 20 20 20 20 20 20 6d 65 73 73     //       mess
58d0: 61 67 65 20 61 6e 64 20 74 68 65 20 63 61 74 65  age and the cate
58e0: 67 6f 72 79 20 73 70 65 63 69 66 69 65 64 20 62  gory specified b
58f0: 79 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 20  y the..         
5900: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
5910: 20 20 20 20 63 61 6c 6c 65 72 2e 0d 0a 20 20 20      caller...   
5920: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5930: 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
5940: 20 20 20 20 20 20 20 20 20 64 65 62 75 67 43 61           debugCa
5950: 6c 6c 62 61 63 6b 28 66 6f 72 6d 61 74 74 65 64  llback(formatted
5960: 2c 20 63 61 74 65 67 6f 72 79 29 3b 0d 0a 20 20  , category);..  
5970: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
5980: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
5990: 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
59a0: 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20         // NOTE: 
59b0: 49 66 20 74 68 65 20 74 72 61 63 65 20 63 61 6c  If the trace cal
59c0: 6c 62 61 63 6b 20 69 73 20 69 6e 76 61 6c 69 64  lback is invalid
59d0: 20 6f 72 20 74 68 65 20 74 72 61 63 65 20 70 72   or the trace pr
59e0: 69 6f 72 69 74 79 0d 0a 20 20 20 20 20 20 20 20  iority..        
59f0: 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
5a00: 20 6f 66 20 74 68 69 73 20 6d 65 73 73 61 67 65   of this message
5a10: 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20 77 68   is less than wh
5a20: 61 74 20 77 65 20 63 75 72 72 65 6e 74 6c 79 20  at we currently 
5a30: 77 61 6e 74 20 74 6f 0d 0a 20 20 20 20 20 20 20  want to..       
5a40: 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
5a50: 20 20 74 72 61 63 65 2c 20 73 6b 69 70 20 69 74    trace, skip it
5a60: 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
5a70: 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
5a80: 20 20 20 20 20 20 20 69 66 20 28 28 74 72 61 63         if ((trac
5a90: 65 43 61 6c 6c 62 61 63 6b 20 21 3d 20 6e 75 6c  eCallback != nul
5aa0: 6c 29 20 26 26 0d 0a 20 20 20 20 20 20 20 20 20  l) &&..         
5ab0: 20 20 20 20 20 20 20 20 20 20 20 28 74 72 61 63             (trac
5ac0: 65 50 72 69 6f 72 69 74 79 20 3e 3d 20 54 72 61  ePriority >= Tra
5ad0: 63 65 50 72 69 6f 72 69 74 79 29 29 0d 0a 20 20  cePriority))..  
5ae0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
5af0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
5b00: 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
5b10: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
5b20: 4e 4f 54 45 3a 20 49 6e 76 6f 6b 65 20 74 68 65  NOTE: Invoke the
5b30: 20 74 72 61 63 65 20 63 61 6c 6c 62 61 63 6b 20   trace callback 
5b40: 77 69 74 68 20 74 68 65 20 66 6f 72 6d 61 74 74  with the formatt
5b50: 65 64 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ed..            
5b60: 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
5b70: 20 6d 65 73 73 61 67 65 20 61 6e 64 20 74 68 65   message and the
5b80: 20 63 61 74 65 67 6f 72 79 20 73 70 65 63 69 66   category specif
5b90: 69 65 64 20 62 79 20 74 68 65 0d 0a 20 20 20 20  ied by the..    
5ba0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5bb0: 2f 2f 20 20 20 20 20 20 20 63 61 6c 6c 65 72 2e  //       caller.
5bc0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
5bd0: 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
5be0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
5bf0: 61 63 65 43 61 6c 6c 62 61 63 6b 28 66 6f 72 6d  aceCallback(form
5c00: 61 74 74 65 64 2c 20 63 61 74 65 67 6f 72 79 29  atted, category)
5c10: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
5c20: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
5c30: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6d          return m
5c40: 65 73 73 61 67 65 3b 0d 0a 20 20 20 20 20 20 20  essage;..       
5c50: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
5c60: 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
5c70: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
5c80: 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
5c90: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
5ca0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5cb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5cc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5cd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5ce0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67  ....        #reg
5cf0: 69 6f 6e 20 4d 6f 63 6b 52 65 67 69 73 74 72 79  ion MockRegistry
5d00: 20 43 6c 61 73 73 0d 0a 20 20 20 20 20 20 20 20   Class..        
5d10: 70 72 69 76 61 74 65 20 73 65 61 6c 65 64 20 63  private sealed c
5d20: 6c 61 73 73 20 4d 6f 63 6b 52 65 67 69 73 74 72  lass MockRegistr
5d30: 79 20 3a 20 49 44 69 73 70 6f 73 61 62 6c 65 0d  y : IDisposable.
5d40: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
5d50: 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20          #region 
5d60: 50 75 62 6c 69 63 20 43 6f 6e 73 74 72 75 63 74  Public Construct
5d70: 6f 72 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ors..           
5d80: 20 70 75 62 6c 69 63 20 4d 6f 63 6b 52 65 67 69   public MockRegi
5d90: 73 74 72 79 28 29 0d 0a 20 20 20 20 20 20 20 20  stry()..        
5da0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
5db0: 20 20 20 20 20 20 20 77 68 61 74 49 66 20 3d 20         whatIf = 
5dc0: 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  true;..         
5dd0: 20 20 20 20 20 20 20 72 65 61 64 4f 6e 6c 79 20         readOnly 
5de0: 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20  = true;..       
5df0: 20 20 20 20 20 20 20 20 20 73 61 66 65 20 3d 20           safe = 
5e00: 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  true;..         
5e10: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
5e20: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
5e30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5e40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5e50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5e60: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
5e70: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 4d 6f         public Mo
5e80: 63 6b 52 65 67 69 73 74 72 79 28 0d 0a 20 20 20  ckRegistry(..   
5e90: 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f               boo
5ea0: 6c 20 77 68 61 74 49 66 0d 0a 20 20 20 20 20 20  l whatIf..      
5eb0: 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
5ec0: 20 20 20 20 20 20 20 20 20 20 20 20 20 3a 20 74               : t
5ed0: 68 69 73 28 29 0d 0a 20 20 20 20 20 20 20 20 20  his()..         
5ee0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
5ef0: 20 20 20 20 20 20 74 68 69 73 2e 77 68 61 74 49        this.whatI
5f00: 66 20 3d 20 77 68 61 74 49 66 3b 0d 0a 20 20 20  f = whatIf;..   
5f10: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
5f20: 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
5f30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5f40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5f50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5f60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
5f70: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
5f80: 6c 69 63 20 4d 6f 63 6b 52 65 67 69 73 74 72 79  lic MockRegistry
5f90: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
5fa0: 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d     bool whatIf,.
5fb0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
5fc0: 20 62 6f 6f 6c 20 72 65 61 64 4f 6e 6c 79 0d 0a   bool readOnly..
5fd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5fe0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
5ff0: 20 20 20 3a 20 74 68 69 73 28 77 68 61 74 49 66     : this(whatIf
6000: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
6010: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
6020: 20 20 74 68 69 73 2e 72 65 61 64 4f 6e 6c 79 20    this.readOnly 
6030: 3d 20 72 65 61 64 4f 6e 6c 79 3b 0d 0a 20 20 20  = readOnly;..   
6040: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
6050: 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
6060: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6070: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6080: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6090: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
60a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
60b0: 6c 69 63 20 4d 6f 63 6b 52 65 67 69 73 74 72 79  lic MockRegistry
60c0: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
60d0: 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d     bool whatIf,.
60e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
60f0: 20 62 6f 6f 6c 20 72 65 61 64 4f 6e 6c 79 2c 0d   bool readOnly,.
6100: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
6110: 20 62 6f 6f 6c 20 73 61 66 65 0d 0a 20 20 20 20   bool safe..    
6120: 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
6130: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3a                 :
6140: 20 74 68 69 73 28 77 68 61 74 49 66 2c 20 72 65   this(whatIf, re
6150: 61 64 4f 6e 6c 79 29 0d 0a 20 20 20 20 20 20 20  adOnly)..       
6160: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
6170: 20 20 20 20 20 20 20 20 74 68 69 73 2e 73 61 66          this.saf
6180: 65 20 3d 20 73 61 66 65 3b 0d 0a 20 20 20 20 20  e = safe;..     
6190: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
61a0: 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
61b0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
61c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
61d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
61e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
61f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6200: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
6210: 20 20 20 23 72 65 67 69 6f 6e 20 50 75 62 6c 69     #region Publi
6220: 63 20 50 72 6f 70 65 72 74 69 65 73 0d 0a 20 20  c Properties..  
6230: 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
6240: 65 20 62 6f 6f 6c 20 77 68 61 74 49 66 3b 0d 0a  e bool whatIf;..
6250: 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
6260: 69 63 20 62 6f 6f 6c 20 57 68 61 74 49 66 0d 0a  ic bool WhatIf..
6270: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
6280: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67                 g
6290: 65 74 20 7b 20 43 68 65 63 6b 44 69 73 70 6f 73  et { CheckDispos
62a0: 65 64 28 29 3b 20 72 65 74 75 72 6e 20 77 68 61  ed(); return wha
62b0: 74 49 66 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  tIf; }..        
62c0: 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 43 68          set { Ch
62d0: 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 20 77  eckDisposed(); w
62e0: 68 61 74 49 66 20 3d 20 76 61 6c 75 65 3b 20 7d  hatIf = value; }
62f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
6300: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
6310: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6320: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6330: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6340: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6350: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
6360: 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 72    private bool r
6370: 65 61 64 4f 6e 6c 79 3b 0d 0a 20 20 20 20 20 20  eadOnly;..      
6380: 20 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f        public boo
6390: 6c 20 52 65 61 64 4f 6e 6c 79 0d 0a 20 20 20 20  l ReadOnly..    
63a0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
63b0: 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b             get {
63c0: 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29   CheckDisposed()
63d0: 3b 20 72 65 74 75 72 6e 20 72 65 61 64 4f 6e 6c  ; return readOnl
63e0: 79 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  y; }..          
63f0: 20 20 20 20 20 20 73 65 74 20 7b 20 43 68 65 63        set { Chec
6400: 6b 44 69 73 70 6f 73 65 64 28 29 3b 20 72 65 61  kDisposed(); rea
6410: 64 4f 6e 6c 79 20 3d 20 76 61 6c 75 65 3b 20 7d  dOnly = value; }
6420: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
6430: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
6440: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6450: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6460: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6470: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6480: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
6490: 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 73    private bool s
64a0: 61 66 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  afe;..          
64b0: 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 53 61    public bool Sa
64c0: 66 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  fe..            
64d0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
64e0: 20 20 20 67 65 74 20 7b 20 43 68 65 63 6b 44 69     get { CheckDi
64f0: 73 70 6f 73 65 64 28 29 3b 20 72 65 74 75 72 6e  sposed(); return
6500: 20 73 61 66 65 3b 20 7d 0d 0a 20 20 20 20 20 20   safe; }..      
6510: 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20            set { 
6520: 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b  CheckDisposed();
6530: 20 73 61 66 65 20 3d 20 76 61 6c 75 65 3b 20 7d   safe = value; }
6540: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
6550: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
6560: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6570: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6580: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6590: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
65a0: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
65b0: 20 20 70 72 69 76 61 74 65 20 4d 6f 63 6b 52 65    private MockRe
65c0: 67 69 73 74 72 79 4b 65 79 20 63 6c 61 73 73 65  gistryKey classe
65d0: 73 52 6f 6f 74 3b 0d 0a 20 20 20 20 20 20 20 20  sRoot;..        
65e0: 20 20 20 20 70 75 62 6c 69 63 20 4d 6f 63 6b 52      public MockR
65f0: 65 67 69 73 74 72 79 4b 65 79 20 43 6c 61 73 73  egistryKey Class
6600: 65 73 52 6f 6f 74 0d 0a 20 20 20 20 20 20 20 20  esRoot..        
6610: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
6620: 20 20 20 20 20 20 20 67 65 74 0d 0a 20 20 20 20         get..    
6630: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
6640: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6650: 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64     CheckDisposed
6660: 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ();....         
6670: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 63             if (c
6680: 6c 61 73 73 65 73 52 6f 6f 74 20 3d 3d 20 6e 75  lassesRoot == nu
6690: 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
66a0: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
66b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
66c0: 20 20 20 20 63 6c 61 73 73 65 73 52 6f 6f 74 20      classesRoot 
66d0: 3d 20 6e 65 77 20 4d 6f 63 6b 52 65 67 69 73 74  = new MockRegist
66e0: 72 79 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20  ryKey(..        
66f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6700: 20 20 20 20 52 65 67 69 73 74 72 79 2e 43 6c 61      Registry.Cla
6710: 73 73 65 73 52 6f 6f 74 2c 20 77 68 61 74 49 66  ssesRoot, whatIf
6720: 2c 20 72 65 61 64 4f 6e 6c 79 2c 20 73 61 66 65  , readOnly, safe
6730: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
6740: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
6750: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6760: 20 72 65 74 75 72 6e 20 63 6c 61 73 73 65 73 52   return classesR
6770: 6f 6f 74 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  oot;..          
6780: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
6790: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
67a0: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
67b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
67c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
67d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
67e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
67f0: 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65           private
6800: 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79   MockRegistryKey
6810: 20 63 75 72 72 65 6e 74 43 6f 6e 66 69 67 3b 0d   currentConfig;.
6820: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
6830: 6c 69 63 20 4d 6f 63 6b 52 65 67 69 73 74 72 79  lic MockRegistry
6840: 4b 65 79 20 43 75 72 72 65 6e 74 43 6f 6e 66 69  Key CurrentConfi
6850: 67 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  g..            {
6860: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
6870: 20 20 67 65 74 0d 0a 20 20 20 20 20 20 20 20 20    get..         
6880: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
6890: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43 68                Ch
68a0: 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a  eckDisposed();..
68b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
68c0: 20 20 20 20 20 20 69 66 20 28 63 75 72 72 65 6e        if (curren
68d0: 74 43 6f 6e 66 69 67 20 3d 3d 20 6e 75 6c 6c 29  tConfig == null)
68e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
68f0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
6900: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6910: 20 63 75 72 72 65 6e 74 43 6f 6e 66 69 67 20 3d   currentConfig =
6920: 20 6e 65 77 20 4d 6f 63 6b 52 65 67 69 73 74 72   new MockRegistr
6930: 79 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20  yKey(..         
6940: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6950: 20 20 20 52 65 67 69 73 74 72 79 2e 43 75 72 72     Registry.Curr
6960: 65 6e 74 43 6f 6e 66 69 67 2c 20 77 68 61 74 49  entConfig, whatI
6970: 66 2c 20 72 65 61 64 4f 6e 6c 79 2c 20 73 61 66  f, readOnly, saf
6980: 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e);..           
6990: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
69a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
69b0: 20 20 72 65 74 75 72 6e 20 63 75 72 72 65 6e 74    return current
69c0: 43 6f 6e 66 69 67 3b 0d 0a 20 20 20 20 20 20 20  Config;..       
69d0: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
69e0: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
69f0: 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
6a00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6a10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6a20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6a30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
6a40: 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76              priv
6a50: 61 74 65 20 4d 6f 63 6b 52 65 67 69 73 74 72 79  ate MockRegistry
6a60: 4b 65 79 20 63 75 72 72 65 6e 74 55 73 65 72 3b  Key currentUser;
6a70: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
6a80: 62 6c 69 63 20 4d 6f 63 6b 52 65 67 69 73 74 72  blic MockRegistr
6a90: 79 4b 65 79 20 43 75 72 72 65 6e 74 55 73 65 72  yKey CurrentUser
6aa0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
6ab0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
6ac0: 20 67 65 74 0d 0a 20 20 20 20 20 20 20 20 20 20   get..          
6ad0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
6ae0: 20 20 20 20 20 20 20 20 20 20 20 20 20 43 68 65               Che
6af0: 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 0d  ckDisposed();...
6b00: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
6b10: 20 20 20 20 20 69 66 20 28 63 75 72 72 65 6e 74       if (current
6b20: 55 73 65 72 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  User == null).. 
6b30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6b40: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
6b50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 75                cu
6b60: 72 72 65 6e 74 55 73 65 72 20 3d 20 6e 65 77 20  rrentUser = new 
6b70: 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 28  MockRegistryKey(
6b80: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
6b90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65                Re
6ba0: 67 69 73 74 72 79 2e 43 75 72 72 65 6e 74 55 73  gistry.CurrentUs
6bb0: 65 72 2c 20 77 68 61 74 49 66 2c 20 72 65 61 64  er, whatIf, read
6bc0: 4f 6e 6c 79 2c 20 73 61 66 65 29 3b 0d 0a 20 20  Only, safe);..  
6bd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6be0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
6bf0: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
6c00: 6e 20 63 75 72 72 65 6e 74 55 73 65 72 3b 0d 0a  n currentUser;..
6c10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6c20: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
6c30: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
6c40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6c50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6c60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6c70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6c80: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
6c90: 20 20 20 70 72 69 76 61 74 65 20 4d 6f 63 6b 52     private MockR
6ca0: 65 67 69 73 74 72 79 4b 65 79 20 64 79 6e 44 61  egistryKey dynDa
6cb0: 74 61 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ta;..           
6cc0: 20 70 75 62 6c 69 63 20 4d 6f 63 6b 52 65 67 69   public MockRegi
6cd0: 73 74 72 79 4b 65 79 20 44 79 6e 44 61 74 61 0d  stryKey DynData.
6ce0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
6cf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6d00: 67 65 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20  get..           
6d10: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
6d20: 20 20 20 20 20 20 20 20 20 20 20 20 43 68 65 63              Chec
6d30: 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 0d 0a  kDisposed();....
6d40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6d50: 20 20 20 20 69 66 20 28 64 79 6e 44 61 74 61 20      if (dynData 
6d60: 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
6d70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
6d80: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
6d90: 20 20 20 20 20 20 20 20 20 64 79 6e 44 61 74 61           dynData
6da0: 20 3d 20 6e 65 77 20 4d 6f 63 6b 52 65 67 69 73   = new MockRegis
6db0: 74 72 79 4b 65 79 28 0d 0a 20 20 20 20 20 20 20  tryKey(..       
6dc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6dd0: 20 20 20 20 20 52 65 67 69 73 74 72 79 2e 44 79       Registry.Dy
6de0: 6e 44 61 74 61 2c 20 77 68 61 74 49 66 2c 20 72  nData, whatIf, r
6df0: 65 61 64 4f 6e 6c 79 2c 20 73 61 66 65 29 3b 0d  eadOnly, safe);.
6e00: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
6e10: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
6e20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
6e30: 74 75 72 6e 20 64 79 6e 44 61 74 61 3b 0d 0a 20  turn dynData;.. 
6e40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
6e50: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
6e60: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
6e70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6e80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6e90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6ea0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6eb0: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
6ec0: 20 20 70 72 69 76 61 74 65 20 4d 6f 63 6b 52 65    private MockRe
6ed0: 67 69 73 74 72 79 4b 65 79 20 6c 6f 63 61 6c 4d  gistryKey localM
6ee0: 61 63 68 69 6e 65 3b 0d 0a 20 20 20 20 20 20 20  achine;..       
6ef0: 20 20 20 20 20 70 75 62 6c 69 63 20 4d 6f 63 6b       public Mock
6f00: 52 65 67 69 73 74 72 79 4b 65 79 20 4c 6f 63 61  RegistryKey Loca
6f10: 6c 4d 61 63 68 69 6e 65 0d 0a 20 20 20 20 20 20  lMachine..      
6f20: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
6f30: 20 20 20 20 20 20 20 20 20 67 65 74 0d 0a 20 20           get..  
6f40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
6f50: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
6f60: 20 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73       CheckDispos
6f70: 65 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ed();....       
6f80: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
6f90: 28 6c 6f 63 61 6c 4d 61 63 68 69 6e 65 20 3d 3d  (localMachine ==
6fa0: 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
6fb0: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
6fc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6fd0: 20 20 20 20 20 20 20 6c 6f 63 61 6c 4d 61 63 68         localMach
6fe0: 69 6e 65 20 3d 20 6e 65 77 20 4d 6f 63 6b 52 65  ine = new MockRe
6ff0: 67 69 73 74 72 79 4b 65 79 28 0d 0a 20 20 20 20  gistryKey(..    
7000: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7010: 20 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79          Registry
7020: 2e 4c 6f 63 61 6c 4d 61 63 68 69 6e 65 2c 20 77  .LocalMachine, w
7030: 68 61 74 49 66 2c 20 72 65 61 64 4f 6e 6c 79 2c  hatIf, readOnly,
7040: 20 73 61 66 65 29 3b 0d 0a 20 20 20 20 20 20 20   safe);..       
7050: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
7060: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
7070: 20 20 20 20 20 20 72 65 74 75 72 6e 20 6c 6f 63        return loc
7080: 61 6c 4d 61 63 68 69 6e 65 3b 0d 0a 20 20 20 20  alMachine;..    
7090: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
70a0: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
70b0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
70c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
70d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
70e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
70f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
7100: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
7110: 72 69 76 61 74 65 20 4d 6f 63 6b 52 65 67 69 73  rivate MockRegis
7120: 74 72 79 4b 65 79 20 70 65 72 66 6f 72 6d 61 6e  tryKey performan
7130: 63 65 44 61 74 61 3b 0d 0a 20 20 20 20 20 20 20  ceData;..       
7140: 20 20 20 20 20 70 75 62 6c 69 63 20 4d 6f 63 6b       public Mock
7150: 52 65 67 69 73 74 72 79 4b 65 79 20 50 65 72 66  RegistryKey Perf
7160: 6f 72 6d 61 6e 63 65 44 61 74 61 0d 0a 20 20 20  ormanceData..   
7170: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
7180: 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74 0d              get.
7190: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
71a0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
71b0: 20 20 20 20 20 20 20 20 43 68 65 63 6b 44 69 73          CheckDis
71c0: 70 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20 20 20 20  posed();....    
71d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
71e0: 69 66 20 28 70 65 72 66 6f 72 6d 61 6e 63 65 44  if (performanceD
71f0: 61 74 61 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  ata == null)..  
7200: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7210: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
7220: 20 20 20 20 20 20 20 20 20 20 20 20 20 70 65 72               per
7230: 66 6f 72 6d 61 6e 63 65 44 61 74 61 20 3d 20 6e  formanceData = n
7240: 65 77 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b  ew MockRegistryK
7250: 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ey(..           
7260: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7270: 20 52 65 67 69 73 74 72 79 2e 50 65 72 66 6f 72   Registry.Perfor
7280: 6d 61 6e 63 65 44 61 74 61 2c 20 77 68 61 74 49  manceData, whatI
7290: 66 2c 20 72 65 61 64 4f 6e 6c 79 2c 20 73 61 66  f, readOnly, saf
72a0: 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e);..           
72b0: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
72c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
72d0: 20 20 72 65 74 75 72 6e 20 70 65 72 66 6f 72 6d    return perform
72e0: 61 6e 63 65 44 61 74 61 3b 0d 0a 20 20 20 20 20  anceData;..     
72f0: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
7300: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
7310: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
7320: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7330: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7340: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7350: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
7360: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
7370: 69 76 61 74 65 20 4d 6f 63 6b 52 65 67 69 73 74  ivate MockRegist
7380: 72 79 4b 65 79 20 75 73 65 72 73 3b 0d 0a 20 20  ryKey users;..  
7390: 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
73a0: 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79   MockRegistryKey
73b0: 20 55 73 65 72 73 0d 0a 20 20 20 20 20 20 20 20   Users..        
73c0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
73d0: 20 20 20 20 20 20 20 67 65 74 0d 0a 20 20 20 20         get..    
73e0: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
73f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7400: 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64     CheckDisposed
7410: 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ();....         
7420: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 75             if (u
7430: 73 65 72 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  sers == null).. 
7440: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7450: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
7460: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 75 73                us
7470: 65 72 73 20 3d 20 6e 65 77 20 4d 6f 63 6b 52 65  ers = new MockRe
7480: 67 69 73 74 72 79 4b 65 79 28 0d 0a 20 20 20 20  gistryKey(..    
7490: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
74a0: 20 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79          Registry
74b0: 2e 55 73 65 72 73 2c 20 77 68 61 74 49 66 2c 20  .Users, whatIf, 
74c0: 72 65 61 64 4f 6e 6c 79 2c 20 73 61 66 65 29 3b  readOnly, safe);
74d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
74e0: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
74f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
7500: 65 74 75 72 6e 20 75 73 65 72 73 3b 0d 0a 20 20  eturn users;..  
7510: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
7520: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
7530: 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e 64              #end
7540: 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20  region....      
7550: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
7560: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7570: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7580: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7590: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
75a0: 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e           #region
75b0: 20 50 75 62 6c 69 63 20 22 52 65 67 69 73 74 72   Public "Registr
75c0: 79 22 20 4d 65 74 68 6f 64 73 0d 0a 23 69 66 20  y" Methods..#if 
75d0: 66 61 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20  false..         
75e0: 20 20 20 70 75 62 6c 69 63 20 6f 62 6a 65 63 74     public object
75f0: 20 47 65 74 56 61 6c 75 65 28 0d 0a 20 20 20 20   GetValue(..    
7600: 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
7610: 6e 67 20 6b 65 79 4e 61 6d 65 2c 0d 0a 20 20 20  ng keyName,..   
7620: 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72               str
7630: 69 6e 67 20 76 61 6c 75 65 4e 61 6d 65 2c 0d 0a  ing valueName,..
7640: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7650: 6f 62 6a 65 63 74 20 64 65 66 61 75 6c 74 56 61  object defaultVa
7660: 6c 75 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  lue..           
7670: 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
7680: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
7690: 20 20 20 20 20 20 20 43 68 65 63 6b 44 69 73 70         CheckDisp
76a0: 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20  osed();....     
76b0: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
76c0: 6e 20 52 65 67 69 73 74 72 79 2e 47 65 74 56 61  n Registry.GetVa
76d0: 6c 75 65 28 6b 65 79 4e 61 6d 65 2c 20 76 61 6c  lue(keyName, val
76e0: 75 65 4e 61 6d 65 2c 20 64 65 66 61 75 6c 74 56  ueName, defaultV
76f0: 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20  alue);..        
7700: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
7710: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
7720: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7730: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7740: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7750: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
7760: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 76          public v
7770: 6f 69 64 20 53 65 74 56 61 6c 75 65 28 0d 0a 20  oid SetValue(.. 
7780: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
7790: 74 72 69 6e 67 20 6b 65 79 4e 61 6d 65 2c 0d 0a  tring keyName,..
77a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
77b0: 73 74 72 69 6e 67 20 76 61 6c 75 65 4e 61 6d 65  string valueName
77c0: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
77d0: 20 20 20 6f 62 6a 65 63 74 20 76 61 6c 75 65 0d     object value.
77e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
77f0: 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   )..            
7800: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
7810: 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64     CheckDisposed
7820: 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ();..           
7830: 20 20 20 20 20 43 68 65 63 6b 52 65 61 64 4f 6e       CheckReadOn
7840: 6c 79 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ly();....       
7850: 20 20 20 20 20 20 20 20 20 69 66 20 28 21 77 68           if (!wh
7860: 61 74 49 66 29 0d 0a 20 20 20 20 20 20 20 20 20  atIf)..         
7870: 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73             Regis
7880: 74 72 79 2e 53 65 74 56 61 6c 75 65 28 6b 65 79  try.SetValue(key
7890: 4e 61 6d 65 2c 20 76 61 6c 75 65 4e 61 6d 65 2c  Name, valueName,
78a0: 20 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20   value);..      
78b0: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
78c0: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
78d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
78e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
78f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7900: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
7910: 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
7920: 20 76 6f 69 64 20 53 65 74 56 61 6c 75 65 28 0d   void SetValue(.
7930: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
7940: 20 73 74 72 69 6e 67 20 6b 65 79 4e 61 6d 65 2c   string keyName,
7950: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
7960: 20 20 73 74 72 69 6e 67 20 76 61 6c 75 65 4e 61    string valueNa
7970: 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me,..           
7980: 20 20 20 20 20 6f 62 6a 65 63 74 20 76 61 6c 75       object valu
7990: 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
79a0: 20 20 20 20 52 65 67 69 73 74 72 79 56 61 6c 75      RegistryValu
79b0: 65 4b 69 6e 64 20 76 61 6c 75 65 4b 69 6e 64 0d  eKind valueKind.
79c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
79d0: 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   )..            
79e0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
79f0: 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64     CheckDisposed
7a00: 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ();..           
7a10: 20 20 20 20 20 43 68 65 63 6b 52 65 61 64 4f 6e       CheckReadOn
7a20: 6c 79 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ly();....       
7a30: 20 20 20 20 20 20 20 20 20 69 66 20 28 21 77 68           if (!wh
7a40: 61 74 49 66 29 0d 0a 20 20 20 20 20 20 20 20 20  atIf)..         
7a50: 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73             Regis
7a60: 74 72 79 2e 53 65 74 56 61 6c 75 65 28 6b 65 79  try.SetValue(key
7a70: 4e 61 6d 65 2c 20 76 61 6c 75 65 4e 61 6d 65 2c  Name, valueName,
7a80: 20 76 61 6c 75 65 2c 20 76 61 6c 75 65 4b 69 6e   value, valueKin
7a90: 64 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  d);..           
7aa0: 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20   }..#endif..    
7ab0: 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
7ac0: 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  on....          
7ad0: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
7ae0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7af0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7b00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7b10: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
7b20: 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50 72 69       #region Pri
7b30: 76 61 74 65 20 4d 65 74 68 6f 64 73 0d 0a 20 20  vate Methods..  
7b40: 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
7b50: 65 20 76 6f 69 64 20 43 68 65 63 6b 52 65 61 64  e void CheckRead
7b60: 4f 6e 6c 79 28 29 0d 0a 20 20 20 20 20 20 20 20  Only()..        
7b70: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
7b80: 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
7b90: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f             // NO
7ba0: 54 45 3a 20 49 6e 20 22 72 65 61 64 2d 6f 6e 6c  TE: In "read-onl
7bb0: 79 22 20 6d 6f 64 65 2c 20 77 65 20 64 69 73 61  y" mode, we disa
7bc0: 6c 6c 6f 77 20 61 6c 6c 20 77 72 69 74 65 20 61  llow all write a
7bd0: 63 63 65 73 73 2e 0d 0a 20 20 20 20 20 20 20 20  ccess...        
7be0: 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
7bf0: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
7c00: 21 72 65 61 64 4f 6e 6c 79 29 0d 0a 20 20 20 20  !readOnly)..    
7c10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7c20: 72 65 74 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20  return;....     
7c30: 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77             throw
7c40: 20 6e 65 77 20 49 6e 76 61 6c 69 64 4f 70 65 72   new InvalidOper
7c50: 61 74 69 6f 6e 45 78 63 65 70 74 69 6f 6e 28 29  ationException()
7c60: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
7c70: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 65  ..            #e
7c80: 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20  ndregion....    
7c90: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
7ca0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7cb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20  ///////////.... 
7ce0: 20 20 20 20 20 20 20 20 20 20 20 23 72 65 67 69             #regi
7cf0: 6f 6e 20 49 44 69 73 70 6f 73 61 62 6c 65 20 22  on IDisposable "
7d00: 50 61 74 74 65 72 6e 22 20 4d 65 6d 62 65 72 73  Pattern" Members
7d10: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
7d20: 69 76 61 74 65 20 62 6f 6f 6c 20 64 69 73 70 6f  ivate bool dispo
7d30: 73 65 64 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  sed;..          
7d40: 20 20 70 72 69 76 61 74 65 20 76 6f 69 64 20 43    private void C
7d50: 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 20 2f  heckDisposed() /
7d60: 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a 20 20 20 20  * throw */..    
7d70: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
7d80: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21             if (!
7d90: 64 69 73 70 6f 73 65 64 29 0d 0a 20 20 20 20 20  disposed)..     
7da0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
7db0: 65 74 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20  eturn;....      
7dc0: 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20            throw 
7dd0: 6e 65 77 20 4f 62 6a 65 63 74 44 69 73 70 6f 73  new ObjectDispos
7de0: 65 64 45 78 63 65 70 74 69 6f 6e 28 0d 0a 20 20  edException(..  
7df0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7e00: 20 20 74 79 70 65 6f 66 28 4d 6f 63 6b 52 65 67    typeof(MockReg
7e10: 69 73 74 72 79 29 2e 4e 61 6d 65 29 3b 0d 0a 20  istry).Name);.. 
7e20: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
7e30: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
7e40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7e50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7e60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7e70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
7e80: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
7e90: 72 69 76 61 74 65 20 2f 2a 20 70 72 6f 74 65 63  rivate /* protec
7ea0: 74 65 64 20 76 69 72 74 75 61 6c 20 2a 2f 20 76  ted virtual */ v
7eb0: 6f 69 64 20 44 69 73 70 6f 73 65 28 0d 0a 20 20  oid Dispose(..  
7ec0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f                bo
7ed0: 6f 6c 20 64 69 73 70 6f 73 69 6e 67 0d 0a 20 20  ol disposing..  
7ee0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d                ).
7ef0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
7f00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7f10: 69 66 20 28 21 64 69 73 70 6f 73 65 64 29 0d 0a  if (!disposed)..
7f20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7f30: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
7f40: 20 20 20 20 20 20 20 69 66 20 28 64 69 73 70 6f         if (dispo
7f50: 73 69 6e 67 29 0d 0a 20 20 20 20 20 20 20 20 20  sing)..         
7f60: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
7f70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7f80: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
7f90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7fa0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 20 20 20 20  //////////..    
7fb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7fc0: 20 20 20 20 2f 2f 20 64 69 73 70 6f 73 65 20 6d      // dispose m
7fd0: 61 6e 61 67 65 64 20 72 65 73 6f 75 72 63 65 73  anaged resources
7fe0: 20 68 65 72 65 2e 2e 2e 0d 0a 20 20 20 20 20 20   here.....      
7ff0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8000: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
8010: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8020: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
8030: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8040: 20 20 69 66 20 28 63 6c 61 73 73 65 73 52 6f 6f    if (classesRoo
8050: 74 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  t != null)..    
8060: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8070: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
8080: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8090: 20 20 20 63 6c 61 73 73 65 73 52 6f 6f 74 2e 43     classesRoot.C
80a0: 6c 6f 73 65 28 29 3b 0d 0a 20 20 20 20 20 20 20  lose();..       
80b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
80c0: 20 20 20 20 20 63 6c 61 73 73 65 73 52 6f 6f 74       classesRoot
80d0: 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20   = null;..      
80e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
80f0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
8100: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
8110: 66 20 28 63 75 72 72 65 6e 74 43 6f 6e 66 69 67  f (currentConfig
8120: 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   != null)..     
8130: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8140: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
8150: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8160: 20 20 63 75 72 72 65 6e 74 43 6f 6e 66 69 67 2e    currentConfig.
8170: 43 6c 6f 73 65 28 29 3b 0d 0a 20 20 20 20 20 20  Close();..      
8180: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8190: 20 20 20 20 20 20 63 75 72 72 65 6e 74 43 6f 6e        currentCon
81a0: 66 69 67 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20  fig = null;..   
81b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
81c0: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
81d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
81e0: 20 20 69 66 20 28 63 75 72 72 65 6e 74 55 73 65    if (currentUse
81f0: 72 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  r != null)..    
8200: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8210: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
8220: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8230: 20 20 20 63 75 72 72 65 6e 74 55 73 65 72 2e 43     currentUser.C
8240: 6c 6f 73 65 28 29 3b 0d 0a 20 20 20 20 20 20 20  lose();..       
8250: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8260: 20 20 20 20 20 63 75 72 72 65 6e 74 55 73 65 72       currentUser
8270: 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20   = null;..      
8280: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8290: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
82a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
82b0: 66 20 28 64 79 6e 44 61 74 61 20 21 3d 20 6e 75  f (dynData != nu
82c0: 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
82d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
82e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
82f0: 20 20 20 20 20 20 20 20 20 20 20 20 64 79 6e 44              dynD
8300: 61 74 61 2e 43 6c 6f 73 65 28 29 3b 0d 0a 20 20  ata.Close();..  
8310: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8320: 20 20 20 20 20 20 20 20 20 20 64 79 6e 44 61 74            dynDat
8330: 61 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20  a = null;..     
8340: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8350: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
8360: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8370: 69 66 20 28 6c 6f 63 61 6c 4d 61 63 68 69 6e 65  if (localMachine
8380: 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   != null)..     
8390: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
83a0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
83b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
83c0: 20 20 6c 6f 63 61 6c 4d 61 63 68 69 6e 65 2e 43    localMachine.C
83d0: 6c 6f 73 65 28 29 3b 0d 0a 20 20 20 20 20 20 20  lose();..       
83e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
83f0: 20 20 20 20 20 6c 6f 63 61 6c 4d 61 63 68 69 6e       localMachin
8400: 65 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20  e = null;..     
8410: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8420: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
8430: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8440: 69 66 20 28 70 65 72 66 6f 72 6d 61 6e 63 65 44  if (performanceD
8450: 61 74 61 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20  ata != null)..  
8460: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8470: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
8480: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8490: 20 20 20 20 20 70 65 72 66 6f 72 6d 61 6e 63 65       performance
84a0: 44 61 74 61 2e 43 6c 6f 73 65 28 29 3b 0d 0a 20  Data.Close();.. 
84b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
84c0: 20 20 20 20 20 20 20 20 20 20 20 70 65 72 66 6f             perfo
84d0: 72 6d 61 6e 63 65 44 61 74 61 20 3d 20 6e 75 6c  rmanceData = nul
84e0: 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l;..            
84f0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
8500: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
8510: 20 20 20 20 20 20 20 20 20 69 66 20 28 75 73 65           if (use
8520: 72 73 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  rs != null)..   
8530: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8540: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
8550: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8560: 20 20 20 20 75 73 65 72 73 2e 43 6c 6f 73 65 28      users.Close(
8570: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
8580: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8590: 75 73 65 72 73 20 3d 20 6e 75 6c 6c 3b 0d 0a 20  users = null;.. 
85a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
85b0: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
85c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
85d0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
85e0: 20 20 20 20 20 20 20 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 0d 0a 20  /////////////.. 
8610: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8620: 20 20 20 2f 2f 20 72 65 6c 65 61 73 65 20 75 6e     // release un
8630: 6d 61 6e 61 67 65 64 20 72 65 73 6f 75 72 63 65  managed resource
8640: 73 20 68 65 72 65 2e 2e 2e 0d 0a 20 20 20 20 20  s here.....     
8650: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
8660: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8670: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8680: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
8690: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
86a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
86b0: 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 54 68       // NOTE: Th
86c0: 69 73 20 6f 62 6a 65 63 74 20 69 73 20 6e 6f 77  is object is now
86d0: 20 64 69 73 70 6f 73 65 64 2e 0d 0a 20 20 20 20   disposed...    
86e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
86f0: 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
8700: 20 20 20 20 20 20 20 20 64 69 73 70 6f 73 65 64          disposed
8710: 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20   = true;..      
8720: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
8730: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
8740: 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
8750: 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  on....          
8760: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
8770: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8780: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8790: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
87a0: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
87b0: 20 20 20 20 20 23 72 65 67 69 6f 6e 20 49 44 69       #region IDi
87c0: 73 70 6f 73 61 62 6c 65 20 4d 65 6d 62 65 72 73  sposable Members
87d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
87e0: 62 6c 69 63 20 76 6f 69 64 20 44 69 73 70 6f 73  blic void Dispos
87f0: 65 28 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e()..           
8800: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
8810: 20 20 20 20 44 69 73 70 6f 73 65 28 74 72 75 65      Dispose(true
8820: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
8830: 20 20 20 20 47 43 2e 53 75 70 70 72 65 73 73 46      GC.SuppressF
8840: 69 6e 61 6c 69 7a 65 28 74 68 69 73 29 3b 0d 0a  inalize(this);..
8850: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
8860: 20 20 20 20 20 20 20 20 20 20 20 23 65 6e 64 72             #endr
8870: 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20  egion....       
8880: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
8890: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
88a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
88b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
88c0: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
88d0: 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20          #region 
88e0: 44 65 73 74 72 75 63 74 6f 72 0d 0a 20 20 20 20  Destructor..    
88f0: 20 20 20 20 20 20 20 20 7e 4d 6f 63 6b 52 65 67          ~MockReg
8900: 69 73 74 72 79 28 29 0d 0a 20 20 20 20 20 20 20  istry()..       
8910: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
8920: 20 20 20 20 20 20 20 20 44 69 73 70 6f 73 65 28          Dispose(
8930: 66 61 6c 73 65 29 3b 0d 0a 20 20 20 20 20 20 20  false);..       
8940: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
8950: 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
8960: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
8970: 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
8980: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
8990: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
89a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
89b0: 2f 2f 2f 2f 2f 2f 2f 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: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67  ....        #reg
89e0: 69 6f 6e 20 4d 6f 63 6b 52 65 67 69 73 74 72 79  ion MockRegistry
89f0: 4b 65 79 20 43 6c 61 73 73 0d 0a 20 20 20 20 20  Key Class..     
8a00: 20 20 20 69 6e 74 65 72 6e 61 6c 20 73 65 61 6c     internal seal
8a10: 65 64 20 63 6c 61 73 73 20 4d 6f 63 6b 52 65 67  ed class MockReg
8a20: 69 73 74 72 79 4b 65 79 20 3a 20 49 44 69 73 70  istryKey : IDisp
8a30: 6f 73 61 62 6c 65 0d 0a 20 20 20 20 20 20 20 20  osable..        
8a40: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  {..            #
8a50: 72 65 67 69 6f 6e 20 50 72 69 76 61 74 65 20 43  region Private C
8a60: 6f 6e 73 74 72 75 63 74 6f 72 73 0d 0a 20 20 20  onstructors..   
8a70: 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65           private
8a80: 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79   MockRegistryKey
8a90: 28 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ()..            
8aa0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
8ab0: 20 20 20 77 68 61 74 49 66 20 3d 20 74 72 75 65     whatIf = true
8ac0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
8ad0: 20 20 20 72 65 61 64 4f 6e 6c 79 20 3d 20 74 72     readOnly = tr
8ae0: 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
8af0: 20 20 20 20 20 73 61 66 65 20 3d 20 74 72 75 65       safe = true
8b00: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
8b10: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 65  ..            #e
8b20: 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20  ndregion....    
8b30: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
8b40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8b50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8b60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8b70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
8b80: 20 20 20 20 20 20 20 20 20 20 20 23 72 65 67 69             #regi
8b90: 6f 6e 20 50 75 62 6c 69 63 20 43 6f 6e 73 74 72  on Public Constr
8ba0: 75 63 74 6f 72 73 0d 0a 20 20 20 20 20 20 20 20  uctors..        
8bb0: 20 20 20 20 70 75 62 6c 69 63 20 4d 6f 63 6b 52      public MockR
8bc0: 65 67 69 73 74 72 79 4b 65 79 28 0d 0a 20 20 20  egistryKey(..   
8bd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67               Reg
8be0: 69 73 74 72 79 4b 65 79 20 6b 65 79 0d 0a 20 20  istryKey key..  
8bf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d                ).
8c00: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
8c10: 20 3a 20 74 68 69 73 28 29 0d 0a 20 20 20 20 20   : this()..     
8c20: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
8c30: 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 6b            this.k
8c40: 65 79 20 3d 20 6b 65 79 3b 0d 0a 20 20 20 20 20  ey = key;..     
8c50: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
8c60: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
8c70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8c80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8c90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8ca0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
8cb0: 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
8cc0: 63 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65  c MockRegistryKe
8cd0: 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y(..            
8ce0: 20 20 20 20 52 65 67 69 73 74 72 79 4b 65 79 20      RegistryKey 
8cf0: 6b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  key,..          
8d00: 20 20 20 20 20 20 73 74 72 69 6e 67 20 73 75 62        string sub
8d10: 4b 65 79 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20  KeyName..       
8d20: 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
8d30: 20 20 20 20 20 20 20 20 20 20 20 20 3a 20 74 68              : th
8d40: 69 73 28 6b 65 79 29 0d 0a 20 20 20 20 20 20 20  is(key)..       
8d50: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
8d60: 20 20 20 20 20 20 20 20 74 68 69 73 2e 73 75 62          this.sub
8d70: 4b 65 79 4e 61 6d 65 20 3d 20 73 75 62 4b 65 79  KeyName = subKey
8d80: 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  Name;..         
8d90: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
8da0: 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8dd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8de0: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
8df0: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 4d 6f         public Mo
8e00: 63 6b 52 65 67 69 73 74 72 79 4b 65 79 28 0d 0a  ckRegistryKey(..
8e10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8e20: 52 65 67 69 73 74 72 79 4b 65 79 20 6b 65 79 2c  RegistryKey key,
8e30: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
8e40: 20 20 73 74 72 69 6e 67 20 73 75 62 4b 65 79 4e    string subKeyN
8e50: 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ame,..          
8e60: 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49        bool whatI
8e70: 66 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  f..             
8e80: 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20     )..          
8e90: 20 20 20 20 20 20 3a 20 74 68 69 73 28 6b 65 79        : this(key
8ea0: 2c 20 73 75 62 4b 65 79 4e 61 6d 65 29 0d 0a 20  , subKeyName).. 
8eb0: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
8ec0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
8ed0: 69 73 2e 77 68 61 74 49 66 20 3d 20 77 68 61 74  is.whatIf = what
8ee0: 49 66 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  If;..           
8ef0: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
8f00: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
8f50: 20 20 20 20 20 70 75 62 6c 69 63 20 4d 6f 63 6b       public Mock
8f60: 52 65 67 69 73 74 72 79 4b 65 79 28 0d 0a 20 20  RegistryKey(..  
8f70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65                Re
8f80: 67 69 73 74 72 79 4b 65 79 20 6b 65 79 2c 0d 0a  gistryKey key,..
8f90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8fa0: 73 74 72 69 6e 67 20 73 75 62 4b 65 79 4e 61 6d  string subKeyNam
8fb0: 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
8fc0: 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c      bool whatIf,
8fd0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
8fe0: 20 20 62 6f 6f 6c 20 72 65 61 64 4f 6e 6c 79 0d    bool readOnly.
8ff0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
9000: 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   )..            
9010: 20 20 20 20 3a 20 74 68 69 73 28 6b 65 79 2c 20      : this(key, 
9020: 73 75 62 4b 65 79 4e 61 6d 65 2c 20 77 68 61 74  subKeyName, what
9030: 49 66 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  If)..           
9040: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
9050: 20 20 20 20 74 68 69 73 2e 72 65 61 64 4f 6e 6c      this.readOnl
9060: 79 20 3d 20 72 65 61 64 4f 6e 6c 79 3b 0d 0a 20  y = readOnly;.. 
9070: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
9080: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
9090: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
90a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
90b0: 2f 2f 2f 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 0d  ///////////////.
90d0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
90e0: 75 62 6c 69 63 20 4d 6f 63 6b 52 65 67 69 73 74  ublic MockRegist
90f0: 72 79 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20  ryKey(..        
9100: 20 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79          Registry
9110: 4b 65 79 20 6b 65 79 2c 0d 0a 20 20 20 20 20 20  Key key,..      
9120: 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
9130: 20 73 75 62 4b 65 79 4e 61 6d 65 2c 0d 0a 20 20   subKeyName,..  
9140: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f                bo
9150: 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20  ol whatIf,..    
9160: 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
9170: 20 72 65 61 64 4f 6e 6c 79 2c 0d 0a 20 20 20 20   readOnly,..    
9180: 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
9190: 20 73 61 66 65 0d 0a 20 20 20 20 20 20 20 20 20   safe..         
91a0: 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
91b0: 20 20 20 20 20 20 20 20 20 20 3a 20 74 68 69 73            : this
91c0: 28 6b 65 79 2c 20 73 75 62 4b 65 79 4e 61 6d 65  (key, subKeyName
91d0: 2c 20 77 68 61 74 49 66 2c 20 72 65 61 64 4f 6e  , whatIf, readOn
91e0: 6c 79 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ly)..           
91f0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
9200: 20 20 20 20 74 68 69 73 2e 73 61 66 65 20 3d 20      this.safe = 
9210: 73 61 66 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  safe;..         
9220: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
9230: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
9240: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9250: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9260: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9270: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
9280: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 4d 6f         public Mo
9290: 63 6b 52 65 67 69 73 74 72 79 4b 65 79 28 0d 0a  ckRegistryKey(..
92a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
92b0: 52 65 67 69 73 74 72 79 4b 65 79 20 6b 65 79 2c  RegistryKey key,
92c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
92d0: 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 0d 0a 20    bool whatIf.. 
92e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29                 )
92f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
9300: 20 20 3a 20 74 68 69 73 28 6b 65 79 2c 20 6e 75    : this(key, nu
9310: 6c 6c 2c 20 77 68 61 74 49 66 29 0d 0a 20 20 20  ll, whatIf)..   
9320: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
9330: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64              // d
9340: 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20  o nothing...    
9350: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
9360: 20 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f  ////////////////
9390: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
93a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
93b0: 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
93c0: 69 63 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b  ic MockRegistryK
93d0: 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ey(..           
93e0: 20 20 20 20 20 52 65 67 69 73 74 72 79 4b 65 79       RegistryKey
93f0: 20 6b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20   key,..         
9400: 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74         bool what
9410: 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  If,..           
9420: 20 20 20 20 20 62 6f 6f 6c 20 72 65 61 64 4f 6e       bool readOn
9430: 6c 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ly..            
9440: 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20      )..         
9450: 20 20 20 20 20 20 20 3a 20 74 68 69 73 28 6b 65         : this(ke
9460: 79 2c 20 6e 75 6c 6c 2c 20 77 68 61 74 49 66 2c  y, null, whatIf,
9470: 20 72 65 61 64 4f 6e 6c 79 29 0d 0a 20 20 20 20   readOnly)..    
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 0d 0a 20 20 20 20         }....    
94c0: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
94d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
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 0d 0a 0d 0a 20  ///////////.... 
9510: 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
9520: 63 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65  c MockRegistryKe
9530: 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y(..            
9540: 20 20 20 20 52 65 67 69 73 74 72 79 4b 65 79 20      RegistryKey 
9550: 6b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  key,..          
9560: 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49        bool whatI
9570: 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  f,..            
9580: 20 20 20 20 62 6f 6f 6c 20 72 65 61 64 4f 6e 6c      bool readOnl
9590: 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y,..            
95a0: 20 20 20 20 62 6f 6f 6c 20 73 61 66 65 0d 0a 20      bool safe.. 
95b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29                 )
95c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
95d0: 20 20 3a 20 74 68 69 73 28 6b 65 79 2c 20 6e 75    : this(key, nu
95e0: 6c 6c 2c 20 77 68 61 74 49 66 2c 20 72 65 61 64  ll, whatIf, read
95f0: 4f 6e 6c 79 2c 20 73 61 66 65 29 0d 0a 20 20 20  Only, safe)..   
9600: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
9610: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64              // d
9620: 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20  o nothing...    
9630: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
9640: 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f         #endregio
9650: 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n....           
9660: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
96b0: 20 20 20 20 23 72 65 67 69 6f 6e 20 50 75 62 6c      #region Publ
96c0: 69 63 20 4d 65 74 68 6f 64 73 0d 0a 20 20 20 20  ic Methods..    
96d0: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 76          public v
96e0: 6f 69 64 20 43 6c 6f 73 65 28 29 0d 0a 20 20 20  oid Close()..   
96f0: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
9700: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
9710: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9720: 2f 2f 20 4e 4f 54 45 3a 20 4e 6f 20 64 69 73 70  // NOTE: No disp
9730: 6f 73 65 64 20 63 68 65 63 6b 20 68 65 72 65 20  osed check here 
9740: 62 65 63 61 75 73 65 20 63 61 6c 6c 69 6e 67 20  because calling 
9750: 74 68 69 73 20 6d 65 74 68 6f 64 0d 0a 20 20 20  this method..   
9760: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
9770: 20 20 20 20 20 20 73 68 6f 75 6c 64 20 62 65 20        should be 
9780: 6a 75 73 74 20 6c 69 6b 65 20 63 61 6c 6c 69 6e  just like callin
9790: 67 20 44 69 73 70 6f 73 65 2e 0d 0a 20 20 20 20  g Dispose...    
97a0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
97b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
97c0: 44 69 73 70 6f 73 65 28 74 72 75 65 29 3b 0d 0a  Dispose(true);..
97d0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
97e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
97f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9800: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9810: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9820: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9830: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
9840: 70 75 62 6c 69 63 20 4d 6f 63 6b 52 65 67 69 73  public MockRegis
9850: 74 72 79 4b 65 79 20 43 72 65 61 74 65 53 75 62  tryKey CreateSub
9860: 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20  Key(..          
9870: 20 20 20 20 20 20 73 74 72 69 6e 67 20 73 75 62        string sub
9880: 4b 65 79 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20  KeyName..       
9890: 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
98a0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
98b0: 20 20 20 20 20 20 20 20 20 20 20 43 68 65 63 6b             Check
98c0: 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 20 20 20  Disposed();..   
98d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 43 68 65               Che
98e0: 63 6b 52 65 61 64 4f 6e 6c 79 28 29 3b 0d 0a 0d  ckReadOnly();...
98f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
9900: 20 69 66 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c   if (key == null
9910: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
9920: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 75         return nu
9930: 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ll;....         
9940: 20 20 20 20 20 20 20 69 66 20 28 77 68 61 74 49         if (whatI
9950: 66 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  f)..            
9960: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
9970: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
9980: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9990: 20 20 20 2f 2f 20 48 41 43 4b 3a 20 41 74 74 65     // HACK: Atte
99a0: 6d 70 74 20 74 6f 20 6f 70 65 6e 20 74 68 65 20  mpt to open the 
99b0: 73 70 65 63 69 66 69 65 64 20 73 75 62 2d 6b 65  specified sub-ke
99c0: 79 2e 20 20 49 66 20 74 68 69 73 0d 0a 20 20 20  y.  If this..   
99d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
99e0: 20 2f 2f 20 20 20 20 20 20 20 66 61 69 6c 73 2c   //       fails,
99f0: 20 77 65 20 77 69 6c 6c 20 73 69 6d 70 6c 79 20   we will simply 
9a00: 72 65 74 75 72 6e 20 74 68 65 20 77 72 61 70 70  return the wrapp
9a10: 65 64 20 72 6f 6f 74 20 6b 65 79 0d 0a 20 20 20  ed root key..   
9a20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9a30: 20 2f 2f 20 20 20 20 20 20 20 69 74 73 65 6c 66   //       itself
9a40: 20 73 69 6e 63 65 20 6e 6f 20 77 72 69 74 65 73   since no writes
9a50: 20 61 72 65 20 61 6c 6c 6f 77 65 64 20 69 6e 20   are allowed in 
9a60: 22 77 68 61 74 2d 69 66 22 0d 0a 20 20 20 20 20  "what-if"..     
9a70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
9a80: 2f 20 20 20 20 20 20 20 6d 6f 64 65 20 61 6e 79  /       mode any
9a90: 68 6f 77 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  how...          
9aa0: 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
9ab0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9ac0: 20 20 52 65 67 69 73 74 72 79 4b 65 79 20 73 75    RegistryKey su
9ad0: 62 4b 65 79 20 3d 20 6b 65 79 2e 4f 70 65 6e 53  bKey = key.OpenS
9ae0: 75 62 4b 65 79 28 73 75 62 4b 65 79 4e 61 6d 65  ubKey(subKeyName
9af0: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
9b00: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 73 75            if (su
9b10: 62 4b 65 79 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20  bKey != null).. 
9b20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9b30: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
9b40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
9b50: 74 75 72 6e 20 6e 65 77 20 4d 6f 63 6b 52 65 67  turn new MockReg
9b60: 69 73 74 72 79 4b 65 79 28 0d 0a 20 20 20 20 20  istryKey(..     
9b70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9b80: 20 20 20 20 20 20 20 73 75 62 4b 65 79 2c 20 77         subKey, w
9b90: 68 61 74 49 66 2c 20 72 65 61 64 4f 6e 6c 79 2c  hatIf, readOnly,
9ba0: 20 73 61 66 65 29 3b 0d 0a 20 20 20 20 20 20 20   safe);..       
9bb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
9bc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9bd0: 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20      else..      
9be0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
9bf0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
9c00: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
9c10: 6e 65 77 20 4d 6f 63 6b 52 65 67 69 73 74 72 79  new MockRegistry
9c20: 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20  Key(..          
9c30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9c40: 20 20 6b 65 79 2c 20 73 75 62 4b 65 79 4e 61 6d    key, subKeyNam
9c50: 65 2c 20 77 68 61 74 49 66 2c 20 72 65 61 64 4f  e, whatIf, readO
9c60: 6e 6c 79 2c 20 73 61 66 65 29 3b 0d 0a 20 20 20  nly, safe);..   
9c70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9c80: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
9c90: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
9ca0: 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20         else..   
9cb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
9cc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9cd0: 20 20 20 20 72 65 74 75 72 6e 20 6e 65 77 20 4d      return new M
9ce0: 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 28 0d  ockRegistryKey(.
9cf0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
9d00: 20 20 20 20 20 20 20 20 20 6b 65 79 2e 43 72 65           key.Cre
9d10: 61 74 65 53 75 62 4b 65 79 28 73 75 62 4b 65 79  ateSubKey(subKey
9d20: 4e 61 6d 65 29 2c 20 77 68 61 74 49 66 2c 20 72  Name), whatIf, r
9d30: 65 61 64 4f 6e 6c 79 2c 20 73 61 66 65 29 3b 0d  eadOnly, safe);.
9d40: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
9d50: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
9d60: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
9d70: 20 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 2f 2f 2f 2f  ////////////////
9da0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9db0: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
9dc0: 20 20 20 20 70 75 62 6c 69 63 20 76 6f 69 64 20      public void 
9dd0: 44 65 6c 65 74 65 53 75 62 4b 65 79 28 0d 0a 20  DeleteSubKey(.. 
9de0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
9df0: 74 72 69 6e 67 20 73 75 62 4b 65 79 4e 61 6d 65  tring subKeyName
9e00: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
9e10: 20 20 20 62 6f 6f 6c 20 74 68 72 6f 77 4f 6e 4d     bool throwOnM
9e20: 69 73 73 69 6e 67 0d 0a 20 20 20 20 20 20 20 20  issing..        
9e30: 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
9e40: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
9e50: 20 20 20 20 20 20 20 20 20 20 43 68 65 63 6b 44            CheckD
9e60: 69 73 70 6f 73 65 64 28 29 3b 0d 0a 20 20 20 20  isposed();..    
9e70: 20 20 20 20 20 20 20 20 20 20 20 20 43 68 65 63              Chec
9e80: 6b 52 65 61 64 4f 6e 6c 79 28 29 3b 0d 0a 0d 0a  kReadOnly();....
9e90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9ea0: 69 66 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29  if (key == null)
9eb0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
9ec0: 20 20 20 20 20 20 72 65 74 75 72 6e 3b 0d 0a 0d        return;...
9ed0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
9ee0: 20 69 66 20 28 21 77 68 61 74 49 66 29 0d 0a 20   if (!whatIf).. 
9ef0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9f00: 20 20 20 6b 65 79 2e 44 65 6c 65 74 65 53 75 62     key.DeleteSub
9f10: 4b 65 79 28 73 75 62 4b 65 79 4e 61 6d 65 2c 20  Key(subKeyName, 
9f20: 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 29 3b  throwOnMissing);
9f30: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
9f40: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
9f50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9f60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9f70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9f80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9f90: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
9fa0: 20 20 70 75 62 6c 69 63 20 76 6f 69 64 20 44 65    public void De
9fb0: 6c 65 74 65 53 75 62 4b 65 79 54 72 65 65 28 0d  leteSubKeyTree(.
9fc0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
9fd0: 20 73 74 72 69 6e 67 20 73 75 62 4b 65 79 4e 61   string subKeyNa
9fe0: 6d 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  me..            
9ff0: 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20      )..         
a000: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
a010: 20 20 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f        CheckDispo
a020: 73 65 64 28 29 3b 0d 0a 20 20 20 20 20 20 20 20  sed();..        
a030: 20 20 20 20 20 20 20 20 43 68 65 63 6b 52 65 61          CheckRea
a040: 64 4f 6e 6c 79 28 29 3b 0d 0a 0d 0a 20 20 20 20  dOnly();....    
a050: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
a060: 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  key == null)..  
a070: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a080: 20 20 72 65 74 75 72 6e 3b 0d 0a 0d 0a 20 20 20    return;....   
a090: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
a0a0: 28 21 77 68 61 74 49 66 29 0d 0a 20 20 20 20 20  (!whatIf)..     
a0b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6b                 k
a0c0: 65 79 2e 44 65 6c 65 74 65 53 75 62 4b 65 79 54  ey.DeleteSubKeyT
a0d0: 72 65 65 28 73 75 62 4b 65 79 4e 61 6d 65 29 3b  ree(subKeyName);
a0e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
a0f0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f  ////////////////
a120: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a130: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a140: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
a150: 20 20 70 75 62 6c 69 63 20 76 6f 69 64 20 44 65    public void De
a160: 6c 65 74 65 56 61 6c 75 65 28 0d 0a 20 20 20 20  leteValue(..    
a170: 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
a180: 6e 67 20 6e 61 6d 65 2c 0d 0a 20 20 20 20 20 20  ng name,..      
a190: 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 74            bool t
a1a0: 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 0d 0a 20  hrowOnMissing.. 
a1b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29                 )
a1c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
a1d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
a1e0: 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29   CheckDisposed()
a1f0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
a200: 20 20 20 43 68 65 63 6b 52 65 61 64 4f 6e 6c 79     CheckReadOnly
a210: 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ();....         
a220: 20 20 20 20 20 20 20 69 66 20 28 6b 65 79 20 3d         if (key =
a230: 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
a240: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
a250: 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  urn;....        
a260: 20 20 20 20 20 20 20 20 69 66 20 28 21 77 68 61          if (!wha
a270: 74 49 66 29 0d 0a 20 20 20 20 20 20 20 20 20 20  tIf)..          
a280: 20 20 20 20 20 20 20 20 20 20 6b 65 79 2e 44 65            key.De
a290: 6c 65 74 65 56 61 6c 75 65 28 6e 61 6d 65 2c 20  leteValue(name, 
a2a0: 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 29 3b  throwOnMissing);
a2b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
a2c0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
a2d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a2e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a2f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a300: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a310: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
a320: 20 20 70 75 62 6c 69 63 20 73 74 72 69 6e 67 5b    public string[
a330: 5d 20 47 65 74 53 75 62 4b 65 79 4e 61 6d 65 73  ] GetSubKeyNames
a340: 28 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ()..            
a350: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
a360: 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64     CheckDisposed
a370: 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ();....         
a380: 20 20 20 20 20 20 20 69 66 20 28 6b 65 79 20 3d         if (key =
a390: 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
a3a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
a3b0: 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20  urn null;....   
a3c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
a3d0: 75 72 6e 20 6b 65 79 2e 47 65 74 53 75 62 4b 65  urn key.GetSubKe
a3e0: 79 4e 61 6d 65 73 28 29 3b 0d 0a 20 20 20 20 20  yNames();..     
a3f0: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
a400: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
a410: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a420: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a430: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a440: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
a450: 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
a460: 63 20 6f 62 6a 65 63 74 20 47 65 74 56 61 6c 75  c object GetValu
a470: 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
a480: 20 20 20 20 73 74 72 69 6e 67 20 6e 61 6d 65 2c      string name,
a490: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
a4a0: 20 20 6f 62 6a 65 63 74 20 64 65 66 61 75 6c 74    object default
a4b0: 56 61 6c 75 65 0d 0a 20 20 20 20 20 20 20 20 20  Value..         
a4c0: 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
a4d0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
a4e0: 20 20 20 20 20 20 20 20 20 43 68 65 63 6b 44 69           CheckDi
a4f0: 73 70 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20 20 20  sposed();....   
a500: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
a510: 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  (key == null).. 
a520: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a530: 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d     return null;.
a540: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
a550: 20 20 20 72 65 74 75 72 6e 20 6b 65 79 2e 47 65     return key.Ge
a560: 74 56 61 6c 75 65 28 6e 61 6d 65 2c 20 64 65 66  tValue(name, def
a570: 61 75 6c 74 56 61 6c 75 65 29 3b 0d 0a 20 20 20  aultValue);..   
a580: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
a590: 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
a5a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a5b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a5c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a5d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
a5e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
a5f0: 6c 69 63 20 73 74 72 69 6e 67 5b 5d 20 47 65 74  lic string[] Get
a600: 56 61 6c 75 65 4e 61 6d 65 73 28 29 0d 0a 20 20  ValueNames()..  
a610: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
a620: 20 20 20 20 20 20 20 20 20 20 20 20 20 43 68 65               Che
a630: 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 0d  ckDisposed();...
a640: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
a650: 20 69 66 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c   if (key == null
a660: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
a670: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 75         return nu
a680: 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ll;....         
a690: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6b 65         return ke
a6a0: 79 2e 47 65 74 56 61 6c 75 65 4e 61 6d 65 73 28  y.GetValueNames(
a6b0: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
a6c0: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
a6d0: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
a6e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a6f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a700: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a710: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
a720: 20 20 20 20 70 75 62 6c 69 63 20 4d 6f 63 6b 52      public MockR
a730: 65 67 69 73 74 72 79 4b 65 79 20 4f 70 65 6e 53  egistryKey OpenS
a740: 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20  ubKey(..        
a750: 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 73          string s
a760: 75 62 4b 65 79 4e 61 6d 65 0d 0a 20 20 20 20 20  ubKeyName..     
a770: 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
a780: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
a790: 20 20 20 20 20 20 20 20 20 20 20 20 20 43 68 65               Che
a7a0: 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 0d  ckDisposed();...
a7b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
a7c0: 20 72 65 74 75 72 6e 20 4f 70 65 6e 53 75 62 4b   return OpenSubK
a7d0: 65 79 28 73 75 62 4b 65 79 4e 61 6d 65 2c 20 66  ey(subKeyName, f
a7e0: 61 6c 73 65 29 3b 0d 0a 20 20 20 20 20 20 20 20  alse);..        
a7f0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
a800: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
a810: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a820: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a830: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a840: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
a850: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 4d          public M
a860: 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 4f  ockRegistryKey O
a870: 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20 20  penSubKey(..    
a880: 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
a890: 6e 67 20 73 75 62 4b 65 79 4e 61 6d 65 2c 0d 0a  ng subKeyName,..
a8a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a8b0: 62 6f 6f 6c 20 77 72 69 74 61 62 6c 65 0d 0a 20  bool writable.. 
a8c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29                 )
a8d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
a8e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
a8f0: 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29   CheckDisposed()
a900: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
a910: 20 20 20 20 20 69 66 20 28 77 72 69 74 61 62 6c       if (writabl
a920: 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e)..            
a930: 20 20 20 20 20 20 20 20 43 68 65 63 6b 52 65 61          CheckRea
a940: 64 4f 6e 6c 79 28 29 3b 0d 0a 0d 0a 20 20 20 20  dOnly();....    
a950: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
a960: 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  key == null)..  
a970: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a980: 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a    return null;..
a990: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
a9a0: 20 20 52 65 67 69 73 74 72 79 4b 65 79 20 73 75    RegistryKey su
a9b0: 62 4b 65 79 20 3d 20 6b 65 79 2e 4f 70 65 6e 53  bKey = key.OpenS
a9c0: 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20  ubKey(..        
a9d0: 20 20 20 20 20 20 20 20 20 20 20 20 73 75 62 4b              subK
a9e0: 65 79 4e 61 6d 65 2c 20 77 68 61 74 49 66 20 3f  eyName, whatIf ?
a9f0: 20 66 61 6c 73 65 20 3a 20 77 72 69 74 61 62 6c   false : writabl
aa00: 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  e);....         
aa10: 20 20 20 20 20 20 20 69 66 20 28 73 75 62 4b 65         if (subKe
aa20: 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  y == null)..    
aa30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
aa40: 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a  return null;....
aa50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
aa60: 72 65 74 75 72 6e 20 6e 65 77 20 4d 6f 63 6b 52  return new MockR
aa70: 65 67 69 73 74 72 79 4b 65 79 28 73 75 62 4b 65  egistryKey(subKe
aa80: 79 2c 20 77 68 61 74 49 66 2c 20 72 65 61 64 4f  y, whatIf, readO
aa90: 6e 6c 79 2c 20 73 61 66 65 29 3b 0d 0a 20 20 20  nly, safe);..   
aaa0: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
aab0: 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
aac0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
aad0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
aae0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
aaf0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
ab00: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
ab10: 6c 69 63 20 76 6f 69 64 20 53 65 74 56 61 6c 75  lic void SetValu
ab20: 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
ab30: 20 20 20 20 73 74 72 69 6e 67 20 6e 61 6d 65 2c      string name,
ab40: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
ab50: 20 20 6f 62 6a 65 63 74 20 76 61 6c 75 65 0d 0a    object value..
ab60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ab70: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
ab80: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
ab90: 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28    CheckDisposed(
aba0: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
abb0: 20 20 20 20 43 68 65 63 6b 52 65 61 64 4f 6e 6c      CheckReadOnl
abc0: 79 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  y();....        
abd0: 20 20 20 20 20 20 20 20 69 66 20 28 6b 65 79 20          if (key 
abe0: 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
abf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
ac00: 74 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  turn;....       
ac10: 20 20 20 20 20 20 20 20 20 69 66 20 28 21 77 68           if (!wh
ac20: 61 74 49 66 29 0d 0a 20 20 20 20 20 20 20 20 20  atIf)..         
ac30: 20 20 20 20 20 20 20 20 20 20 20 6b 65 79 2e 53             key.S
ac40: 65 74 56 61 6c 75 65 28 6e 61 6d 65 2c 20 76 61  etValue(name, va
ac50: 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  lue);..         
ac60: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
ac70: 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a    #endregion....
ac80: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
ac90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
aca0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
acb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
acc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
acd0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  ...            #
ace0: 72 65 67 69 6f 6e 20 50 75 62 6c 69 63 20 50 72  region Public Pr
acf0: 6f 70 65 72 74 69 65 73 0d 0a 20 20 20 20 20 20  operties..      
ad00: 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 72        public str
ad10: 69 6e 67 20 4e 61 6d 65 0d 0a 20 20 20 20 20 20  ing Name..      
ad20: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
ad30: 20 20 20 20 20 20 20 20 20 67 65 74 0d 0a 20 20           get..  
ad40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
ad50: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
ad60: 20 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73       CheckDispos
ad70: 65 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ed();....       
ad80: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
ad90: 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  (key == null).. 
ada0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
adb0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 75         return nu
adc0: 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ll;....         
add0: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
ade0: 6e 20 21 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c  n !String.IsNull
adf0: 4f 72 45 6d 70 74 79 28 73 75 62 4b 65 79 4e 61  OrEmpty(subKeyNa
ae00: 6d 65 29 20 3f 0d 0a 20 20 20 20 20 20 20 20 20  me) ?..         
ae10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52                 R
ae20: 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 4a 6f  egistryHelper.Jo
ae30: 69 6e 4b 65 79 4e 61 6d 65 73 28 6b 65 79 2e 4e  inKeyNames(key.N
ae40: 61 6d 65 2c 20 73 75 62 4b 65 79 4e 61 6d 65 29  ame, subKeyName)
ae50: 20 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   :..            
ae60: 20 20 20 20 20 20 20 20 20 20 20 20 6b 65 79 2e              key.
ae70: 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  Name;..         
ae80: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
ae90: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
aea0: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
aeb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
aec0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
aed0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
aee0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
aef0: 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
af00: 65 20 52 65 67 69 73 74 72 79 4b 65 79 20 6b 65  e RegistryKey ke
af10: 79 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y;..            
af20: 70 75 62 6c 69 63 20 52 65 67 69 73 74 72 79 4b  public RegistryK
af30: 65 79 20 4b 65 79 0d 0a 20 20 20 20 20 20 20 20  ey Key..        
af40: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
af50: 20 20 20 20 20 20 20 67 65 74 20 7b 20 43 68 65         get { Che
af60: 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 20 43 68  ckDisposed(); Ch
af70: 65 63 6b 53 61 66 65 28 29 3b 20 72 65 74 75 72  eckSafe(); retur
af80: 6e 20 6b 65 79 3b 20 7d 0d 0a 20 20 20 20 20 20  n key; }..      
af90: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
afa0: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
afb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
afc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
afd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
afe0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
aff0: 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
b000: 65 20 73 74 72 69 6e 67 20 73 75 62 4b 65 79 4e  e string subKeyN
b010: 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ame;..          
b020: 20 20 70 75 62 6c 69 63 20 73 74 72 69 6e 67 20    public string 
b030: 53 75 62 4b 65 79 4e 61 6d 65 0d 0a 20 20 20 20  SubKeyName..    
b040: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
b050: 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b             get {
b060: 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29   CheckDisposed()
b070: 3b 20 72 65 74 75 72 6e 20 73 75 62 4b 65 79 4e  ; return subKeyN
b080: 61 6d 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  ame; }..        
b090: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
b0a0: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
b0b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b0c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b0d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b0e0: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
b0f0: 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
b100: 62 6f 6f 6c 20 77 68 61 74 49 66 3b 0d 0a 20 20  bool whatIf;..  
b110: 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
b120: 20 62 6f 6f 6c 20 57 68 61 74 49 66 0d 0a 20 20   bool WhatIf..  
b130: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
b140: 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74               get
b150: 20 7b 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64   { CheckDisposed
b160: 28 29 3b 20 72 65 74 75 72 6e 20 77 68 61 74 49  (); return whatI
b170: 66 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  f; }..          
b180: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
b190: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
b1a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b1b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b1c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b1d0: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
b1e0: 20 20 20 20 20 20 70 72 69 76 61 74 65 20 62 6f        private bo
b1f0: 6f 6c 20 72 65 61 64 4f 6e 6c 79 3b 0d 0a 20 20  ol readOnly;..  
b200: 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
b210: 20 62 6f 6f 6c 20 52 65 61 64 4f 6e 6c 79 0d 0a   bool ReadOnly..
b220: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
b230: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67                 g
b240: 65 74 20 7b 20 43 68 65 63 6b 44 69 73 70 6f 73  et { CheckDispos
b250: 65 64 28 29 3b 20 72 65 74 75 72 6e 20 72 65 61  ed(); return rea
b260: 64 4f 6e 6c 79 3b 20 7d 0d 0a 20 20 20 20 20 20  dOnly; }..      
b270: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
b280: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
b290: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b2a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b2b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b2c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
b2d0: 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
b2e0: 20 62 6f 6f 6c 20 73 61 66 65 3b 0d 0a 20 20 20   bool safe;..   
b2f0: 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
b300: 62 6f 6f 6c 20 53 61 66 65 0d 0a 20 20 20 20 20  bool Safe..     
b310: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
b320: 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20            get { 
b330: 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b  CheckDisposed();
b340: 20 72 65 74 75 72 6e 20 73 61 66 65 3b 20 7d 0d   return safe; }.
b350: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
b360: 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e 64              #end
b370: 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20  region....      
b380: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
b390: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b3a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b3b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b3c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
b3d0: 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e           #region
b3e0: 20 50 72 69 76 61 74 65 20 4d 65 74 68 6f 64 73   Private Methods
b3f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
b400: 69 76 61 74 65 20 76 6f 69 64 20 43 68 65 63 6b  ivate void Check
b410: 52 65 61 64 4f 6e 6c 79 28 29 0d 0a 20 20 20 20  ReadOnly()..    
b420: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
b430: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
b440: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
b450: 2f 20 4e 4f 54 45 3a 20 49 6e 20 22 72 65 61 64  / NOTE: In "read
b460: 2d 6f 6e 6c 79 22 20 6d 6f 64 65 2c 20 77 65 20  -only" mode, we 
b470: 64 69 73 61 6c 6c 6f 77 20 61 6c 6c 20 77 72 69  disallow all wri
b480: 74 65 20 61 63 63 65 73 73 2e 0d 0a 20 20 20 20  te access...    
b490: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
b4a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b4b0: 69 66 20 28 21 72 65 61 64 4f 6e 6c 79 29 0d 0a  if (!readOnly)..
b4c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b4d0: 20 20 20 20 72 65 74 75 72 6e 3b 0d 0a 0d 0a 20      return;.... 
b4e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
b4f0: 68 72 6f 77 20 6e 65 77 20 49 6e 76 61 6c 69 64  hrow new Invalid
b500: 4f 70 65 72 61 74 69 6f 6e 45 78 63 65 70 74 69  OperationExcepti
b510: 6f 6e 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  on();..         
b520: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
b530: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
b540: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b550: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b560: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b570: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
b580: 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 76         private v
b590: 6f 69 64 20 43 68 65 63 6b 53 61 66 65 28 29 0d  oid CheckSafe().
b5a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
b5b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b5c0: 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
b5d0: 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 49 6e 20      // NOTE: In 
b5e0: 22 73 61 66 65 22 20 6d 6f 64 65 2c 20 77 65 20  "safe" mode, we 
b5f0: 64 69 73 61 6c 6c 6f 77 20 61 6c 6c 20 64 69 72  disallow all dir
b600: 65 63 74 20 61 63 63 65 73 73 20 74 6f 20 74 68  ect access to th
b610: 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e..             
b620: 20 20 20 2f 2f 20 20 20 20 20 20 20 63 6f 6e 74     //       cont
b630: 61 69 6e 65 64 20 72 65 67 69 73 74 72 79 20 6b  ained registry k
b640: 65 79 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ey...           
b650: 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
b660: 20 20 20 20 20 20 20 20 20 69 66 20 28 21 73 61           if (!sa
b670: 66 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  fe)..           
b680: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 3b           return;
b690: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
b6a0: 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 49 6e      throw new In
b6b0: 76 61 6c 69 64 4f 70 65 72 61 74 69 6f 6e 45 78  validOperationEx
b6c0: 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 20 20 20 20  ception();..    
b6d0: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
b6e0: 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f         #endregio
b6f0: 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n....           
b700: 20 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 2f 2f 2f 2f 2f 2f  ////////////////
b740: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
b750: 20 20 20 20 23 72 65 67 69 6f 6e 20 53 79 73 74      #region Syst
b760: 65 6d 2e 4f 62 6a 65 63 74 20 4f 76 65 72 72 69  em.Object Overri
b770: 64 65 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20  des..           
b780: 20 70 75 62 6c 69 63 20 6f 76 65 72 72 69 64 65   public override
b790: 20 73 74 72 69 6e 67 20 54 6f 53 74 72 69 6e 67   string ToString
b7a0: 28 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ()..            
b7b0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
b7c0: 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64     CheckDisposed
b7d0: 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ();....         
b7e0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 68         return th
b7f0: 69 73 2e 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20  is.Name;..      
b800: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
b810: 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d       #endregion.
b820: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
b830: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b840: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b850: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b860: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b870: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
b880: 20 20 23 72 65 67 69 6f 6e 20 49 6d 70 6c 69 63    #region Implic
b890: 69 74 20 43 6f 6e 76 65 72 73 69 6f 6e 20 4f 70  it Conversion Op
b8a0: 65 72 61 74 6f 72 73 0d 0a 20 20 20 20 20 20 20  erators..       
b8b0: 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
b8c0: 20 20 20 20 20 2f 2f 20 42 55 47 42 55 47 3a 20       // BUGBUG: 
b8d0: 52 65 6d 6f 76 65 20 6d 65 3f 20 20 54 68 69 73  Remove me?  This
b8e0: 20 73 68 6f 75 6c 64 20 62 65 20 73 61 66 65 20   should be safe 
b8f0: 62 65 63 61 75 73 65 20 69 6e 20 22 77 68 61 74  because in "what
b900: 2d 69 66 22 0d 0a 20 20 20 20 20 20 20 20 20 20  -if"..          
b910: 20 20 2f 2f 20 20 20 20 20 20 20 20 20 6d 6f 64    //         mod
b920: 65 20 61 6c 6c 20 6b 65 79 73 20 61 72 65 20 6f  e all keys are o
b930: 70 65 6e 65 64 20 72 65 61 64 2d 6f 6e 6c 79 2e  pened read-only.
b940: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
b950: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
b960: 62 6c 69 63 20 73 74 61 74 69 63 20 69 6d 70 6c  blic static impl
b970: 69 63 69 74 20 6f 70 65 72 61 74 6f 72 20 52 65  icit operator Re
b980: 67 69 73 74 72 79 4b 65 79 28 0d 0a 20 20 20 20  gistryKey(..    
b990: 20 20 20 20 20 20 20 20 20 20 20 20 4d 6f 63 6b              Mock
b9a0: 52 65 67 69 73 74 72 79 4b 65 79 20 6b 65 79 0d  RegistryKey key.
b9b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
b9c0: 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   )..            
b9d0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
b9e0: 20 20 20 72 65 74 75 72 6e 20 28 6b 65 79 20 21     return (key !
b9f0: 3d 20 6e 75 6c 6c 29 20 3f 20 6b 65 79 2e 4b 65  = null) ? key.Ke
ba00: 79 20 3a 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20  y : null;..     
ba10: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
ba20: 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
ba30: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
ba40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ba50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ba60: 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
ba90: 20 20 20 23 72 65 67 69 6f 6e 20 49 44 69 73 70     #region IDisp
baa0: 6f 73 61 62 6c 65 20 22 50 61 74 74 65 72 6e 22  osable "Pattern"
bab0: 20 4d 65 6d 62 65 72 73 0d 0a 20 20 20 20 20 20   Members..      
bac0: 20 20 20 20 20 20 70 72 69 76 61 74 65 20 62 6f        private bo
bad0: 6f 6c 20 64 69 73 70 6f 73 65 64 3b 0d 0a 20 20  ol disposed;..  
bae0: 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
baf0: 65 20 76 6f 69 64 20 43 68 65 63 6b 44 69 73 70  e void CheckDisp
bb00: 6f 73 65 64 28 29 20 2f 2a 20 74 68 72 6f 77 20  osed() /* throw 
bb10: 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  */..            
bb20: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
bb30: 20 20 20 69 66 20 28 21 64 69 73 70 6f 73 65 64     if (!disposed
bb40: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
bb50: 20 20 20 20 20 20 20 72 65 74 75 72 6e 3b 0d 0a         return;..
bb60: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
bb70: 20 20 74 68 72 6f 77 20 6e 65 77 20 4f 62 6a 65    throw new Obje
bb80: 63 74 44 69 73 70 6f 73 65 64 45 78 63 65 70 74  ctDisposedExcept
bb90: 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ion(..          
bba0: 20 20 20 20 20 20 20 20 20 20 74 79 70 65 6f 66            typeof
bbb0: 28 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79  (MockRegistryKey
bbc0: 29 2e 4e 61 6d 65 29 3b 0d 0a 20 20 20 20 20 20  ).Name);..      
bbd0: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
bbe0: 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f  ////////////////
bc10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bc20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
bc30: 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
bc40: 65 20 2f 2a 20 70 72 6f 74 65 63 74 65 64 20 76  e /* protected v
bc50: 69 72 74 75 61 6c 20 2a 2f 20 76 6f 69 64 20 44  irtual */ void D
bc60: 69 73 70 6f 73 65 28 0d 0a 20 20 20 20 20 20 20  ispose(..       
bc70: 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 64 69           bool di
bc80: 73 70 6f 73 69 6e 67 0d 0a 20 20 20 20 20 20 20  sposing..       
bc90: 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
bca0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
bcb0: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21             if (!
bcc0: 64 69 73 70 6f 73 65 64 29 0d 0a 20 20 20 20 20  disposed)..     
bcd0: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
bce0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bcf0: 20 20 69 66 20 28 64 69 73 70 6f 73 69 6e 67 29    if (disposing)
bd00: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
bd10: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
bd20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bd30: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
bd40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bd50: 2f 2f 2f 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20  /////..         
bd60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
bd70: 2f 20 64 69 73 70 6f 73 65 20 6d 61 6e 61 67 65  / dispose manage
bd80: 64 20 72 65 73 6f 75 72 63 65 73 20 68 65 72 65  d resources here
bd90: 2e 2e 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  .....           
bda0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f               ///
bdb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bdc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bdd0: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
bde0: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
bdf0: 28 6b 65 79 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20  (key != null).. 
be00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
be10: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
be20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
be30: 20 20 20 20 20 20 6b 65 79 2e 43 6c 6f 73 65 28        key.Close(
be40: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
be50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
be60: 6b 65 79 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20  key = null;..   
be70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
be80: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
be90: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
bea0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
beb0: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
bec0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bed0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 20 20 20  ///////////..   
bee0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bef0: 20 2f 2f 20 72 65 6c 65 61 73 65 20 75 6e 6d 61   // release unma
bf00: 6e 61 67 65 64 20 72 65 73 6f 75 72 63 65 73 20  naged resources 
bf10: 68 65 72 65 2e 2e 2e 0d 0a 20 20 20 20 20 20 20  here.....       
bf20: 20 20 20 20 20 20 20 20 20 20 20 20 20 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 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
bf60: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
bf70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bf80: 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 54 68 69 73     // NOTE: This
bf90: 20 6f 62 6a 65 63 74 20 69 73 20 6e 6f 77 20 64   object is now d
bfa0: 69 73 70 6f 73 65 64 2e 0d 0a 20 20 20 20 20 20  isposed...      
bfb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
bfc0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
bfd0: 20 20 20 20 20 20 64 69 73 70 6f 73 65 64 20 3d        disposed =
bfe0: 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20   true;..        
bff0: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
c000: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
c010: 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
c020: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
c030: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c040: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c050: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c060: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c070: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
c080: 20 20 20 23 72 65 67 69 6f 6e 20 49 44 69 73 70     #region IDisp
c090: 6f 73 61 62 6c 65 20 4d 65 6d 62 65 72 73 0d 0a  osable Members..
c0a0: 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
c0b0: 69 63 20 76 6f 69 64 20 44 69 73 70 6f 73 65 28  ic void Dispose(
c0c0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
c0d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
c0e0: 20 20 44 69 73 70 6f 73 65 28 74 72 75 65 29 3b    Dispose(true);
c0f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
c100: 20 20 47 43 2e 53 75 70 70 72 65 73 73 46 69 6e    GC.SuppressFin
c110: 61 6c 69 7a 65 28 74 68 69 73 29 3b 0d 0a 20 20  alize(this);..  
c120: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
c130: 20 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67           #endreg
c140: 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ion....         
c150: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
c160: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c170: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c180: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c190: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
c1a0: 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 44 65        #region De
c1b0: 73 74 72 75 63 74 6f 72 0d 0a 20 20 20 20 20 20  structor..      
c1c0: 20 20 20 20 20 20 7e 4d 6f 63 6b 52 65 67 69 73        ~MockRegis
c1d0: 74 72 79 4b 65 79 28 29 0d 0a 20 20 20 20 20 20  tryKey()..      
c1e0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
c1f0: 20 20 20 20 20 20 20 20 20 44 69 73 70 6f 73 65           Dispose
c200: 28 66 61 6c 73 65 29 3b 0d 0a 20 20 20 20 20 20  (false);..      
c210: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
c220: 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d       #endregion.
c230: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..    
c240: 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
c250: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
c260: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c270: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c280: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c290: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c2a0: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65  /....        #re
c2b0: 67 69 6f 6e 20 52 65 67 69 73 74 72 79 52 6f 6f  gion RegistryRoo
c2c0: 74 4b 65 79 4e 61 6d 65 73 20 43 6c 61 73 73 0d  tKeyNames Class.
c2d0: 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65  .        private
c2e0: 20 73 74 61 74 69 63 20 63 6c 61 73 73 20 52 65   static class Re
c2f0: 67 69 73 74 72 79 52 6f 6f 74 4b 65 79 4e 61 6d  gistryRootKeyNam
c300: 65 73 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  es..        {.. 
c310: 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
c320: 63 20 63 6f 6e 73 74 20 73 74 72 69 6e 67 20 48  c const string H
c330: 4b 45 59 5f 43 4c 41 53 53 45 53 5f 52 4f 4f 54  KEY_CLASSES_ROOT
c340: 20 3d 20 22 48 4b 45 59 5f 43 4c 41 53 53 45 53   = "HKEY_CLASSES
c350: 5f 52 4f 4f 54 22 3b 0d 0a 20 20 20 20 20 20 20  _ROOT";..       
c360: 20 20 20 20 20 70 75 62 6c 69 63 20 63 6f 6e 73       public cons
c370: 74 20 73 74 72 69 6e 67 20 48 4b 43 52 20 3d 20  t string HKCR = 
c380: 22 48 4b 43 52 22 3b 0d 0a 0d 0a 20 20 20 20 20  "HKCR";....     
c390: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
c3a0: 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20  //////////....  
c3e0: 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
c3f0: 20 63 6f 6e 73 74 20 73 74 72 69 6e 67 20 48 4b   const string HK
c400: 45 59 5f 43 55 52 52 45 4e 54 5f 43 4f 4e 46 49  EY_CURRENT_CONFI
c410: 47 20 3d 20 22 48 4b 45 59 5f 43 55 52 52 45 4e  G = "HKEY_CURREN
c420: 54 5f 43 4f 4e 46 49 47 22 3b 0d 0a 20 20 20 20  T_CONFIG";..    
c430: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 63          public c
c440: 6f 6e 73 74 20 73 74 72 69 6e 67 20 48 4b 43 43  onst string HKCC
c450: 20 3d 20 22 48 4b 43 43 22 3b 0d 0a 0d 0a 20 20   = "HKCC";....  
c460: 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
c470: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c480: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c490: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c4a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
c4b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
c4c0: 6c 69 63 20 63 6f 6e 73 74 20 73 74 72 69 6e 67  lic const string
c4d0: 20 48 4b 45 59 5f 43 55 52 52 45 4e 54 5f 55 53   HKEY_CURRENT_US
c4e0: 45 52 20 3d 20 22 48 4b 45 59 5f 43 55 52 52 45  ER = "HKEY_CURRE
c4f0: 4e 54 5f 55 53 45 52 22 3b 0d 0a 20 20 20 20 20  NT_USER";..     
c500: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 63 6f         public co
c510: 6e 73 74 20 73 74 72 69 6e 67 20 48 4b 43 55 20  nst string HKCU 
c520: 3d 20 22 48 4b 43 55 22 3b 0d 0a 0d 0a 20 20 20  = "HKCU";....   
c530: 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
c540: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c550: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c560: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c570: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
c580: 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
c590: 69 63 20 63 6f 6e 73 74 20 73 74 72 69 6e 67 20  ic const string 
c5a0: 48 4b 45 59 5f 44 59 4e 5f 44 41 54 41 20 3d 20  HKEY_DYN_DATA = 
c5b0: 22 48 4b 45 59 5f 44 59 4e 5f 44 41 54 41 22 3b  "HKEY_DYN_DATA";
c5c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
c5d0: 62 6c 69 63 20 63 6f 6e 73 74 20 73 74 72 69 6e  blic const strin
c5e0: 67 20 48 4b 44 44 20 3d 20 22 48 4b 44 44 22 3b  g HKDD = "HKDD";
c5f0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
c600: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c610: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c620: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c630: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c640: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
c650: 20 20 20 70 75 62 6c 69 63 20 63 6f 6e 73 74 20     public const 
c660: 73 74 72 69 6e 67 20 48 4b 45 59 5f 4c 4f 43 41  string HKEY_LOCA
c670: 4c 5f 4d 41 43 48 49 4e 45 20 3d 20 22 48 4b 45  L_MACHINE = "HKE
c680: 59 5f 4c 4f 43 41 4c 5f 4d 41 43 48 49 4e 45 22  Y_LOCAL_MACHINE"
c690: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ;..            p
c6a0: 75 62 6c 69 63 20 63 6f 6e 73 74 20 73 74 72 69  ublic const stri
c6b0: 6e 67 20 48 4b 4c 4d 20 3d 20 22 48 4b 4c 4d 22  ng HKLM = "HKLM"
c6c0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
c6d0: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
c6e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c6f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c700: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c710: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
c720: 20 20 20 20 70 75 62 6c 69 63 20 63 6f 6e 73 74      public const
c730: 20 73 74 72 69 6e 67 20 48 4b 45 59 5f 50 45 52   string HKEY_PER
c740: 46 4f 52 4d 41 4e 43 45 5f 44 41 54 41 20 3d 20  FORMANCE_DATA = 
c750: 22 48 4b 45 59 5f 50 45 52 46 4f 52 4d 41 4e 43  "HKEY_PERFORMANC
c760: 45 5f 44 41 54 41 22 3b 0d 0a 20 20 20 20 20 20  E_DATA";..      
c770: 20 20 20 20 20 20 70 75 62 6c 69 63 20 63 6f 6e        public con
c780: 73 74 20 73 74 72 69 6e 67 20 48 4b 50 44 20 3d  st string HKPD =
c790: 20 22 48 4b 50 44 22 3b 0d 0a 0d 0a 20 20 20 20   "HKPD";....    
c7a0: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
c7b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c7c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c7d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c7e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
c7f0: 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
c800: 63 20 63 6f 6e 73 74 20 73 74 72 69 6e 67 20 48  c const string H
c810: 4b 45 59 5f 55 53 45 52 53 20 3d 20 22 48 4b 45  KEY_USERS = "HKE
c820: 59 5f 55 53 45 52 53 22 3b 0d 0a 20 20 20 20 20  Y_USERS";..     
c830: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 63 6f         public co
c840: 6e 73 74 20 73 74 72 69 6e 67 20 48 4b 55 20 3d  nst string HKU =
c850: 20 22 48 4b 55 22 3b 0d 0a 20 20 20 20 20 20 20   "HKU";..       
c860: 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64   }..        #end
c870: 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20  region....      
c880: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
c890: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c8a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c8b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c8c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
c8d0: 20 20 20 20 20 23 72 65 67 69 6f 6e 20 52 65 67       #region Reg
c8e0: 69 73 74 72 79 48 65 6c 70 65 72 20 43 6c 61 73  istryHelper Clas
c8f0: 73 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69  s..        #regi
c900: 6f 6e 20 50 72 69 76 61 74 65 20 43 6f 6e 73 74  on Private Const
c910: 61 6e 74 73 0d 0a 20 20 20 20 20 20 20 20 70 72  ants..        pr
c920: 69 76 61 74 65 20 63 6f 6e 73 74 20 63 68 61 72  ivate const char
c930: 20 4b 65 79 4e 61 6d 65 53 65 70 61 72 61 74 6f   KeyNameSeparato
c940: 72 20 3d 20 27 5c 5c 27 3b 0d 0a 0d 0a 20 20 20  r = '\\';....   
c950: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
c960: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c970: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c980: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c990: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
c9a0: 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
c9b0: 73 74 61 74 69 63 20 72 65 61 64 6f 6e 6c 79 20  static readonly 
c9c0: 63 68 61 72 5b 5d 20 4b 65 79 4e 61 6d 65 53 65  char[] KeyNameSe
c9d0: 70 61 72 61 74 6f 72 73 20 3d 20 7b 0d 0a 20 20  parators = {..  
c9e0: 20 20 20 20 20 20 20 20 20 20 4b 65 79 4e 61 6d            KeyNam
c9f0: 65 53 65 70 61 72 61 74 6f 72 0d 0a 20 20 20 20  eSeparator..    
ca00: 20 20 20 20 7d 3b 0d 0a 20 20 20 20 20 20 20 20      };..        
ca10: 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20  #endregion....  
ca20: 20 20 20 20 20 20 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 2f 2f  ////////////////
ca60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
ca70: 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65  .        private
ca80: 20 73 74 61 74 69 63 20 63 6c 61 73 73 20 52 65   static class Re
ca90: 67 69 73 74 72 79 48 65 6c 70 65 72 0d 0a 20 20  gistryHelper..  
caa0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
cab0: 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50 75 62       #region Pub
cac0: 6c 69 63 20 53 74 61 74 69 63 20 50 72 6f 70 65  lic Static Prope
cad0: 72 74 69 65 73 0d 0a 20 20 20 20 20 20 20 20 20  rties..         
cae0: 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69     private stati
caf0: 63 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 20 72  c MockRegistry r
cb00: 65 61 64 4f 6e 6c 79 52 65 67 69 73 74 72 79 3b  eadOnlyRegistry;
cb10: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
cb20: 62 6c 69 63 20 73 74 61 74 69 63 20 4d 6f 63 6b  blic static Mock
cb30: 52 65 67 69 73 74 72 79 20 52 65 61 64 4f 6e 6c  Registry ReadOnl
cb40: 79 52 65 67 69 73 74 72 79 0d 0a 20 20 20 20 20  yRegistry..     
cb50: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
cb60: 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20            get { 
cb70: 72 65 74 75 72 6e 20 72 65 61 64 4f 6e 6c 79 52  return readOnlyR
cb80: 65 67 69 73 74 72 79 3b 20 7d 0d 0a 20 20 20 20  egistry; }..    
cb90: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
cba0: 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
cbb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cbc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cbd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cbe0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
cbf0: 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76              priv
cc00: 61 74 65 20 73 74 61 74 69 63 20 4d 6f 63 6b 52  ate static MockR
cc10: 65 67 69 73 74 72 79 20 72 65 61 64 57 72 69 74  egistry readWrit
cc20: 65 52 65 67 69 73 74 72 79 3b 0d 0a 20 20 20 20  eRegistry;..    
cc30: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73          public s
cc40: 74 61 74 69 63 20 4d 6f 63 6b 52 65 67 69 73 74  tatic MockRegist
cc50: 72 79 20 52 65 61 64 57 72 69 74 65 52 65 67 69  ry ReadWriteRegi
cc60: 73 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20  stry..          
cc70: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
cc80: 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72       get { retur
cc90: 6e 20 72 65 61 64 57 72 69 74 65 52 65 67 69 73  n readWriteRegis
cca0: 74 72 79 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  try; }..        
ccb0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
ccc0: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
ccd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cce0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ccf0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cd00: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
cd10: 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
cd20: 73 74 61 74 69 63 20 69 6e 74 20 73 75 62 4b 65  static int subKe
cd30: 79 73 43 72 65 61 74 65 64 3b 0d 0a 20 20 20 20  ysCreated;..    
cd40: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73          public s
cd50: 74 61 74 69 63 20 69 6e 74 20 53 75 62 4b 65 79  tatic int SubKey
cd60: 73 43 72 65 61 74 65 64 0d 0a 20 20 20 20 20 20  sCreated..      
cd70: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
cd80: 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72           get { r
cd90: 65 74 75 72 6e 20 73 75 62 4b 65 79 73 43 72 65  eturn subKeysCre
cda0: 61 74 65 64 3b 20 7d 0d 0a 20 20 20 20 20 20 20  ated; }..       
cdb0: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
cdc0: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
cdd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cde0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cdf0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ce00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
ce10: 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65           private
ce20: 20 73 74 61 74 69 63 20 69 6e 74 20 73 75 62 4b   static int subK
ce30: 65 79 73 44 65 6c 65 74 65 64 3b 0d 0a 20 20 20  eysDeleted;..   
ce40: 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
ce50: 73 74 61 74 69 63 20 69 6e 74 20 53 75 62 4b 65  static int SubKe
ce60: 79 73 44 65 6c 65 74 65 64 0d 0a 20 20 20 20 20  ysDeleted..     
ce70: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
ce80: 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20            get { 
ce90: 72 65 74 75 72 6e 20 73 75 62 4b 65 79 73 44 65  return subKeysDe
cea0: 6c 65 74 65 64 3b 20 7d 0d 0a 20 20 20 20 20 20  leted; }..      
ceb0: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
cec0: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
ced0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cee0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cef0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cf00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
cf10: 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
cf20: 65 20 73 74 61 74 69 63 20 69 6e 74 20 6b 65 79  e static int key
cf30: 56 61 6c 75 65 73 52 65 61 64 3b 0d 0a 20 20 20  ValuesRead;..   
cf40: 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
cf50: 73 74 61 74 69 63 20 69 6e 74 20 4b 65 79 56 61  static int KeyVa
cf60: 6c 75 65 73 52 65 61 64 0d 0a 20 20 20 20 20 20  luesRead..      
cf70: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
cf80: 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72           get { r
cf90: 65 74 75 72 6e 20 6b 65 79 56 61 6c 75 65 73 52  eturn keyValuesR
cfa0: 65 61 64 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  ead; }..        
cfb0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
cfc0: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
cfd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cfe0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cff0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d000: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
d010: 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
d020: 73 74 61 74 69 63 20 69 6e 74 20 6b 65 79 56 61  static int keyVa
d030: 6c 75 65 73 57 72 69 74 74 65 6e 3b 0d 0a 20 20  luesWritten;..  
d040: 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
d050: 20 73 74 61 74 69 63 20 69 6e 74 20 4b 65 79 56   static int KeyV
d060: 61 6c 75 65 73 57 72 69 74 74 65 6e 0d 0a 20 20  aluesWritten..  
d070: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
d080: 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74               get
d090: 20 7b 20 72 65 74 75 72 6e 20 6b 65 79 56 61 6c   { return keyVal
d0a0: 75 65 73 57 72 69 74 74 65 6e 3b 20 7d 0d 0a 20  uesWritten; }.. 
d0b0: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
d0c0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
d0d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d0e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d0f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d100: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
d110: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
d120: 72 69 76 61 74 65 20 73 74 61 74 69 63 20 69 6e  rivate static in
d130: 74 20 6b 65 79 56 61 6c 75 65 73 44 65 6c 65 74  t keyValuesDelet
d140: 65 64 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ed;..           
d150: 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 69   public static i
d160: 6e 74 20 4b 65 79 56 61 6c 75 65 73 44 65 6c 65  nt KeyValuesDele
d170: 74 65 64 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ted..           
d180: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
d190: 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e      get { return
d1a0: 20 6b 65 79 56 61 6c 75 65 73 44 65 6c 65 74 65   keyValuesDelete
d1b0: 64 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  d; }..          
d1c0: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
d1d0: 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20   #endregion.... 
d1e0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
d1f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d200: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d210: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d220: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
d230: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 72  ..            #r
d240: 65 67 69 6f 6e 20 50 75 62 6c 69 63 20 53 74 61  egion Public Sta
d250: 74 69 63 20 4d 65 74 68 6f 64 73 0d 0a 20 20 20  tic Methods..   
d260: 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
d270: 73 74 61 74 69 63 20 76 6f 69 64 20 52 65 69 6e  static void Rein
d280: 69 74 69 61 6c 69 7a 65 44 65 66 61 75 6c 74 52  itializeDefaultR
d290: 65 67 69 73 74 72 69 65 73 28 0d 0a 20 20 20 20  egistries(..    
d2a0: 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
d2b0: 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20   whatIf,..      
d2c0: 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 73            bool s
d2d0: 61 66 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  afe..           
d2e0: 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
d2f0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
d300: 20 20 20 20 20 20 20 69 66 20 28 72 65 61 64 4f         if (readO
d310: 6e 6c 79 52 65 67 69 73 74 72 79 20 21 3d 20 6e  nlyRegistry != n
d320: 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
d330: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
d340: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 61               rea
d350: 64 4f 6e 6c 79 52 65 67 69 73 74 72 79 2e 44 69  dOnlyRegistry.Di
d360: 73 70 6f 73 65 28 29 3b 0d 0a 20 20 20 20 20 20  spose();..      
d370: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
d380: 61 64 4f 6e 6c 79 52 65 67 69 73 74 72 79 20 3d  adOnlyRegistry =
d390: 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20   null;..        
d3a0: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
d3b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
d3c0: 28 72 65 61 64 57 72 69 74 65 52 65 67 69 73 74  (readWriteRegist
d3d0: 72 79 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ry != null)..   
d3e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
d3f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d400: 20 20 20 20 72 65 61 64 57 72 69 74 65 52 65 67      readWriteReg
d410: 69 73 74 72 79 2e 44 69 73 70 6f 73 65 28 29 3b  istry.Dispose();
d420: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
d430: 20 20 20 20 20 20 72 65 61 64 57 72 69 74 65 52        readWriteR
d440: 65 67 69 73 74 72 79 20 3d 20 6e 75 6c 6c 3b 0d  egistry = null;.
d450: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
d460: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
d470: 20 20 20 20 20 20 72 65 61 64 4f 6e 6c 79 52 65        readOnlyRe
d480: 67 69 73 74 72 79 20 3d 20 6e 65 77 20 4d 6f 63  gistry = new Moc
d490: 6b 52 65 67 69 73 74 72 79 28 77 68 61 74 49 66  kRegistry(whatIf
d4a0: 2c 20 74 72 75 65 2c 20 73 61 66 65 29 3b 0d 0a  , true, safe);..
d4b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d4c0: 72 65 61 64 57 72 69 74 65 52 65 67 69 73 74 72  readWriteRegistr
d4d0: 79 20 3d 20 6e 65 77 20 4d 6f 63 6b 52 65 67 69  y = new MockRegi
d4e0: 73 74 72 79 28 77 68 61 74 49 66 2c 20 66 61 6c  stry(whatIf, fal
d4f0: 73 65 2c 20 73 61 66 65 29 3b 0d 0a 20 20 20 20  se, safe);..    
d500: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
d510: 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
d520: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d530: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d540: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d550: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
d560: 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
d570: 69 63 20 73 74 61 74 69 63 20 4d 6f 63 6b 52 65  ic static MockRe
d580: 67 69 73 74 72 79 4b 65 79 20 47 65 74 52 65 61  gistryKey GetRea
d590: 64 4f 6e 6c 79 52 6f 6f 74 4b 65 79 28 0d 0a 20  dOnlyRootKey(.. 
d5a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
d5b0: 74 72 69 6e 67 20 6e 61 6d 65 0d 0a 20 20 20 20  tring name..    
d5c0: 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
d5d0: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
d5e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
d5f0: 74 75 72 6e 20 47 65 74 52 6f 6f 74 4b 65 79 28  turn GetRootKey(
d600: 72 65 61 64 4f 6e 6c 79 52 65 67 69 73 74 72 79  readOnlyRegistry
d610: 2c 20 6e 61 6d 65 29 3b 0d 0a 20 20 20 20 20 20  , name);..      
d620: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
d630: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
d640: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d650: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d660: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d670: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
d680: 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
d690: 20 73 74 61 74 69 63 20 4d 6f 63 6b 52 65 67 69   static MockRegi
d6a0: 73 74 72 79 4b 65 79 20 47 65 74 52 65 61 64 57  stryKey GetReadW
d6b0: 72 69 74 65 52 6f 6f 74 4b 65 79 28 0d 0a 20 20  riteRootKey(..  
d6c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
d6d0: 72 69 6e 67 20 6e 61 6d 65 0d 0a 20 20 20 20 20  ring name..     
d6e0: 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
d6f0: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
d700: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
d710: 75 72 6e 20 47 65 74 52 6f 6f 74 4b 65 79 28 72  urn GetRootKey(r
d720: 65 61 64 57 72 69 74 65 52 65 67 69 73 74 72 79  eadWriteRegistry
d730: 2c 20 6e 61 6d 65 29 3b 0d 0a 20 20 20 20 20 20  , name);..      
d740: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
d750: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
d760: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d770: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d780: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d790: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
d7a0: 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
d7b0: 20 73 74 61 74 69 63 20 4d 6f 63 6b 52 65 67 69   static MockRegi
d7c0: 73 74 72 79 4b 65 79 20 47 65 74 52 6f 6f 74 4b  stryKey GetRootK
d7d0: 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ey(..           
d7e0: 20 20 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72       MockRegistr
d7f0: 79 20 72 65 67 69 73 74 72 79 2c 0d 0a 20 20 20  y registry,..   
d800: 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72               str
d810: 69 6e 67 20 6e 61 6d 65 0d 0a 20 20 20 20 20 20  ing name..      
d820: 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
d830: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
d840: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
d850: 72 65 67 69 73 74 72 79 20 3d 3d 20 6e 75 6c 6c  registry == null
d860: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
d870: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 75         return nu
d880: 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ll;....         
d890: 20 20 20 20 20 20 20 69 66 20 28 53 74 72 69 6e         if (Strin
d8a0: 67 2e 45 71 75 61 6c 73 28 0d 0a 20 20 20 20 20  g.Equals(..     
d8b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d8c0: 20 20 20 6e 61 6d 65 2c 20 52 65 67 69 73 74 72     name, Registr
d8d0: 79 52 6f 6f 74 4b 65 79 4e 61 6d 65 73 2e 48 4b  yRootKeyNames.HK
d8e0: 45 59 5f 43 4c 41 53 53 45 53 5f 52 4f 4f 54 2c  EY_CLASSES_ROOT,
d8f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
d900: 20 20 20 20 20 20 20 20 20 20 53 74 72 69 6e 67            String
d910: 43 6f 6d 70 61 72 69 73 6f 6e 2e 4f 72 64 69 6e  Comparison.Ordin
d920: 61 6c 49 67 6e 6f 72 65 43 61 73 65 29 20 7c 7c  alIgnoreCase) ||
d930: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
d940: 20 20 20 20 20 20 53 74 72 69 6e 67 2e 45 71 75        String.Equ
d950: 61 6c 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20  als(..          
d960: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 61                na
d970: 6d 65 2c 20 52 65 67 69 73 74 72 79 52 6f 6f 74  me, RegistryRoot
d980: 4b 65 79 4e 61 6d 65 73 2e 48 4b 43 52 2c 0d 0a  KeyNames.HKCR,..
d990: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d9a0: 20 20 20 20 20 20 20 20 53 74 72 69 6e 67 43 6f          StringCo
d9b0: 6d 70 61 72 69 73 6f 6e 2e 4f 72 64 69 6e 61 6c  mparison.Ordinal
d9c0: 49 67 6e 6f 72 65 43 61 73 65 29 29 0d 0a 20 20  IgnoreCase))..  
d9d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
d9e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
d9f0: 20 20 20 20 20 72 65 74 75 72 6e 20 72 65 67 69       return regi
da00: 73 74 72 79 2e 43 6c 61 73 73 65 73 52 6f 6f 74  stry.ClassesRoot
da10: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
da20: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
da30: 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 53        else if (S
da40: 74 72 69 6e 67 2e 45 71 75 61 6c 73 28 0d 0a 20  tring.Equals(.. 
da50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
da60: 20 20 20 20 20 20 20 6e 61 6d 65 2c 20 52 65 67         name, Reg
da70: 69 73 74 72 79 52 6f 6f 74 4b 65 79 4e 61 6d 65  istryRootKeyName
da80: 73 2e 48 4b 45 59 5f 43 55 52 52 45 4e 54 5f 43  s.HKEY_CURRENT_C
da90: 4f 4e 46 49 47 2c 0d 0a 20 20 20 20 20 20 20 20  ONFIG,..        
daa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dab0: 53 74 72 69 6e 67 43 6f 6d 70 61 72 69 73 6f 6e  StringComparison
dac0: 2e 4f 72 64 69 6e 61 6c 49 67 6e 6f 72 65 43 61  .OrdinalIgnoreCa
dad0: 73 65 29 20 7c 7c 0d 0a 20 20 20 20 20 20 20 20  se) ||..        
dae0: 20 20 20 20 20 20 20 20 20 20 20 20 53 74 72 69              Stri
daf0: 6e 67 2e 45 71 75 61 6c 73 28 0d 0a 20 20 20 20  ng.Equals(..    
db00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
db10: 20 20 20 20 6e 61 6d 65 2c 20 52 65 67 69 73 74      name, Regist
db20: 72 79 52 6f 6f 74 4b 65 79 4e 61 6d 65 73 2e 48  ryRootKeyNames.H
db30: 4b 43 43 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  KCC,..          
db40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 74                St
db50: 72 69 6e 67 43 6f 6d 70 61 72 69 73 6f 6e 2e 4f  ringComparison.O
db60: 72 64 69 6e 61 6c 49 67 6e 6f 72 65 43 61 73 65  rdinalIgnoreCase
db70: 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
db80: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
db90: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
dba0: 6e 20 72 65 67 69 73 74 72 79 2e 43 75 72 72 65  n registry.Curre
dbb0: 6e 74 43 6f 6e 66 69 67 3b 0d 0a 20 20 20 20 20  ntConfig;..     
dbc0: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
dbd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c                el
dbe0: 73 65 20 69 66 20 28 53 74 72 69 6e 67 2e 45 71  se if (String.Eq
dbf0: 75 61 6c 73 28 0d 0a 20 20 20 20 20 20 20 20 20  uals(..         
dc00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e                 n
dc10: 61 6d 65 2c 20 52 65 67 69 73 74 72 79 52 6f 6f  ame, RegistryRoo
dc20: 74 4b 65 79 4e 61 6d 65 73 2e 48 4b 45 59 5f 43  tKeyNames.HKEY_C
dc30: 55 52 52 45 4e 54 5f 55 53 45 52 2c 0d 0a 20 20  URRENT_USER,..  
dc40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dc50: 20 20 20 20 20 20 53 74 72 69 6e 67 43 6f 6d 70        StringComp
dc60: 61 72 69 73 6f 6e 2e 4f 72 64 69 6e 61 6c 49 67  arison.OrdinalIg
dc70: 6e 6f 72 65 43 61 73 65 29 20 7c 7c 0d 0a 20 20  noreCase) ||..  
dc80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dc90: 20 20 53 74 72 69 6e 67 2e 45 71 75 61 6c 73 28    String.Equals(
dca0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
dcb0: 20 20 20 20 20 20 20 20 20 20 6e 61 6d 65 2c 20            name, 
dcc0: 52 65 67 69 73 74 72 79 52 6f 6f 74 4b 65 79 4e  RegistryRootKeyN
dcd0: 61 6d 65 73 2e 48 4b 43 55 2c 0d 0a 20 20 20 20  ames.HKCU,..    
dce0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dcf0: 20 20 20 20 53 74 72 69 6e 67 43 6f 6d 70 61 72      StringCompar
dd00: 69 73 6f 6e 2e 4f 72 64 69 6e 61 6c 49 67 6e 6f  ison.OrdinalIgno
dd10: 72 65 43 61 73 65 29 29 0d 0a 20 20 20 20 20 20  reCase))..      
dd20: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
dd30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dd40: 20 72 65 74 75 72 6e 20 72 65 67 69 73 74 72 79   return registry
dd50: 2e 43 75 72 72 65 6e 74 55 73 65 72 3b 0d 0a 20  .CurrentUser;.. 
dd60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
dd70: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
dd80: 20 20 65 6c 73 65 20 69 66 20 28 53 74 72 69 6e    else if (Strin
dd90: 67 2e 45 71 75 61 6c 73 28 0d 0a 20 20 20 20 20  g.Equals(..     
dda0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ddb0: 20 20 20 6e 61 6d 65 2c 20 52 65 67 69 73 74 72     name, Registr
ddc0: 79 52 6f 6f 74 4b 65 79 4e 61 6d 65 73 2e 48 4b  yRootKeyNames.HK
ddd0: 45 59 5f 44 59 4e 5f 44 41 54 41 2c 0d 0a 20 20  EY_DYN_DATA,..  
dde0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ddf0: 20 20 20 20 20 20 53 74 72 69 6e 67 43 6f 6d 70        StringComp
de00: 61 72 69 73 6f 6e 2e 4f 72 64 69 6e 61 6c 49 67  arison.OrdinalIg
de10: 6e 6f 72 65 43 61 73 65 29 20 7c 7c 0d 0a 20 20  noreCase) ||..  
de20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
de30: 20 20 53 74 72 69 6e 67 2e 45 71 75 61 6c 73 28    String.Equals(
de40: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
de50: 20 20 20 20 20 20 20 20 20 20 6e 61 6d 65 2c 20            name, 
de60: 52 65 67 69 73 74 72 79 52 6f 6f 74 4b 65 79 4e  RegistryRootKeyN
de70: 61 6d 65 73 2e 48 4b 44 44 2c 0d 0a 20 20 20 20  ames.HKDD,..    
de80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
de90: 20 20 20 20 53 74 72 69 6e 67 43 6f 6d 70 61 72      StringCompar
dea0: 69 73 6f 6e 2e 4f 72 64 69 6e 61 6c 49 67 6e 6f  ison.OrdinalIgno
deb0: 72 65 43 61 73 65 29 29 0d 0a 20 20 20 20 20 20  reCase))..      
dec0: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
ded0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dee0: 20 72 65 74 75 72 6e 20 72 65 67 69 73 74 72 79   return registry
def0: 2e 44 79 6e 44 61 74 61 3b 0d 0a 20 20 20 20 20  .DynData;..     
df00: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
df10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c                el
df20: 73 65 20 69 66 20 28 53 74 72 69 6e 67 2e 45 71  se if (String.Eq
df30: 75 61 6c 73 28 0d 0a 20 20 20 20 20 20 20 20 20  uals(..         
df40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e                 n
df50: 61 6d 65 2c 20 52 65 67 69 73 74 72 79 52 6f 6f  ame, RegistryRoo
df60: 74 4b 65 79 4e 61 6d 65 73 2e 48 4b 45 59 5f 4c  tKeyNames.HKEY_L
df70: 4f 43 41 4c 5f 4d 41 43 48 49 4e 45 2c 0d 0a 20  OCAL_MACHINE,.. 
df80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
df90: 20 20 20 20 20 20 20 53 74 72 69 6e 67 43 6f 6d         StringCom
dfa0: 70 61 72 69 73 6f 6e 2e 4f 72 64 69 6e 61 6c 49  parison.OrdinalI
dfb0: 67 6e 6f 72 65 43 61 73 65 29 20 7c 7c 0d 0a 20  gnoreCase) ||.. 
dfc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dfd0: 20 20 20 53 74 72 69 6e 67 2e 45 71 75 61 6c 73     String.Equals
dfe0: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
dff0: 20 20 20 20 20 20 20 20 20 20 20 6e 61 6d 65 2c             name,
e000: 20 52 65 67 69 73 74 72 79 52 6f 6f 74 4b 65 79   RegistryRootKey
e010: 4e 61 6d 65 73 2e 48 4b 4c 4d 2c 0d 0a 20 20 20  Names.HKLM,..   
e020: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e030: 20 20 20 20 20 53 74 72 69 6e 67 43 6f 6d 70 61       StringCompa
e040: 72 69 73 6f 6e 2e 4f 72 64 69 6e 61 6c 49 67 6e  rison.OrdinalIgn
e050: 6f 72 65 43 61 73 65 29 29 0d 0a 20 20 20 20 20  oreCase))..     
e060: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
e070: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e080: 20 20 72 65 74 75 72 6e 20 72 65 67 69 73 74 72    return registr
e090: 79 2e 4c 6f 63 61 6c 4d 61 63 68 69 6e 65 3b 0d  y.LocalMachine;.
e0a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
e0b0: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
e0c0: 20 20 20 20 65 6c 73 65 20 69 66 20 28 53 74 72      else if (Str
e0d0: 69 6e 67 2e 45 71 75 61 6c 73 28 0d 0a 20 20 20  ing.Equals(..   
e0e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e0f0: 20 20 20 20 20 6e 61 6d 65 2c 20 52 65 67 69 73       name, Regis
e100: 74 72 79 52 6f 6f 74 4b 65 79 4e 61 6d 65 73 2e  tryRootKeyNames.
e110: 48 4b 45 59 5f 50 45 52 46 4f 52 4d 41 4e 43 45  HKEY_PERFORMANCE
e120: 5f 44 41 54 41 2c 0d 0a 20 20 20 20 20 20 20 20  _DATA,..        
e130: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e140: 53 74 72 69 6e 67 43 6f 6d 70 61 72 69 73 6f 6e  StringComparison
e150: 2e 4f 72 64 69 6e 61 6c 49 67 6e 6f 72 65 43 61  .OrdinalIgnoreCa
e160: 73 65 29 20 7c 7c 0d 0a 20 20 20 20 20 20 20 20  se) ||..        
e170: 20 20 20 20 20 20 20 20 20 20 20 20 53 74 72 69              Stri
e180: 6e 67 2e 45 71 75 61 6c 73 28 0d 0a 20 20 20 20  ng.Equals(..    
e190: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e1a0: 20 20 20 20 6e 61 6d 65 2c 20 52 65 67 69 73 74      name, Regist
e1b0: 72 79 52 6f 6f 74 4b 65 79 4e 61 6d 65 73 2e 48  ryRootKeyNames.H
e1c0: 4b 50 44 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  KPD,..          
e1d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 74                St
e1e0: 72 69 6e 67 43 6f 6d 70 61 72 69 73 6f 6e 2e 4f  ringComparison.O
e1f0: 72 64 69 6e 61 6c 49 67 6e 6f 72 65 43 61 73 65  rdinalIgnoreCase
e200: 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
e210: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
e220: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
e230: 6e 20 72 65 67 69 73 74 72 79 2e 50 65 72 66 6f  n registry.Perfo
e240: 72 6d 61 6e 63 65 44 61 74 61 3b 0d 0a 20 20 20  rmanceData;..   
e250: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
e260: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e270: 65 6c 73 65 20 69 66 20 28 53 74 72 69 6e 67 2e  else if (String.
e280: 45 71 75 61 6c 73 28 0d 0a 20 20 20 20 20 20 20  Equals(..       
e290: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e2a0: 20 6e 61 6d 65 2c 20 52 65 67 69 73 74 72 79 52   name, RegistryR
e2b0: 6f 6f 74 4b 65 79 4e 61 6d 65 73 2e 48 4b 45 59  ootKeyNames.HKEY
e2c0: 5f 55 53 45 52 53 2c 0d 0a 20 20 20 20 20 20 20  _USERS,..       
e2d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e2e0: 20 53 74 72 69 6e 67 43 6f 6d 70 61 72 69 73 6f   StringCompariso
e2f0: 6e 2e 4f 72 64 69 6e 61 6c 49 67 6e 6f 72 65 43  n.OrdinalIgnoreC
e300: 61 73 65 29 20 7c 7c 0d 0a 20 20 20 20 20 20 20  ase) ||..       
e310: 20 20 20 20 20 20 20 20 20 20 20 20 20 53 74 72               Str
e320: 69 6e 67 2e 45 71 75 61 6c 73 28 0d 0a 20 20 20  ing.Equals(..   
e330: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e340: 20 20 20 20 20 6e 61 6d 65 2c 20 52 65 67 69 73       name, Regis
e350: 74 72 79 52 6f 6f 74 4b 65 79 4e 61 6d 65 73 2e  tryRootKeyNames.
e360: 48 4b 55 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  HKU,..          
e370: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 74                St
e380: 72 69 6e 67 43 6f 6d 70 61 72 69 73 6f 6e 2e 4f  ringComparison.O
e390: 72 64 69 6e 61 6c 49 67 6e 6f 72 65 43 61 73 65  rdinalIgnoreCase
e3a0: 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
e3b0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
e3c0: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
e3d0: 6e 20 72 65 67 69 73 74 72 79 2e 55 73 65 72 73  n registry.Users
e3e0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
e3f0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
e400: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e          return n
e410: 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ull;..          
e420: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
e430: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
e440: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e450: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e460: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e470: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
e480: 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61        public sta
e490: 74 69 63 20 73 74 72 69 6e 67 20 4a 6f 69 6e 4b  tic string JoinK
e4a0: 65 79 4e 61 6d 65 73 28 0d 0a 20 20 20 20 20 20  eyNames(..      
e4b0: 20 20 20 20 20 20 20 20 20 20 70 61 72 61 6d 73            params
e4c0: 20 73 74 72 69 6e 67 5b 5d 20 6e 61 6d 65 73 0d   string[] names.
e4d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
e4e0: 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   )..            
e4f0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
e500: 20 20 20 69 66 20 28 28 6e 61 6d 65 73 20 3d 3d     if ((names ==
e510: 20 6e 75 6c 6c 29 20 7c 7c 20 28 6e 61 6d 65 73   null) || (names
e520: 2e 4c 65 6e 67 74 68 20 3d 3d 20 30 29 29 0d 0a  .Length == 0))..
e530: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e540: 20 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b      return null;
e550: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
e560: 20 20 20 20 53 74 72 69 6e 67 42 75 69 6c 64 65      StringBuilde
e570: 72 20 62 75 69 6c 64 65 72 20 3d 20 6e 65 77 20  r builder = new 
e580: 53 74 72 69 6e 67 42 75 69 6c 64 65 72 28 29 3b  StringBuilder();
e590: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
e5a0: 20 20 20 20 66 6f 72 65 61 63 68 20 28 73 74 72      foreach (str
e5b0: 69 6e 67 20 6e 61 6d 65 20 69 6e 20 6e 61 6d 65  ing name in name
e5c0: 73 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  s)..            
e5d0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
e5e0: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6e             if (n
e5f0: 61 6d 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  ame == null)..  
e600: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e610: 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d        continue;.
e620: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
e630: 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6e 65         string ne
e640: 77 4e 61 6d 65 20 3d 20 6e 61 6d 65 2e 54 72 69  wName = name.Tri
e650: 6d 28 4b 65 79 4e 61 6d 65 53 65 70 61 72 61 74  m(KeyNameSeparat
e660: 6f 72 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  or);....        
e670: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
e680: 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45  String.IsNullOrE
e690: 6d 70 74 79 28 6e 65 77 4e 61 6d 65 29 29 0d 0a  mpty(newName))..
e6a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e6b0: 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65          continue
e6c0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
e6d0: 20 20 20 20 20 20 20 20 20 69 66 20 28 62 75 69           if (bui
e6e0: 6c 64 65 72 2e 4c 65 6e 67 74 68 20 3e 20 30 29  lder.Length > 0)
e6f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
e700: 20 20 20 20 20 20 20 20 20 20 62 75 69 6c 64 65            builde
e710: 72 2e 41 70 70 65 6e 64 28 4b 65 79 4e 61 6d 65  r.Append(KeyName
e720: 53 65 70 61 72 61 74 6f 72 29 3b 0d 0a 0d 0a 20  Separator);.... 
e730: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e740: 20 20 20 62 75 69 6c 64 65 72 2e 41 70 70 65 6e     builder.Appen
e750: 64 28 6e 65 77 4e 61 6d 65 29 3b 0d 0a 20 20 20  d(newName);..   
e760: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
e770: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
e780: 20 20 72 65 74 75 72 6e 20 62 75 69 6c 64 65 72    return builder
e790: 2e 54 6f 53 74 72 69 6e 67 28 29 3b 0d 0a 20 20  .ToString();..  
e7a0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
e7b0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
e7c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e7d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e7e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e7f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
e800: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
e810: 62 6c 69 63 20 73 74 61 74 69 63 20 73 74 72 69  blic static stri
e820: 6e 67 20 4a 6f 69 6e 4b 65 79 4e 61 6d 65 73 28  ng JoinKeyNames(
e830: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
e840: 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65    MockRegistryKe
e850: 79 20 6b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20  y key,..        
e860: 20 20 20 20 20 20 20 20 70 61 72 61 6d 73 20 73          params s
e870: 74 72 69 6e 67 5b 5d 20 6e 61 6d 65 73 0d 0a 20  tring[] names.. 
e880: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29                 )
e890: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
e8a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
e8b0: 20 73 74 72 69 6e 67 20 72 65 73 75 6c 74 20 3d   string result =
e8c0: 20 4a 6f 69 6e 4b 65 79 4e 61 6d 65 73 28 6e 61   JoinKeyNames(na
e8d0: 6d 65 73 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  mes);....       
e8e0: 20 20 20 20 20 20 20 20 20 69 66 20 28 6b 65 79           if (key
e8f0: 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   != null)..     
e900: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
e910: 65 73 75 6c 74 20 3d 20 4a 6f 69 6e 4b 65 79 4e  esult = JoinKeyN
e920: 61 6d 65 73 28 6b 65 79 2e 4e 61 6d 65 2c 20 72  ames(key.Name, r
e930: 65 73 75 6c 74 29 3b 0d 0a 0d 0a 20 20 20 20 20  esult);....     
e940: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
e950: 6e 20 72 65 73 75 6c 74 3b 0d 0a 20 20 20 20 20  n result;..     
e960: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
e970: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
e980: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e990: 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20  ///////////.... 
e9c0: 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
e9d0: 63 20 73 74 61 74 69 63 20 73 74 72 69 6e 67 5b  c static string[
e9e0: 5d 20 53 70 6c 69 74 4b 65 79 4e 61 6d 65 28 0d  ] SplitKeyName(.
e9f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
ea00: 20 73 74 72 69 6e 67 20 6b 65 79 4e 61 6d 65 0d   string keyName.
ea10: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
ea20: 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   )..            
ea30: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
ea40: 20 20 20 69 66 20 28 6b 65 79 4e 61 6d 65 20 3d     if (keyName =
ea50: 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
ea60: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
ea70: 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20  urn null;....   
ea80: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
ea90: 75 72 6e 20 6b 65 79 4e 61 6d 65 2e 53 70 6c 69  urn keyName.Spli
eaa0: 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
eab0: 20 20 20 20 20 20 20 20 4b 65 79 4e 61 6d 65 53          KeyNameS
eac0: 65 70 61 72 61 74 6f 72 73 2c 20 53 74 72 69 6e  eparators, Strin
ead0: 67 53 70 6c 69 74 4f 70 74 69 6f 6e 73 2e 52 65  gSplitOptions.Re
eae0: 6d 6f 76 65 45 6d 70 74 79 45 6e 74 72 69 65 73  moveEmptyEntries
eaf0: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
eb00: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
eb10: 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
eb40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
eb50: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
eb60: 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69      public stati
eb70: 63 20 73 74 72 69 6e 67 20 4c 61 73 74 53 75 62  c string LastSub
eb80: 4b 65 79 4e 61 6d 65 28 0d 0a 20 20 20 20 20 20  KeyName(..      
eb90: 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
eba0: 20 6b 65 79 4e 61 6d 65 0d 0a 20 20 20 20 20 20   keyName..      
ebb0: 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
ebc0: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
ebd0: 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
ebe0: 6e 67 5b 5d 20 73 75 62 4b 65 79 4e 61 6d 65 73  ng[] subKeyNames
ebf0: 20 3d 20 53 70 6c 69 74 4b 65 79 4e 61 6d 65 28   = SplitKeyName(
ec00: 6b 65 79 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20  keyName);....   
ec10: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
ec20: 28 28 73 75 62 4b 65 79 4e 61 6d 65 73 20 3d 3d  ((subKeyNames ==
ec30: 20 6e 75 6c 6c 29 20 7c 7c 20 28 73 75 62 4b 65   null) || (subKe
ec40: 79 4e 61 6d 65 73 2e 4c 65 6e 67 74 68 20 3d 3d  yNames.Length ==
ec50: 20 30 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20   0))..          
ec60: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
ec70: 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20   null;....      
ec80: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
ec90: 20 73 75 62 4b 65 79 4e 61 6d 65 73 5b 73 75 62   subKeyNames[sub
eca0: 4b 65 79 4e 61 6d 65 73 2e 4c 65 6e 67 74 68 20  KeyNames.Length 
ecb0: 2d 20 31 5d 3b 0d 0a 20 20 20 20 20 20 20 20 20  - 1];..         
ecc0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
ecd0: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
ece0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ecf0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ed00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ed10: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
ed20: 20 20 20 20 20 20 20 5b 4d 65 74 68 6f 64 49 6d         [MethodIm
ed30: 70 6c 28 4d 65 74 68 6f 64 49 6d 70 6c 4f 70 74  pl(MethodImplOpt
ed40: 69 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e 69 6e 67 29  ions.NoInlining)
ed50: 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ]..            p
ed60: 75 62 6c 69 63 20 73 74 61 74 69 63 20 4d 6f 63  ublic static Moc
ed70: 6b 52 65 67 69 73 74 72 79 4b 65 79 20 4f 70 65  kRegistryKey Ope
ed80: 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20  nSubKey(..      
ed90: 20 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65            MockRe
eda0: 67 69 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65  gistryKey rootKe
edb0: 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y,..            
edc0: 20 20 20 20 73 74 72 69 6e 67 20 73 75 62 4b 65      string subKe
edd0: 79 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20  yName,..        
ede0: 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 72 69          bool wri
edf0: 74 61 62 6c 65 2c 0d 0a 20 20 20 20 20 20 20 20  table,..        
ee00: 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61          bool wha
ee10: 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  tIf,..          
ee20: 20 20 20 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f        bool verbo
ee30: 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  se..            
ee40: 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20      )..         
ee50: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
ee60: 20 20 20 20 20 20 69 66 20 28 76 65 72 62 6f 73        if (verbos
ee70: 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e)..            
ee80: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
ee90: 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
eea0: 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63  Ops.DebugAndTrac
eeb0: 65 28 77 72 69 74 61 62 6c 65 20 3f 0d 0a 20 20  e(writable ?..  
eec0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
eed0: 20 20 20 20 20 20 54 72 61 63 65 50 72 69 6f 72        TracePrior
eee0: 69 74 79 2e 48 69 67 68 65 73 74 20 3a 20 54 72  ity.Highest : Tr
eef0: 61 63 65 50 72 69 6f 72 69 74 79 2e 48 69 67 68  acePriority.High
ef00: 65 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  er,..           
ef10: 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65 62               deb
ef20: 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63  ugCallback, trac
ef30: 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e  eCallback, Strin
ef40: 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
ef50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ef60: 20 20 20 22 72 6f 6f 74 4b 65 79 20 3d 20 7b 30     "rootKey = {0
ef70: 7d 2c 20 73 75 62 4b 65 79 4e 61 6d 65 20 3d 20  }, subKeyName = 
ef80: 7b 31 7d 2c 20 77 72 69 74 61 62 6c 65 20 3d 20  {1}, writable = 
ef90: 7b 32 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  {2}",..         
efa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46                 F
efb0: 6f 72 44 69 73 70 6c 61 79 28 72 6f 6f 74 4b 65  orDisplay(rootKe
efc0: 79 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 73  y), ForDisplay(s
efd0: 75 62 4b 65 79 4e 61 6d 65 29 2c 0d 0a 20 20 20  ubKeyName),..   
efe0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
eff0: 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28       ForDisplay(
f000: 77 72 69 74 61 62 6c 65 29 29 2c 20 74 72 61 63  writable)), trac
f010: 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 20 20 20  eCategory);..   
f020: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
f030: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
f040: 20 20 69 66 20 28 72 6f 6f 74 4b 65 79 20 3d 3d    if (rootKey ==
f050: 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
f060: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
f070: 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20  rn null;....    
f080: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
f090: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f0a0: 2f 2f 20 48 41 43 4b 3a 20 41 6c 77 61 79 73 20  // HACK: Always 
f0b0: 66 6f 72 62 69 64 20 77 72 69 74 61 62 6c 65 20  forbid writable 
f0c0: 61 63 63 65 73 73 20 77 68 65 6e 20 6f 70 65 72  access when oper
f0d0: 61 74 69 6e 67 20 69 6e 0d 0a 20 20 20 20 20 20  ating in..      
f0e0: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
f0f0: 20 20 20 22 77 68 61 74 2d 69 66 22 20 6d 6f 64     "what-if" mod
f100: 65 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e...            
f110: 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
f120: 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65 67 69          MockRegi
f130: 73 74 72 79 4b 65 79 20 6b 65 79 20 3d 20 72 6f  stryKey key = ro
f140: 6f 74 4b 65 79 2e 4f 70 65 6e 53 75 62 4b 65 79  otKey.OpenSubKey
f150: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
f160: 20 20 20 20 20 20 20 73 75 62 4b 65 79 4e 61 6d         subKeyNam
f170: 65 2c 20 77 68 61 74 49 66 20 3f 20 66 61 6c 73  e, whatIf ? fals
f180: 65 20 3a 20 77 72 69 74 61 62 6c 65 29 3b 0d 0a  e : writable);..
f190: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
f1a0: 20 20 72 65 74 75 72 6e 20 28 6b 65 79 20 21 3d    return (key !=
f1b0: 20 6e 75 6c 6c 29 20 3f 0d 0a 20 20 20 20 20 20   null) ?..      
f1c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 65                ne
f1d0: 77 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65  w MockRegistryKe
f1e0: 79 28 6b 65 79 2c 20 77 68 61 74 49 66 2c 20 66  y(key, whatIf, f
f1f0: 61 6c 73 65 2c 20 66 61 6c 73 65 29 20 3a 20 6e  alse, false) : n
f200: 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ull;..          
f210: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
f220: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
f230: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f240: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f250: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f260: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
f270: 20 20 20 20 20 20 5b 4d 65 74 68 6f 64 49 6d 70        [MethodImp
f280: 6c 28 4d 65 74 68 6f 64 49 6d 70 6c 4f 70 74 69  l(MethodImplOpti
f290: 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e 69 6e 67 29 5d  ons.NoInlining)]
f2a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
f2b0: 62 6c 69 63 20 73 74 61 74 69 63 20 4d 6f 63 6b  blic static Mock
f2c0: 52 65 67 69 73 74 72 79 4b 65 79 20 43 72 65 61  RegistryKey Crea
f2d0: 74 65 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20  teSubKey(..     
f2e0: 20 20 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52             MockR
f2f0: 65 67 69 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b  egistryKey rootK
f300: 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ey,..           
f310: 20 20 20 20 20 73 74 72 69 6e 67 20 73 75 62 4b       string subK
f320: 65 79 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20  eyName,..       
f330: 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68           bool wh
f340: 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20  atIf,..         
f350: 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65 72 62         bool verb
f360: 6f 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ose..           
f370: 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
f380: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
f390: 20 20 20 20 20 20 20 69 66 20 28 76 65 72 62 6f         if (verbo
f3a0: 73 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se)..           
f3b0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
f3c0: 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
f3d0: 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61  eOps.DebugAndTra
f3e0: 63 65 28 54 72 61 63 65 50 72 69 6f 72 69 74 79  ce(TracePriority
f3f0: 2e 48 69 67 68 65 73 74 2c 0d 0a 20 20 20 20 20  .Highest,..     
f400: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f410: 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b     debugCallback
f420: 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c  , traceCallback,
f430: 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d   String.Format(.
f440: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
f450: 20 20 20 20 20 20 20 20 20 22 72 6f 6f 74 4b 65           "rootKe
f460: 79 20 3d 20 7b 30 7d 2c 20 73 75 62 4b 65 79 4e  y = {0}, subKeyN
f470: 61 6d 65 20 3d 20 7b 31 7d 22 2c 0d 0a 20 20 20  ame = {1}",..   
f480: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f490: 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28       ForDisplay(
f4a0: 72 6f 6f 74 4b 65 79 29 2c 20 46 6f 72 44 69 73  rootKey), ForDis
f4b0: 70 6c 61 79 28 73 75 62 4b 65 79 4e 61 6d 65 29  play(subKeyName)
f4c0: 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
f4d0: 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
f4e0: 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 20 20 20  eCategory);..   
f4f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
f500: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
f510: 20 20 69 66 20 28 72 6f 6f 74 4b 65 79 20 3d 3d    if (rootKey ==
f520: 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
f530: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
f540: 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20  rn null;....    
f550: 20 20 20 20 20 20 20 20 20 20 20 20 74 72 79 0d              try.
f560: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
f570: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
f580: 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
f590: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f5a0: 2f 2f 20 48 41 43 4b 3a 20 41 6c 77 61 79 73 20  // HACK: Always 
f5b0: 6f 70 65 6e 20 61 20 6b 65 79 2c 20 72 61 74 68  open a key, rath
f5c0: 65 72 20 74 68 61 6e 20 63 72 65 61 74 69 6e 67  er than creating
f5d0: 20 6f 6e 65 20 77 68 65 6e 0d 0a 20 20 20 20 20   one when..     
f5e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
f5f0: 2f 20 20 20 20 20 20 20 6f 70 65 72 61 74 69 6e  /       operatin
f600: 67 20 69 6e 20 22 77 68 61 74 2d 69 66 22 20 6d  g in "what-if" m
f610: 6f 64 65 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  ode...          
f620: 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
f630: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f640: 20 20 69 66 20 28 77 68 61 74 49 66 29 0d 0a 20    if (whatIf).. 
f650: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f660: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
f670: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
f680: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
f690: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 48 41 43            // HAC
f6a0: 4b 3a 20 41 74 74 65 6d 70 74 20 74 6f 20 6f 70  K: Attempt to op
f6b0: 65 6e 20 74 68 65 20 73 70 65 63 69 66 69 65 64  en the specified
f6c0: 20 73 75 62 2d 6b 65 79 2e 20 20 49 66 0d 0a 20   sub-key.  If.. 
f6d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f6e0: 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
f6f0: 74 68 69 73 20 66 61 69 6c 73 2c 20 77 65 20 77  this fails, we w
f700: 69 6c 6c 20 73 69 6d 70 6c 79 20 72 65 74 75 72  ill simply retur
f710: 6e 20 74 68 65 20 72 6f 6f 74 0d 0a 20 20 20 20  n the root..    
f720: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f730: 20 20 20 20 2f 2f 20 20 20 20 20 20 20 6b 65 79      //       key
f740: 20 69 74 73 65 6c 66 20 73 69 6e 63 65 20 6e 6f   itself since no
f750: 20 77 72 69 74 65 73 20 61 72 65 20 61 6c 6c 6f   writes are allo
f760: 77 65 64 20 69 6e 0d 0a 20 20 20 20 20 20 20 20  wed in..        
f770: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f780: 2f 2f 20 20 20 20 20 20 20 22 77 68 61 74 2d 69  //       "what-i
f790: 66 22 20 6d 6f 64 65 20 61 6e 79 68 6f 77 2e 0d  f" mode anyhow..
f7a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
f7b0: 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
f7c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f7d0: 20 20 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72       MockRegistr
f7e0: 79 4b 65 79 20 6b 65 79 20 3d 20 72 6f 6f 74 4b  yKey key = rootK
f7f0: 65 79 2e 4f 70 65 6e 53 75 62 4b 65 79 28 73 75  ey.OpenSubKey(su
f800: 62 4b 65 79 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20  bKeyName);....  
f810: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f820: 20 20 20 20 20 20 72 65 74 75 72 6e 20 28 6b 65        return (ke
f830: 79 20 21 3d 20 6e 75 6c 6c 29 20 3f 0d 0a 20 20  y != null) ?..  
f840: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f850: 20 20 20 20 20 20 20 20 20 20 6b 65 79 20 3a 20            key : 
f860: 6e 65 77 20 4d 6f 63 6b 52 65 67 69 73 74 72 79  new MockRegistry
f870: 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20  Key(..          
f880: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f890: 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 73        rootKey, s
f8a0: 75 62 4b 65 79 4e 61 6d 65 2c 20 77 68 61 74 49  ubKeyName, whatI
f8b0: 66 2c 20 66 61 6c 73 65 2c 20 66 61 6c 73 65 29  f, false, false)
f8c0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
f8d0: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
f8e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c                el
f8f0: 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  se..            
f900: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
f910: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f920: 20 20 20 72 65 74 75 72 6e 20 6e 65 77 20 4d 6f     return new Mo
f930: 63 6b 52 65 67 69 73 74 72 79 4b 65 79 28 0d 0a  ckRegistryKey(..
f940: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f950: 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74              root
f960: 4b 65 79 2e 43 72 65 61 74 65 53 75 62 4b 65 79  Key.CreateSubKey
f970: 28 73 75 62 4b 65 79 4e 61 6d 65 29 2c 20 77 68  (subKeyName), wh
f980: 61 74 49 66 2c 20 66 61 6c 73 65 2c 0d 0a 20 20  atIf, false,..  
f990: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f9a0: 20 20 20 20 20 20 20 20 20 20 66 61 6c 73 65 29            false)
f9b0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
f9c0: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
f9d0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
f9e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 66 69 6e               fin
f9f0: 61 6c 6c 79 0d 0a 20 20 20 20 20 20 20 20 20 20  ally..          
fa00: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
fa10: 20 20 20 20 20 20 20 20 20 20 20 20 20 73 75 62               sub
fa20: 4b 65 79 73 43 72 65 61 74 65 64 2b 2b 3b 0d 0a  KeysCreated++;..
fa30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fa40: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
fa50: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
fa60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fa70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fa80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fa90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
faa0: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
fab0: 20 20 20 5b 4d 65 74 68 6f 64 49 6d 70 6c 28 4d     [MethodImpl(M
fac0: 65 74 68 6f 64 49 6d 70 6c 4f 70 74 69 6f 6e 73  ethodImplOptions
fad0: 2e 4e 6f 49 6e 6c 69 6e 69 6e 67 29 5d 0d 0a 20  .NoInlining)].. 
fae0: 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
faf0: 63 20 73 74 61 74 69 63 20 76 6f 69 64 20 44 65  c static void De
fb00: 6c 65 74 65 53 75 62 4b 65 79 28 0d 0a 20 20 20  leteSubKey(..   
fb10: 20 20 20 20 20 20 20 20 20 20 20 20 20 4d 6f 63               Moc
fb20: 6b 52 65 67 69 73 74 72 79 4b 65 79 20 72 6f 6f  kRegistryKey roo
fb30: 74 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20  tKey,..         
fb40: 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 73 75         string su
fb50: 62 4b 65 79 4e 61 6d 65 2c 0d 0a 20 20 20 20 20  bKeyName,..     
fb60: 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
fb70: 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 2c 0d  throwOnMissing,.
fb80: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
fb90: 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20   bool whatIf,.. 
fba0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62                 b
fbb0: 6f 6f 6c 20 76 65 72 62 6f 73 65 0d 0a 20 20 20  ool verbose..   
fbc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a               )..
fbd0: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
fbe0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
fbf0: 66 20 28 76 65 72 62 6f 73 65 29 0d 0a 20 20 20  f (verbose)..   
fc00: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
fc10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fc20: 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62      TraceOps.Deb
fc30: 75 67 41 6e 64 54 72 61 63 65 28 54 72 61 63 65  ugAndTrace(Trace
fc40: 50 72 69 6f 72 69 74 79 2e 48 69 67 68 65 73 74  Priority.Highest
fc50: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
fc60: 20 20 20 20 20 20 20 20 20 20 20 64 65 62 75 67             debug
fc70: 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43  Callback, traceC
fc80: 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e  allback, String.
fc90: 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
fca0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fcb0: 20 22 72 6f 6f 74 4b 65 79 20 3d 20 7b 30 7d 2c   "rootKey = {0},
fcc0: 20 73 75 62 4b 65 79 4e 61 6d 65 20 3d 20 7b 31   subKeyName = {1
fcd0: 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }",..           
fce0: 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72               For
fcf0: 44 69 73 70 6c 61 79 28 72 6f 6f 74 4b 65 79 29  Display(rootKey)
fd00: 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 73 75 62  , ForDisplay(sub
fd10: 4b 65 79 4e 61 6d 65 29 29 2c 0d 0a 20 20 20 20  KeyName)),..    
fd20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fd30: 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72      traceCategor
fd40: 79 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  y);..           
fd50: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
fd60: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 72 6f            if (ro
fd70: 6f 74 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  otKey == null)..
fd80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fd90: 20 20 20 20 72 65 74 75 72 6e 3b 0d 0a 0d 0a 20      return;.... 
fda0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
fdb0: 66 20 28 21 77 68 61 74 49 66 29 0d 0a 20 20 20  f (!whatIf)..   
fdc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fdd0: 20 72 6f 6f 74 4b 65 79 2e 44 65 6c 65 74 65 53   rootKey.DeleteS
fde0: 75 62 4b 65 79 28 73 75 62 4b 65 79 4e 61 6d 65  ubKey(subKeyName
fdf0: 2c 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67  , throwOnMissing
fe00: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
fe10: 20 20 20 20 20 20 73 75 62 4b 65 79 73 44 65 6c        subKeysDel
fe20: 65 74 65 64 2b 2b 3b 0d 0a 20 20 20 20 20 20 20  eted++;..       
fe30: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
fe40: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
fe50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fe60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fe70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fe80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
fe90: 20 20 20 20 20 20 20 20 20 5b 4d 65 74 68 6f 64           [Method
fea0: 49 6d 70 6c 28 4d 65 74 68 6f 64 49 6d 70 6c 4f  Impl(MethodImplO
feb0: 70 74 69 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e 69 6e  ptions.NoInlinin
fec0: 67 29 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  g)]..           
fed0: 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 76   public static v
fee0: 6f 69 64 20 44 65 6c 65 74 65 53 75 62 4b 65 79  oid DeleteSubKey
fef0: 54 72 65 65 28 0d 0a 20 20 20 20 20 20 20 20 20  Tree(..         
ff00: 20 20 20 20 20 20 20 4d 6f 63 6b 52 65 67 69 73         MockRegis
ff10: 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79 2c 0d  tryKey rootKey,.
ff20: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
ff30: 20 73 74 72 69 6e 67 20 73 75 62 4b 65 79 4e 61   string subKeyNa
ff40: 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me,..           
ff50: 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66       bool whatIf
ff60: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
ff70: 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 0d     bool verbose.
ff80: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
ff90: 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   )..            
ffa0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
ffb0: 20 20 20 69 66 20 28 76 65 72 62 6f 73 65 29 0d     if (verbose).
ffc0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
ffd0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
ffe0: 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73          TraceOps
fff0: 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 54  .DebugAndTrace(T
10000 72 61 63 65 50 72 69 6f 72 69 74 79 2e 48 69 67  racePriority.Hig
10010 68 65 73 74 2c 0d 0a 20 20 20 20 20 20 20 20 20  hest,..         
10020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64                 d
10030 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72  ebugCallback, tr
10040 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72  aceCallback, Str
10050 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
10060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10070 20 20 20 20 20 22 72 6f 6f 74 4b 65 79 20 3d 20       "rootKey = 
10080 7b 30 7d 2c 20 73 75 62 4b 65 79 4e 61 6d 65 20  {0}, subKeyName 
10090 3d 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20  = {1}",..       
100a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
100b0 20 46 6f 72 44 69 73 70 6c 61 79 28 72 6f 6f 74   ForDisplay(root
100c0 4b 65 79 29 2c 20 46 6f 72 44 69 73 70 6c 61 79  Key), ForDisplay
100d0 28 73 75 62 4b 65 79 4e 61 6d 65 29 29 2c 0d 0a  (subKeyName)),..
100e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
100f0 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74          traceCat
10100 65 67 6f 72 79 29 3b 0d 0a 20 20 20 20 20 20 20  egory);..       
10110 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
10120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
10130 20 28 72 6f 6f 74 4b 65 79 20 3d 3d 20 6e 75 6c   (rootKey == nul
10140 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
10150 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 3b 0d          return;.
10160 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
10170 20 20 20 69 66 20 28 21 77 68 61 74 49 66 29 0d     if (!whatIf).
10180 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
10190 20 20 20 20 20 72 6f 6f 74 4b 65 79 2e 44 65 6c       rootKey.Del
101a0 65 74 65 53 75 62 4b 65 79 54 72 65 65 28 73 75  eteSubKeyTree(su
101b0 62 4b 65 79 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20  bKeyName);....  
101c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 75                su
101d0 62 4b 65 79 73 44 65 6c 65 74 65 64 2b 2b 3b 0d  bKeysDeleted++;.
101e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
101f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
10200 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10210 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10220 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10230 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10240 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
10250 20 5b 4d 65 74 68 6f 64 49 6d 70 6c 28 4d 65 74   [MethodImpl(Met
10260 68 6f 64 49 6d 70 6c 4f 70 74 69 6f 6e 73 2e 4e  hodImplOptions.N
10270 6f 49 6e 6c 69 6e 69 6e 67 29 5d 0d 0a 20 20 20  oInlining)]..   
10280 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
10290 73 74 61 74 69 63 20 73 74 72 69 6e 67 5b 5d 20  static string[] 
102a0 47 65 74 53 75 62 4b 65 79 4e 61 6d 65 73 28 0d  GetSubKeyNames(.
102b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
102c0 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79   MockRegistryKey
102d0 20 6b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20   key,..         
102e0 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74         bool what
102f0 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  If,..           
10300 20 20 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73       bool verbos
10310 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e..             
10320 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20     )..          
10330 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
10340 20 20 20 20 20 69 66 20 28 76 65 72 62 6f 73 65       if (verbose
10350 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
10360 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
10370 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f            TraceO
10380 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65  ps.DebugAndTrace
10390 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 48  (TracePriority.H
103a0 69 67 68 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  igh,..          
103b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65                de
103c0 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61  bugCallback, tra
103d0 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69  ceCallback, Stri
103e0 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20  ng.Format(..    
103f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10400 20 20 20 20 22 6b 65 79 20 3d 20 7b 30 7d 22 2c      "key = {0}",
10410 20 46 6f 72 44 69 73 70 6c 61 79 28 6b 65 79 29   ForDisplay(key)
10420 29 2c 20 74 72 61 63 65 43 61 74 65 67 6f 72 79  ), traceCategory
10430 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
10440 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
10450 20 20 20 20 20 20 20 20 20 69 66 20 28 6b 65 79           if (key
10460 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
10470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
10480 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20  eturn null;.... 
10490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
104a0 65 74 75 72 6e 20 6b 65 79 2e 47 65 74 53 75 62  eturn key.GetSub
104b0 4b 65 79 4e 61 6d 65 73 28 29 3b 0d 0a 20 20 20  KeyNames();..   
104c0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
104d0 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
104e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
104f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10500 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10510 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
10520 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 4d 65  .            [Me
10530 74 68 6f 64 49 6d 70 6c 28 4d 65 74 68 6f 64 49  thodImpl(MethodI
10540 6d 70 6c 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e 6c  mplOptions.NoInl
10550 69 6e 69 6e 67 29 5d 0d 0a 20 20 20 20 20 20 20  ining)]..       
10560 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74       public stat
10570 69 63 20 6f 62 6a 65 63 74 20 47 65 74 56 61 6c  ic object GetVal
10580 75 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue(..           
10590 20 20 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72       MockRegistr
105a0 79 4b 65 79 20 6b 65 79 2c 0d 0a 20 20 20 20 20  yKey key,..     
105b0 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
105c0 67 20 6e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20  g name,..       
105d0 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20           object 
105e0 64 65 66 61 75 6c 74 56 61 6c 75 65 2c 0d 0a 20  defaultValue,.. 
105f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62                 b
10600 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20  ool whatIf,..   
10610 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f               boo
10620 6c 20 76 65 72 62 6f 73 65 0d 0a 20 20 20 20 20  l verbose..     
10630 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
10640 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
10650 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
10660 28 76 65 72 62 6f 73 65 29 0d 0a 20 20 20 20 20  (verbose)..     
10670 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
10680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10690 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67    TraceOps.Debug
106a0 41 6e 64 54 72 61 63 65 28 54 72 61 63 65 50 72  AndTrace(TracePr
106b0 69 6f 72 69 74 79 2e 48 69 67 68 2c 0d 0a 20 20  iority.High,..  
106c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
106d0 20 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62        debugCallb
106e0 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61  ack, traceCallba
106f0 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ck, String.Forma
10700 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
10710 20 20 20 20 20 20 20 20 20 20 20 20 22 6b 65 79              "key
10720 20 3d 20 7b 30 7d 2c 20 6e 61 6d 65 20 3d 20 7b   = {0}, name = {
10730 31 7d 2c 20 64 65 66 61 75 6c 74 56 61 6c 75 65  1}, defaultValue
10740 20 3d 20 7b 32 7d 22 2c 0d 0a 20 20 20 20 20 20   = {2}",..      
10750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10760 20 20 46 6f 72 44 69 73 70 6c 61 79 28 6b 65 79    ForDisplay(key
10770 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 6e 61  ), ForDisplay(na
10780 6d 65 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  me),..          
10790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f                Fo
107a0 72 44 69 73 70 6c 61 79 28 64 65 66 61 75 6c 74  rDisplay(default
107b0 56 61 6c 75 65 29 29 2c 20 74 72 61 63 65 43 61  Value)), traceCa
107c0 74 65 67 6f 72 79 29 3b 0d 0a 20 20 20 20 20 20  tegory);..      
107d0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
107e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
107f0 66 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d  f (key == null).
10800 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
10810 20 20 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c       return null
10820 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
10830 20 20 20 20 20 6f 62 6a 65 63 74 20 76 61 6c 75       object valu
10840 65 20 3d 20 6b 65 79 2e 47 65 74 56 61 6c 75 65  e = key.GetValue
10850 28 6e 61 6d 65 2c 20 64 65 66 61 75 6c 74 56 61  (name, defaultVa
10860 6c 75 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  lue);....       
10870 20 20 20 20 20 20 20 20 20 6b 65 79 56 61 6c 75           keyValu
10880 65 73 52 65 61 64 2b 2b 3b 0d 0a 0d 0a 20 20 20  esRead++;....   
10890 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
108a0 75 72 6e 20 76 61 6c 75 65 3b 0d 0a 20 20 20 20  urn value;..    
108b0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
108c0 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
108d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
108e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
108f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10900 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
10910 20 20 20 20 20 20 20 20 20 20 20 20 5b 4d 65 74              [Met
10920 68 6f 64 49 6d 70 6c 28 4d 65 74 68 6f 64 49 6d  hodImpl(MethodIm
10930 70 6c 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e 6c 69  plOptions.NoInli
10940 6e 69 6e 67 29 5d 0d 0a 20 20 20 20 20 20 20 20  ning)]..        
10950 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69      public stati
10960 63 20 76 6f 69 64 20 53 65 74 56 61 6c 75 65 28  c void SetValue(
10970 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
10980 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65    MockRegistryKe
10990 79 20 6b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20  y key,..        
109a0 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6e          string n
109b0 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ame,..          
109c0 20 20 20 20 20 20 6f 62 6a 65 63 74 20 76 61 6c        object val
109d0 75 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue,..           
109e0 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66       bool whatIf
109f0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
10a00 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 0d     bool verbose.
10a10 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
10a20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   )..            
10a30 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
10a40 20 20 20 69 66 20 28 76 65 72 62 6f 73 65 29 0d     if (verbose).
10a50 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
10a60 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
10a70 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73          TraceOps
10a80 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 54  .DebugAndTrace(T
10a90 72 61 63 65 50 72 69 6f 72 69 74 79 2e 48 69 67  racePriority.Hig
10aa0 68 65 73 74 2c 0d 0a 20 20 20 20 20 20 20 20 20  hest,..         
10ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64                 d
10ac0 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72  ebugCallback, tr
10ad0 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72  aceCallback, Str
10ae0 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
10af0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10b00 20 20 20 20 20 22 6b 65 79 20 3d 20 7b 30 7d 2c       "key = {0},
10b10 20 6e 61 6d 65 20 3d 20 7b 31 7d 2c 20 76 61 6c   name = {1}, val
10b20 75 65 20 3d 20 7b 32 7d 22 2c 0d 0a 20 20 20 20  ue = {2}",..    
10b30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10b40 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 6b      ForDisplay(k
10b50 65 79 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28  ey), ForDisplay(
10b60 6e 61 6d 65 29 2c 20 46 6f 72 44 69 73 70 6c 61  name), ForDispla
10b70 79 28 76 61 6c 75 65 29 29 2c 0d 0a 20 20 20 20  y(value)),..    
10b80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10b90 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72      traceCategor
10ba0 79 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  y);..           
10bb0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
10bc0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6b 65            if (ke
10bd0 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  y == null)..    
10be0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10bf0 72 65 74 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20  return;....     
10c00 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21             if (!
10c10 77 68 61 74 49 66 29 0d 0a 20 20 20 20 20 20 20  whatIf)..       
10c20 20 20 20 20 20 20 20 20 20 20 20 20 20 6b 65 79               key
10c30 2e 53 65 74 56 61 6c 75 65 28 6e 61 6d 65 2c 20  .SetValue(name, 
10c40 76 61 6c 75 65 29 3b 0d 0a 0d 0a 20 20 20 20 20  value);....     
10c50 20 20 20 20 20 20 20 20 20 20 20 6b 65 79 56 61             keyVa
10c60 6c 75 65 73 57 72 69 74 74 65 6e 2b 2b 3b 0d 0a  luesWritten++;..
10c70 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
10c80 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
10c90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10ca0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10cb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10cc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10cd0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
10ce0 5b 4d 65 74 68 6f 64 49 6d 70 6c 28 4d 65 74 68  [MethodImpl(Meth
10cf0 6f 64 49 6d 70 6c 4f 70 74 69 6f 6e 73 2e 4e 6f  odImplOptions.No
10d00 49 6e 6c 69 6e 69 6e 67 29 5d 0d 0a 20 20 20 20  Inlining)]..    
10d10 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73          public s
10d20 74 61 74 69 63 20 76 6f 69 64 20 44 65 6c 65 74  tatic void Delet
10d30 65 56 61 6c 75 65 28 0d 0a 20 20 20 20 20 20 20  eValue(..       
10d40 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65 67           MockReg
10d50 69 73 74 72 79 4b 65 79 20 6b 65 79 2c 0d 0a 20  istryKey key,.. 
10d60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
10d70 74 72 69 6e 67 20 6e 61 6d 65 2c 0d 0a 20 20 20  tring name,..   
10d80 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f               boo
10d90 6c 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67  l throwOnMissing
10da0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
10db0 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d     bool whatIf,.
10dc0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
10dd0 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 0d 0a 20   bool verbose.. 
10de0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29                 )
10df0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
10e00 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
10e10 20 69 66 20 28 76 65 72 62 6f 73 65 29 0d 0a 20   if (verbose).. 
10e20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
10e30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
10e40 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44        TraceOps.D
10e50 65 62 75 67 41 6e 64 54 72 61 63 65 28 54 72 61  ebugAndTrace(Tra
10e60 63 65 50 72 69 6f 72 69 74 79 2e 48 69 67 68 65  cePriority.Highe
10e70 73 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  st,..           
10e80 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65 62               deb
10e90 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63  ugCallback, trac
10ea0 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e  eCallback, Strin
10eb0 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
10ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10ed0 20 20 20 22 6b 65 79 20 3d 20 7b 30 7d 2c 20 6e     "key = {0}, n
10ee0 61 6d 65 20 3d 20 7b 31 7d 22 2c 20 46 6f 72 44  ame = {1}", ForD
10ef0 69 73 70 6c 61 79 28 6b 65 79 29 2c 0d 0a 20 20  isplay(key),..  
10f00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10f10 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79        ForDisplay
10f20 28 6e 61 6d 65 29 29 2c 20 74 72 61 63 65 43 61  (name)), traceCa
10f30 74 65 67 6f 72 79 29 3b 0d 0a 20 20 20 20 20 20  tegory);..      
10f40 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
10f50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
10f60 66 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d  f (key == null).
10f70 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
10f80 20 20 20 20 20 72 65 74 75 72 6e 3b 0d 0a 0d 0a       return;....
10f90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10fa0 69 66 20 28 21 77 68 61 74 49 66 29 0d 0a 20 20  if (!whatIf)..  
10fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10fc0 20 20 6b 65 79 2e 44 65 6c 65 74 65 56 61 6c 75    key.DeleteValu
10fd0 65 28 6e 61 6d 65 2c 20 74 68 72 6f 77 4f 6e 4d  e(name, throwOnM
10fe0 69 73 73 69 6e 67 29 3b 0d 0a 0d 0a 20 20 20 20  issing);....    
10ff0 20 20 20 20 20 20 20 20 20 20 20 20 6b 65 79 56              keyV
11000 61 6c 75 65 73 44 65 6c 65 74 65 64 2b 2b 3b 0d  aluesDeleted++;.
11010 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
11020 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e 64              #end
11030 72 65 67 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20  region..        
11040 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72  }..        #endr
11050 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20  egion....       
11060 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
11070 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11080 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11090 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
110a0 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
110b0 20 20 20 20 23 72 65 67 69 6f 6e 20 53 74 72 69      #region Stri
110c0 6e 67 4c 69 73 74 20 43 6c 61 73 73 0d 0a 20 20  ngList Class..  
110d0 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 65        private se
110e0 61 6c 65 64 20 63 6c 61 73 73 20 53 74 72 69 6e  aled class Strin
110f0 67 4c 69 73 74 20 3a 20 4c 69 73 74 3c 73 74 72  gList : List<str
11100 69 6e 67 3e 0d 0a 20 20 20 20 20 20 20 20 7b 0d  ing>..        {.
11110 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
11120 6c 69 63 20 53 74 72 69 6e 67 4c 69 73 74 28 29  lic StringList()
11130 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
11140 20 20 3a 20 62 61 73 65 28 29 0d 0a 20 20 20 20    : base()..    
11150 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
11160 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f             // do
11170 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20   nothing...     
11180 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
11190 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
111a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
111b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
111c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
111d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
111e0 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
111f0 63 20 53 74 72 69 6e 67 4c 69 73 74 28 49 45 6e  c StringList(IEn
11200 75 6d 65 72 61 62 6c 65 3c 73 74 72 69 6e 67 3e  umerable<string>
11210 20 63 6f 6c 6c 65 63 74 69 6f 6e 29 0d 0a 20 20   collection)..  
11220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3a 20                : 
11230 62 61 73 65 28 63 6f 6c 6c 65 63 74 69 6f 6e 29  base(collection)
11240 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
11250 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
11260 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d   // do nothing..
11270 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
11280 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
11290 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
112a0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
112b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
112c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
112d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
112e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
112f0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67  ....        #reg
11300 69 6f 6e 20 53 74 72 69 6e 67 44 69 63 74 69 6f  ion StringDictio
11310 6e 61 72 79 20 43 6c 61 73 73 0d 0a 20 20 20 20  nary Class..    
11320 20 20 20 20 70 72 69 76 61 74 65 20 73 65 61 6c      private seal
11330 65 64 20 63 6c 61 73 73 20 53 74 72 69 6e 67 44  ed class StringD
11340 69 63 74 69 6f 6e 61 72 79 20 3a 20 44 69 63 74  ictionary : Dict
11350 69 6f 6e 61 72 79 3c 73 74 72 69 6e 67 2c 20 73  ionary<string, s
11360 74 72 69 6e 67 3e 0d 0a 20 20 20 20 20 20 20 20  tring>..        
11370 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  {..            p
11380 75 62 6c 69 63 20 53 74 72 69 6e 67 44 69 63 74  ublic StringDict
11390 69 6f 6e 61 72 79 28 29 0d 0a 20 20 20 20 20 20  ionary()..      
113a0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
113b0 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e           // do n
113c0 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20  othing...       
113d0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
113e0 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72  }..        #endr
113f0 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20  egion....       
11400 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
11410 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11420 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11430 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11440 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
11450 20 20 20 20 23 72 65 67 69 6f 6e 20 56 65 72 73      #region Vers
11460 69 6f 6e 4c 69 73 74 20 43 6c 61 73 73 0d 0a 20  ionList Class.. 
11470 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
11480 65 61 6c 65 64 20 63 6c 61 73 73 20 56 65 72 73  ealed class Vers
11490 69 6f 6e 4c 69 73 74 20 3a 20 4c 69 73 74 3c 56  ionList : List<V
114a0 65 72 73 69 6f 6e 3e 0d 0a 20 20 20 20 20 20 20  ersion>..       
114b0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
114c0 70 75 62 6c 69 63 20 56 65 72 73 69 6f 6e 4c 69  public VersionLi
114d0 73 74 28 29 0d 0a 20 20 20 20 20 20 20 20 20 20  st()..          
114e0 20 20 20 20 20 20 3a 20 62 61 73 65 28 29 0d 0a        : base()..
114f0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
11500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
11510 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20  / do nothing... 
11520 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
11530 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
11540 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11550 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11560 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11570 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
11580 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
11590 75 62 6c 69 63 20 56 65 72 73 69 6f 6e 4c 69 73  ublic VersionLis
115a0 74 28 49 45 6e 75 6d 65 72 61 62 6c 65 3c 56 65  t(IEnumerable<Ve
115b0 72 73 69 6f 6e 3e 20 63 6f 6c 6c 65 63 74 69 6f  rsion> collectio
115c0 6e 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n)..            
115d0 20 20 20 20 3a 20 62 61 73 65 28 63 6f 6c 6c 65      : base(colle
115e0 63 74 69 6f 6e 29 0d 0a 20 20 20 20 20 20 20 20  ction)..        
115f0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
11600 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74         // do not
11610 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 20  hing...         
11620 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d     }..        }.
11630 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67  .        #endreg
11640 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f  ion....        /
11650 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11660 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11670 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11680 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11690 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
116a0 20 20 23 72 65 67 69 6f 6e 20 56 65 72 73 69 6f    #region Versio
116b0 6e 4d 61 70 20 43 6c 61 73 73 0d 0a 20 20 20 20  nMap Class..    
116c0 20 20 20 20 70 72 69 76 61 74 65 20 73 65 61 6c      private seal
116d0 65 64 20 63 6c 61 73 73 20 56 65 72 73 69 6f 6e  ed class Version
116e0 4d 61 70 20 3a 20 44 69 63 74 69 6f 6e 61 72 79  Map : Dictionary
116f0 3c 73 74 72 69 6e 67 2c 20 56 65 72 73 69 6f 6e  <string, Version
11700 4c 69 73 74 3e 0d 0a 20 20 20 20 20 20 20 20 7b  List>..        {
11710 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
11720 62 6c 69 63 20 56 65 72 73 69 6f 6e 4d 61 70 28  blic VersionMap(
11730 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
11740 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
11750 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e    // do nothing.
11760 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
11770 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..    
11780 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
11790 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
117a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
117b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
117c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
117d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
117e0 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65  /....        #re
117f0 67 69 6f 6e 20 50 61 63 6b 61 67 65 20 43 6c 61  gion Package Cla
11800 73 73 0d 0a 20 20 20 20 20 20 20 20 69 6e 74 65  ss..        inte
11810 72 6e 61 6c 20 73 65 61 6c 65 64 20 63 6c 61 73  rnal sealed clas
11820 73 20 50 61 63 6b 61 67 65 0d 0a 20 20 20 20 20  s Package..     
11830 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
11840 20 20 23 72 65 67 69 6f 6e 20 50 75 62 6c 69 63    #region Public
11850 20 43 6f 6e 73 74 72 75 63 74 6f 72 73 0d 0a 20   Constructors.. 
11860 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
11870 63 20 50 61 63 6b 61 67 65 28 29 0d 0a 20 20 20  c Package()..   
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 2f 2f 20 64              // d
118a0 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20  o nothing...    
118b0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
118c0 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f         #endregio
118d0 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n....           
118e0 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
118f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11900 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11910 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11920 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
11930 20 20 20 20 23 72 65 67 69 6f 6e 20 50 75 62 6c      #region Publ
11940 69 63 20 50 72 6f 70 65 72 74 69 65 73 0d 0a 20  ic Properties.. 
11950 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
11960 74 65 20 73 74 72 69 6e 67 20 70 72 6f 76 69 64  te string provid
11970 65 72 49 6e 76 61 72 69 61 6e 74 4e 61 6d 65 3b  erInvariantName;
11980 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
11990 62 6c 69 63 20 73 74 72 69 6e 67 20 50 72 6f 76  blic string Prov
119a0 69 64 65 72 49 6e 76 61 72 69 61 6e 74 4e 61 6d  iderInvariantNam
119b0 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  e..            {
119c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
119d0 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 70    get { return p
119e0 72 6f 76 69 64 65 72 49 6e 76 61 72 69 61 6e 74  roviderInvariant
119f0 4e 61 6d 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20  Name; }..       
11a00 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 70           set { p
11a10 72 6f 76 69 64 65 72 49 6e 76 61 72 69 61 6e 74  roviderInvariant
11a20 4e 61 6d 65 20 3d 20 76 61 6c 75 65 3b 20 7d 0d  Name = value; }.
11a30 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
11a40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
11a50 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
11aa0 20 70 72 69 76 61 74 65 20 73 74 72 69 6e 67 20   private string 
11ab0 66 61 63 74 6f 72 79 54 79 70 65 4e 61 6d 65 3b  factoryTypeName;
11ac0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
11ad0 62 6c 69 63 20 73 74 72 69 6e 67 20 46 61 63 74  blic string Fact
11ae0 6f 72 79 54 79 70 65 4e 61 6d 65 0d 0a 20 20 20  oryTypeName..   
11af0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
11b00 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20              get 
11b10 7b 20 72 65 74 75 72 6e 20 66 61 63 74 6f 72 79  { return factory
11b20 54 79 70 65 4e 61 6d 65 3b 20 7d 0d 0a 20 20 20  TypeName; }..   
11b30 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74               set
11b40 20 7b 20 66 61 63 74 6f 72 79 54 79 70 65 4e 61   { factoryTypeNa
11b50 6d 65 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20  me = value; }.. 
11b60 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
11b70 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
11b80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11b90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11ba0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11bb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
11bc0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
11bd0 72 69 76 61 74 65 20 41 73 73 65 6d 62 6c 79 4e  rivate AssemblyN
11be0 61 6d 65 20 70 72 6f 76 69 64 65 72 41 73 73 65  ame providerAsse
11bf0 6d 62 6c 79 4e 61 6d 65 3b 0d 0a 20 20 20 20 20  mblyName;..     
11c00 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 41 73         public As
11c10 73 65 6d 62 6c 79 4e 61 6d 65 20 50 72 6f 76 69  semblyName Provi
11c20 64 65 72 41 73 73 65 6d 62 6c 79 4e 61 6d 65 0d  derAssemblyName.
11c30 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
11c40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11c50 67 65 74 20 7b 20 72 65 74 75 72 6e 20 70 72 6f  get { return pro
11c60 76 69 64 65 72 41 73 73 65 6d 62 6c 79 4e 61 6d  viderAssemblyNam
11c70 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  e; }..          
11c80 20 20 20 20 20 20 73 65 74 20 7b 20 70 72 6f 76        set { prov
11c90 69 64 65 72 41 73 73 65 6d 62 6c 79 4e 61 6d 65  iderAssemblyName
11ca0 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20   = value; }..   
11cb0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
11cc0 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
11cd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11ce0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11cf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11d00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
11d10 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69  .            pri
11d20 76 61 74 65 20 41 73 73 65 6d 62 6c 79 4e 61 6d  vate AssemblyNam
11d30 65 20 64 65 73 69 67 6e 65 72 41 73 73 65 6d 62  e designerAssemb
11d40 6c 79 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20  lyName;..       
11d50 20 20 20 20 20 70 75 62 6c 69 63 20 41 73 73 65       public Asse
11d60 6d 62 6c 79 4e 61 6d 65 20 44 65 73 69 67 6e 65  mblyName Designe
11d70 72 41 73 73 65 6d 62 6c 79 4e 61 6d 65 0d 0a 20  rAssemblyName.. 
11d80 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
11d90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65                ge
11da0 74 20 7b 20 72 65 74 75 72 6e 20 64 65 73 69 67  t { return desig
11db0 6e 65 72 41 73 73 65 6d 62 6c 79 4e 61 6d 65 3b  nerAssemblyName;
11dc0 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
11dd0 20 20 20 20 73 65 74 20 7b 20 64 65 73 69 67 6e      set { design
11de0 65 72 41 73 73 65 6d 62 6c 79 4e 61 6d 65 20 3d  erAssemblyName =
11df0 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20   value; }..     
11e00 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
11e10 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11e40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11e50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
11e60 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
11e70 74 65 20 62 6f 6f 6c 20 67 6c 6f 62 61 6c 41 73  te bool globalAs
11e80 73 65 6d 62 6c 79 43 61 63 68 65 3b 0d 0a 20 20  semblyCache;..  
11e90 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
11ea0 20 62 6f 6f 6c 20 47 6c 6f 62 61 6c 41 73 73 65   bool GlobalAsse
11eb0 6d 62 6c 79 43 61 63 68 65 0d 0a 20 20 20 20 20  mblyCache..     
11ec0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
11ed0 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20            get { 
11ee0 72 65 74 75 72 6e 20 67 6c 6f 62 61 6c 41 73 73  return globalAss
11ef0 65 6d 62 6c 79 43 61 63 68 65 3b 20 7d 0d 0a 20  emblyCache; }.. 
11f00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
11f10 65 74 20 7b 20 67 6c 6f 62 61 6c 41 73 73 65 6d  et { globalAssem
11f20 62 6c 79 43 61 63 68 65 20 3d 20 76 61 6c 75 65  blyCache = value
11f30 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
11f40 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
11f50 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
11f60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11f70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11f80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11f90 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
11fa0 20 20 20 20 20 70 72 69 76 61 74 65 20 47 75 69       private Gui
11fb0 64 20 70 61 63 6b 61 67 65 49 64 3b 0d 0a 20 20  d packageId;..  
11fc0 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
11fd0 20 47 75 69 64 20 50 61 63 6b 61 67 65 49 64 0d   Guid PackageId.
11fe0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
11ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12000 67 65 74 20 7b 20 72 65 74 75 72 6e 20 70 61 63  get { return pac
12010 6b 61 67 65 49 64 3b 20 7d 0d 0a 20 20 20 20 20  kageId; }..     
12020 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b             set {
12030 20 70 61 63 6b 61 67 65 49 64 20 3d 20 76 61 6c   packageId = val
12040 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  ue; }..         
12050 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
12060 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
12070 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12080 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12090 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
120a0 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
120b0 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 47         private G
120c0 75 69 64 20 73 65 72 76 69 63 65 49 64 3b 0d 0a  uid serviceId;..
120d0 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
120e0 69 63 20 47 75 69 64 20 53 65 72 76 69 63 65 49  ic Guid ServiceI
120f0 64 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  d..            {
12100 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
12110 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 73    get { return s
12120 65 72 76 69 63 65 49 64 3b 20 7d 0d 0a 20 20 20  erviceId; }..   
12130 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74               set
12140 20 7b 20 73 65 72 76 69 63 65 49 64 20 3d 20 76   { serviceId = v
12150 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20  alue; }..       
12160 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
12170 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
12180 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12190 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
121a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
121b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
121c0 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65           private
121d0 20 47 75 69 64 20 64 61 74 61 53 6f 75 72 63 65   Guid dataSource
121e0 49 64 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  Id;..           
121f0 20 70 75 62 6c 69 63 20 47 75 69 64 20 44 61 74   public Guid Dat
12200 61 53 6f 75 72 63 65 49 64 0d 0a 20 20 20 20 20  aSourceId..     
12210 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
12220 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20            get { 
12230 72 65 74 75 72 6e 20 64 61 74 61 53 6f 75 72 63  return dataSourc
12240 65 49 64 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  eId; }..        
12250 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 64 61          set { da
12260 74 61 53 6f 75 72 63 65 49 64 20 3d 20 76 61 6c  taSourceId = val
12270 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  ue; }..         
12280 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
12290 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
122a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
122b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
122c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
122d0 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
122e0 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 47         private G
122f0 75 69 64 20 64 61 74 61 50 72 6f 76 69 64 65 72  uid dataProvider
12300 49 64 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  Id;..           
12310 20 70 75 62 6c 69 63 20 47 75 69 64 20 44 61 74   public Guid Dat
12320 61 50 72 6f 76 69 64 65 72 49 64 0d 0a 20 20 20  aProviderId..   
12330 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
12340 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20              get 
12350 7b 20 72 65 74 75 72 6e 20 64 61 74 61 50 72 6f  { return dataPro
12360 76 69 64 65 72 49 64 3b 20 7d 0d 0a 20 20 20 20  viderId; }..    
12370 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20              set 
12380 7b 20 64 61 74 61 50 72 6f 76 69 64 65 72 49 64  { dataProviderId
12390 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20   = value; }..   
123a0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
123b0 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
123c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
123d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
123e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
123f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
12400 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69  .            pri
12410 76 61 74 65 20 47 75 69 64 20 61 64 6f 4e 65 74  vate Guid adoNet
12420 54 65 63 68 6e 6f 6c 6f 67 79 49 64 3b 0d 0a 20  TechnologyId;.. 
12430 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
12440 63 20 47 75 69 64 20 41 64 6f 4e 65 74 54 65 63  c Guid AdoNetTec
12450 68 6e 6f 6c 6f 67 79 49 64 0d 0a 20 20 20 20 20  hnologyId..     
12460 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
12470 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20            get { 
12480 72 65 74 75 72 6e 20 61 64 6f 4e 65 74 54 65 63  return adoNetTec
12490 68 6e 6f 6c 6f 67 79 49 64 3b 20 7d 0d 0a 20 20  hnologyId; }..  
124a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65                se
124b0 74 20 7b 20 61 64 6f 4e 65 74 54 65 63 68 6e 6f  t { adoNetTechno
124c0 6c 6f 67 79 49 64 20 3d 20 76 61 6c 75 65 3b 20  logyId = value; 
124d0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
124e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 65  ..            #e
124f0 6e 64 72 65 67 69 6f 6e 0d 0a 20 20 20 20 20 20  ndregion..      
12500 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e    }..        #en
12510 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20  dregion....     
12520 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
12570 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 43 6f        #region Co
12580 6e 66 69 67 75 72 61 74 69 6f 6e 20 43 6c 61 73  nfiguration Clas
12590 73 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61  s..        priva
125a0 74 65 20 73 65 61 6c 65 64 20 63 6c 61 73 73 20  te sealed class 
125b0 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 0d 0a 20  Configuration.. 
125c0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
125d0 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50 72        #region Pr
125e0 69 76 61 74 65 20 43 6f 6e 73 74 61 6e 74 73 0d  ivate Constants.
125f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69  .            pri
12600 76 61 74 65 20 63 6f 6e 73 74 20 63 68 61 72 20  vate const char 
12610 53 77 69 74 63 68 20 3d 20 27 2d 27 3b 0d 0a 20  Switch = '-';.. 
12620 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
12630 74 65 20 63 6f 6e 73 74 20 63 68 61 72 20 41 6c  te const char Al
12640 74 53 77 69 74 63 68 20 3d 20 27 2f 27 3b 0d 0a  tSwitch = '/';..
12650 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
12660 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12670 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12680 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12690 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
126a0 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
126b0 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20   private static 
126c0 72 65 61 64 6f 6e 6c 79 20 63 68 61 72 5b 5d 20  readonly char[] 
126d0 53 77 69 74 63 68 43 68 61 72 73 20 3d 20 7b 0d  SwitchChars = {.
126e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
126f0 20 53 77 69 74 63 68 2c 20 41 6c 74 53 77 69 74   Switch, AltSwit
12700 63 68 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ch..            
12710 7d 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  };....          
12720 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
12730 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12740 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12750 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12760 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
12770 20 20 20 20 20 70 72 69 76 61 74 65 20 63 6f 6e       private con
12780 73 74 20 73 74 72 69 6e 67 20 49 6e 76 61 72 69  st string Invari
12790 61 6e 74 4e 61 6d 65 20 3d 20 22 53 79 73 74 65  antName = "Syste
127a0 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 22 3b 0d  m.Data.SQLite";.
127b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69  .            pri
127c0 76 61 74 65 20 63 6f 6e 73 74 20 73 74 72 69 6e  vate const strin
127d0 67 20 45 66 36 49 6e 76 61 72 69 61 6e 74 4e 61  g Ef6InvariantNa
127e0 6d 65 20 3d 20 22 53 79 73 74 65 6d 2e 44 61 74  me = "System.Dat
127f0 61 2e 53 51 4c 69 74 65 2e 45 46 36 22 3b 0d 0a  a.SQLite.EF6";..
12800 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
12810 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12820 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12830 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12840 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12850 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
12860 20 70 72 69 76 61 74 65 20 63 6f 6e 73 74 20 73   private const s
12870 74 72 69 6e 67 20 46 61 63 74 6f 72 79 54 79 70  tring FactoryTyp
12880 65 4e 61 6d 65 20 3d 0d 0a 20 20 20 20 20 20 20  eName =..       
12890 20 20 20 20 20 20 20 20 20 22 53 79 73 74 65 6d           "System
128a0 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 53 51 4c  .Data.SQLite.SQL
128b0 69 74 65 46 61 63 74 6f 72 79 22 3b 0d 0a 0d 0a  iteFactory";....
128c0 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76              priv
128d0 61 74 65 20 63 6f 6e 73 74 20 73 74 72 69 6e 67  ate const string
128e0 20 45 66 36 46 61 63 74 6f 72 79 54 79 70 65 4e   Ef6FactoryTypeN
128f0 61 6d 65 20 3d 0d 0a 20 20 20 20 20 20 20 20 20  ame =..         
12900 20 20 20 20 20 20 20 22 53 79 73 74 65 6d 2e 44         "System.D
12910 61 74 61 2e 53 51 4c 69 74 65 2e 45 46 36 2e 53  ata.SQLite.EF6.S
12920 51 4c 69 74 65 50 72 6f 76 69 64 65 72 46 61 63  QLiteProviderFac
12930 74 6f 72 79 22 3b 0d 0a 20 20 20 20 20 20 20 20  tory";..        
12940 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
12950 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
12960 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12970 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12980 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12990 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
129a0 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
129b0 20 23 72 65 67 69 6f 6e 20 50 72 69 76 61 74 65   #region Private
129c0 20 53 74 61 74 69 63 20 44 61 74 61 0d 0a 20 20   Static Data..  
129d0 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
129e0 65 20 73 74 61 74 69 63 20 41 73 73 65 6d 62 6c  e static Assembl
129f0 79 20 73 79 73 74 65 6d 45 66 36 41 73 73 65 6d  y systemEf6Assem
12a00 62 6c 79 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  bly;..          
12a10 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a    #endregion....
12a20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
12a30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12a40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12a50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12a60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
12a70 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  ...            #
12a80 72 65 67 69 6f 6e 20 50 72 69 76 61 74 65 20 44  region Private D
12a90 61 74 61 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ata..           
12aa0 20 70 72 69 76 61 74 65 20 41 73 73 65 6d 62 6c   private Assembl
12ab0 79 4e 61 6d 65 20 63 6f 72 65 41 73 73 65 6d 62  yName coreAssemb
12ac0 6c 79 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20  lyName;..       
12ad0 20 20 20 20 20 70 72 69 76 61 74 65 20 41 73 73       private Ass
12ae0 65 6d 62 6c 79 4e 61 6d 65 20 6c 69 6e 71 41 73  emblyName linqAs
12af0 73 65 6d 62 6c 79 4e 61 6d 65 3b 0d 0a 20 20 20  semblyName;..   
12b00 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65           private
12b10 20 41 73 73 65 6d 62 6c 79 4e 61 6d 65 20 65 66   AssemblyName ef
12b20 36 41 73 73 65 6d 62 6c 79 4e 61 6d 65 3b 0d 0a  6AssemblyName;..
12b30 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76              priv
12b40 61 74 65 20 41 73 73 65 6d 62 6c 79 4e 61 6d 65  ate AssemblyName
12b50 20 64 65 73 69 67 6e 65 72 41 73 73 65 6d 62 6c   designerAssembl
12b60 79 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20  yName;..        
12b70 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
12b80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
12b90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12ba0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12bb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12bc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12bd0 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
12be0 20 23 72 65 67 69 6f 6e 20 50 72 69 76 61 74 65   #region Private
12bf0 20 43 6f 6e 73 74 72 75 63 74 6f 72 73 0d 0a 20   Constructors.. 
12c00 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
12c10 74 65 20 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e  te Configuration
12c20 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
12c30 20 20 20 41 73 73 65 6d 62 6c 79 20 61 73 73 65     Assembly asse
12c40 6d 62 6c 79 2c 0d 0a 20 20 20 20 20 20 20 20 20  mbly,..         
12c50 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6c 6f         string lo
12c60 67 46 69 6c 65 4e 61 6d 65 2c 0d 0a 20 20 20 20  gFileName,..    
12c70 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
12c80 6e 67 20 64 69 72 65 63 74 6f 72 79 2c 0d 0a 20  ng directory,.. 
12c90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
12ca0 74 72 69 6e 67 20 63 6f 72 65 46 69 6c 65 4e 61  tring coreFileNa
12cb0 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me,..           
12cc0 20 20 20 20 20 73 74 72 69 6e 67 20 6c 69 6e 71       string linq
12cd0 46 69 6c 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20  FileName,..     
12ce0 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
12cf0 67 20 65 66 36 46 69 6c 65 4e 61 6d 65 2c 0d 0a  g ef6FileName,..
12d00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12d10 73 74 72 69 6e 67 20 64 65 73 69 67 6e 65 72 46  string designerF
12d20 69 6c 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20  ileName,..      
12d30 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
12d40 20 72 65 67 69 73 74 72 79 56 65 72 73 69 6f 6e   registryVersion
12d50 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
12d60 20 20 20 73 74 72 69 6e 67 20 63 6f 6e 66 69 67     string config
12d70 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20  Version,..      
12d80 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
12d90 20 76 73 56 65 72 73 69 6f 6e 53 75 66 66 69 78   vsVersionSuffix
12da0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
12db0 20 20 20 73 74 72 69 6e 67 20 64 65 62 75 67 46     string debugF
12dc0 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20  ormat,..        
12dd0 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 74          string t
12de0 72 61 63 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20  raceFormat,..   
12df0 20 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 73               Ins
12e00 74 61 6c 6c 46 6c 61 67 73 20 69 6e 73 74 61 6c  tallFlags instal
12e10 6c 46 6c 61 67 73 2c 0d 0a 20 20 20 20 20 20 20  lFlags,..       
12e20 20 20 20 20 20 20 20 20 20 50 72 6f 76 69 64 65           Provide
12e30 72 46 6c 61 67 73 20 70 72 6f 76 69 64 65 72 46  rFlags providerF
12e40 6c 61 67 73 2c 0d 0a 20 20 20 20 20 20 20 20 20  lags,..         
12e50 20 20 20 20 20 20 20 54 72 61 63 65 50 72 69 6f         TracePrio
12e60 72 69 74 79 20 64 65 62 75 67 50 72 69 6f 72 69  rity debugPriori
12e70 74 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ty,..           
12e80 20 20 20 20 20 54 72 61 63 65 50 72 69 6f 72 69       TracePriori
12e90 74 79 20 74 72 61 63 65 50 72 69 6f 72 69 74 79  ty tracePriority
12ea0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
12eb0 20 20 20 62 6f 6f 6c 20 70 65 72 55 73 65 72 2c     bool perUser,
12ec0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
12ed0 20 20 62 6f 6f 6c 20 69 6e 73 74 61 6c 6c 2c 0d    bool install,.
12ee0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
12ef0 20 62 6f 6f 6c 20 77 6f 77 36 34 2c 0d 0a 20 20   bool wow64,..  
12f00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f                bo
12f10 6f 6c 20 6e 6f 52 75 6e 74 69 6d 65 56 65 72 73  ol noRuntimeVers
12f20 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ion,..          
12f30 20 20 20 20 20 20 62 6f 6f 6c 20 6e 6f 44 65 73        bool noDes
12f40 6b 74 6f 70 2c 0d 0a 20 20 20 20 20 20 20 20 20  ktop,..         
12f50 20 20 20 20 20 20 20 62 6f 6f 6c 20 6e 6f 43 6f         bool noCo
12f60 6d 70 61 63 74 2c 0d 0a 20 20 20 20 20 20 20 20  mpact,..        
12f70 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 6e 6f 4e          bool noN
12f80 65 74 46 78 32 30 2c 0d 0a 20 20 20 20 20 20 20  etFx20,..       
12f90 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 6e 6f           bool no
12fa0 4e 65 74 46 78 33 35 2c 0d 0a 20 20 20 20 20 20  NetFx35,..      
12fb0 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 6e            bool n
12fc0 6f 4e 65 74 46 78 34 30 2c 0d 0a 20 20 20 20 20  oNetFx40,..     
12fd0 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
12fe0 6e 6f 4e 65 74 46 78 34 35 2c 0d 0a 20 20 20 20  noNetFx45,..    
12ff0 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
13000 20 6e 6f 4e 65 74 46 78 34 35 31 2c 0d 0a 20 20   noNetFx451,..  
13010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f                bo
13020 6f 6c 20 6e 6f 4e 65 74 46 78 34 35 32 2c 0d 0a  ol noNetFx452,..
13030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13040 62 6f 6f 6c 20 6e 6f 4e 65 74 46 78 34 36 2c 0d  bool noNetFx46,.
13050 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
13060 20 62 6f 6f 6c 20 6e 6f 4e 65 74 46 78 34 36 31   bool noNetFx461
13070 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
13080 20 20 20 62 6f 6f 6c 20 6e 6f 4e 65 74 46 78 34     bool noNetFx4
13090 36 32 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  62,..           
130a0 20 20 20 20 20 62 6f 6f 6c 20 6e 6f 4e 65 74 46       bool noNetF
130b0 78 34 37 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  x47,..          
130c0 20 20 20 20 20 20 62 6f 6f 6c 20 6e 6f 56 73 32        bool noVs2
130d0 30 30 35 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  005,..          
130e0 20 20 20 20 20 20 62 6f 6f 6c 20 6e 6f 56 73 32        bool noVs2
130f0 30 30 38 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  008,..          
13100 20 20 20 20 20 20 62 6f 6f 6c 20 6e 6f 56 73 32        bool noVs2
13110 30 31 30 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  010,..          
13120 20 20 20 20 20 20 62 6f 6f 6c 20 6e 6f 56 73 32        bool noVs2
13130 30 31 32 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  012,..          
13140 20 20 20 20 20 20 62 6f 6f 6c 20 6e 6f 56 73 32        bool noVs2
13150 30 31 33 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  013,..          
13160 20 20 20 20 20 20 62 6f 6f 6c 20 6e 6f 56 73 32        bool noVs2
13170 30 31 35 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  015,..          
13180 20 20 20 20 20 20 62 6f 6f 6c 20 6e 6f 56 73 32        bool noVs2
13190 30 31 37 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  017,..          
131a0 20 20 20 20 20 20 62 6f 6f 6c 20 6e 6f 54 72 61        bool noTra
131b0 63 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ce,..           
131c0 20 20 20 20 20 62 6f 6f 6c 20 6e 6f 43 6f 6e 73       bool noCons
131d0 6f 6c 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ole,..          
131e0 20 20 20 20 20 20 62 6f 6f 6c 20 6e 6f 4c 6f 67        bool noLog
131f0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
13200 20 20 20 62 6f 6f 6c 20 74 68 72 6f 77 4f 6e 4d     bool throwOnM
13210 69 73 73 69 6e 67 2c 0d 0a 20 20 20 20 20 20 20  issing,..       
13220 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68           bool wh
13230 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20  atIf,..         
13240 20 20 20 20 20 20 20 62 6f 6f 6c 20 64 65 62 75         bool debu
13250 67 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  g,..            
13260 20 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65      bool verbose
13270 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
13280 20 20 20 62 6f 6f 6c 20 63 6f 6e 66 69 72 6d 0d     bool confirm.
13290 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
132a0 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   )..            
132b0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
132c0 20 20 20 74 68 69 73 2e 61 73 73 65 6d 62 6c 79     this.assembly
132d0 20 3d 20 61 73 73 65 6d 62 6c 79 3b 0d 0a 20 20   = assembly;..  
132e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
132f0 69 73 2e 6c 6f 67 46 69 6c 65 4e 61 6d 65 20 3d  is.logFileName =
13300 20 6c 6f 67 46 69 6c 65 4e 61 6d 65 3b 0d 0a 20   logFileName;.. 
13310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
13320 68 69 73 2e 64 69 72 65 63 74 6f 72 79 20 3d 20  his.directory = 
13330 64 69 72 65 63 74 6f 72 79 3b 0d 0a 20 20 20 20  directory;..    
13340 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73              this
13350 2e 63 6f 72 65 46 69 6c 65 4e 61 6d 65 20 3d 20  .coreFileName = 
13360 63 6f 72 65 46 69 6c 65 4e 61 6d 65 3b 0d 0a 20  coreFileName;.. 
13370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
13380 68 69 73 2e 6c 69 6e 71 46 69 6c 65 4e 61 6d 65  his.linqFileName
13390 20 3d 20 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 3b   = linqFileName;
133a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
133b0 20 20 74 68 69 73 2e 65 66 36 46 69 6c 65 4e 61    this.ef6FileNa
133c0 6d 65 20 3d 20 65 66 36 46 69 6c 65 4e 61 6d 65  me = ef6FileName
133d0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
133e0 20 20 20 74 68 69 73 2e 64 65 73 69 67 6e 65 72     this.designer
133f0 46 69 6c 65 4e 61 6d 65 20 3d 20 64 65 73 69 67  FileName = desig
13400 6e 65 72 46 69 6c 65 4e 61 6d 65 3b 0d 0a 20 20  nerFileName;..  
13410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
13420 69 73 2e 72 65 67 69 73 74 72 79 56 65 72 73 69  is.registryVersi
13430 6f 6e 20 3d 20 72 65 67 69 73 74 72 79 56 65 72  on = registryVer
13440 73 69 6f 6e 3b 0d 0a 20 20 20 20 20 20 20 20 20  sion;..         
13450 20 20 20 20 20 20 20 74 68 69 73 2e 63 6f 6e 66         this.conf
13460 69 67 56 65 72 73 69 6f 6e 20 3d 20 63 6f 6e 66  igVersion = conf
13470 69 67 56 65 72 73 69 6f 6e 3b 0d 0a 20 20 20 20  igVersion;..    
13480 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73              this
13490 2e 76 73 56 65 72 73 69 6f 6e 53 75 66 66 69 78  .vsVersionSuffix
134a0 20 3d 20 76 73 56 65 72 73 69 6f 6e 53 75 66 66   = vsVersionSuff
134b0 69 78 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ix;..           
134c0 20 20 20 20 20 74 68 69 73 2e 64 65 62 75 67 46       this.debugF
134d0 6f 72 6d 61 74 20 3d 20 64 65 62 75 67 46 6f 72  ormat = debugFor
134e0 6d 61 74 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  mat;..          
134f0 20 20 20 20 20 20 74 68 69 73 2e 74 72 61 63 65        this.trace
13500 46 6f 72 6d 61 74 20 3d 20 74 72 61 63 65 46 6f  Format = traceFo
13510 72 6d 61 74 3b 0d 0a 20 20 20 20 20 20 20 20 20  rmat;..         
13520 20 20 20 20 20 20 20 74 68 69 73 2e 69 6e 73 74         this.inst
13530 61 6c 6c 46 6c 61 67 73 20 3d 20 69 6e 73 74 61  allFlags = insta
13540 6c 6c 46 6c 61 67 73 3b 0d 0a 20 20 20 20 20 20  llFlags;..      
13550 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 70            this.p
13560 72 6f 76 69 64 65 72 46 6c 61 67 73 20 3d 20 70  roviderFlags = p
13570 72 6f 76 69 64 65 72 46 6c 61 67 73 3b 0d 0a 20  roviderFlags;.. 
13580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
13590 68 69 73 2e 64 65 62 75 67 50 72 69 6f 72 69 74  his.debugPriorit
135a0 79 20 3d 20 64 65 62 75 67 50 72 69 6f 72 69 74  y = debugPriorit
135b0 79 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y;..            
135c0 20 20 20 20 74 68 69 73 2e 74 72 61 63 65 50 72      this.tracePr
135d0 69 6f 72 69 74 79 20 3d 20 74 72 61 63 65 50 72  iority = tracePr
135e0 69 6f 72 69 74 79 3b 0d 0a 20 20 20 20 20 20 20  iority;..       
135f0 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 70 65           this.pe
13600 72 55 73 65 72 20 3d 20 70 65 72 55 73 65 72 3b  rUser = perUser;
13610 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
13620 20 20 74 68 69 73 2e 69 6e 73 74 61 6c 6c 20 3d    this.install =
13630 20 69 6e 73 74 61 6c 6c 3b 0d 0a 20 20 20 20 20   install;..     
13640 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e             this.
13650 77 6f 77 36 34 20 3d 20 77 6f 77 36 34 3b 0d 0a  wow64 = wow64;..
13660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13670 74 68 69 73 2e 6e 6f 52 75 6e 74 69 6d 65 56 65  this.noRuntimeVe
13680 72 73 69 6f 6e 20 3d 20 6e 6f 52 75 6e 74 69 6d  rsion = noRuntim
13690 65 56 65 72 73 69 6f 6e 3b 0d 0a 20 20 20 20 20  eVersion;..     
136a0 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e             this.
136b0 6e 6f 44 65 73 6b 74 6f 70 20 3d 20 6e 6f 44 65  noDesktop = noDe
136c0 73 6b 74 6f 70 3b 0d 0a 20 20 20 20 20 20 20 20  sktop;..        
136d0 20 20 20 20 20 20 20 20 74 68 69 73 2e 6e 6f 43          this.noC
136e0 6f 6d 70 61 63 74 20 3d 20 6e 6f 43 6f 6d 70 61  ompact = noCompa
136f0 63 74 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ct;..           
13700 20 20 20 20 20 74 68 69 73 2e 6e 6f 4e 65 74 46       this.noNetF
13710 78 32 30 20 3d 20 6e 6f 4e 65 74 46 78 32 30 3b  x20 = noNetFx20;
13720 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
13730 20 20 74 68 69 73 2e 6e 6f 4e 65 74 46 78 33 35    this.noNetFx35
13740 20 3d 20 6e 6f 4e 65 74 46 78 33 35 3b 0d 0a 20   = noNetFx35;.. 
13750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
13760 68 69 73 2e 6e 6f 4e 65 74 46 78 34 30 20 3d 20  his.noNetFx40 = 
13770 6e 6f 4e 65 74 46 78 34 30 3b 0d 0a 20 20 20 20  noNetFx40;..    
13780 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73              this
13790 2e 6e 6f 4e 65 74 46 78 34 35 20 3d 20 6e 6f 4e  .noNetFx45 = noN
137a0 65 74 46 78 34 35 3b 0d 0a 20 20 20 20 20 20 20  etFx45;..       
137b0 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 6e 6f           this.no
137c0 4e 65 74 46 78 34 35 31 20 3d 20 6e 6f 4e 65 74  NetFx451 = noNet
137d0 46 78 34 35 31 3b 0d 0a 20 20 20 20 20 20 20 20  Fx451;..        
137e0 20 20 20 20 20 20 20 20 74 68 69 73 2e 6e 6f 4e          this.noN
137f0 65 74 46 78 34 35 32 20 3d 20 6e 6f 4e 65 74 46  etFx452 = noNetF
13800 78 34 35 32 3b 0d 0a 20 20 20 20 20 20 20 20 20  x452;..         
13810 20 20 20 20 20 20 20 74 68 69 73 2e 6e 6f 4e 65         this.noNe
13820 74 46 78 34 36 20 3d 20 6e 6f 4e 65 74 46 78 34  tFx46 = noNetFx4
13830 36 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  6;..            
13840 20 20 20 20 74 68 69 73 2e 6e 6f 4e 65 74 46 78      this.noNetFx
13850 34 36 31 20 3d 20 6e 6f 4e 65 74 46 78 34 36 31  461 = noNetFx461
13860 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
13870 20 20 20 74 68 69 73 2e 6e 6f 4e 65 74 46 78 34     this.noNetFx4
13880 36 32 20 3d 20 6e 6f 4e 65 74 46 78 34 36 32 3b  62 = noNetFx462;
13890 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
138a0 20 20 74 68 69 73 2e 6e 6f 4e 65 74 46 78 34 37    this.noNetFx47
138b0 20 3d 20 6e 6f 4e 65 74 46 78 34 37 3b 0d 0a 20   = noNetFx47;.. 
138c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
138d0 68 69 73 2e 6e 6f 56 73 32 30 30 35 20 3d 20 6e  his.noVs2005 = n
138e0 6f 56 73 32 30 30 35 3b 0d 0a 20 20 20 20 20 20  oVs2005;..      
138f0 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 6e            this.n
13900 6f 56 73 32 30 30 38 20 3d 20 6e 6f 56 73 32 30  oVs2008 = noVs20
13910 30 38 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  08;..           
13920 20 20 20 20 20 74 68 69 73 2e 6e 6f 56 73 32 30       this.noVs20
13930 31 30 20 3d 20 6e 6f 56 73 32 30 31 30 3b 0d 0a  10 = noVs2010;..
13940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13950 74 68 69 73 2e 6e 6f 56 73 32 30 31 32 20 3d 20  this.noVs2012 = 
13960 6e 6f 56 73 32 30 31 32 3b 0d 0a 20 20 20 20 20  noVs2012;..     
13970 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e             this.
13980 6e 6f 56 73 32 30 31 33 20 3d 20 6e 6f 56 73 32  noVs2013 = noVs2
13990 30 31 33 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  013;..          
139a0 20 20 20 20 20 20 74 68 69 73 2e 6e 6f 56 73 32        this.noVs2
139b0 30 31 35 20 3d 20 6e 6f 56 73 32 30 31 35 3b 0d  015 = noVs2015;.
139c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
139d0 20 74 68 69 73 2e 6e 6f 56 73 32 30 31 37 20 3d   this.noVs2017 =
139e0 20 6e 6f 56 73 32 30 31 37 3b 0d 0a 20 20 20 20   noVs2017;..    
139f0 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73              this
13a00 2e 6e 6f 54 72 61 63 65 20 3d 20 6e 6f 54 72 61  .noTrace = noTra
13a10 63 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ce;..           
13a20 20 20 20 20 20 74 68 69 73 2e 6e 6f 43 6f 6e 73       this.noCons
13a30 6f 6c 65 20 3d 20 6e 6f 43 6f 6e 73 6f 6c 65 3b  ole = noConsole;
13a40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
13a50 20 20 74 68 69 73 2e 6e 6f 4c 6f 67 20 3d 20 6e    this.noLog = n
13a60 6f 4c 6f 67 3b 0d 0a 20 20 20 20 20 20 20 20 20  oLog;..         
13a70 20 20 20 20 20 20 20 74 68 69 73 2e 74 68 72 6f         this.thro
13a80 77 4f 6e 4d 69 73 73 69 6e 67 20 3d 20 74 68 72  wOnMissing = thr
13a90 6f 77 4f 6e 4d 69 73 73 69 6e 67 3b 0d 0a 20 20  owOnMissing;..  
13aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
13ab0 69 73 2e 77 68 61 74 49 66 20 3d 20 77 68 61 74  is.whatIf = what
13ac0 49 66 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  If;..           
13ad0 20 20 20 20 20 74 68 69 73 2e 64 65 62 75 67 20       this.debug 
13ae0 3d 20 64 65 62 75 67 3b 0d 0a 20 20 20 20 20 20  = debug;..      
13af0 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 76            this.v
13b00 65 72 62 6f 73 65 20 3d 20 76 65 72 62 6f 73 65  erbose = verbose
13b10 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
13b20 20 20 20 74 68 69 73 2e 63 6f 6e 66 69 72 6d 20     this.confirm 
13b30 3d 20 63 6f 6e 66 69 72 6d 3b 0d 0a 20 20 20 20  = confirm;..    
13b40 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
13b50 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f         #endregio
13b60 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n....           
13b70 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
13b80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
13b90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
13ba0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
13bb0 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
13bc0 20 20 20 20 23 72 65 67 69 6f 6e 20 50 72 69 76      #region Priv
13bd0 61 74 65 20 53 74 61 74 69 63 20 4d 65 74 68 6f  ate Static Metho
13be0 64 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ds..            
13bf0 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 76  private static v
13c00 6f 69 64 20 47 65 74 44 65 66 61 75 6c 74 46 69  oid GetDefaultFi
13c10 6c 65 4e 61 6d 65 73 28 0d 0a 20 20 20 20 20 20  leNames(..      
13c20 20 20 20 20 20 20 20 20 20 20 72 65 66 20 73 74            ref st
13c30 72 69 6e 67 20 64 69 72 65 63 74 6f 72 79 2c 0d  ring directory,.
13c40 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
13c50 20 72 65 66 20 73 74 72 69 6e 67 20 63 6f 72 65   ref string core
13c60 46 69 6c 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20  FileName,..     
13c70 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20 73             ref s
13c80 74 72 69 6e 67 20 6c 69 6e 71 46 69 6c 65 4e 61  tring linqFileNa
13c90 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me,..           
13ca0 20 20 20 20 20 72 65 66 20 73 74 72 69 6e 67 20       ref string 
13cb0 65 66 36 46 69 6c 65 4e 61 6d 65 2c 0d 0a 20 20  ef6FileName,..  
13cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
13cd0 66 20 73 74 72 69 6e 67 20 64 65 73 69 67 6e 65  f string designe
13ce0 72 46 69 6c 65 4e 61 6d 65 0d 0a 20 20 20 20 20  rFileName..     
13cf0 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
13d00 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
13d10 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
13d20 28 74 68 69 73 41 73 73 65 6d 62 6c 79 20 3d 3d  (thisAssembly ==
13d30 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
13d40 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
13d50 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  rn;....         
13d60 20 20 20 20 20 20 20 64 69 72 65 63 74 6f 72 79         directory
13d70 20 3d 20 50 61 74 68 2e 47 65 74 44 69 72 65 63   = Path.GetDirec
13d80 74 6f 72 79 4e 61 6d 65 28 74 68 69 73 41 73 73  toryName(thisAss
13d90 65 6d 62 6c 79 2e 4c 6f 63 61 74 69 6f 6e 29 3b  embly.Location);
13da0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
13db0 20 20 20 20 69 66 20 28 53 74 72 69 6e 67 2e 49      if (String.I
13dc0 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 64 69 72  sNullOrEmpty(dir
13dd0 65 63 74 6f 72 79 29 29 0d 0a 20 20 20 20 20 20  ectory))..      
13de0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
13df0 74 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  turn;....       
13e00 20 20 20 20 20 20 20 20 20 63 6f 72 65 46 69 6c           coreFil
13e10 65 4e 61 6d 65 20 3d 20 50 61 74 68 2e 43 6f 6d  eName = Path.Com
13e20 62 69 6e 65 28 64 69 72 65 63 74 6f 72 79 2c 0d  bine(directory,.
13e30 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
13e40 20 20 20 20 20 49 6e 73 74 61 6c 6c 65 72 2e 43       Installer.C
13e50 6f 72 65 46 69 6c 65 4e 61 6d 65 29 3b 0d 0a 0d  oreFileName);...
13e60 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
13e70 20 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 20 3d 20   linqFileName = 
13e80 50 61 74 68 2e 43 6f 6d 62 69 6e 65 28 64 69 72  Path.Combine(dir
13e90 65 63 74 6f 72 79 2c 0d 0a 20 20 20 20 20 20 20  ectory,..       
13ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 73               Ins
13eb0 74 61 6c 6c 65 72 2e 4c 69 6e 71 46 69 6c 65 4e  taller.LinqFileN
13ec0 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ame);....       
13ed0 20 20 20 20 20 20 20 20 20 65 66 36 46 69 6c 65           ef6File
13ee0 4e 61 6d 65 20 3d 20 50 61 74 68 2e 43 6f 6d 62  Name = Path.Comb
13ef0 69 6e 65 28 64 69 72 65 63 74 6f 72 79 2c 0d 0a  ine(directory,..
13f00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13f10 20 20 20 20 49 6e 73 74 61 6c 6c 65 72 2e 45 66      Installer.Ef
13f20 36 46 69 6c 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20  6FileName);.... 
13f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64                 d
13f40 65 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65 20  esignerFileName 
13f50 3d 20 50 61 74 68 2e 43 6f 6d 62 69 6e 65 28 64  = Path.Combine(d
13f60 69 72 65 63 74 6f 72 79 2c 0d 0a 20 20 20 20 20  irectory,..     
13f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 49                 I
13f80 6e 73 74 61 6c 6c 65 72 2e 44 65 73 69 67 6e 65  nstaller.Designe
13f90 72 46 69 6c 65 4e 61 6d 65 29 3b 0d 0a 20 20 20  rFileName);..   
13fa0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
13fb0 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
13fc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
13fd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
13fe0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
13ff0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
14000 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69  .            pri
14010 76 61 74 65 20 73 74 61 74 69 63 20 62 6f 6f 6c  vate static bool
14020 20 43 68 65 63 6b 4f 70 74 69 6f 6e 28 0d 0a 20   CheckOption(.. 
14030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
14040 65 66 20 73 74 72 69 6e 67 20 61 72 67 0d 0a 20  ef string arg.. 
14050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29                 )
14060 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
14070 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
14080 20 73 74 72 69 6e 67 20 72 65 73 75 6c 74 20 3d   string result =
14090 20 61 72 67 3b 0d 0a 0d 0a 20 20 20 20 20 20 20   arg;....       
140a0 20 20 20 20 20 20 20 20 20 69 66 20 28 21 53 74           if (!St
140b0 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70  ring.IsNullOrEmp
140c0 74 79 28 72 65 73 75 6c 74 29 29 0d 0a 20 20 20  ty(result))..   
140d0 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
140e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
140f0 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
14100 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e              // N
14110 4f 54 45 3a 20 52 65 6d 6f 76 65 20 61 6c 6c 20  OTE: Remove all 
14120 6c 65 61 64 69 6e 67 20 73 77 69 74 63 68 20 63  leading switch c
14130 68 61 72 73 2e 0d 0a 20 20 20 20 20 20 20 20 20  hars...         
14140 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
14150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14160 20 20 20 72 65 73 75 6c 74 20 3d 20 72 65 73 75     result = resu
14170 6c 74 2e 54 72 69 6d 53 74 61 72 74 28 53 77 69  lt.TrimStart(Swi
14180 74 63 68 43 68 61 72 73 29 3b 0d 0a 0d 0a 20 20  tchChars);....  
14190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
141a0 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
141b0 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54            // NOT
141c0 45 3a 20 48 6f 77 20 6d 61 6e 79 20 63 68 61 72  E: How many char
141d0 73 20 77 65 72 65 20 72 65 6d 6f 76 65 64 3f 0d  s were removed?.
141e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
141f0 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
14200 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74               int
14210 20 63 6f 75 6e 74 20 3d 20 61 72 67 2e 4c 65 6e   count = arg.Len
14220 67 74 68 20 2d 20 72 65 73 75 6c 74 2e 4c 65 6e  gth - result.Len
14230 67 74 68 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  gth;....        
14240 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
14250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14260 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 57 61 73      // NOTE: Was
14270 20 74 68 65 72 65 20 61 74 20 6c 65 61 73 74 20   there at least 
14280 6f 6e 65 3f 0d 0a 20 20 20 20 20 20 20 20 20 20  one?..          
14290 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
142a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
142b0 20 20 69 66 20 28 63 6f 75 6e 74 20 3e 20 30 29    if (count > 0)
142c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
142d0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
142e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
142f0 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
14300 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
14310 4e 4f 54 45 3a 20 4f 6b 2c 20 72 65 70 6c 61 63  NOTE: Ok, replac
14320 65 20 74 68 65 69 72 20 6f 72 69 67 69 6e 61 6c  e their original
14330 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
14340 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
14350 20 20 20 61 72 67 75 6d 65 6e 74 2e 0d 0a 20 20     argument...  
14360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14370 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
14380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14390 20 20 61 72 67 20 3d 20 72 65 73 75 6c 74 3b 0d    arg = result;.
143a0 0a 0d 0a 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 2f 2f 0d 0a 20             //.. 
143c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
143d0 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20         // NOTE: 
143e0 59 65 73 2c 20 74 68 69 73 20 69 73 20 61 20 73  Yes, this is a s
143f0 77 69 74 63 68 2e 0d 0a 20 20 20 20 20 20 20 20  witch...        
14400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14410 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
14420 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
14430 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20  rn true;..      
14440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
14450 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
14460 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
14470 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
14480 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se;..           
14490 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
144a0 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
144b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
144c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
144d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
144e0 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
144f0 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61       private sta
14500 74 69 63 20 62 6f 6f 6c 20 4d 61 74 63 68 4f 70  tic bool MatchOp
14510 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20  tion(..         
14520 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 61 72         string ar
14530 67 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  g,..            
14540 20 20 20 20 73 74 72 69 6e 67 20 6f 70 74 69 6f      string optio
14550 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  n..             
14560 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20     )..          
14570 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
14580 20 20 20 20 20 69 66 20 28 28 61 72 67 20 3d 3d       if ((arg ==
14590 20 6e 75 6c 6c 29 20 7c 7c 20 28 6f 70 74 69 6f   null) || (optio
145a0 6e 20 3d 3d 20 6e 75 6c 6c 29 29 0d 0a 20 20 20  n == null))..   
145b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
145c0 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
145d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
145e0 20 20 72 65 74 75 72 6e 20 53 74 72 69 6e 67 2e    return String.
145f0 43 6f 6d 70 61 72 65 28 61 72 67 2c 20 30 2c 20  Compare(arg, 0, 
14600 6f 70 74 69 6f 6e 2c 20 30 2c 0d 0a 20 20 20 20  option, 0,..    
14610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14620 61 72 67 2e 4c 65 6e 67 74 68 2c 20 53 74 72 69  arg.Length, Stri
14630 6e 67 43 6f 6d 70 61 72 69 73 6f 6e 2e 4f 72 64  ngComparison.Ord
14640 69 6e 61 6c 49 67 6e 6f 72 65 43 61 73 65 29 20  inalIgnoreCase) 
14650 3d 3d 20 30 3b 0d 0a 20 20 20 20 20 20 20 20 20  == 0;..         
14660 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
14670 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
14680 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14690 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
146a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
146b0 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
146c0 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
146d0 74 61 74 69 63 20 62 6f 6f 6c 3f 20 50 61 72 73  tatic bool? Pars
146e0 65 42 6f 6f 6c 65 61 6e 28 0d 0a 20 20 20 20 20  eBoolean(..     
146f0 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
14700 67 20 74 65 78 74 0d 0a 20 20 20 20 20 20 20 20  g text..        
14710 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
14720 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
14730 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21 53            if (!S
14740 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d  tring.IsNullOrEm
14750 70 74 79 28 74 65 78 74 29 29 0d 0a 20 20 20 20  pty(text))..    
14760 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
14770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14780 20 20 20 62 6f 6f 6c 20 76 61 6c 75 65 3b 0d 0a     bool value;..
14790 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
147a0 20 20 20 20 20 20 69 66 20 28 62 6f 6f 6c 2e 54        if (bool.T
147b0 72 79 50 61 72 73 65 28 74 65 78 74 2c 20 6f 75  ryParse(text, ou
147c0 74 20 76 61 6c 75 65 29 29 0d 0a 20 20 20 20 20  t value))..     
147d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
147e0 20 20 20 72 65 74 75 72 6e 20 76 61 6c 75 65 3b     return value;
147f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
14800 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
14810 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 75         return nu
14820 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll;..           
14830 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
14840 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
14850 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14860 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14870 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14880 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
14890 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61       private sta
148a0 74 69 63 20 6f 62 6a 65 63 74 20 50 61 72 73 65  tic object Parse
148b0 45 6e 75 6d 28 0d 0a 20 20 20 20 20 20 20 20 20  Enum(..         
148c0 20 20 20 20 20 20 20 54 79 70 65 20 65 6e 75 6d         Type enum
148d0 54 79 70 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  Type,..         
148e0 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 74 65         string te
148f0 78 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  xt,..           
14900 20 20 20 20 20 62 6f 6f 6c 20 6e 6f 43 61 73 65       bool noCase
14910 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
14920 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20    )..           
14930 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
14940 20 20 20 20 69 66 20 28 28 65 6e 75 6d 54 79 70      if ((enumTyp
14950 65 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20 21 65  e == null) || !e
14960 6e 75 6d 54 79 70 65 2e 49 73 45 6e 75 6d 29 0d  numType.IsEnum).
14970 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
14980 20 20 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c       return null
14990 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
149a0 20 20 20 20 20 69 66 20 28 21 53 74 72 69 6e 67       if (!String
149b0 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 74  .IsNullOrEmpty(t
149c0 65 78 74 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ext))..         
149d0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
149e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
149f0 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  y..             
14a00 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
14a10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14a20 20 20 72 65 74 75 72 6e 20 45 6e 75 6d 2e 50 61    return Enum.Pa
14a30 72 73 65 28 65 6e 75 6d 54 79 70 65 2c 20 74 65  rse(enumType, te
14a40 78 74 2c 20 6e 6f 43 61 73 65 29 3b 0d 0a 20 20  xt, noCase);..  
14a50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14a60 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
14a70 20 20 20 20 20 20 20 20 20 63 61 74 63 68 0d 0a           catch..
14a80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14a90 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
14aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
14ab0 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20  / do nothing... 
14ac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14ad0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
14ae0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
14af0 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
14b00 6e 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20  n null;..       
14b10 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
14b20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
14b30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14b40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14b50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14b60 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
14b70 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65           private
14b80 20 73 74 61 74 69 63 20 62 6f 6f 6c 20 49 73 53   static bool IsS
14b90 79 73 74 65 6d 45 66 36 41 73 73 65 6d 62 6c 79  ystemEf6Assembly
14ba0 47 6c 6f 62 61 6c 28 29 0d 0a 20 20 20 20 20 20  Global()..      
14bb0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
14bc0 20 20 20 20 20 20 20 20 20 69 66 20 28 73 79 73           if (sys
14bd0 74 65 6d 45 66 36 41 73 73 65 6d 62 6c 79 20 3d  temEf6Assembly =
14be0 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
14bf0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
14c00 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20  urn false;....  
14c10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
14c20 74 75 72 6e 20 73 79 73 74 65 6d 45 66 36 41 73  turn systemEf6As
14c30 73 65 6d 62 6c 79 2e 47 6c 6f 62 61 6c 41 73 73  sembly.GlobalAss
14c40 65 6d 62 6c 79 43 61 63 68 65 3b 0d 0a 20 20 20  emblyCache;..   
14c50 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
14c60 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
14c70 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  on....          
14c80 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
14c90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14ca0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14cb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14cc0 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
14cd0 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50 75 62       #region Pub
14ce0 6c 69 63 20 53 74 61 74 69 63 20 4d 65 74 68 6f  lic Static Metho
14cf0 64 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ds..            
14d00 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 76 6f  public static vo
14d10 69 64 20 42 72 65 61 6b 49 6e 74 6f 44 65 62 75  id BreakIntoDebu
14d20 67 67 65 72 28 29 0d 0a 20 20 20 20 20 20 20 20  gger()..        
14d30 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
14d40 20 20 20 20 20 20 20 43 6f 6e 73 6f 6c 65 2e 57         Console.W
14d50 72 69 74 65 4c 69 6e 65 28 0d 0a 20 20 20 20 20  riteLine(..     
14d60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
14d70 41 74 74 61 63 68 20 61 20 64 65 62 75 67 67 65  Attach a debugge
14d80 72 20 74 6f 20 70 72 6f 63 65 73 73 20 7b 30 7d  r to process {0}
14d90 20 61 6e 64 20 70 72 65 73 73 20 22 20 2b 0d 0a   and press " +..
14da0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14db0 20 20 20 20 22 61 6e 79 20 6b 65 79 20 74 6f 20      "any key to 
14dc0 63 6f 6e 74 69 6e 75 65 2e 22 2c 20 28 74 68 69  continue.", (thi
14dd0 73 50 72 6f 63 65 73 73 20 21 3d 20 6e 75 6c 6c  sProcess != null
14de0 29 20 3f 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ) ?..           
14df0 20 20 20 20 20 20 20 20 20 74 68 69 73 50 72 6f           thisPro
14e00 63 65 73 73 2e 49 64 2e 54 6f 53 74 72 69 6e 67  cess.Id.ToString
14e10 28 29 20 3a 20 22 3c 75 6e 6b 6e 6f 77 6e 3e 22  () : "<unknown>"
14e20 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
14e30 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20        try..     
14e40 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
14e50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14e60 20 20 43 6f 6e 73 6f 6c 65 2e 52 65 61 64 4b 65    Console.ReadKe
14e70 79 28 74 72 75 65 29 3b 20 2f 2a 20 74 68 72 6f  y(true); /* thro
14e80 77 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20  w */..          
14e90 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
14ea0 20 20 20 20 20 20 20 20 20 63 61 74 63 68 20 28           catch (
14eb0 49 6e 76 61 6c 69 64 4f 70 65 72 61 74 69 6f 6e  InvalidOperation
14ec0 45 78 63 65 70 74 69 6f 6e 29 20 2f 2f 20 43 6f  Exception) // Co
14ed0 6e 73 6f 6c 65 2e 52 65 61 64 4b 65 79 0d 0a 20  nsole.ReadKey.. 
14ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
14ef0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
14f00 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68        // do noth
14f10 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  ing...          
14f20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
14f30 20 20 20 20 20 20 20 20 20 20 20 44 65 62 75 67             Debug
14f40 67 65 72 2e 42 72 65 61 6b 28 29 3b 0d 0a 20 20  ger.Break();..  
14f50 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
14f60 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
14f70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14f80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14f90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14fa0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
14fb0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
14fc0 62 6c 69 63 20 73 74 61 74 69 63 20 43 6f 6e 66  blic static Conf
14fd0 69 67 75 72 61 74 69 6f 6e 20 43 72 65 61 74 65  iguration Create
14fe0 44 65 66 61 75 6c 74 28 29 0d 0a 20 20 20 20 20  Default()..     
14ff0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
15000 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
15010 20 64 69 72 65 63 74 6f 72 79 20 3d 20 6e 75 6c   directory = nul
15020 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l;..            
15030 20 20 20 20 73 74 72 69 6e 67 20 63 6f 72 65 46      string coreF
15040 69 6c 65 4e 61 6d 65 20 3d 20 6e 75 6c 6c 3b 0d  ileName = null;.
15050 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
15060 20 73 74 72 69 6e 67 20 6c 69 6e 71 46 69 6c 65   string linqFile
15070 4e 61 6d 65 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20  Name = null;..  
15080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
15090 72 69 6e 67 20 65 66 36 46 69 6c 65 4e 61 6d 65  ring ef6FileName
150a0 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20   = null;..      
150b0 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
150c0 20 64 65 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d   designerFileNam
150d0 65 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20  e = null;....   
150e0 20 20 20 20 20 20 20 20 20 20 20 20 20 47 65 74               Get
150f0 44 65 66 61 75 6c 74 46 69 6c 65 4e 61 6d 65 73  DefaultFileNames
15100 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
15110 20 20 20 20 20 20 20 72 65 66 20 64 69 72 65 63         ref direc
15120 74 6f 72 79 2c 20 72 65 66 20 63 6f 72 65 46 69  tory, ref coreFi
15130 6c 65 4e 61 6d 65 2c 20 72 65 66 20 6c 69 6e 71  leName, ref linq
15140 46 69 6c 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20  FileName,..     
15150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
15160 65 66 20 65 66 36 46 69 6c 65 4e 61 6d 65 2c 20  ef ef6FileName, 
15170 72 65 66 20 64 65 73 69 67 6e 65 72 46 69 6c 65  ref designerFile
15180 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  Name);....      
15190 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
151a0 20 6e 65 77 20 43 6f 6e 66 69 67 75 72 61 74 69   new Configurati
151b0 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  on(..           
151c0 20 20 20 20 20 20 20 20 20 74 68 69 73 41 73 73           thisAss
151d0 65 6d 62 6c 79 2c 20 6e 75 6c 6c 2c 20 64 69 72  embly, null, dir
151e0 65 63 74 6f 72 79 2c 20 63 6f 72 65 46 69 6c 65  ectory, coreFile
151f0 4e 61 6d 65 2c 20 6c 69 6e 71 46 69 6c 65 4e 61  Name, linqFileNa
15200 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me,..           
15210 20 20 20 20 20 20 20 20 20 65 66 36 46 69 6c 65           ef6File
15220 4e 61 6d 65 2c 20 64 65 73 69 67 6e 65 72 46 69  Name, designerFi
15230 6c 65 4e 61 6d 65 2c 20 6e 75 6c 6c 2c 20 6e 75  leName, null, nu
15240 6c 6c 2c 20 6e 75 6c 6c 2c 0d 0a 20 20 20 20 20  ll, null,..     
15250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
15260 72 61 63 65 4f 70 73 2e 44 65 62 75 67 46 6f 72  raceOps.DebugFor
15270 6d 61 74 2c 20 54 72 61 63 65 4f 70 73 2e 54 72  mat, TraceOps.Tr
15280 61 63 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20  aceFormat,..    
15290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
152a0 49 6e 73 74 61 6c 6c 46 6c 61 67 73 2e 44 65 66  InstallFlags.Def
152b0 61 75 6c 74 2c 20 50 72 6f 76 69 64 65 72 46 6c  ault, ProviderFl
152c0 61 67 73 2e 44 65 66 61 75 6c 74 2c 0d 0a 20 20  ags.Default,..  
152d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
152e0 20 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e    TracePriority.
152f0 44 65 66 61 75 6c 74 2c 20 54 72 61 63 65 50 72  Default, TracePr
15300 69 6f 72 69 74 79 2e 44 65 66 61 75 6c 74 2c 20  iority.Default, 
15310 66 61 6c 73 65 2c 20 74 72 75 65 2c 0d 0a 20 20  false, true,..  
15320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15330 20 20 66 61 6c 73 65 2c 20 66 61 6c 73 65 2c 20    false, false, 
15340 66 61 6c 73 65 2c 20 66 61 6c 73 65 2c 20 66 61  false, false, fa
15350 6c 73 65 2c 20 66 61 6c 73 65 2c 20 66 61 6c 73  lse, false, fals
15360 65 2c 20 66 61 6c 73 65 2c 0d 0a 20 20 20 20 20  e, false,..     
15370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66                 f
15380 61 6c 73 65 2c 20 66 61 6c 73 65 2c 20 66 61 6c  alse, false, fal
15390 73 65 2c 20 66 61 6c 73 65 2c 20 66 61 6c 73 65  se, false, false
153a0 2c 20 66 61 6c 73 65 2c 20 66 61 6c 73 65 2c 20  , false, false, 
153b0 66 61 6c 73 65 2c 0d 0a 20 20 20 20 20 20 20 20  false,..        
153c0 20 20 20 20 20 20 20 20 20 20 20 20 66 61 6c 73              fals
153d0 65 2c 20 66 61 6c 73 65 2c 20 66 61 6c 73 65 2c  e, false, false,
153e0 20 66 61 6c 73 65 2c 20 66 61 6c 73 65 2c 20 66   false, false, f
153f0 61 6c 73 65 2c 20 66 61 6c 73 65 2c 20 66 61 6c  alse, false, fal
15400 73 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se,..           
15410 20 20 20 20 20 20 20 20 20 74 72 75 65 2c 20 74           true, t
15420 72 75 65 2c 20 66 61 6c 73 65 2c 20 66 61 6c 73  rue, false, fals
15430 65 2c 20 66 61 6c 73 65 29 3b 0d 0a 20 20 20 20  e, false);..    
15440 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
15450 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
15460 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15470 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15480 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15490 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
154a0 20 20 20 20 20 20 20 20 20 20 20 20 5b 4d 65 74              [Met
154b0 68 6f 64 49 6d 70 6c 28 4d 65 74 68 6f 64 49 6d  hodImpl(MethodIm
154c0 70 6c 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e 6c 69  plOptions.NoInli
154d0 6e 69 6e 67 29 5d 0d 0a 20 20 20 20 20 20 20 20  ning)]..        
154e0 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69      public stati
154f0 63 20 62 6f 6f 6c 20 46 72 6f 6d 41 72 67 73 28  c bool FromArgs(
15500 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
15510 20 20 73 74 72 69 6e 67 5b 5d 20 61 72 67 73 2c    string[] args,
15520 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
15530 20 20 62 6f 6f 6c 20 73 74 72 69 63 74 2c 0d 0a    bool strict,..
15540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15550 72 65 66 20 43 6f 6e 66 69 67 75 72 61 74 69 6f  ref Configuratio
15560 6e 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2c  n configuration,
15570 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
15580 20 20 72 65 66 20 73 74 72 69 6e 67 20 65 72 72    ref string err
15590 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  or..            
155a0 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20      )..         
155b0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
155c0 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20        try..     
155d0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
155e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
155f0 20 20 69 66 20 28 61 72 67 73 20 3d 3d 20 6e 75    if (args == nu
15600 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
15610 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
15620 75 72 6e 20 74 72 75 65 3b 0d 0a 0d 0a 20 20 20  urn true;....   
15630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15640 20 69 66 20 28 63 6f 6e 66 69 67 75 72 61 74 69   if (configurati
15650 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  on == null)..   
15660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15670 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69       configurati
15680 6f 6e 20 3d 20 43 6f 6e 66 69 67 75 72 61 74 69  on = Configurati
15690 6f 6e 2e 43 72 65 61 74 65 44 65 66 61 75 6c 74  on.CreateDefault
156a0 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ();....         
156b0 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 6c             int l
156c0 65 6e 67 74 68 20 3d 20 61 72 67 73 2e 4c 65 6e  ength = args.Len
156d0 67 74 68 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  gth;....        
156e0 20 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 20              for 
156f0 28 69 6e 74 20 69 6e 64 65 78 20 3d 20 30 3b 20  (int index = 0; 
15700 69 6e 64 65 78 20 3c 20 6c 65 6e 67 74 68 3b 20  index < length; 
15710 69 6e 64 65 78 2b 2b 29 0d 0a 20 20 20 20 20 20  index++)..      
15720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
15730 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
15740 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
15750 61 72 67 20 3d 20 61 72 67 73 5b 69 6e 64 65 78  arg = args[index
15760 5d 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  ];....          
15770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
15780 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
15790 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54            // NOT
157a0 45 3a 20 53 6b 69 70 20 61 6e 79 20 61 72 67 75  E: Skip any argu
157b0 6d 65 6e 74 20 74 68 61 74 20 69 73 20 6e 75 6c  ment that is nul
157c0 6c 20 28 3f 29 20 6f 72 20 61 6e 20 65 6d 70 74  l (?) or an empt
157d0 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  y..             
157e0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
157f0 20 20 20 20 73 74 72 69 6e 67 2e 0d 0a 20 20 20      string...   
15800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15810 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
15820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15830 20 69 66 20 28 53 74 72 69 6e 67 2e 49 73 4e 75   if (String.IsNu
15840 6c 6c 4f 72 45 6d 70 74 79 28 61 72 67 29 29 0d  llOrEmpty(arg)).
15850 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
15860 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
15870 74 69 6e 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  tinue;....      
15880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15890 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
158a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
158b0 20 4e 4f 54 45 3a 20 57 65 20 61 72 65 20 67 6f   NOTE: We are go
158c0 69 6e 67 20 74 6f 20 6d 6f 64 69 66 79 20 74 68  ing to modify th
158d0 65 20 6f 72 69 67 69 6e 61 6c 20 61 72 67 75 6d  e original argum
158e0 65 6e 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ent..           
158f0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
15900 20 20 20 20 20 20 62 79 20 72 65 6d 6f 76 69 6e        by removin
15910 67 20 61 6e 79 20 6c 65 61 64 69 6e 67 20 6f 70  g any leading op
15920 74 69 6f 6e 20 63 68 61 72 61 63 74 65 72 73 3b  tion characters;
15930 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
15940 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
15950 20 20 20 74 68 65 72 65 66 6f 72 65 2c 20 77 65     therefore, we
15960 20 75 73 65 20 61 20 6e 65 77 20 73 74 72 69 6e   use a new strin
15970 67 20 74 6f 20 68 6f 6c 64 20 74 68 65 0d 0a 20  g to hold the.. 
15980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15990 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
159a0 6d 6f 64 69 66 69 65 64 20 61 72 67 75 6d 65 6e  modified argumen
159b0 74 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t...            
159c0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
159d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
159e0 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6e          string n
159f0 65 77 41 72 67 20 3d 20 61 72 67 3b 0d 0a 0d 0a  ewArg = arg;....
15a00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15a10 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
15a20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15a30 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 41 6c 6c      // NOTE: All
15a40 20 74 68 65 20 73 75 70 70 6f 72 74 65 64 20 63   the supported c
15a50 6f 6d 6d 61 6e 64 20 6c 69 6e 65 20 6f 70 74 69  ommand line opti
15a60 6f 6e 73 20 6d 75 73 74 0d 0a 20 20 20 20 20 20  ons must..      
15a70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15a80 20 20 2f 2f 20 20 20 20 20 20 20 62 65 67 69 6e    //       begin
15a90 20 77 69 74 68 20 61 6e 20 6f 70 74 69 6f 6e 20   with an option 
15aa0 63 68 61 72 61 63 74 65 72 20 28 65 2e 67 2e 20  character (e.g. 
15ab0 61 20 6d 69 6e 75 73 0d 0a 20 20 20 20 20 20 20  a minus..       
15ac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15ad0 20 2f 2f 20 20 20 20 20 20 20 6f 72 20 66 6f 72   //       or for
15ae0 77 61 72 64 20 73 6c 61 73 68 29 3b 20 61 74 74  ward slash); att
15af0 65 6d 70 74 20 74 6f 20 76 61 6c 69 64 61 74 65  empt to validate
15b00 20 74 68 61 74 0d 0a 20 20 20 20 20 20 20 20 20   that..         
15b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
15b20 2f 20 20 20 20 20 20 20 6e 6f 77 2e 20 20 49 66  /       now.  If
15b30 20 77 65 20 66 61 69 6c 20 69 6e 20 73 74 72 69   we fail in stri
15b40 63 74 20 6d 6f 64 65 2c 20 77 65 20 61 72 65 20  ct mode, we are 
15b50 64 6f 6e 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  done;..         
15b60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
15b70 2f 20 20 20 20 20 20 20 6f 74 68 65 72 77 69 73  /       otherwis
15b80 65 2c 20 6a 75 73 74 20 73 6b 69 70 20 74 68 69  e, just skip thi
15b90 73 20 61 72 67 75 6d 65 6e 74 20 61 6e 64 20 61  s argument and a
15ba0 64 76 61 6e 63 65 0d 0a 20 20 20 20 20 20 20 20  dvance..        
15bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15bc0 2f 2f 20 20 20 20 20 20 20 74 6f 20 74 68 65 20  //       to the 
15bd0 6e 65 78 74 20 6f 6e 65 2e 0d 0a 20 20 20 20 20  next one...     
15be0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15bf0 20 20 20 2f 2f 0d 0a 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 69                 i
15c10 66 20 28 21 43 68 65 63 6b 4f 70 74 69 6f 6e 28  f (!CheckOption(
15c20 72 65 66 20 6e 65 77 41 72 67 29 29 0d 0a 20 20  ref newArg))..  
15c30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15c40 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
15c50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15c60 20 20 20 20 20 65 72 72 6f 72 20 3d 20 54 72 61       error = Tra
15c70 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72  ceOps.DebugAndTr
15c80 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ace(..          
15c90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15ca0 20 20 20 20 20 20 54 72 61 63 65 50 72 69 6f 72        TracePrior
15cb0 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75  ity.Lowest, debu
15cc0 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20  gCallback,..    
15cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15ce0 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
15cf0 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e  eCallback, Strin
15d00 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
15d10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15d20 20 20 20 20 20 20 20 20 20 20 20 22 55 6e 73 75             "Unsu
15d30 70 70 6f 72 74 65 64 20 63 6f 6d 6d 61 6e 64 20  pported command 
15d40 6c 69 6e 65 20 61 72 67 75 6d 65 6e 74 3a 20 7b  line argument: {
15d50 30 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  0}",..          
15d60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15d70 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79        ForDisplay
15d80 28 61 72 67 29 29 2c 20 74 72 61 63 65 43 61 74  (arg)), traceCat
15d90 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20  egory);....     
15da0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15db0 20 20 20 20 20 20 20 69 66 20 28 73 74 72 69 63         if (stric
15dc0 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t)..            
15dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15de0 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
15df0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
15e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15e10 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20   continue;..    
15e20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15e30 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
15e40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15e50 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
15e60 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
15e70 4e 4f 54 45 3a 20 41 6c 6c 20 74 68 65 20 73 75  NOTE: All the su
15e80 70 70 6f 72 74 65 64 20 63 6f 6d 6d 61 6e 64 20  pported command 
15e90 6c 69 6e 65 20 6f 70 74 69 6f 6e 73 20 6d 75 73  line options mus
15ea0 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  t..             
15eb0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
15ec0 20 20 20 20 68 61 76 65 20 61 20 76 61 6c 75 65      have a value
15ed0 3b 20 74 68 65 72 65 66 6f 72 65 2c 20 61 74 74  ; therefore, att
15ee0 65 6d 70 74 20 74 6f 20 61 64 76 61 6e 63 65 0d  empt to advance.
15ef0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
15f00 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
15f10 20 20 74 6f 20 69 74 20 6e 6f 77 2e 20 20 49 66    to it now.  If
15f20 20 77 65 20 66 61 69 6c 2c 20 77 65 20 61 72 65   we fail, we are
15f30 20 64 6f 6e 65 2e 0d 0a 20 20 20 20 20 20 20 20   done...        
15f40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15f50 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
15f60 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 64 65              inde
15f70 78 2b 2b 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  x++;....        
15f80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15f90 69 66 20 28 69 6e 64 65 78 20 3e 3d 20 6c 65 6e  if (index >= len
15fa0 67 74 68 29 0d 0a 20 20 20 20 20 20 20 20 20 20  gth)..          
15fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
15fc0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
15fd0 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
15fe0 6f 72 20 3d 20 54 72 61 63 65 4f 70 73 2e 44 65  or = TraceOps.De
15ff0 62 75 67 41 6e 64 54 72 61 63 65 28 0d 0a 20 20  bugAndTrace(..  
16000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
16020 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65  acePriority.Lowe
16030 73 74 2c 20 64 65 62 75 67 43 61 6c 6c 62 61 63  st, debugCallbac
16040 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  k,..            
16050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16060 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63      traceCallbac
16070 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  k, String.Format
16080 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
16090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
160a0 20 20 20 22 4d 69 73 73 69 6e 67 20 76 61 6c 75     "Missing valu
160b0 65 20 66 6f 72 20 6f 70 74 69 6f 6e 3a 20 7b 30  e for option: {0
160c0 7d 22 2c 0d 0a 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 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28       ForDisplay(
160f0 61 72 67 29 29 2c 20 74 72 61 63 65 43 61 74 65  arg)), traceCate
16100 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
16110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16120 20 20 20 20 20 20 69 66 20 28 73 74 72 69 63 74        if (strict
16130 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
16140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16150 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
16160 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
16170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16180 62 72 65 61 6b 3b 0d 0a 20 20 20 20 20 20 20 20  break;..        
16190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
161a0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
161b0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
161c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
161d0 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45           // NOTE
161e0 3a 20 47 72 61 62 20 74 68 65 20 74 65 78 74 75  : Grab the textu
161f0 61 6c 20 76 61 6c 75 65 20 6f 66 20 74 68 69 73  al value of this
16200 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 0d 0a 20   command line.. 
16210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16220 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
16230 6f 70 74 69 6f 6e 2e 0d 0a 20 20 20 20 20 20 20  option...       
16240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16250 20 2f 2f 0d 0a 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 73 74 72               str
16270 69 6e 67 20 74 65 78 74 20 3d 20 61 72 67 73 5b  ing text = args[
16280 69 6e 64 65 78 5d 3b 0d 0a 0d 0a 20 20 20 20 20  index];....     
16290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
162a0 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
162b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
162c0 2f 20 4e 4f 54 45 3a 20 46 69 67 75 72 65 20 6f  / NOTE: Figure o
162d0 75 74 20 77 68 69 63 68 20 63 6f 6d 6d 61 6e 64  ut which command
162e0 20 6c 69 6e 65 20 6f 70 74 69 6f 6e 20 74 68 69   line option thi
162f0 73 20 69 73 0d 0a 20 20 20 20 20 20 20 20 20 20  s is..          
16300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
16310 20 20 20 20 20 20 20 28 62 61 73 65 64 20 6f 6e         (based on
16320 20 61 20 70 61 72 74 69 61 6c 20 6e 61 6d 65 20   a partial name 
16330 6d 61 74 63 68 29 20 61 6e 64 20 74 68 65 6e 20  match) and then 
16340 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20  try..           
16350 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
16360 20 20 20 20 20 20 74 6f 20 69 6e 74 65 72 70 72        to interpr
16370 65 74 20 74 68 65 20 74 65 78 74 75 61 6c 20 76  et the textual v
16380 61 6c 75 65 20 61 73 20 74 68 65 20 63 6f 72 72  alue as the corr
16390 65 63 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ect..           
163a0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
163b0 20 20 20 20 20 20 74 79 70 65 2e 0d 0a 20 20 20        type...   
163c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
163d0 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
163e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
163f0 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e   if (MatchOption
16400 28 6e 65 77 41 72 67 2c 20 22 62 72 65 61 6b 22  (newArg, "break"
16410 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
16420 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
16430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16440 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 3f             bool?
16450 20 76 61 6c 75 65 20 3d 20 50 61 72 73 65 42 6f   value = ParseBo
16460 6f 6c 65 61 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a  olean(text);....
16470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16480 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
16490 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  value == null)..
164a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
164b0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
164c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
164d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
164e0 72 72 6f 72 20 3d 20 54 72 61 63 65 4f 70 73 2e  rror = TraceOps.
164f0 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 0d 0a  DebugAndTrace(..
16500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16520 20 20 20 20 54 72 61 63 65 50 72 69 6f 72 69 74      TracePriorit
16530 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75 67 43  y.Lowest, debugC
16540 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20  allback,..      
16550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
16570 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72  aceCallback, Str
16580 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
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 20 20 20 20 20 20 20 20                  
165b0 20 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20 62 6f   "Invalid {0} bo
165c0 6f 6c 65 61 6e 20 76 61 6c 75 65 3a 20 7b 31 7d  olean value: {1}
165d0 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
165e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
165f0 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c          ForDispl
16600 61 79 28 61 72 67 29 2c 20 46 6f 72 44 69 73 70  ay(arg), ForDisp
16610 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a 20 20 20  lay(text)),..   
16620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16640 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
16650 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
16660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16670 20 20 20 20 69 66 20 28 73 74 72 69 63 74 29 0d      if (strict).
16680 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
16690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
166a0 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
166b0 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e;....          
166c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
166d0 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d        continue;.
166e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
166f0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
16700 0d 0a 20 20 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 69 66                if
16720 20 28 28 62 6f 6f 6c 29 76 61 6c 75 65 29 0d 0a   ((bool)value)..
16730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16750 42 72 65 61 6b 49 6e 74 6f 44 65 62 75 67 67 65  BreakIntoDebugge
16760 72 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  r();..          
16770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
16780 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
16790 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66           else if
167a0 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65   (MatchOption(ne
167b0 77 41 72 67 2c 20 22 63 6f 6e 66 69 67 56 65 72  wArg, "configVer
167c0 73 69 6f 6e 22 29 29 0d 0a 20 20 20 20 20 20 20  sion"))..       
167d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
167e0 20 7b 0d 0a 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 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 63 6f  configuration.co
16810 6e 66 69 67 56 65 72 73 69 6f 6e 20 3d 20 74 65  nfigVersion = te
16820 78 74 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  xt;..           
16830 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
16840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16850 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20          else if 
16860 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77  (MatchOption(new
16870 41 72 67 2c 20 22 63 6f 6e 66 69 72 6d 22 29 29  Arg, "confirm"))
16880 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
16890 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
168a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
168b0 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 3f 20 76           bool? v
168c0 61 6c 75 65 20 3d 20 50 61 72 73 65 42 6f 6f 6c  alue = ParseBool
168d0 65 61 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a 20 20  ean(text);....  
168e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
168f0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76 61            if (va
16900 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  lue == null)..  
16910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16920 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
16930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16940 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
16950 6f 72 20 3d 20 54 72 61 63 65 4f 70 73 2e 44 65  or = TraceOps.De
16960 62 75 67 41 6e 64 54 72 61 63 65 28 0d 0a 20 20  bugAndTrace(..  
16970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16990 20 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e    TracePriority.
169a0 4c 6f 77 65 73 74 2c 20 64 65 62 75 67 43 61 6c  Lowest, debugCal
169b0 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20  lback,..        
169c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
169d0 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
169e0 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e  eCallback, Strin
169f0 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
16a00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16a10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
16a20 49 6e 76 61 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c  Invalid {0} bool
16a30 65 61 6e 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c  ean value: {1}",
16a40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
16a50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16a60 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79        ForDisplay
16a70 28 61 72 67 29 2c 20 46 6f 72 44 69 73 70 6c 61  (arg), ForDispla
16a80 79 28 74 65 78 74 29 29 2c 0d 0a 20 20 20 20 20  y(text)),..     
16a90 20 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 20 20 74                 t
16ab0 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
16ac0 0d 0a 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 20 20 20                  
16ae0 20 20 69 66 20 28 73 74 72 69 63 74 29 0d 0a 20    if (strict).. 
16af0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16b00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16b10 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
16b20 0d 0a 0d 0a 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 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20      continue;.. 
16b50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16b60 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
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 63 6f 6e 66              conf
16b90 69 67 75 72 61 74 69 6f 6e 2e 63 6f 6e 66 69 72  iguration.confir
16ba0 6d 20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75 65 3b  m = (bool)value;
16bb0 0d 0a 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 7d 0d 0a 20 20 20            }..   
16bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16be0 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61       else if (Ma
16bf0 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67  tchOption(newArg
16c00 2c 20 22 63 6f 72 65 46 69 6c 65 4e 61 6d 65 22  , "coreFileName"
16c10 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
16c20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
16c30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16c40 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69             confi
16c50 67 75 72 61 74 69 6f 6e 2e 63 6f 72 65 46 69 6c  guration.coreFil
16c60 65 4e 61 6d 65 20 3d 20 74 65 78 74 3b 0d 0a 20  eName = text;.. 
16c70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16c80 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
16c90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16ca0 20 20 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68    else if (Match
16cb0 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22  Option(newArg, "
16cc0 64 65 62 75 67 22 29 29 0d 0a 20 20 20 20 20 20  debug"))..      
16cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16ce0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
16cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16d00 20 62 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d 20 50   bool? value = P
16d10 61 72 73 65 42 6f 6f 6c 65 61 6e 28 74 65 78 74  arseBoolean(text
16d20 29 3b 0d 0a 0d 0a 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 20                  
16d40 20 20 69 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e    if (value == n
16d50 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
16d60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16d70 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 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 65 72 72 6f 72 20 3d 20 54 72 61       error = Tra
16da0 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72  ceOps.DebugAndTr
16db0 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ace(..          
16dc0 20 20 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 54 72 61 63 65 50            TraceP
16de0 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20  riority.Lowest, 
16df0 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a  debugCallback,..
16e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16e10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16e20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63      traceCallbac
16e30 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  k, String.Format
16e40 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
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 22 49 6e 76 61 6c 69 64 20         "Invalid 
16e70 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75  {0} boolean valu
16e80 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20  e: {1}",..      
16e90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f                Fo
16eb0 72 44 69 73 70 6c 61 79 28 61 72 67 29 2c 20 46  rDisplay(arg), F
16ec0 6f 72 44 69 73 70 6c 61 79 28 74 65 78 74 29 29  orDisplay(text))
16ed0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
16ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16ef0 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65         traceCate
16f00 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
16f10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16f20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 73 74            if (st
16f30 72 69 63 74 29 0d 0a 20 20 20 20 20 20 20 20 20  rict)..         
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 72 65 74 75 72             retur
16f60 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20  n false;....    
16f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16f80 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74              cont
16f90 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  inue;..         
16fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16fb0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
16fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16fd0 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f      configuratio
16fe0 6e 2e 64 65 62 75 67 20 3d 20 28 62 6f 6f 6c 29  n.debug = (bool)
16ff0 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20  value;..        
17000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17010 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
17020 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20             else 
17030 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28  if (MatchOption(
17040 6e 65 77 41 72 67 2c 20 22 64 65 62 75 67 46 6f  newArg, "debugFo
17050 72 6d 61 74 22 29 29 0d 0a 20 20 20 20 20 20 20  rmat"))..       
17060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17070 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
17080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17090 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 64 65  configuration.de
170a0 62 75 67 46 6f 72 6d 61 74 20 3d 20 74 65 78 74  bugFormat = text
170b0 3b 0d 0a 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 20 20 20 54                 T
170d0 72 61 63 65 4f 70 73 2e 44 65 62 75 67 46 6f 72  raceOps.DebugFor
170e0 6d 61 74 20 3d 20 63 6f 6e 66 69 67 75 72 61 74  mat = configurat
170f0 69 6f 6e 2e 64 65 62 75 67 46 6f 72 6d 61 74 3b  ion.debugFormat;
17100 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
17110 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
17120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17130 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61       else if (Ma
17140 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67  tchOption(newArg
17150 2c 20 22 64 65 62 75 67 50 72 69 6f 72 69 74 79  , "debugPriority
17160 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  "))..           
17170 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
17180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17190 20 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65              obje
171a0 63 74 20 76 61 6c 75 65 20 3d 20 50 61 72 73 65  ct value = Parse
171b0 45 6e 75 6d 28 0d 0a 20 20 20 20 20 20 20 20 20  Enum(..         
171c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
171d0 20 20 20 20 20 20 20 74 79 70 65 6f 66 28 54 72         typeof(Tr
171e0 61 63 65 50 72 69 6f 72 69 74 79 29 2c 20 74 65  acePriority), te
171f0 78 74 2c 20 74 72 75 65 29 3b 0d 0a 0d 0a 20 20  xt, true);....  
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 69 66 20 28 76 61            if (va
17220 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  lue == null)..  
17230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17240 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
17250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17260 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
17270 6f 72 20 3d 20 54 72 61 63 65 4f 70 73 2e 44 65  or = TraceOps.De
17280 62 75 67 41 6e 64 54 72 61 63 65 28 0d 0a 20 20  bugAndTrace(..  
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 20 20 20                  
172b0 20 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e    TracePriority.
172c0 4c 6f 77 65 73 74 2c 20 64 65 62 75 67 43 61 6c  Lowest, debugCal
172d0 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20  lback,..        
172e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
172f0 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
17300 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e  eCallback, Strin
17310 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
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 20 20 20 20 20 20 20 20 22                 "
17340 49 6e 76 61 6c 69 64 20 7b 30 7d 20 76 61 6c 75  Invalid {0} valu
17350 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20  e: {1}",..      
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 46 6f                Fo
17380 72 44 69 73 70 6c 61 79 28 61 72 67 29 2c 20 46  rDisplay(arg), F
17390 6f 72 44 69 73 70 6c 61 79 28 74 65 78 74 29 29  orDisplay(text))
173a0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
173b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
173c0 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65         traceCate
173d0 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
173e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
173f0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 73 74            if (st
17400 72 69 63 74 29 0d 0a 20 20 20 20 20 20 20 20 20  rict)..         
17410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17420 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
17430 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20  n false;....    
17440 20 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 63 6f 6e 74              cont
17460 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  inue;..         
17470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17480 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
17490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
174a0 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f      configuratio
174b0 6e 2e 64 65 62 75 67 50 72 69 6f 72 69 74 79 20  n.debugPriority 
174c0 3d 20 28 54 72 61 63 65 50 72 69 6f 72 69 74 79  = (TracePriority
174d0 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20  )value;..       
174e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
174f0 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65       TraceOps.De
17500 62 75 67 50 72 69 6f 72 69 74 79 20 3d 20 63 6f  bugPriority = co
17510 6e 66 69 67 75 72 61 74 69 6f 6e 2e 64 65 62 75  nfiguration.debu
17520 67 50 72 69 6f 72 69 74 79 3b 0d 0a 20 20 20 20  gPriority;..    
17530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17540 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
17550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
17560 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74  lse if (MatchOpt
17570 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 64 65 73  ion(newArg, "des
17580 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65 22 29 29  ignerFileName"))
17590 0d 0a 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 7b 0d 0a 20 20 20            {..   
175b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
175c0 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75           configu
175d0 72 61 74 69 6f 6e 2e 64 65 73 69 67 6e 65 72 46  ration.designerF
175e0 69 6c 65 4e 61 6d 65 20 3d 20 74 65 78 74 3b 0d  ileName = text;.
175f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
17600 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
17610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17620 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61 74      else if (Mat
17630 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c  chOption(newArg,
17640 20 22 64 69 72 65 63 74 6f 72 79 22 29 29 0d 0a   "directory"))..
17650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17660 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
17670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17680 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61         configura
17690 74 69 6f 6e 2e 64 69 72 65 63 74 6f 72 79 20 3d  tion.directory =
176a0 20 74 65 78 74 3b 0d 0a 0d 0a 20 20 20 20 20 20   text;....      
176b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
176c0 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
176d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
176e0 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 2a        // NOTE: *
176f0 53 50 45 43 49 41 4c 2a 20 4d 75 73 74 20 72 65  SPECIAL* Must re
17700 66 72 65 73 68 20 74 68 65 20 66 69 6c 65 20 6e  fresh the file n
17710 61 6d 65 73 0d 0a 20 20 20 20 20 20 20 20 20 20  ames..          
17720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17730 20 20 2f 2f 20 20 20 20 20 20 20 68 65 72 65 20    //       here 
17740 62 65 63 61 75 73 65 20 74 68 65 20 75 6e 64 65  because the unde
17750 72 6c 79 69 6e 67 20 64 69 72 65 63 74 6f 72 79  rlying directory
17760 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
17770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
17780 20 20 20 20 20 20 20 68 61 73 20 63 68 61 6e 67         has chang
17790 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ed...           
177a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
177b0 20 2f 2f 0d 0a 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 20 20 20                  
177d0 20 73 74 72 69 6e 67 20 63 6f 72 65 46 69 6c 65   string coreFile
177e0 4e 61 6d 65 20 3d 20 63 6f 6e 66 69 67 75 72 61  Name = configura
177f0 74 69 6f 6e 2e 63 6f 72 65 46 69 6c 65 4e 61 6d  tion.coreFileNam
17800 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e;....          
17810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17820 20 20 69 66 20 28 21 53 74 72 69 6e 67 2e 49 73    if (!String.Is
17830 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 63 6f 72 65  NullOrEmpty(core
17840 46 69 6c 65 4e 61 6d 65 29 29 0d 0a 20 20 20 20  FileName))..    
17850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17860 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 72 65              core
17870 46 69 6c 65 4e 61 6d 65 20 3d 20 50 61 74 68 2e  FileName = Path.
17880 47 65 74 46 69 6c 65 4e 61 6d 65 28 63 6f 72 65  GetFileName(core
17890 46 69 6c 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20  FileName);....  
178a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
178b0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 53 74            if (St
178c0 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70  ring.IsNullOrEmp
178d0 74 79 28 63 6f 72 65 46 69 6c 65 4e 61 6d 65 29  ty(coreFileName)
178e0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
178f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17900 20 20 20 63 6f 72 65 46 69 6c 65 4e 61 6d 65 20     coreFileName 
17910 3d 20 49 6e 73 74 61 6c 6c 65 72 2e 43 6f 72 65  = Installer.Core
17920 46 69 6c 65 4e 61 6d 65 3b 0d 0a 0d 0a 20 20 20  FileName;....   
17930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17940 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75           configu
17950 72 61 74 69 6f 6e 2e 63 6f 72 65 46 69 6c 65 4e  ration.coreFileN
17960 61 6d 65 20 3d 20 50 61 74 68 2e 43 6f 6d 62 69  ame = Path.Combi
17970 6e 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ne(..           
17980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17990 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69       configurati
179a0 6f 6e 2e 64 69 72 65 63 74 6f 72 79 2c 20 63 6f  on.directory, co
179b0 72 65 46 69 6c 65 4e 61 6d 65 29 3b 0d 0a 0d 0a  reFileName);....
179c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
179d0 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
179e0 6e 67 20 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 20  ng linqFileName 
179f0 3d 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e  = configuration.
17a00 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 3b 0d 0a 0d  linqFileName;...
17a10 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
17a20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
17a30 28 21 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f  (!String.IsNullO
17a40 72 45 6d 70 74 79 28 6c 69 6e 71 46 69 6c 65 4e  rEmpty(linqFileN
17a50 61 6d 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ame))..         
17a60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17a70 20 20 20 20 20 20 20 6c 69 6e 71 46 69 6c 65 4e         linqFileN
17a80 61 6d 65 20 3d 20 50 61 74 68 2e 47 65 74 46 69  ame = Path.GetFi
17a90 6c 65 4e 61 6d 65 28 6c 69 6e 71 46 69 6c 65 4e  leName(linqFileN
17aa0 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ame);....       
17ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17ac0 20 20 20 20 20 69 66 20 28 53 74 72 69 6e 67 2e       if (String.
17ad0 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 6c 69  IsNullOrEmpty(li
17ae0 6e 71 46 69 6c 65 4e 61 6d 65 29 29 0d 0a 20 20  nqFileName))..  
17af0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17b00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6c 69                li
17b10 6e 71 46 69 6c 65 4e 61 6d 65 20 3d 20 49 6e 73  nqFileName = Ins
17b20 74 61 6c 6c 65 72 2e 4c 69 6e 71 46 69 6c 65 4e  taller.LinqFileN
17b30 61 6d 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ame;....        
17b40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17b50 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f      configuratio
17b60 6e 2e 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 20 3d  n.linqFileName =
17b70 20 50 61 74 68 2e 43 6f 6d 62 69 6e 65 28 0d 0a   Path.Combine(..
17b80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17b90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17ba0 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 64 69  configuration.di
17bb0 72 65 63 74 6f 72 79 2c 20 6c 69 6e 71 46 69 6c  rectory, linqFil
17bc0 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20  eName);....     
17bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17be0 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 65 66         string ef
17bf0 36 46 69 6c 65 4e 61 6d 65 20 3d 20 63 6f 6e 66  6FileName = conf
17c00 69 67 75 72 61 74 69 6f 6e 2e 65 66 36 46 69 6c  iguration.ef6Fil
17c10 65 4e 61 6d 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  eName;....      
17c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17c30 20 20 20 20 20 20 69 66 20 28 21 53 74 72 69 6e        if (!Strin
17c40 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28  g.IsNullOrEmpty(
17c50 65 66 36 46 69 6c 65 4e 61 6d 65 29 29 0d 0a 20  ef6FileName)).. 
17c60 20 20 20 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 65                 e
17c80 66 36 46 69 6c 65 4e 61 6d 65 20 3d 20 50 61 74  f6FileName = Pat
17c90 68 2e 47 65 74 46 69 6c 65 4e 61 6d 65 28 65 66  h.GetFileName(ef
17ca0 36 46 69 6c 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20  6FileName);.... 
17cb0 20 20 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 69 66 20 28 53             if (S
17cd0 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d  tring.IsNullOrEm
17ce0 70 74 79 28 65 66 36 46 69 6c 65 4e 61 6d 65 29  pty(ef6FileName)
17cf0 29 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 65 66 36 46 69 6c 65 4e 61 6d 65 20 3d     ef6FileName =
17d20 20 49 6e 73 74 61 6c 6c 65 72 2e 45 66 36 46 69   Installer.Ef6Fi
17d30 6c 65 4e 61 6d 65 3b 0d 0a 0d 0a 20 20 20 20 20  leName;....     
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 63 6f 6e 66 69 67 75 72 61         configura
17d60 74 69 6f 6e 2e 65 66 36 46 69 6c 65 4e 61 6d 65  tion.ef6FileName
17d70 20 3d 20 50 61 74 68 2e 43 6f 6d 62 69 6e 65 28   = Path.Combine(
17d80 0d 0a 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 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e    configuration.
17db0 64 69 72 65 63 74 6f 72 79 2c 20 65 66 36 46 69  directory, ef6Fi
17dc0 6c 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20  leName);....    
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 73 74 72 69 6e 67 20 64          string d
17df0 65 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65 20  esignerFileName 
17e00 3d 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e  = configuration.
17e10 64 65 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65  designerFileName
17e20 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
17e30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17e40 20 69 66 20 28 21 53 74 72 69 6e 67 2e 49 73 4e   if (!String.IsN
17e50 75 6c 6c 4f 72 45 6d 70 74 79 28 64 65 73 69 67  ullOrEmpty(desig
17e60 6e 65 72 46 69 6c 65 4e 61 6d 65 29 29 0d 0a 20  nerFileName)).. 
17e70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17e80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64                 d
17e90 65 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65 20  esignerFileName 
17ea0 3d 20 50 61 74 68 2e 47 65 74 46 69 6c 65 4e 61  = Path.GetFileNa
17eb0 6d 65 28 64 65 73 69 67 6e 65 72 46 69 6c 65 4e  me(designerFileN
17ec0 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ame);....       
17ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17ee0 20 20 20 20 20 69 66 20 28 53 74 72 69 6e 67 2e       if (String.
17ef0 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 64 65  IsNullOrEmpty(de
17f00 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65 29 29  signerFileName))
17f10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
17f20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17f30 20 20 64 65 73 69 67 6e 65 72 46 69 6c 65 4e 61    designerFileNa
17f40 6d 65 20 3d 20 49 6e 73 74 61 6c 6c 65 72 2e 44  me = Installer.D
17f50 65 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65 3b  esignerFileName;
17f60 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
17f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17f80 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 64 65  configuration.de
17f90 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65 20 3d  signerFileName =
17fa0 20 50 61 74 68 2e 43 6f 6d 62 69 6e 65 28 0d 0a   Path.Combine(..
17fb0 20 20 20 20 20 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 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 64 69  configuration.di
17fe0 72 65 63 74 6f 72 79 2c 20 64 65 73 69 67 6e 65  rectory, designe
17ff0 72 46 69 6c 65 4e 61 6d 65 29 3b 0d 0a 20 20 20  rFileName);..   
18000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18010 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
18020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18030 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70  else if (MatchOp
18040 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 65 66  tion(newArg, "ef
18050 36 46 69 6c 65 4e 61 6d 65 22 29 29 0d 0a 20 20  6FileName"))..  
18060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18070 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
18080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18090 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69       configurati
180a0 6f 6e 2e 65 66 36 46 69 6c 65 4e 61 6d 65 20 3d  on.ef6FileName =
180b0 20 74 65 78 74 3b 0d 0a 20 20 20 20 20 20 20 20   text;..        
180c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
180d0 7d 0d 0a 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 65 6c 73 65 20             else 
180f0 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28  if (MatchOption(
18100 6e 65 77 41 72 67 2c 20 22 69 6e 73 74 61 6c 6c  newArg, "install
18110 22 29 29 0d 0a 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 7b 0d 0a               {..
18130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18140 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
18150 3f 20 76 61 6c 75 65 20 3d 20 50 61 72 73 65 42  ? value = ParseB
18160 6f 6f 6c 65 61 6e 28 74 65 78 74 29 3b 0d 0a 0d  oolean(text);...
18170 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
18180 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
18190 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d  (value == null).
181a0 0a 20 20 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 7b 0d 0a               {..
181c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
181d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
181e0 65 72 72 6f 72 20 3d 20 54 72 61 63 65 4f 70 73  error = TraceOps
181f0 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 0d  .DebugAndTrace(.
18200 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
18210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18220 20 20 20 20 20 54 72 61 63 65 50 72 69 6f 72 69       TracePriori
18230 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75 67  ty.Lowest, debug
18240 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20  Callback,..     
18250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
18270 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74  raceCallback, St
18280 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
18290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
182a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
182b0 20 20 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20 62    "Invalid {0} b
182c0 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 3a 20 7b 31  oolean value: {1
182d0 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }",..           
182e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
182f0 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70           ForDisp
18300 6c 61 79 28 61 72 67 29 2c 20 46 6f 72 44 69 73  lay(arg), ForDis
18310 70 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a 20 20  play(text)),..  
18320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18340 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29    traceCategory)
18350 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
18360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18370 20 20 20 20 20 69 66 20 28 73 74 72 69 63 74 29       if (strict)
18380 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
18390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
183a0 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
183b0 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  se;....         
183c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
183d0 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b         continue;
183e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
183f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
18400 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
18410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
18420 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 69 6e 73  onfiguration.ins
18430 74 61 6c 6c 20 3d 20 28 62 6f 6f 6c 29 76 61 6c  tall = (bool)val
18440 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
18450 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
18460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18470 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20          else if 
18480 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77  (MatchOption(new
18490 41 72 67 2c 20 22 69 6e 73 74 61 6c 6c 46 6c 61  Arg, "installFla
184a0 67 73 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20  gs"))..         
184b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
184c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
184d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6f 62                ob
184e0 6a 65 63 74 20 76 61 6c 75 65 20 3d 20 50 61 72  ject value = Par
184f0 73 65 45 6e 75 6d 28 0d 0a 20 20 20 20 20 20 20  seEnum(..       
18500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18510 20 20 20 20 20 20 20 20 20 74 79 70 65 6f 66 28           typeof(
18520 49 6e 73 74 61 6c 6c 46 6c 61 67 73 29 2c 20 74  InstallFlags), t
18530 65 78 74 2c 20 74 72 75 65 29 3b 0d 0a 0d 0a 20  ext, true);.... 
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 20 20 69 66 20 28 76             if (v
18560 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  alue == null).. 
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 7b 0d 0a 20 20             {..  
18590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
185a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72                er
185b0 72 6f 72 20 3d 20 54 72 61 63 65 4f 70 73 2e 44  ror = TraceOps.D
185c0 65 62 75 67 41 6e 64 54 72 61 63 65 28 0d 0a 20  ebugAndTrace(.. 
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 20 20                  
185f0 20 20 20 54 72 61 63 65 50 72 69 6f 72 69 74 79     TracePriority
18600 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75 67 43 61  .Lowest, debugCa
18610 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20  llback,..       
18620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18630 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
18640 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69  ceCallback, Stri
18650 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20  ng.Format(..    
18660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18680 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20 76 61 6c  "Invalid {0} val
18690 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20  ue: {1}",..     
186a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
186b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46                 F
186c0 6f 72 44 69 73 70 6c 61 79 28 61 72 67 29 2c 20  orDisplay(arg), 
186d0 46 6f 72 44 69 73 70 6c 61 79 28 74 65 78 74 29  ForDisplay(text)
186e0 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
186f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18700 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74          traceCat
18710 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20  egory);....     
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 69 66 20 28 73             if (s
18740 74 72 69 63 74 29 0d 0a 20 20 20 20 20 20 20 20  trict)..        
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 72 65 74 75              retu
18770 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20  rn false;....   
18780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18790 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
187a0 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20  tinue;..        
187b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
187c0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
187d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
187e0 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69       configurati
187f0 6f 6e 2e 69 6e 73 74 61 6c 6c 46 6c 61 67 73 20  on.installFlags 
18800 3d 20 28 49 6e 73 74 61 6c 6c 46 6c 61 67 73 29  = (InstallFlags)
18810 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20  value;..        
18820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18830 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
18840 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20             else 
18850 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28  if (MatchOption(
18860 6e 65 77 41 72 67 2c 20 22 6c 69 6e 71 46 69 6c  newArg, "linqFil
18870 65 4e 61 6d 65 22 29 29 0d 0a 20 20 20 20 20 20  eName"))..      
18880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18890 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
188a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
188b0 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6c   configuration.l
188c0 69 6e 71 46 69 6c 65 4e 61 6d 65 20 3d 20 74 65  inqFileName = te
188d0 78 74 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  xt;..           
188e0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
188f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18900 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20          else if 
18910 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77  (MatchOption(new
18920 41 72 67 2c 20 22 6c 6f 67 46 69 6c 65 4e 61 6d  Arg, "logFileNam
18930 65 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  e"))..          
18940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
18950 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
18960 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
18970 66 69 67 75 72 61 74 69 6f 6e 2e 6c 6f 67 46 69  figuration.logFi
18980 6c 65 4e 61 6d 65 20 3d 20 74 65 78 74 3b 0d 0a  leName = text;..
18990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
189a0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
189b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
189c0 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61 74 63     else if (Matc
189d0 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20  hOption(newArg, 
189e0 22 6e 6f 43 6f 6d 70 61 63 74 22 29 29 0d 0a 20  "noCompact")).. 
189f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18a00 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
18a10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18a20 20 20 20 20 20 20 62 6f 6f 6c 3f 20 76 61 6c 75        bool? valu
18a30 65 20 3d 20 50 61 72 73 65 42 6f 6f 6c 65 61 6e  e = ParseBoolean
18a40 28 74 65 78 74 29 3b 0d 0a 0d 0a 20 20 20 20 20  (text);....     
18a50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18a60 20 20 20 20 20 20 20 69 66 20 28 76 61 6c 75 65         if (value
18a70 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
18a80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18a90 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
18aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18ab0 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20            error 
18ac0 3d 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67  = TraceOps.Debug
18ad0 41 6e 64 54 72 61 63 65 28 0d 0a 20 20 20 20 20  AndTrace(..     
18ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18af0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
18b00 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77  racePriority.Low
18b10 65 73 74 2c 20 64 65 62 75 67 43 61 6c 6c 62 61  est, debugCallba
18b20 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ck,..           
18b30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18b40 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
18b50 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46  llback, String.F
18b60 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
18b70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18b80 20 20 20 20 20 20 20 20 20 20 20 20 22 49 6e 76              "Inv
18b90 61 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e  alid {0} boolean
18ba0 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20   value: {1}",.. 
18bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18bd0 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 61 72     ForDisplay(ar
18be0 67 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 74  g), ForDisplay(t
18bf0 65 78 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20  ext)),..        
18c00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18c10 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
18c20 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20  eCategory);.... 
18c30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18c40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
18c50 66 20 28 73 74 72 69 63 74 29 0d 0a 20 20 20 20  f (strict)..    
18c60 20 20 20 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 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d  return false;...
18c90 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
18ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18cb0 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20   continue;..    
18cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18cd0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
18ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18cf0 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75           configu
18d00 72 61 74 69 6f 6e 2e 6e 6f 43 6f 6d 70 61 63 74  ration.noCompact
18d10 20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d   = (bool)value;.
18d20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
18d30 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
18d40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18d50 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61 74      else if (Mat
18d60 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c  chOption(newArg,
18d70 20 22 6e 6f 43 6f 6e 73 6f 6c 65 22 29 29 0d 0a   "noConsole"))..
18d80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18d90 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
18da0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18db0 20 20 20 20 20 20 20 62 6f 6f 6c 3f 20 76 61 6c         bool? val
18dc0 75 65 20 3d 20 50 61 72 73 65 42 6f 6f 6c 65 61  ue = ParseBoolea
18dd0 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a 20 20 20 20  n(text);....    
18de0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18df0 20 20 20 20 20 20 20 20 69 66 20 28 76 61 6c 75          if (valu
18e00 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  e == null)..    
18e10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18e20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
18e30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18e40 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72             error
18e50 20 3d 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75   = TraceOps.Debu
18e60 67 41 6e 64 54 72 61 63 65 28 0d 0a 20 20 20 20  gAndTrace(..    
18e70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18e80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18e90 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f  TracePriority.Lo
18ea0 77 65 73 74 2c 20 64 65 62 75 67 43 61 6c 6c 62  west, debugCallb
18eb0 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ack,..          
18ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18ed0 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
18ee0 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e  allback, String.
18ef0 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
18f00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18f10 20 20 20 20 20 20 20 20 20 20 20 20 20 22 49 6e               "In
18f20 76 61 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c 65 61  valid {0} boolea
18f30 6e 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a  n value: {1}",..
18f40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18f50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18f60 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 61      ForDisplay(a
18f70 72 67 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28  rg), ForDisplay(
18f80 74 65 78 74 29 29 2c 0d 0a 20 20 20 20 20 20 20  text)),..       
18f90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
18fb0 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
18fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18fd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18fe0 69 66 20 28 73 74 72 69 63 74 29 0d 0a 20 20 20  if (strict)..   
18ff0 20 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 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
19020 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
19030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19040 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20    continue;..   
19050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19060 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
19070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19080 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67            config
19090 75 72 61 74 69 6f 6e 2e 6e 6f 43 6f 6e 73 6f 6c  uration.noConsol
190a0 65 20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75 65 3b  e = (bool)value;
190b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
190c0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
190d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
190e0 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61       else if (Ma
190f0 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67  tchOption(newArg
19100 2c 20 22 6e 6f 44 65 73 6b 74 6f 70 22 29 29 0d  , "noDesktop")).
19110 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
19120 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
19130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19140 20 20 20 20 20 20 20 20 62 6f 6f 6c 3f 20 76 61          bool? va
19150 6c 75 65 20 3d 20 50 61 72 73 65 42 6f 6f 6c 65  lue = ParseBoole
19160 61 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a 20 20 20  an(text);....   
19170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19180 20 20 20 20 20 20 20 20 20 69 66 20 28 76 61 6c           if (val
19190 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ue == null)..   
191a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
191b0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
191c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
191d0 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
191e0 72 20 3d 20 54 72 61 63 65 4f 70 73 2e 44 65 62  r = TraceOps.Deb
191f0 75 67 41 6e 64 54 72 61 63 65 28 0d 0a 20 20 20  ugAndTrace(..   
19200 20 20 20 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 20                  
19220 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c   TracePriority.L
19230 6f 77 65 73 74 2c 20 64 65 62 75 67 43 61 6c 6c  owest, debugCall
19240 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20  back,..         
19250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19260 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
19270 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67  Callback, String
19280 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  .Format(..      
19290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
192a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 49                "I
192b0 6e 76 61 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c 65  nvalid {0} boole
192c0 61 6e 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d  an value: {1}",.
192d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
192e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
192f0 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28       ForDisplay(
19300 61 72 67 29 2c 20 46 6f 72 44 69 73 70 6c 61 79  arg), ForDisplay
19310 28 74 65 78 74 29 29 2c 0d 0a 20 20 20 20 20 20  (text)),..      
19320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
19340 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d  aceCategory);...
19350 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
19360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19370 20 69 66 20 28 73 74 72 69 63 74 29 0d 0a 20 20   if (strict)..  
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 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
193b0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
193c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
193d0 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20     continue;..  
193e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
193f0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
19400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19410 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69             confi
19420 67 75 72 61 74 69 6f 6e 2e 6e 6f 44 65 73 6b 74  guration.noDeskt
19430 6f 70 20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75 65  op = (bool)value
19440 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
19450 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
19460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19470 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d        else if (M
19480 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72  atchOption(newAr
19490 67 2c 20 22 6e 6f 4c 6f 67 22 29 29 0d 0a 20 20  g, "noLog"))..  
194a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
194b0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
194c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
194d0 20 20 20 20 20 62 6f 6f 6c 3f 20 76 61 6c 75 65       bool? value
194e0 20 3d 20 50 61 72 73 65 42 6f 6f 6c 65 61 6e 28   = ParseBoolean(
194f0 74 65 78 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  text);....      
19500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19510 20 20 20 20 20 20 69 66 20 28 76 61 6c 75 65 20        if (value 
19520 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
19530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19540 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
19550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19560 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d           error =
19570 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41   TraceOps.DebugA
19580 6e 64 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20  ndTrace(..      
19590 20 20 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 54 72                Tr
195b0 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65  acePriority.Lowe
195c0 73 74 2c 20 64 65 62 75 67 43 61 6c 6c 62 61 63  st, debugCallbac
195d0 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  k,..            
195e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
195f0 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c          traceCal
19600 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f  lback, String.Fo
19610 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
19620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19630 20 20 20 20 20 20 20 20 20 20 20 22 49 6e 76 61             "Inva
19640 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20  lid {0} boolean 
19650 76 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20  value: {1}",..  
19660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19680 20 20 46 6f 72 44 69 73 70 6c 61 79 28 61 72 67    ForDisplay(arg
19690 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 74 65  ), ForDisplay(te
196a0 78 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  xt)),..         
196b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
196c0 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
196d0 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  Category);....  
196e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
196f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
19700 20 28 73 74 72 69 63 74 29 0d 0a 20 20 20 20 20   (strict)..     
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 72                 r
19730 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a  eturn false;....
19740 20 20 20 20 20 20 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 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20  continue;..     
19770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19780 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
19790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
197a0 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72          configur
197b0 61 74 69 6f 6e 2e 6e 6f 4c 6f 67 20 3d 20 28 62  ation.noLog = (b
197c0 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20  ool)value;..    
197d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
197e0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
197f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
19800 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74  lse if (MatchOpt
19810 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 6e 6f 4e  ion(newArg, "noN
19820 65 74 46 78 32 30 22 29 29 0d 0a 20 20 20 20 20  etFx20"))..     
19830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19840 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
19850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19860 20 20 62 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d 20    bool? value = 
19870 50 61 72 73 65 42 6f 6f 6c 65 61 6e 28 74 65 78  ParseBoolean(tex
19880 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  t);....         
19890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
198a0 20 20 20 69 66 20 28 76 61 6c 75 65 20 3d 3d 20     if (value == 
198b0 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
198c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
198d0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
198e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
198f0 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 54 72        error = Tr
19900 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54  aceOps.DebugAndT
19910 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20  race(..         
19920 20 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 54 72 61 63 65             Trace
19940 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c  Priority.Lowest,
19950 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d   debugCallback,.
19960 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
19970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19980 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61       traceCallba
19990 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ck, String.Forma
199a0 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
199b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
199c0 20 20 20 20 20 20 20 20 22 49 6e 76 61 6c 69 64          "Invalid
199d0 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 61 6c   {0} boolean val
199e0 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20  ue: {1}",..     
199f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19a00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46                 F
19a10 6f 72 44 69 73 70 6c 61 79 28 61 72 67 29 2c 20  orDisplay(arg), 
19a20 46 6f 72 44 69 73 70 6c 61 79 28 74 65 78 74 29  ForDisplay(text)
19a30 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
19a40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19a50 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74          traceCat
19a60 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20  egory);....     
19a70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19a80 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 73             if (s
19a90 74 72 69 63 74 29 0d 0a 20 20 20 20 20 20 20 20  trict)..        
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 72 65 74 75              retu
19ac0 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20  rn false;....   
19ad0 20 20 20 20 20 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 63 6f 6e               con
19af0 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20  tinue;..        
19b00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19b10 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
19b20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19b30 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69       configurati
19b40 6f 6e 2e 6e 6f 4e 65 74 46 78 32 30 20 3d 20 28  on.noNetFx20 = (
19b50 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20 20 20  bool)value;..   
19b60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19b70 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
19b80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19b90 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70  else if (MatchOp
19ba0 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 6e 6f  tion(newArg, "no
19bb0 4e 65 74 46 78 33 35 22 29 29 0d 0a 20 20 20 20  NetFx35"))..    
19bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19bd0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
19be0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19bf0 20 20 20 62 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d     bool? value =
19c00 20 50 61 72 73 65 42 6f 6f 6c 65 61 6e 28 74 65   ParseBoolean(te
19c10 78 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  xt);....        
19c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19c30 20 20 20 20 69 66 20 28 76 61 6c 75 65 20 3d 3d      if (value ==
19c40 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
19c50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19c60 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
19c70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19c80 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 54         error = T
19c90 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64  raceOps.DebugAnd
19ca0 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20  Trace(..        
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 54 72 61 63              Trac
19cd0 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74  ePriority.Lowest
19ce0 2c 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c  , debugCallback,
19cf0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
19d00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19d10 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62        traceCallb
19d20 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d  ack, String.Form
19d30 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
19d40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19d50 20 20 20 20 20 20 20 20 20 22 49 6e 76 61 6c 69           "Invali
19d60 64 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 61  d {0} boolean va
19d70 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20  lue: {1}",..    
19d80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19d90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19da0 46 6f 72 44 69 73 70 6c 61 79 28 61 72 67 29 2c  ForDisplay(arg),
19db0 20 46 6f 72 44 69 73 70 6c 61 79 28 74 65 78 74   ForDisplay(text
19dc0 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  )),..           
19dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19de0 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
19df0 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
19e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19e10 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
19e20 73 74 72 69 63 74 29 0d 0a 20 20 20 20 20 20 20  strict)..       
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 72 65 74               ret
19e50 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20  urn false;....  
19e60 20 20 20 20 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 63 6f                co
19e80 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20  ntinue;..       
19e90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19ea0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
19eb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19ec0 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74        configurat
19ed0 69 6f 6e 2e 6e 6f 4e 65 74 46 78 33 35 20 3d 20  ion.noNetFx35 = 
19ee0 28 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20 20  (bool)value;..  
19ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19f00 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
19f10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19f20 20 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f   else if (MatchO
19f30 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 6e  ption(newArg, "n
19f40 6f 4e 65 74 46 78 34 30 22 29 29 0d 0a 20 20 20  oNetFx40"))..   
19f50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19f60 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
19f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19f80 20 20 20 20 62 6f 6f 6c 3f 20 76 61 6c 75 65 20      bool? value 
19f90 3d 20 50 61 72 73 65 42 6f 6f 6c 65 61 6e 28 74  = ParseBoolean(t
19fa0 65 78 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ext);....       
19fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19fc0 20 20 20 20 20 69 66 20 28 76 61 6c 75 65 20 3d       if (value =
19fd0 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
19fe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19ff0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
1a000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a010 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20          error = 
1a020 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e  TraceOps.DebugAn
1a030 64 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20  dTrace(..       
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 20 20 54 72 61               Tra
1a060 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73  cePriority.Lowes
1a070 74 2c 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b  t, debugCallback
1a080 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
1a090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a0a0 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c         traceCall
1a0b0 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72  back, String.For
1a0c0 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
1a0d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a0e0 20 20 20 20 20 20 20 20 20 20 22 49 6e 76 61 6c            "Inval
1a0f0 69 64 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76  id {0} boolean v
1a100 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20  alue: {1}",..   
1a110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a130 20 46 6f 72 44 69 73 70 6c 61 79 28 61 72 67 29   ForDisplay(arg)
1a140 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 74 65 78  , ForDisplay(tex
1a150 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  t)),..          
1a160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a170 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
1a180 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20  ategory);....   
1a190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a1a0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
1a1b0 28 73 74 72 69 63 74 29 0d 0a 20 20 20 20 20 20  (strict)..      
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 72 65                re
1a1e0 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20  turn false;.... 
1a1f0 20 20 20 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 63                 c
1a210 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20  ontinue;..      
1a220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a230 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
1a240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a250 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61         configura
1a260 74 69 6f 6e 2e 6e 6f 4e 65 74 46 78 34 30 20 3d  tion.noNetFx40 =
1a270 20 28 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20   (bool)value;.. 
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 7d 0d 0a 20 20 20 20 20 20         }..      
1a2a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a2b0 20 20 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68    else if (Match
1a2c0 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22  Option(newArg, "
1a2d0 6e 6f 4e 65 74 46 78 34 35 22 29 29 0d 0a 20 20  noNetFx45"))..  
1a2e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a2f0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
1a300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a310 20 20 20 20 20 62 6f 6f 6c 3f 20 76 61 6c 75 65       bool? value
1a320 20 3d 20 50 61 72 73 65 42 6f 6f 6c 65 61 6e 28   = ParseBoolean(
1a330 74 65 78 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  text);....      
1a340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a350 20 20 20 20 20 20 69 66 20 28 76 61 6c 75 65 20        if (value 
1a360 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
1a370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a380 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
1a390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a3a0 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d           error =
1a3b0 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41   TraceOps.DebugA
1a3c0 6e 64 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20  ndTrace(..      
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 20 20 20 20 20 54 72                Tr
1a3f0 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65  acePriority.Lowe
1a400 73 74 2c 20 64 65 62 75 67 43 61 6c 6c 62 61 63  st, debugCallbac
1a410 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  k,..            
1a420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a430 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c          traceCal
1a440 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f  lback, String.Fo
1a450 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
1a460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a470 20 20 20 20 20 20 20 20 20 20 20 22 49 6e 76 61             "Inva
1a480 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20  lid {0} boolean 
1a490 76 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20  value: {1}",..  
1a4a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a4b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a4c0 20 20 46 6f 72 44 69 73 70 6c 61 79 28 61 72 67    ForDisplay(arg
1a4d0 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 74 65  ), ForDisplay(te
1a4e0 78 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  xt)),..         
1a4f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a500 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
1a510 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  Category);....  
1a520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
1a540 20 28 73 74 72 69 63 74 29 0d 0a 20 20 20 20 20   (strict)..     
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 20 72                 r
1a570 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a  eturn false;....
1a580 20 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 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20  continue;..     
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 7d 0d 0a 0d 0a 20 20 20 20         }....    
1a5d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a5e0 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72          configur
1a5f0 61 74 69 6f 6e 2e 6e 6f 4e 65 74 46 78 34 35 20  ation.noNetFx45 
1a600 3d 20 28 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a  = (bool)value;..
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 7d 0d 0a 20 20 20 20 20          }..     
1a630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a640 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61 74 63     else if (Matc
1a650 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20  hOption(newArg, 
1a660 22 6e 6f 4e 65 74 46 78 34 35 31 22 29 29 0d 0a  "noNetFx451"))..
1a670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a680 20 20 20 20 20 20 20 20 7b 0d 0a 20 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 20 20 20 62 6f 6f 6c 3f 20 76 61 6c         bool? val
1a6b0 75 65 20 3d 20 50 61 72 73 65 42 6f 6f 6c 65 61  ue = ParseBoolea
1a6c0 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a 20 20 20 20  n(text);....    
1a6d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a6e0 20 20 20 20 20 20 20 20 69 66 20 28 76 61 6c 75          if (valu
1a6f0 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  e == null)..    
1a700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a710 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
1a720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a730 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72             error
1a740 20 3d 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75   = TraceOps.Debu
1a750 67 41 6e 64 54 72 61 63 65 28 0d 0a 20 20 20 20  gAndTrace(..    
1a760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a780 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f  TracePriority.Lo
1a790 77 65 73 74 2c 20 64 65 62 75 67 43 61 6c 6c 62  west, debugCallb
1a7a0 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ack,..          
1a7b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a7c0 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
1a7d0 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e  allback, String.
1a7e0 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
1a7f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a800 20 20 20 20 20 20 20 20 20 20 20 20 20 22 49 6e               "In
1a810 76 61 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c 65 61  valid {0} boolea
1a820 6e 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a  n value: {1}",..
1a830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a850 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 61      ForDisplay(a
1a860 72 67 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28  rg), ForDisplay(
1a870 74 65 78 74 29 29 2c 0d 0a 20 20 20 20 20 20 20  text)),..       
1a880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a890 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
1a8a0 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
1a8b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a8c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a8d0 69 66 20 28 73 74 72 69 63 74 29 0d 0a 20 20 20  if (strict)..   
1a8e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a8f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a900 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
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 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20    continue;..   
1a940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a950 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
1a960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a970 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67            config
1a980 75 72 61 74 69 6f 6e 2e 6e 6f 4e 65 74 46 78 34  uration.noNetFx4
1a990 35 31 20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75 65  51 = (bool)value
1a9a0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
1a9b0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
1a9c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a9d0 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d        else if (M
1a9e0 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72  atchOption(newAr
1a9f0 67 2c 20 22 6e 6f 4e 65 74 46 78 34 35 32 22 29  g, "noNetFx452")
1aa00 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
1aa10 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
1aa20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1aa30 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 3f 20            bool? 
1aa40 76 61 6c 75 65 20 3d 20 50 61 72 73 65 42 6f 6f  value = ParseBoo
1aa50 6c 65 61 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a 20  lean(text);.... 
1aa60 20 20 20 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 69 66 20 28 76             if (v
1aa80 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  alue == null).. 
1aa90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1aaa0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
1aab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1aac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72                er
1aad0 72 6f 72 20 3d 20 54 72 61 63 65 4f 70 73 2e 44  ror = TraceOps.D
1aae0 65 62 75 67 41 6e 64 54 72 61 63 65 28 0d 0a 20  ebugAndTrace(.. 
1aaf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ab00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ab10 20 20 20 54 72 61 63 65 50 72 69 6f 72 69 74 79     TracePriority
1ab20 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75 67 43 61  .Lowest, debugCa
1ab30 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20  llback,..       
1ab40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ab50 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
1ab60 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69  ceCallback, Stri
1ab70 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20  ng.Format(..    
1ab80 20 20 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 20 20                  
1aba0 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20 62 6f 6f  "Invalid {0} boo
1abb0 6c 65 61 6e 20 76 61 6c 75 65 3a 20 7b 31 7d 22  lean value: {1}"
1abc0 2c 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 20                  
1abe0 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61         ForDispla
1abf0 79 28 61 72 67 29 2c 20 46 6f 72 44 69 73 70 6c  y(arg), ForDispl
1ac00 61 79 28 74 65 78 74 29 29 2c 0d 0a 20 20 20 20  ay(text)),..    
1ac10 20 20 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 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
1ac40 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
1ac50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ac60 20 20 20 69 66 20 28 73 74 72 69 63 74 29 0d 0a     if (strict)..
1ac70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ac80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ac90 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
1aca0 3b 0d 0a 0d 0a 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 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a       continue;..
1acd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ace0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
1acf0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1ad00 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
1ad10 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 4e 65 74  figuration.noNet
1ad20 46 78 34 35 32 20 3d 20 28 62 6f 6f 6c 29 76 61  Fx452 = (bool)va
1ad30 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lue;..          
1ad40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
1ad50 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1ad60 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66           else if
1ad70 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65   (MatchOption(ne
1ad80 77 41 72 67 2c 20 22 6e 6f 4e 65 74 46 78 34 36  wArg, "noNetFx46
1ad90 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  "))..           
1ada0 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
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 20 20 20 20 20 62 6f 6f 6c              bool
1add0 3f 20 76 61 6c 75 65 20 3d 20 50 61 72 73 65 42  ? value = ParseB
1ade0 6f 6f 6c 65 61 6e 28 74 65 78 74 29 3b 0d 0a 0d  oolean(text);...
1adf0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1ae00 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
1ae10 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d  (value == null).
1ae20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1ae30 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
1ae40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ae50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ae60 65 72 72 6f 72 20 3d 20 54 72 61 63 65 4f 70 73  error = TraceOps
1ae70 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 0d  .DebugAndTrace(.
1ae80 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1ae90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1aea0 20 20 20 20 20 54 72 61 63 65 50 72 69 6f 72 69       TracePriori
1aeb0 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75 67  ty.Lowest, debug
1aec0 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20  Callback,..     
1aed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1aee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
1aef0 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74  raceCallback, St
1af00 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
1af10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1af20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1af30 20 20 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20 62    "Invalid {0} b
1af40 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 3a 20 7b 31  oolean value: {1
1af50 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }",..           
1af60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1af70 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70           ForDisp
1af80 6c 61 79 28 61 72 67 29 2c 20 46 6f 72 44 69 73  lay(arg), ForDis
1af90 70 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a 20 20  play(text)),..  
1afa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1afb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1afc0 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29    traceCategory)
1afd0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
1afe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1aff0 20 20 20 20 20 69 66 20 28 73 74 72 69 63 74 29       if (strict)
1b000 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1b010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b020 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
1b030 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  se;....         
1b040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b050 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b         continue;
1b060 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1b070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
1b080 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
1b090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
1b0a0 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 4e  onfiguration.noN
1b0b0 65 74 46 78 34 36 20 3d 20 28 62 6f 6f 6c 29 76  etFx46 = (bool)v
1b0c0 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alue;..         
1b0d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
1b0e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1b0f0 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69            else i
1b100 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e  f (MatchOption(n
1b110 65 77 41 72 67 2c 20 22 6e 6f 4e 65 74 46 78 34  ewArg, "noNetFx4
1b120 36 31 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20  61"))..         
1b130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
1b140 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1b150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f                bo
1b160 6f 6c 3f 20 76 61 6c 75 65 20 3d 20 50 61 72 73  ol? value = Pars
1b170 65 42 6f 6f 6c 65 61 6e 28 74 65 78 74 29 3b 0d  eBoolean(text);.
1b180 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
1b190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
1b1a0 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c  f (value == null
1b1b0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
1b1c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
1b1d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1b1e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b1f0 20 20 65 72 72 6f 72 20 3d 20 54 72 61 63 65 4f    error = TraceO
1b200 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65  ps.DebugAndTrace
1b210 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
1b220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b230 20 20 20 20 20 20 20 54 72 61 63 65 50 72 69 6f         TracePrio
1b240 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62  rity.Lowest, deb
1b250 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20  ugCallback,..   
1b260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b280 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20   traceCallback, 
1b290 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
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 20 20                  
1b2c0 20 20 20 20 22 49 6e 76 61 6c 69 64 20 7b 30 7d      "Invalid {0}
1b2d0 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 3a 20   boolean value: 
1b2e0 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  {1}",..         
1b2f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b300 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69             ForDi
1b310 73 70 6c 61 79 28 61 72 67 29 2c 20 46 6f 72 44  splay(arg), ForD
1b320 69 73 70 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a  isplay(text)),..
1b330 20 20 20 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 20 20 20 20 20                  
1b350 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72      traceCategor
1b360 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
1b370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b380 20 20 20 20 20 20 20 69 66 20 28 73 74 72 69 63         if (stric
1b390 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t)..            
1b3a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b3b0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
1b3c0 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  alse;....       
1b3d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b3e0 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75           continu
1b3f0 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
1b400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b410 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
1b420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b430 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e   configuration.n
1b440 6f 4e 65 74 46 78 34 36 31 20 3d 20 28 62 6f 6f  oNetFx461 = (boo
1b450 6c 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20  l)value;..      
1b460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b470 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
1b480 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73               els
1b490 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f  e if (MatchOptio
1b4a0 6e 28 6e 65 77 41 72 67 2c 20 22 6e 6f 4e 65 74  n(newArg, "noNet
1b4b0 46 78 34 36 32 22 29 29 0d 0a 20 20 20 20 20 20  Fx462"))..      
1b4c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b4d0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
1b4e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b4f0 20 62 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d 20 50   bool? value = P
1b500 61 72 73 65 42 6f 6f 6c 65 61 6e 28 74 65 78 74  arseBoolean(text
1b510 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
1b520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b530 20 20 69 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e    if (value == n
1b540 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
1b550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b560 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
1b570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b580 20 20 20 20 20 65 72 72 6f 72 20 3d 20 54 72 61       error = Tra
1b590 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72  ceOps.DebugAndTr
1b5a0 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ace(..          
1b5b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b5c0 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 50            TraceP
1b5d0 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20  riority.Lowest, 
1b5e0 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a  debugCallback,..
1b5f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b610 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63      traceCallbac
1b620 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  k, String.Format
1b630 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
1b640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b650 20 20 20 20 20 20 20 22 49 6e 76 61 6c 69 64 20         "Invalid 
1b660 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75  {0} boolean valu
1b670 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20  e: {1}",..      
1b680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f                Fo
1b6a0 72 44 69 73 70 6c 61 79 28 61 72 67 29 2c 20 46  rDisplay(arg), F
1b6b0 6f 72 44 69 73 70 6c 61 79 28 74 65 78 74 29 29  orDisplay(text))
1b6c0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
1b6d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b6e0 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65         traceCate
1b6f0 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
1b700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b710 20 20 20 20 20 20 20 20 20 20 69 66 20 28 73 74            if (st
1b720 72 69 63 74 29 0d 0a 20 20 20 20 20 20 20 20 20  rict)..         
1b730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b740 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
1b750 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20  n false;....    
1b760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b770 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74              cont
1b780 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  inue;..         
1b790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b7a0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
1b7b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b7c0 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f      configuratio
1b7d0 6e 2e 6e 6f 4e 65 74 46 78 34 36 32 20 3d 20 28  n.noNetFx462 = (
1b7e0 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20 20 20  bool)value;..   
1b7f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b800 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
1b810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b820 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70  else if (MatchOp
1b830 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 6e 6f  tion(newArg, "no
1b840 4e 65 74 46 78 34 37 22 29 29 0d 0a 20 20 20 20  NetFx47"))..    
1b850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b860 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
1b870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b880 20 20 20 62 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d     bool? value =
1b890 20 50 61 72 73 65 42 6f 6f 6c 65 61 6e 28 74 65   ParseBoolean(te
1b8a0 78 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  xt);....        
1b8b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b8c0 20 20 20 20 69 66 20 28 76 61 6c 75 65 20 3d 3d      if (value ==
1b8d0 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
1b8e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b8f0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
1b900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b910 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 54         error = T
1b920 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64  raceOps.DebugAnd
1b930 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20  Trace(..        
1b940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b950 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
1b960 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74  ePriority.Lowest
1b970 2c 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c  , debugCallback,
1b980 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1b990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b9a0 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62        traceCallb
1b9b0 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d  ack, String.Form
1b9c0 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
1b9d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b9e0 20 20 20 20 20 20 20 20 20 22 49 6e 76 61 6c 69           "Invali
1b9f0 64 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 61  d {0} boolean va
1ba00 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20  lue: {1}",..    
1ba10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ba20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ba30 46 6f 72 44 69 73 70 6c 61 79 28 61 72 67 29 2c  ForDisplay(arg),
1ba40 20 46 6f 72 44 69 73 70 6c 61 79 28 74 65 78 74   ForDisplay(text
1ba50 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  )),..           
1ba60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ba70 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
1ba80 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
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 20 20 20 20 69 66 20 28              if (
1bab0 73 74 72 69 63 74 29 0d 0a 20 20 20 20 20 20 20  strict)..       
1bac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bad0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
1bae0 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20  urn false;....  
1baf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bb00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
1bb10 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20  ntinue;..       
1bb20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bb30 20 20 20 20 20 7d 0d 0a 0d 0a 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 20 63 6f 6e 66 69 67 75 72 61 74        configurat
1bb60 69 6f 6e 2e 6e 6f 4e 65 74 46 78 34 37 20 3d 20  ion.noNetFx47 = 
1bb70 28 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20 20  (bool)value;..  
1bb80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bb90 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
1bba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bbb0 20 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f   else if (MatchO
1bbc0 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 6e  ption(newArg, "n
1bbd0 6f 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 22  oRuntimeVersion"
1bbe0 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
1bbf0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
1bc00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bc10 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 3f             bool?
1bc20 20 76 61 6c 75 65 20 3d 20 50 61 72 73 65 42 6f   value = ParseBo
1bc30 6f 6c 65 61 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a  olean(text);....
1bc40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bc50 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
1bc60 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  value == null)..
1bc70 20 20 20 20 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 7b 0d 0a 20              {.. 
1bc90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
1bcb0 72 72 6f 72 20 3d 20 54 72 61 63 65 4f 70 73 2e  rror = TraceOps.
1bcc0 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 0d 0a  DebugAndTrace(..
1bcd0 20 20 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 20 20 20 20 20 20                  
1bcf0 20 20 20 20 54 72 61 63 65 50 72 69 6f 72 69 74      TracePriorit
1bd00 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75 67 43  y.Lowest, debugC
1bd10 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20  allback,..      
1bd20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bd30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
1bd40 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72  aceCallback, Str
1bd50 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
1bd60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bd70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bd80 20 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20 62 6f   "Invalid {0} bo
1bd90 6f 6c 65 61 6e 20 76 61 6c 75 65 3a 20 7b 31 7d  olean value: {1}
1bda0 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
1bdb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bdc0 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c          ForDispl
1bdd0 61 79 28 61 72 67 29 2c 20 46 6f 72 44 69 73 70  ay(arg), ForDisp
1bde0 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a 20 20 20  lay(text)),..   
1bdf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1be00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1be10 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
1be20 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1be30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1be40 20 20 20 20 69 66 20 28 73 74 72 69 63 74 29 0d      if (strict).
1be50 0a 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 20 20 20                  
1be70 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
1be80 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e;....          
1be90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bea0 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d        continue;.
1beb0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1bec0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
1bed0 0d 0a 20 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 63 6f                co
1bef0 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 52 75  nfiguration.noRu
1bf00 6e 74 69 6d 65 56 65 72 73 69 6f 6e 20 3d 20 28  ntimeVersion = (
1bf10 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20 20 20  bool)value;..   
1bf20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bf30 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
1bf40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bf50 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70  else if (MatchOp
1bf60 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 6e 6f  tion(newArg, "no
1bf70 54 72 61 63 65 22 29 29 0d 0a 20 20 20 20 20 20  Trace"))..      
1bf80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bf90 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
1bfa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bfb0 20 62 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d 20 50   bool? value = P
1bfc0 61 72 73 65 42 6f 6f 6c 65 61 6e 28 74 65 78 74  arseBoolean(text
1bfd0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
1bfe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bff0 20 20 69 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e    if (value == n
1c000 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
1c010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c020 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
1c030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c040 20 20 20 20 20 65 72 72 6f 72 20 3d 20 54 72 61       error = Tra
1c050 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72  ceOps.DebugAndTr
1c060 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ace(..          
1c070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c080 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 50            TraceP
1c090 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20  riority.Lowest, 
1c0a0 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a  debugCallback,..
1c0b0 20 20 20 20 20 20 20 20 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 74 72 61 63 65 43 61 6c 6c 62 61 63      traceCallbac
1c0e0 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  k, String.Format
1c0f0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
1c100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c110 20 20 20 20 20 20 20 22 49 6e 76 61 6c 69 64 20         "Invalid 
1c120 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75  {0} boolean valu
1c130 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20  e: {1}",..      
1c140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f                Fo
1c160 72 44 69 73 70 6c 61 79 28 61 72 67 29 2c 20 46  rDisplay(arg), F
1c170 6f 72 44 69 73 70 6c 61 79 28 74 65 78 74 29 29  orDisplay(text))
1c180 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
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 74 72 61 63 65 43 61 74 65         traceCate
1c1b0 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
1c1c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c1d0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 73 74            if (st
1c1e0 72 69 63 74 29 0d 0a 20 20 20 20 20 20 20 20 20  rict)..         
1c1f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c200 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
1c210 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20  n false;....    
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 20 20 63 6f 6e 74              cont
1c240 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  inue;..         
1c250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c260 20 20 20 7d 0d 0a 0d 0a 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 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f      configuratio
1c290 6e 2e 6e 6f 54 72 61 63 65 20 3d 20 28 62 6f 6f  n.noTrace = (boo
1c2a0 6c 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20  l)value;..      
1c2b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c2c0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
1c2d0 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73               els
1c2e0 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f  e if (MatchOptio
1c2f0 6e 28 6e 65 77 41 72 67 2c 20 22 6e 6f 56 73 32  n(newArg, "noVs2
1c300 30 30 35 22 29 29 0d 0a 20 20 20 20 20 20 20 20  005"))..        
1c310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c320 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
1c330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62                 b
1c340 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d 20 50 61 72  ool? value = Par
1c350 73 65 42 6f 6f 6c 65 61 6e 28 74 65 78 74 29 3b  seBoolean(text);
1c360 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1c370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c380 69 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c  if (value == nul
1c390 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
1c3a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c3b0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
1c3c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c3d0 20 20 20 65 72 72 6f 72 20 3d 20 54 72 61 63 65     error = Trace
1c3e0 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63  Ops.DebugAndTrac
1c3f0 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
1c400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c410 20 20 20 20 20 20 20 20 54 72 61 63 65 50 72 69          TracePri
1c420 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65  ority.Lowest, de
1c430 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20  bugCallback,..  
1c440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c460 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c    traceCallback,
1c470 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d   String.Format(.
1c480 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1c490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c4a0 20 20 20 20 20 22 49 6e 76 61 6c 69 64 20 7b 30       "Invalid {0
1c4b0 7d 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 3a  } boolean value:
1c4c0 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20   {1}",..        
1c4d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c4e0 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44              ForD
1c4f0 69 73 70 6c 61 79 28 61 72 67 29 2c 20 46 6f 72  isplay(arg), For
1c500 44 69 73 70 6c 61 79 28 74 65 78 74 29 29 2c 0d  Display(text)),.
1c510 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1c520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c530 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f       traceCatego
1c540 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
1c550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c560 20 20 20 20 20 20 20 20 69 66 20 28 73 74 72 69          if (stri
1c570 63 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ct)..           
1c580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c590 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
1c5a0 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  false;....      
1c5b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c5c0 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e            contin
1c5d0 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
1c5e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c5f0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
1c600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c610 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e    configuration.
1c620 6e 6f 56 73 32 30 30 35 20 3d 20 28 62 6f 6f 6c  noVs2005 = (bool
1c630 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20  )value;..       
1c640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c650 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
1c660 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65              else
1c670 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e   if (MatchOption
1c680 28 6e 65 77 41 72 67 2c 20 22 6e 6f 56 73 32 30  (newArg, "noVs20
1c690 30 38 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20  08"))..         
1c6a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
1c6b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1c6c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f                bo
1c6d0 6f 6c 3f 20 76 61 6c 75 65 20 3d 20 50 61 72 73  ol? value = Pars
1c6e0 65 42 6f 6f 6c 65 61 6e 28 74 65 78 74 29 3b 0d  eBoolean(text);.
1c6f0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
1c700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
1c710 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c  f (value == null
1c720 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
1c730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
1c740 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1c750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c760 20 20 65 72 72 6f 72 20 3d 20 54 72 61 63 65 4f    error = TraceO
1c770 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65  ps.DebugAndTrace
1c780 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
1c790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c7a0 20 20 20 20 20 20 20 54 72 61 63 65 50 72 69 6f         TracePrio
1c7b0 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62  rity.Lowest, deb
1c7c0 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20  ugCallback,..   
1c7d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c7e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c7f0 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20   traceCallback, 
1c800 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
1c810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c830 20 20 20 20 22 49 6e 76 61 6c 69 64 20 7b 30 7d      "Invalid {0}
1c840 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 3a 20   boolean value: 
1c850 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  {1}",..         
1c860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c870 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69             ForDi
1c880 73 70 6c 61 79 28 61 72 67 29 2c 20 46 6f 72 44  splay(arg), ForD
1c890 69 73 70 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a  isplay(text)),..
1c8a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c8b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c8c0 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72      traceCategor
1c8d0 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
1c8e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c8f0 20 20 20 20 20 20 20 69 66 20 28 73 74 72 69 63         if (stric
1c900 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t)..            
1c910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c920 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
1c930 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  alse;....       
1c940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c950 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75           continu
1c960 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
1c970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c980 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
1c990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c9a0 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e   configuration.n
1c9b0 6f 56 73 32 30 30 38 20 3d 20 28 62 6f 6f 6c 29  oVs2008 = (bool)
1c9c0 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20  value;..        
1c9d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c9e0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
1c9f0 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20             else 
1ca00 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28  if (MatchOption(
1ca10 6e 65 77 41 72 67 2c 20 22 6e 6f 56 73 32 30 31  newArg, "noVs201
1ca20 30 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  0"))..          
1ca30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
1ca40 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1ca50 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f               boo
1ca60 6c 3f 20 76 61 6c 75 65 20 3d 20 50 61 72 73 65  l? value = Parse
1ca70 42 6f 6f 6c 65 61 6e 28 74 65 78 74 29 3b 0d 0a  Boolean(text);..
1ca80 0d 0a 20 20 20 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 20 69 66                if
1caa0 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29   (value == null)
1cab0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1cac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
1cad0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1cae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1caf0 20 65 72 72 6f 72 20 3d 20 54 72 61 63 65 4f 70   error = TraceOp
1cb00 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28  s.DebugAndTrace(
1cb10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1cb20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cb30 20 20 20 20 20 20 54 72 61 63 65 50 72 69 6f 72        TracePrior
1cb40 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75  ity.Lowest, debu
1cb50 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20  gCallback,..    
1cb60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cb70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cb80 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53  traceCallback, S
1cb90 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
1cba0 20 20 20 20 20 20 20 20 20 20 20 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 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20     "Invalid {0} 
1cbd0 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 3a 20 7b  boolean value: {
1cbe0 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  1}",..          
1cbf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cc00 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73            ForDis
1cc10 70 6c 61 79 28 61 72 67 29 2c 20 46 6f 72 44 69  play(arg), ForDi
1cc20 73 70 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a 20  splay(text)),.. 
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 20 20 20 20                  
1cc50 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
1cc60 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
1cc70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cc80 20 20 20 20 20 20 69 66 20 28 73 74 72 69 63 74        if (strict
1cc90 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
1cca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ccb0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
1ccc0 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  lse;....        
1ccd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cce0 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65          continue
1ccf0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
1cd00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
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 20 20 20 20                  
1cd30 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f  configuration.no
1cd40 56 73 32 30 31 30 20 3d 20 28 62 6f 6f 6c 29 76  Vs2010 = (bool)v
1cd50 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alue;..         
1cd60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
1cd70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1cd80 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69            else i
1cd90 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e  f (MatchOption(n
1cda0 65 77 41 72 67 2c 20 22 6e 6f 56 73 32 30 31 32  ewArg, "noVs2012
1cdb0 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  "))..           
1cdc0 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
1cdd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cde0 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
1cdf0 3f 20 76 61 6c 75 65 20 3d 20 50 61 72 73 65 42  ? value = ParseB
1ce00 6f 6f 6c 65 61 6e 28 74 65 78 74 29 3b 0d 0a 0d  oolean(text);...
1ce10 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1ce20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
1ce30 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d  (value == null).
1ce40 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1ce50 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
1ce60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ce70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ce80 65 72 72 6f 72 20 3d 20 54 72 61 63 65 4f 70 73  error = TraceOps
1ce90 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 0d  .DebugAndTrace(.
1cea0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1ceb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cec0 20 20 20 20 20 54 72 61 63 65 50 72 69 6f 72 69       TracePriori
1ced0 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75 67  ty.Lowest, debug
1cee0 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20  Callback,..     
1cef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cf00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
1cf10 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74  raceCallback, St
1cf20 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
1cf30 20 20 20 20 20 20 20 20 20 20 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 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20 62    "Invalid {0} b
1cf60 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 3a 20 7b 31  oolean value: {1
1cf70 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }",..           
1cf80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cf90 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70           ForDisp
1cfa0 6c 61 79 28 61 72 67 29 2c 20 46 6f 72 44 69 73  lay(arg), ForDis
1cfb0 70 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a 20 20  play(text)),..  
1cfc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cfd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cfe0 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29    traceCategory)
1cff0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
1d000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d010 20 20 20 20 20 69 66 20 28 73 74 72 69 63 74 29       if (strict)
1d020 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1d030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d040 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
1d050 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  se;....         
1d060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d070 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b         continue;
1d080 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1d090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
1d0a0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
1d0b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
1d0c0 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 56  onfiguration.noV
1d0d0 73 32 30 31 32 20 3d 20 28 62 6f 6f 6c 29 76 61  s2012 = (bool)va
1d0e0 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lue;..          
1d0f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
1d100 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1d110 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66           else if
1d120 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65   (MatchOption(ne
1d130 77 41 72 67 2c 20 22 6e 6f 56 73 32 30 31 33 22  wArg, "noVs2013"
1d140 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
1d150 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 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 20 20 20 20 62 6f 6f 6c 3f             bool?
1d180 20 76 61 6c 75 65 20 3d 20 50 61 72 73 65 42 6f   value = ParseBo
1d190 6f 6c 65 61 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a  olean(text);....
1d1a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d1b0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
1d1c0 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  value == null)..
1d1d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d1e0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
1d1f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
1d210 72 72 6f 72 20 3d 20 54 72 61 63 65 4f 70 73 2e  rror = TraceOps.
1d220 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 0d 0a  DebugAndTrace(..
1d230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d250 20 20 20 20 54 72 61 63 65 50 72 69 6f 72 69 74      TracePriorit
1d260 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75 67 43  y.Lowest, debugC
1d270 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20  allback,..      
1d280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
1d2a0 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72  aceCallback, Str
1d2b0 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
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 20 20 20                  
1d2e0 20 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20 62 6f   "Invalid {0} bo
1d2f0 6f 6c 65 61 6e 20 76 61 6c 75 65 3a 20 7b 31 7d  olean value: {1}
1d300 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
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 46 6f 72 44 69 73 70 6c          ForDispl
1d330 61 79 28 61 72 67 29 2c 20 46 6f 72 44 69 73 70  ay(arg), ForDisp
1d340 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a 20 20 20  lay(text)),..   
1d350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d370 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
1d380 0d 0a 0d 0a 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 20 20                  
1d3a0 20 20 20 20 69 66 20 28 73 74 72 69 63 74 29 0d      if (strict).
1d3b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1d3c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d3d0 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
1d3e0 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e;....          
1d3f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d400 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d        continue;.
1d410 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1d420 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
1d430 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1d440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
1d450 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 56 73  nfiguration.noVs
1d460 32 30 31 33 20 3d 20 28 62 6f 6f 6c 29 76 61 6c  2013 = (bool)val
1d470 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
1d480 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
1d490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d4a0 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20          else if 
1d4b0 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77  (MatchOption(new
1d4c0 41 72 67 2c 20 22 6e 6f 56 73 32 30 31 35 22 29  Arg, "noVs2015")
1d4d0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
1d4e0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
1d4f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d500 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 3f 20            bool? 
1d510 76 61 6c 75 65 20 3d 20 50 61 72 73 65 42 6f 6f  value = ParseBoo
1d520 6c 65 61 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a 20  lean(text);.... 
1d530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d540 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76             if (v
1d550 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  alue == null).. 
1d560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d570 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
1d580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72                er
1d5a0 72 6f 72 20 3d 20 54 72 61 63 65 4f 70 73 2e 44  ror = TraceOps.D
1d5b0 65 62 75 67 41 6e 64 54 72 61 63 65 28 0d 0a 20  ebugAndTrace(.. 
1d5c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d5d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d5e0 20 20 20 54 72 61 63 65 50 72 69 6f 72 69 74 79     TracePriority
1d5f0 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75 67 43 61  .Lowest, debugCa
1d600 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20  llback,..       
1d610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d620 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
1d630 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69  ceCallback, Stri
1d640 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20  ng.Format(..    
1d650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d670 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20 62 6f 6f  "Invalid {0} boo
1d680 6c 65 61 6e 20 76 61 6c 75 65 3a 20 7b 31 7d 22  lean value: {1}"
1d690 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
1d6a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d6b0 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61         ForDispla
1d6c0 79 28 61 72 67 29 2c 20 46 6f 72 44 69 73 70 6c  y(arg), ForDispl
1d6d0 61 79 28 74 65 78 74 29 29 2c 0d 0a 20 20 20 20  ay(text)),..    
1d6e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d6f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d700 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
1d710 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
1d720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d730 20 20 20 69 66 20 28 73 74 72 69 63 74 29 0d 0a     if (strict)..
1d740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d760 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
1d770 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
1d780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d790 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a       continue;..
1d7a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d7b0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
1d7c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1d7d0 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
1d7e0 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 56 73 32  figuration.noVs2
1d7f0 30 31 35 20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75  015 = (bool)valu
1d800 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
1d810 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
1d820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d830 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28         else if (
1d840 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41  MatchOption(newA
1d850 72 67 2c 20 22 6e 6f 56 73 32 30 31 37 22 29 29  rg, "noVs2017"))
1d860 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1d870 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
1d880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d890 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 3f 20 76           bool? v
1d8a0 61 6c 75 65 20 3d 20 50 61 72 73 65 42 6f 6f 6c  alue = ParseBool
1d8b0 65 61 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a 20 20  ean(text);....  
1d8c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d8d0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76 61            if (va
1d8e0 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  lue == null)..  
1d8f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d900 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
1d910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d920 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
1d930 6f 72 20 3d 20 54 72 61 63 65 4f 70 73 2e 44 65  or = TraceOps.De
1d940 62 75 67 41 6e 64 54 72 61 63 65 28 0d 0a 20 20  bugAndTrace(..  
1d950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d970 20 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e    TracePriority.
1d980 4c 6f 77 65 73 74 2c 20 64 65 62 75 67 43 61 6c  Lowest, debugCal
1d990 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20  lback,..        
1d9a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d9b0 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
1d9c0 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e  eCallback, Strin
1d9d0 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
1d9e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d9f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
1da00 49 6e 76 61 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c  Invalid {0} bool
1da10 65 61 6e 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c  ean value: {1}",
1da20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1da30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1da40 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79        ForDisplay
1da50 28 61 72 67 29 2c 20 46 6f 72 44 69 73 70 6c 61  (arg), ForDispla
1da60 79 28 74 65 78 74 29 29 2c 0d 0a 20 20 20 20 20  y(text)),..     
1da70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1da80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
1da90 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
1daa0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1dab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dac0 20 20 69 66 20 28 73 74 72 69 63 74 29 0d 0a 20    if (strict).. 
1dad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1daf0 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
1db00 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1db10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1db20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20      continue;.. 
1db30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1db40 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
1db50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1db60 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66              conf
1db70 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 56 73 32 30  iguration.noVs20
1db80 31 37 20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75 65  17 = (bool)value
1db90 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
1dba0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
1dbb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dbc0 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d        else if (M
1dbd0 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72  atchOption(newAr
1dbe0 67 2c 20 22 70 65 72 55 73 65 72 22 29 29 0d 0a  g, "perUser"))..
1dbf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dc00 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
1dc10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dc20 20 20 20 20 20 20 20 62 6f 6f 6c 3f 20 76 61 6c         bool? val
1dc30 75 65 20 3d 20 50 61 72 73 65 42 6f 6f 6c 65 61  ue = ParseBoolea
1dc40 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a 20 20 20 20  n(text);....    
1dc50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dc60 20 20 20 20 20 20 20 20 69 66 20 28 76 61 6c 75          if (valu
1dc70 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  e == null)..    
1dc80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dc90 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
1dca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dcb0 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72             error
1dcc0 20 3d 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75   = TraceOps.Debu
1dcd0 67 41 6e 64 54 72 61 63 65 28 0d 0a 20 20 20 20  gAndTrace(..    
1dce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dcf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dd00 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f  TracePriority.Lo
1dd10 77 65 73 74 2c 20 64 65 62 75 67 43 61 6c 6c 62  west, debugCallb
1dd20 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ack,..          
1dd30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dd40 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
1dd50 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e  allback, String.
1dd60 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
1dd70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dd80 20 20 20 20 20 20 20 20 20 20 20 20 20 22 49 6e               "In
1dd90 76 61 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c 65 61  valid {0} boolea
1dda0 6e 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a  n value: {1}",..
1ddb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ddc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ddd0 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 61      ForDisplay(a
1dde0 72 67 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28  rg), ForDisplay(
1ddf0 74 65 78 74 29 29 2c 0d 0a 20 20 20 20 20 20 20  text)),..       
1de00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1de10 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
1de20 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
1de30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1de40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1de50 69 66 20 28 73 74 72 69 63 74 29 0d 0a 20 20 20  if (strict)..   
1de60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1de70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1de80 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
1de90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1dea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1deb0 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20    continue;..   
1dec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ded0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
1dee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1def0 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67            config
1df00 75 72 61 74 69 6f 6e 2e 70 65 72 55 73 65 72 20  uration.perUser 
1df10 3d 20 28 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a  = (bool)value;..
1df20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1df30 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
1df40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1df50 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61 74 63     else if (Matc
1df60 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20  hOption(newArg, 
1df70 22 70 72 6f 76 69 64 65 72 46 6c 61 67 73 22 29  "providerFlags")
1df80 29 0d 0a 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 7b 0d 0a 20 20             {..  
1dfa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dfb0 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74            object
1dfc0 20 76 61 6c 75 65 20 3d 20 50 61 72 73 65 45 6e   value = ParseEn
1dfd0 75 6d 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  um(..           
1dfe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dff0 20 20 20 20 20 74 79 70 65 6f 66 28 50 72 6f 76       typeof(Prov
1e000 69 64 65 72 46 6c 61 67 73 29 2c 20 74 65 78 74  iderFlags), text
1e010 2c 20 74 72 75 65 29 3b 0d 0a 0d 0a 20 20 20 20  , true);....    
1e020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e030 20 20 20 20 20 20 20 20 69 66 20 28 76 61 6c 75          if (valu
1e040 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  e == null)..    
1e050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e060 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
1e070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e080 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72             error
1e090 20 3d 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75   = TraceOps.Debu
1e0a0 67 41 6e 64 54 72 61 63 65 28 0d 0a 20 20 20 20  gAndTrace(..    
1e0b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e0c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e0d0 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f  TracePriority.Lo
1e0e0 77 65 73 74 2c 20 64 65 62 75 67 43 61 6c 6c 62  west, debugCallb
1e0f0 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ack,..          
1e100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e110 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
1e120 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e  allback, String.
1e130 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
1e140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e150 20 20 20 20 20 20 20 20 20 20 20 20 20 22 49 6e               "In
1e160 76 61 6c 69 64 20 7b 30 7d 20 76 61 6c 75 65 3a  valid {0} value:
1e170 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20   {1}",..        
1e180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e190 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44              ForD
1e1a0 69 73 70 6c 61 79 28 61 72 67 29 2c 20 46 6f 72  isplay(arg), For
1e1b0 44 69 73 70 6c 61 79 28 74 65 78 74 29 29 2c 0d  Display(text)),.
1e1c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1e1d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e1e0 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f       traceCatego
1e1f0 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
1e200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e210 20 20 20 20 20 20 20 20 69 66 20 28 73 74 72 69          if (stri
1e220 63 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ct)..           
1e230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e240 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
1e250 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  false;....      
1e260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e270 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e            contin
1e280 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
1e290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e2a0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
1e2b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e2c0 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e    configuration.
1e2d0 70 72 6f 76 69 64 65 72 46 6c 61 67 73 20 3d 20  providerFlags = 
1e2e0 28 50 72 6f 76 69 64 65 72 46 6c 61 67 73 29 76  (ProviderFlags)v
1e2f0 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alue;..         
1e300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
1e310 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1e320 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69            else i
1e330 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e  f (MatchOption(n
1e340 65 77 41 72 67 2c 20 22 72 65 67 69 73 74 72 79  ewArg, "registry
1e350 56 65 72 73 69 6f 6e 22 29 29 0d 0a 20 20 20 20  Version"))..    
1e360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e370 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
1e380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e390 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e     configuration
1e3a0 2e 72 65 67 69 73 74 72 79 56 65 72 73 69 6f 6e  .registryVersion
1e3b0 20 3d 20 74 65 78 74 3b 0d 0a 20 20 20 20 20 20   = text;..      
1e3c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e3d0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
1e3e0 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73               els
1e3f0 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f  e if (MatchOptio
1e400 6e 28 6e 65 77 41 72 67 2c 20 22 73 74 72 69 63  n(newArg, "stric
1e410 74 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  t"))..          
1e420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
1e430 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1e440 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f               boo
1e450 6c 3f 20 76 61 6c 75 65 20 3d 20 50 61 72 73 65  l? value = Parse
1e460 42 6f 6f 6c 65 61 6e 28 74 65 78 74 29 3b 0d 0a  Boolean(text);..
1e470 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1e480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
1e490 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29   (value == null)
1e4a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1e4b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
1e4c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1e4d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e4e0 20 65 72 72 6f 72 20 3d 20 54 72 61 63 65 4f 70   error = TraceOp
1e4f0 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28  s.DebugAndTrace(
1e500 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1e510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e520 20 20 20 20 20 20 54 72 61 63 65 50 72 69 6f 72        TracePrior
1e530 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75  ity.Lowest, debu
1e540 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20  gCallback,..    
1e550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e570 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53  traceCallback, S
1e580 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
1e590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e5a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e5b0 20 20 20 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20     "Invalid {0} 
1e5c0 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 3a 20 7b  boolean value: {
1e5d0 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  1}",..          
1e5e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e5f0 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73            ForDis
1e600 70 6c 61 79 28 61 72 67 29 2c 20 46 6f 72 44 69  play(arg), ForDi
1e610 73 70 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a 20  splay(text)),.. 
1e620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e640 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
1e650 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
1e660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e670 20 20 20 20 20 20 69 66 20 28 73 74 72 69 63 74        if (strict
1e680 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
1e690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e6a0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
1e6b0 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  lse;....        
1e6c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e6d0 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65          continue
1e6e0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
1e6f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
1e700 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1e710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e720 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
1e730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e740 2f 2f 20 4e 4f 54 45 3a 20 41 6c 6c 6f 77 20 74  // NOTE: Allow t
1e750 68 65 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 20  he command line 
1e760 61 72 67 75 6d 65 6e 74 73 20 74 6f 0d 0a 20 20  arguments to..  
1e770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e780 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
1e790 20 20 20 6f 76 65 72 72 69 64 65 20 74 68 65 20     override the 
1e7a0 22 73 74 72 69 63 74 6e 65 73 73 22 20 73 65 74  "strictness" set
1e7b0 74 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 20 20  ting..          
1e7c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e7d0 20 20 2f 2f 20 20 20 20 20 20 20 70 72 6f 76 69    //       provi
1e7e0 64 65 64 20 62 79 20 6f 75 72 20 63 61 6c 6c 65  ded by our calle
1e7f0 72 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  r...            
1e800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e810 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
1e820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e830 73 74 72 69 63 74 20 3d 20 28 62 6f 6f 6c 29 76  strict = (bool)v
1e840 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alue;..         
1e850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
1e860 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1e870 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69            else i
1e880 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e  f (MatchOption(n
1e890 65 77 41 72 67 2c 20 22 74 68 72 6f 77 4f 6e 4d  ewArg, "throwOnM
1e8a0 69 73 73 69 6e 67 22 29 29 0d 0a 20 20 20 20 20  issing"))..     
1e8b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e8c0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
1e8d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e8e0 20 20 62 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d 20    bool? value = 
1e8f0 50 61 72 73 65 42 6f 6f 6c 65 61 6e 28 74 65 78  ParseBoolean(tex
1e900 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  t);....         
1e910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e920 20 20 20 69 66 20 28 76 61 6c 75 65 20 3d 3d 20     if (value == 
1e930 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
1e940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e950 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
1e960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e970 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 54 72        error = Tr
1e980 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54  aceOps.DebugAndT
1e990 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20  race(..         
1e9a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e9b0 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
1e9c0 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c  Priority.Lowest,
1e9d0 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d   debugCallback,.
1e9e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1e9f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ea00 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61       traceCallba
1ea10 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ck, String.Forma
1ea20 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
1ea30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ea40 20 20 20 20 20 20 20 20 22 49 6e 76 61 6c 69 64          "Invalid
1ea50 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 61 6c   {0} boolean val
1ea60 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20  ue: {1}",..     
1ea70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ea80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46                 F
1ea90 6f 72 44 69 73 70 6c 61 79 28 61 72 67 29 2c 20  orDisplay(arg), 
1eaa0 46 6f 72 44 69 73 70 6c 61 79 28 74 65 78 74 29  ForDisplay(text)
1eab0 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
1eac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ead0 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74          traceCat
1eae0 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20  egory);....     
1eaf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1eb00 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 73             if (s
1eb10 74 72 69 63 74 29 0d 0a 20 20 20 20 20 20 20 20  trict)..        
1eb20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1eb30 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
1eb40 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20  rn false;....   
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 20 63 6f 6e               con
1eb70 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20  tinue;..        
1eb80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1eb90 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
1eba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ebb0 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69       configurati
1ebc0 6f 6e 2e 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e  on.throwOnMissin
1ebd0 67 20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75 65 3b  g = (bool)value;
1ebe0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1ebf0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
1ec00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ec10 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61       else if (Ma
1ec20 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67  tchOption(newArg
1ec30 2c 20 22 74 72 61 63 65 46 6f 72 6d 61 74 22 29  , "traceFormat")
1ec40 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
1ec50 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
1ec60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ec70 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67            config
1ec80 75 72 61 74 69 6f 6e 2e 74 72 61 63 65 46 6f 72  uration.traceFor
1ec90 6d 61 74 20 3d 20 74 65 78 74 3b 0d 0a 20 20 20  mat = text;..   
1eca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ecb0 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70           TraceOp
1ecc0 73 2e 54 72 61 63 65 46 6f 72 6d 61 74 20 3d 20  s.TraceFormat = 
1ecd0 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 74 72  configuration.tr
1ece0 61 63 65 46 6f 72 6d 61 74 3b 0d 0a 20 20 20 20  aceFormat;..    
1ecf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ed00 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
1ed10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
1ed20 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74  lse if (MatchOpt
1ed30 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 74 72 61  ion(newArg, "tra
1ed40 63 65 50 72 69 6f 72 69 74 79 22 29 29 0d 0a 20  cePriority")).. 
1ed50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ed60 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
1ed70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ed80 20 20 20 20 20 20 6f 62 6a 65 63 74 20 76 61 6c        object val
1ed90 75 65 20 3d 20 50 61 72 73 65 45 6e 75 6d 28 0d  ue = ParseEnum(.
1eda0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1edb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1edc0 20 74 79 70 65 6f 66 28 54 72 61 63 65 50 72 69   typeof(TracePri
1edd0 6f 72 69 74 79 29 2c 20 74 65 78 74 2c 20 74 72  ority), text, tr
1ede0 75 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ue);....        
1edf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ee00 20 20 20 20 69 66 20 28 76 61 6c 75 65 20 3d 3d      if (value ==
1ee10 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
1ee20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ee30 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
1ee40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ee50 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 54         error = T
1ee60 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64  raceOps.DebugAnd
1ee70 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20  Trace(..        
1ee80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ee90 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
1eea0 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74  ePriority.Lowest
1eeb0 2c 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c  , debugCallback,
1eec0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1eed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1eee0 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62        traceCallb
1eef0 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d  ack, String.Form
1ef00 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
1ef10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ef20 20 20 20 20 20 20 20 20 20 22 49 6e 76 61 6c 69           "Invali
1ef30 64 20 7b 30 7d 20 76 61 6c 75 65 3a 20 7b 31 7d  d {0} value: {1}
1ef40 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
1ef50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ef60 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c          ForDispl
1ef70 61 79 28 61 72 67 29 2c 20 46 6f 72 44 69 73 70  ay(arg), ForDisp
1ef80 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a 20 20 20  lay(text)),..   
1ef90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1efa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1efb0 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
1efc0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1efd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1efe0 20 20 20 20 69 66 20 28 73 74 72 69 63 74 29 0d      if (strict).
1eff0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1f000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f010 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
1f020 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e;....          
1f030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f040 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d        continue;.
1f050 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1f060 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
1f070 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1f080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
1f090 6e 66 69 67 75 72 61 74 69 6f 6e 2e 74 72 61 63  nfiguration.trac
1f0a0 65 50 72 69 6f 72 69 74 79 20 3d 20 28 54 72 61  ePriority = (Tra
1f0b0 63 65 50 72 69 6f 72 69 74 79 29 76 61 6c 75 65  cePriority)value
1f0c0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
1f0d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
1f0e0 72 61 63 65 4f 70 73 2e 54 72 61 63 65 50 72 69  raceOps.TracePri
1f0f0 6f 72 69 74 79 20 3d 20 63 6f 6e 66 69 67 75 72  ority = configur
1f100 61 74 69 6f 6e 2e 74 72 61 63 65 50 72 69 6f 72  ation.tracePrior
1f110 69 74 79 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ity;..          
1f120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
1f130 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1f140 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66           else if
1f150 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65   (MatchOption(ne
1f160 77 41 72 67 2c 20 22 76 65 72 62 6f 73 65 22 29  wArg, "verbose")
1f170 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
1f180 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
1f190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f1a0 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 3f 20            bool? 
1f1b0 76 61 6c 75 65 20 3d 20 50 61 72 73 65 42 6f 6f  value = ParseBoo
1f1c0 6c 65 61 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a 20  lean(text);.... 
1f1d0 20 20 20 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 69 66 20 28 76             if (v
1f1f0 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  alue == null).. 
1f200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f210 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
1f220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72                er
1f240 72 6f 72 20 3d 20 54 72 61 63 65 4f 70 73 2e 44  ror = TraceOps.D
1f250 65 62 75 67 41 6e 64 54 72 61 63 65 28 0d 0a 20  ebugAndTrace(.. 
1f260 20 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 20 20 20 20 20 20 20                  
1f280 20 20 20 54 72 61 63 65 50 72 69 6f 72 69 74 79     TracePriority
1f290 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75 67 43 61  .Lowest, debugCa
1f2a0 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20  llback,..       
1f2b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f2c0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
1f2d0 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69  ceCallback, Stri
1f2e0 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20  ng.Format(..    
1f2f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f310 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20 62 6f 6f  "Invalid {0} boo
1f320 6c 65 61 6e 20 76 61 6c 75 65 3a 20 7b 31 7d 22  lean value: {1}"
1f330 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
1f340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f350 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61         ForDispla
1f360 79 28 61 72 67 29 2c 20 46 6f 72 44 69 73 70 6c  y(arg), ForDispl
1f370 61 79 28 74 65 78 74 29 29 2c 0d 0a 20 20 20 20  ay(text)),..    
1f380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f3a0 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
1f3b0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
1f3c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f3d0 20 20 20 69 66 20 28 73 74 72 69 63 74 29 0d 0a     if (strict)..
1f3e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f3f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f400 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
1f410 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
1f420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f430 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a       continue;..
1f440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f450 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
1f460 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1f470 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
1f480 66 69 67 75 72 61 74 69 6f 6e 2e 76 65 72 62 6f  figuration.verbo
1f490 73 65 20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75 65  se = (bool)value
1f4a0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
1f4b0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
1f4c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f4d0 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d        else if (M
1f4e0 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72  atchOption(newAr
1f4f0 67 2c 20 22 76 73 56 65 72 73 69 6f 6e 53 75 66  g, "vsVersionSuf
1f500 66 69 78 22 29 29 0d 0a 20 20 20 20 20 20 20 20  fix"))..        
1f510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f520 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
1f530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
1f540 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 76 73 56  onfiguration.vsV
1f550 65 72 73 69 6f 6e 53 75 66 66 69 78 20 3d 20 74  ersionSuffix = t
1f560 65 78 74 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ext;..          
1f570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
1f580 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1f590 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66           else if
1f5a0 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65   (MatchOption(ne
1f5b0 77 41 72 67 2c 20 22 77 68 61 74 49 66 22 29 29  wArg, "whatIf"))
1f5c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1f5d0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
1f5e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f5f0 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 3f 20 76           bool? v
1f600 61 6c 75 65 20 3d 20 50 61 72 73 65 42 6f 6f 6c  alue = ParseBool
1f610 65 61 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a 20 20  ean(text);....  
1f620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f630 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76 61            if (va
1f640 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  lue == null)..  
1f650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f660 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
1f670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f680 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
1f690 6f 72 20 3d 20 54 72 61 63 65 4f 70 73 2e 44 65  or = TraceOps.De
1f6a0 62 75 67 41 6e 64 54 72 61 63 65 28 0d 0a 20 20  bugAndTrace(..  
1f6b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f6c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f6d0 20 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e    TracePriority.
1f6e0 4c 6f 77 65 73 74 2c 20 64 65 62 75 67 43 61 6c  Lowest, debugCal
1f6f0 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20  lback,..        
1f700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f710 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
1f720 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e  eCallback, Strin
1f730 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
1f740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
1f760 49 6e 76 61 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c  Invalid {0} bool
1f770 65 61 6e 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c  ean value: {1}",
1f780 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1f790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f7a0 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79        ForDisplay
1f7b0 28 61 72 67 29 2c 20 46 6f 72 44 69 73 70 6c 61  (arg), ForDispla
1f7c0 79 28 74 65 78 74 29 29 2c 0d 0a 20 20 20 20 20  y(text)),..     
1f7d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f7e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
1f7f0 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
1f800 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1f810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f820 20 20 69 66 20 28 73 74 72 69 63 74 29 0d 0a 20    if (strict).. 
1f830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f850 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
1f860 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1f870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f880 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20      continue;.. 
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 20 20 20 20 7d 0d 0a 0d 0a             }....
1f8b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f8c0 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66              conf
1f8d0 69 67 75 72 61 74 69 6f 6e 2e 77 68 61 74 49 66  iguration.whatIf
1f8e0 20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d   = (bool)value;.
1f8f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1f900 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
1f910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f920 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61 74      else if (Mat
1f930 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c  chOption(newArg,
1f940 20 22 77 6f 77 36 34 22 29 29 0d 0a 20 20 20 20   "wow64"))..    
1f950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f960 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
1f970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f980 20 20 20 62 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d     bool? value =
1f990 20 50 61 72 73 65 42 6f 6f 6c 65 61 6e 28 74 65   ParseBoolean(te
1f9a0 78 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  xt);....        
1f9b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f9c0 20 20 20 20 69 66 20 28 76 61 6c 75 65 20 3d 3d      if (value ==
1f9d0 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
1f9e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f9f0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
1fa00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fa10 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 54         error = T
1fa20 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64  raceOps.DebugAnd
1fa30 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20  Trace(..        
1fa40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fa50 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
1fa60 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74  ePriority.Lowest
1fa70 2c 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c  , debugCallback,
1fa80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1fa90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1faa0 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62        traceCallb
1fab0 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d  ack, String.Form
1fac0 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
1fad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fae0 20 20 20 20 20 20 20 20 20 22 49 6e 76 61 6c 69           "Invali
1faf0 64 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 61  d {0} boolean va
1fb00 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20  lue: {1}",..    
1fb10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fb20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fb30 46 6f 72 44 69 73 70 6c 61 79 28 61 72 67 29 2c  ForDisplay(arg),
1fb40 20 46 6f 72 44 69 73 70 6c 61 79 28 74 65 78 74   ForDisplay(text
1fb50 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  )),..           
1fb60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fb70 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
1fb80 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
1fb90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fba0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
1fbb0 73 74 72 69 63 74 29 0d 0a 20 20 20 20 20 20 20  strict)..       
1fbc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fbd0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
1fbe0 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20  urn false;....  
1fbf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fc00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
1fc10 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20  ntinue;..       
1fc20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fc30 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
1fc40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fc50 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74        configurat
1fc60 69 6f 6e 2e 77 6f 77 36 34 20 3d 20 28 62 6f 6f  ion.wow64 = (boo
1fc70 6c 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20  l)value;..      
1fc80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fc90 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
1fca0 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73               els
1fcb0 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e..             
1fcc0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
1fcd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fce0 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20            error 
1fcf0 3d 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67  = TraceOps.Debug
1fd00 41 6e 64 54 72 61 63 65 28 0d 0a 20 20 20 20 20  AndTrace(..     
1fd10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fd20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
1fd30 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c  Priority.Lowest,
1fd40 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d   debugCallback,.
1fd50 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1fd60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fd70 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20   traceCallback, 
1fd80 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
1fd90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fda0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fdb0 22 55 6e 73 75 70 70 6f 72 74 65 64 20 63 6f 6d  "Unsupported com
1fdc0 6d 61 6e 64 20 6c 69 6e 65 20 6f 70 74 69 6f 6e  mand line option
1fdd0 3a 20 7b 30 7d 22 2c 0d 0a 20 20 20 20 20 20 20  : {0}",..       
1fde0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fdf0 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70           ForDisp
1fe00 6c 61 79 28 61 72 67 29 29 2c 20 74 72 61 63 65  lay(arg)), trace
1fe10 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  Category);....  
1fe20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fe30 20 20 20 20 20 20 20 20 20 20 69 66 20 28 73 74            if (st
1fe40 72 69 63 74 29 0d 0a 20 20 20 20 20 20 20 20 20  rict)..         
1fe50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fe60 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
1fe70 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lse;..          
1fe80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
1fe90 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1fea0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
1feb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
1fec0 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20  turn true;..    
1fed0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
1fee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
1fef0 61 74 63 68 20 28 45 78 63 65 70 74 69 6f 6e 20  atch (Exception 
1ff00 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e)..            
1ff10 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
1ff20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
1ff30 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63  Ops.DebugAndTrac
1ff40 65 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e  e(TracePriority.
1ff50 48 69 67 68 65 73 74 2c 0d 0a 20 20 20 20 20 20  Highest,..      
1ff60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ff70 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c    debugCallback,
1ff80 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20   traceCallback, 
1ff90 65 2c 20 74 72 61 63 65 43 61 74 65 67 6f 72 79  e, traceCategory
1ffa0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
1ffb0 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20            error 
1ffc0 3d 20 22 46 61 69 6c 65 64 20 74 6f 20 6d 6f 64  = "Failed to mod
1ffd0 69 66 79 20 63 6f 6e 66 69 67 75 72 61 74 69 6f  ify configuratio
1ffe0 6e 2e 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  n.";..          
1fff0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
20000 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
20010 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  n false;..      
20020 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
20030 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
20040 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20050 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20060 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20070 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
20080 20 20 20 20 20 20 20 20 20 20 5b 4d 65 74 68 6f            [Metho
20090 64 49 6d 70 6c 28 4d 65 74 68 6f 64 49 6d 70 6c  dImpl(MethodImpl
200a0 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e 69  Options.NoInlini
200b0 6e 67 29 5d 0d 0a 20 20 20 20 20 20 20 20 20 20  ng)]..          
200c0 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20    public static 
200d0 62 6f 6f 6c 20 50 72 6f 63 65 73 73 28 0d 0a 20  bool Process(.. 
200e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
200f0 74 72 69 6e 67 5b 5d 20 61 72 67 73 2c 0d 0a 20  tring[] args,.. 
20100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43                 C
20110 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 63 6f 6e  onfiguration con
20120 66 69 67 75 72 61 74 69 6f 6e 2c 0d 0a 20 20 20  figuration,..   
20130 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f               boo
20140 6c 20 73 74 72 69 63 74 2c 0d 0a 20 20 20 20 20  l strict,..     
20150 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20 73             ref s
20160 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20  tring error..   
20170 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a               )..
20180 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
20190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
201a0 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ry..            
201b0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
201c0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 63             if (c
201d0 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 3d 3d 20  onfiguration == 
201e0 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
201f0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
20200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20210 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 49        error = "I
20220 6e 76 61 6c 69 64 20 63 6f 6e 66 69 67 75 72 61  nvalid configura
20230 74 69 6f 6e 2e 22 3b 0d 0a 20 20 20 20 20 20 20  tion.";..       
20240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20250 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
20260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20270 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
20280 20 20 20 20 20 20 20 20 20 20 20 20 20 41 73 73               Ass
20290 65 6d 62 6c 79 20 61 73 73 65 6d 62 6c 79 20 3d  embly assembly =
202a0 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 61   configuration.a
202b0 73 73 65 6d 62 6c 79 3b 0d 0a 0d 0a 20 20 20 20  ssembly;....    
202c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
202d0 69 66 20 28 61 73 73 65 6d 62 6c 79 20 3d 3d 20  if (assembly == 
202e0 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
202f0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
20300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20310 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 49        error = "I
20320 6e 76 61 6c 69 64 20 61 73 73 65 6d 62 6c 79 2e  nvalid assembly.
20330 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ";..            
20340 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
20350 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20  rn false;..     
20360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
20370 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
20380 20 20 20 20 20 20 20 20 69 66 20 28 21 63 6f 6e          if (!con
20390 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 54 72 61  figuration.noTra
203a0 63 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ce)..           
203b0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
203c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
203d0 20 20 20 20 69 66 20 28 21 63 6f 6e 66 69 67 75      if (!configu
203e0 72 61 74 69 6f 6e 2e 6e 6f 4c 6f 67 20 26 26 0d  ration.noLog &&.
203f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
20400 20 20 20 20 20 20 20 20 20 20 20 20 20 53 74 72               Str
20410 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74  ing.IsNullOrEmpt
20420 79 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e  y(configuration.
20430 6c 6f 67 46 69 6c 65 4e 61 6d 65 29 29 0d 0a 20  logFileName)).. 
20440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20450 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
20460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20470 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
20480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20490 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 55        // NOTE: U
204a0 73 65 20 74 68 65 20 64 65 66 61 75 6c 74 20 6c  se the default l
204b0 6f 67 20 66 69 6c 65 20 6e 61 6d 65 2e 0d 0a 20  og file name... 
204c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
204d0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
204e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
204f0 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69             confi
20500 67 75 72 61 74 69 6f 6e 2e 6c 6f 67 46 69 6c 65  guration.logFile
20510 4e 61 6d 65 20 3d 20 47 65 74 4c 6f 67 46 69 6c  Name = GetLogFil
20520 65 4e 61 6d 65 28 0d 0a 20 20 20 20 20 20 20 20  eName(..        
20530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20540 20 20 20 20 20 20 20 20 22 74 72 61 63 65 22 29          "trace")
20550 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
20560 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
20570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20580 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
20590 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
205a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
205b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
205c0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
205d0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21             if (!
205e0 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f  configuration.no
205f0 43 6f 6e 73 6f 6c 65 29 0d 0a 20 20 20 20 20 20  Console)..      
20600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20610 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
20620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20630 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
20640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20650 20 2f 2f 20 4e 4f 54 45 3a 20 49 6e 20 76 65 72   // NOTE: In ver
20660 62 6f 73 65 20 6d 6f 64 65 2c 20 64 65 62 75 67  bose mode, debug
20670 20 6f 75 74 70 75 74 20 28 74 68 61 74 20 6d 65   output (that me
20680 65 74 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ets..           
20690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
206a0 20 2f 2f 20 20 20 20 20 20 20 74 68 65 20 63 6f   //       the co
206b0 6e 66 69 67 75 72 65 64 20 70 72 69 6f 72 69 74  nfigured priorit
206c0 79 20 63 72 69 74 65 72 69 61 29 20 77 69 6c 6c  y criteria) will
206d0 20 62 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20   be..           
206e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
206f0 20 2f 2f 20 20 20 20 20 20 20 64 69 73 70 6c 61   //       displa
20700 79 65 64 20 74 6f 20 74 68 65 20 63 6f 6e 73 6f  yed to the conso
20710 6c 65 3b 20 6f 74 68 65 72 77 69 73 65 2c 20 74  le; otherwise, t
20720 72 61 63 65 0d 0a 20 20 20 20 20 20 20 20 20 20  race..          
20730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20740 20 20 2f 2f 20 20 20 20 20 20 20 6f 75 74 70 75    //       outpu
20750 74 20 28 74 68 61 74 20 6d 65 65 74 73 20 74 68  t (that meets th
20760 65 20 63 6f 6e 66 69 67 75 72 65 64 20 70 72 69  e configured pri
20770 6f 72 69 74 79 0d 0a 20 20 20 20 20 20 20 20 20  ority..         
20780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20790 20 20 20 2f 2f 20 20 20 20 20 20 20 63 72 69 74     //       crit
207a0 65 72 69 61 29 20 77 69 6c 6c 20 62 65 20 64 69  eria) will be di
207b0 73 70 6c 61 79 65 64 20 74 6f 20 74 68 65 20 63  splayed to the c
207c0 6f 6e 73 6f 6c 65 2e 0d 0a 20 20 20 20 20 20 20  onsole...       
207d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
207e0 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
207f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20800 20 20 20 20 20 69 66 20 28 63 6f 6e 66 69 67 75       if (configu
20810 72 61 74 69 6f 6e 2e 64 65 62 75 67 29 0d 0a 20  ration.debug).. 
20820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20830 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
20840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
20860 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
20870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20880 20 20 2f 2f 20 4e 4f 54 45 3a 20 41 64 64 20 74    // NOTE: Add t
20890 68 65 20 63 6f 6e 73 6f 6c 65 20 74 72 61 63 65  he console trace
208a0 20 6c 69 73 74 65 6e 65 72 20 74 6f 20 74 68 65   listener to the
208b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
208c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
208d0 20 20 2f 2f 20 20 20 20 20 20 20 6c 69 73 74 20    //       list 
208e0 6f 66 20 74 72 61 63 65 20 6c 69 73 74 65 6e 65  of trace listene
208f0 72 73 20 6d 61 69 6e 74 61 69 6e 65 64 20 62 79  rs maintained by
20900 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
20910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20920 20 20 2f 2f 20 20 20 20 20 20 20 74 68 65 20 54    //       the T
20930 72 61 63 65 4f 70 73 20 63 6c 61 73 73 20 28 69  raceOps class (i
20940 2e 65 2e 20 6f 6e 6c 79 20 6d 65 73 73 61 67 65  .e. only message
20950 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  s..             
20960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20970 20 20 20 2f 2f 20 20 20 20 20 20 20 74 68 61 74     //       that
20980 20 6d 65 65 74 20 74 68 65 20 64 65 62 75 67 20   meet the debug 
20990 70 72 69 6f 72 69 74 79 20 77 69 6c 6c 20 62 65  priority will be
209a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
209b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
209c0 20 20 2f 2f 20 20 20 20 20 20 20 73 65 65 6e 20    //       seen 
209d0 6f 6e 20 74 68 65 20 63 6f 6e 73 6f 6c 65 29 2e  on the console).
209e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
209f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20a00 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
20a10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20a20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 53        TraceOps.S
20a30 65 74 75 70 44 65 62 75 67 4c 69 73 74 65 6e 65  etupDebugListene
20a40 72 73 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  rs();..         
20a50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20a60 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
20a70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20a80 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20    else..        
20a90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20aa0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
20ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20ac0 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
20ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20ae0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f             // NO
20af0 54 45 3a 20 41 64 64 20 74 68 65 20 63 6f 6e 73  TE: Add the cons
20b00 6f 6c 65 20 74 72 61 63 65 20 6c 69 73 74 65 6e  ole trace listen
20b10 65 72 20 74 6f 20 74 68 65 0d 0a 20 20 20 20 20  er to the..     
20b20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20b30 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
20b40 20 20 20 20 6c 69 73 74 20 6f 66 20 62 75 69 6c      list of buil
20b50 74 2d 69 6e 20 74 72 61 63 65 20 6c 69 73 74 65  t-in trace liste
20b60 6e 65 72 73 20 28 69 2e 65 2e 0d 0a 20 20 20 20  ners (i.e...    
20b70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20b80 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
20b90 20 20 20 20 20 6f 6e 6c 79 20 6d 65 73 73 61 67       only messag
20ba0 65 73 20 74 68 61 74 20 6d 65 65 74 20 74 68 65  es that meet the
20bb0 20 74 72 61 63 65 0d 0a 20 20 20 20 20 20 20 20   trace..        
20bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20bd0 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
20be0 20 70 72 69 6f 72 69 74 79 20 77 69 6c 6c 20 62   priority will b
20bf0 65 20 73 65 65 6e 20 6f 6e 20 74 68 65 20 63 6f  e seen on the co
20c00 6e 73 6f 6c 65 29 2e 0d 0a 20 20 20 20 20 20 20  nsole)...       
20c10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20c20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
20c30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20c40 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61               Tra
20c50 63 65 2e 4c 69 73 74 65 6e 65 72 73 2e 41 64 64  ce.Listeners.Add
20c60 28 6e 65 77 20 43 6f 6e 73 6f 6c 65 54 72 61 63  (new ConsoleTrac
20c70 65 4c 69 73 74 65 6e 65 72 28 29 29 3b 0d 0a 20  eListener());.. 
20c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20c90 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
20ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20cb0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
20cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20cd0 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
20ce0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20cf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20d00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
20d10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20d20 20 20 20 20 20 20 69 66 20 28 21 63 6f 6e 66 69        if (!confi
20d30 67 75 72 61 74 69 6f 6e 2e 6e 6f 4c 6f 67 20 26  guration.noLog &
20d40 26 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  &..             
20d50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 21                 !
20d60 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45  String.IsNullOrE
20d70 6d 70 74 79 28 63 6f 6e 66 69 67 75 72 61 74 69  mpty(configurati
20d80 6f 6e 2e 6c 6f 67 46 69 6c 65 4e 61 6d 65 29 29  on.logFileName))
20d90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
20da0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
20db0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20dc0 20 20 20 20 20 20 20 20 20 54 72 61 63 65 2e 4c           Trace.L
20dd0 69 73 74 65 6e 65 72 73 2e 41 64 64 28 6e 65 77  isteners.Add(new
20de0 20 54 65 78 74 57 72 69 74 65 72 54 72 61 63 65   TextWriterTrace
20df0 4c 69 73 74 65 6e 65 72 28 0d 0a 20 20 20 20 20  Listener(..     
20e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20e10 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69             confi
20e20 67 75 72 61 74 69 6f 6e 2e 6c 6f 67 46 69 6c 65  guration.logFile
20e30 4e 61 6d 65 29 29 3b 0d 0a 0d 0a 20 20 20 20 20  Name));....     
20e40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20e50 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
20e60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20e70 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20         // NOTE: 
20e80 54 65 63 68 6e 69 63 61 6c 6c 79 2c 20 77 65 20  Technically, we 
20e90 63 72 65 61 74 65 64 20 74 68 65 20 6c 6f 67 20  created the log 
20ea0 66 69 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 20  file...         
20eb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20ec0 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
20ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20ee0 20 20 20 66 69 6c 65 73 43 72 65 61 74 65 64 2b     filesCreated+
20ef0 2b 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  +;..            
20f00 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
20f10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20f20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
20f30 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
20f40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20f50 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 44 75 6d      // NOTE: Dum
20f60 70 20 74 68 65 20 63 6f 6e 66 69 67 75 72 61 74  p the configurat
20f70 69 6f 6e 20 6e 6f 77 20 69 6e 20 63 61 73 65 20  ion now in case 
20f80 77 65 20 6e 65 65 64 20 74 6f 0d 0a 20 20 20 20  we need to..    
20f90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20fa0 2f 2f 20 20 20 20 20 20 20 74 72 6f 75 62 6c 65  //       trouble
20fb0 73 68 6f 6f 74 20 61 6e 79 20 69 73 73 75 65 73  shoot any issues
20fc0 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
20fd0 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
20fe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
20ff0 66 20 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  f (configuration
21000 2e 64 65 62 75 67 50 72 69 6f 72 69 74 79 20 3c  .debugPriority <
21010 3d 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e  = TracePriority.
21020 4d 65 64 69 75 6d 29 0d 0a 20 20 20 20 20 20 20  Medium)..       
21030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21040 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 44   configuration.D
21050 75 6d 70 28 64 65 62 75 67 43 61 6c 6c 62 61 63  ump(debugCallbac
21060 6b 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  k);....         
21070 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 63             if (c
21080 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 74 72 61  onfiguration.tra
21090 63 65 50 72 69 6f 72 69 74 79 20 3c 3d 20 54 72  cePriority <= Tr
210a0 61 63 65 50 72 69 6f 72 69 74 79 2e 4d 65 64 69  acePriority.Medi
210b0 75 6d 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  um)..           
210c0 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
210d0 66 69 67 75 72 61 74 69 6f 6e 2e 44 75 6d 70 28  figuration.Dump(
210e0 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 29 3b 0d  traceCallback);.
210f0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
21100 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
21110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
21120 2f 20 4e 4f 54 45 3a 20 53 68 6f 77 20 77 68 65  / NOTE: Show whe
21130 72 65 20 77 65 20 61 72 65 20 72 75 6e 6e 69 6e  re we are runnin
21140 67 20 66 72 6f 6d 20 61 6e 64 20 68 6f 77 20 77  g from and how w
21150 65 20 77 65 72 65 0d 0a 20 20 20 20 20 20 20 20  e were..        
21160 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
21170 20 20 20 20 20 69 6e 76 6f 6b 65 64 2e 0d 0a 20       invoked... 
21180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21190 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
211a0 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
211b0 67 20 6c 6f 63 61 74 69 6f 6e 20 3d 20 61 73 73  g location = ass
211c0 65 6d 62 6c 79 2e 4c 6f 63 61 74 69 6f 6e 3b 0d  embly.Location;.
211d0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
211e0 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e         TraceOps.
211f0 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 54 72  DebugAndTrace(Tr
21200 61 63 65 50 72 69 6f 72 69 74 79 2e 4d 65 64 69  acePriority.Medi
21210 75 6d 4c 6f 77 2c 0d 0a 20 20 20 20 20 20 20 20  umLow,..        
21220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21230 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74  debugCallback, t
21240 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74  raceCallback, St
21250 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
21260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21270 20 20 20 20 20 20 22 52 75 6e 6e 69 6e 67 20 65        "Running e
21280 78 65 63 75 74 61 62 6c 65 20 69 73 3a 20 7b 30  xecutable is: {0
21290 7d 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 6c  }", ForDisplay(l
212a0 6f 63 61 74 69 6f 6e 29 29 2c 0d 0a 20 20 20 20  ocation)),..    
212b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
212c0 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72      traceCategor
212d0 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
212e0 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
212f0 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63  Ops.DebugAndTrac
21300 65 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e  e(TracePriority.
21310 4d 65 64 69 75 6d 4c 6f 77 2c 0d 0a 20 20 20 20  MediumLow,..    
21320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21330 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63      debugCallbac
21340 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b  k, traceCallback
21350 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  , String.Format(
21360 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
21370 20 20 20 20 20 20 20 20 20 20 22 4f 72 69 67 69            "Origi
21380 6e 61 6c 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65  nal command line
21390 20 69 73 3a 20 7b 30 7d 22 2c 0d 0a 20 20 20 20   is: {0}",..    
213a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
213b0 20 20 20 20 45 6e 76 69 72 6f 6e 6d 65 6e 74 2e      Environment.
213c0 43 6f 6d 6d 61 6e 64 4c 69 6e 65 29 2c 20 74 72  CommandLine), tr
213d0 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d  aceCategory);...
213e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
213f0 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65       TraceOps.De
21400 62 75 67 41 6e 64 54 72 61 63 65 28 54 72 61 63  bugAndTrace(Trac
21410 65 50 72 69 6f 72 69 74 79 2e 4d 65 64 69 75 6d  ePriority.Medium
21420 4c 6f 77 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  Low,..          
21430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65                de
21440 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61  bugCallback, tra
21450 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69  ceCallback, Stri
21460 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20  ng.Format(..    
21470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21480 20 20 20 20 22 52 75 6e 6e 69 6e 67 20 70 72 6f      "Running pro
21490 63 65 73 73 20 69 73 20 7b 30 7d 2e 22 2c 20 49  cess is {0}.", I
214a0 73 36 34 42 69 74 50 72 6f 63 65 73 73 28 29 20  s64BitProcess() 
214b0 3f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ?..             
214c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
214d0 36 34 2d 62 69 74 22 20 3a 20 22 33 32 2d 62 69  64-bit" : "32-bi
214e0 74 22 29 2c 20 74 72 61 63 65 43 61 74 65 67 6f  t"), traceCatego
214f0 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
21500 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
21510 21 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 77  !configuration.w
21520 68 61 74 49 66 29 0d 0a 20 20 20 20 20 20 20 20  hatIf)..        
21530 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
21540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21550 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
21560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21570 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 49 66 20 74     // NOTE: If t
21580 68 65 20 64 65 62 75 67 67 65 72 20 69 73 20 61  he debugger is a
21590 74 74 61 63 68 65 64 20 61 6e 64 20 22 77 68 61  ttached and "wha
215a0 74 2d 69 66 22 0d 0a 20 20 20 20 20 20 20 20 20  t-if"..         
215b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
215c0 2f 20 20 20 20 20 20 20 6d 6f 64 65 20 69 73 20  /       mode is 
215d0 5b 6e 6f 77 5d 20 64 69 73 61 62 6c 65 64 2c 20  [now] disabled, 
215e0 69 73 73 75 65 20 61 20 77 61 72 6e 69 6e 67 2e  issue a warning.
215f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
21600 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
21610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21620 20 20 20 20 20 20 69 66 20 28 44 65 62 75 67 67        if (Debugg
21630 65 72 2e 49 73 41 74 74 61 63 68 65 64 29 0d 0a  er.IsAttached)..
21640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21650 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
21660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21670 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e         TraceOps.
21680 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 54 72  DebugAndTrace(Tr
21690 61 63 65 50 72 69 6f 72 69 74 79 2e 4d 65 64 69  acePriority.Medi
216a0 75 6d 48 69 67 68 2c 0d 0a 20 20 20 20 20 20 20  umHigh,..       
216b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
216c0 20 20 20 20 20 20 20 20 20 64 65 62 75 67 43 61           debugCa
216d0 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c  llback, traceCal
216e0 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20  lback,..        
216f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21700 20 20 20 20 20 20 20 20 22 46 6f 72 63 65 64 20          "Forced 
21710 74 6f 20 64 69 73 61 62 6c 65 20 5c 22 77 68 61  to disable \"wha
21720 74 2d 69 66 5c 22 20 6d 6f 64 65 20 77 69 74 68  t-if\" mode with
21730 20 22 20 2b 0d 0a 20 20 20 20 20 20 20 20 20 20   " +..          
21740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21750 20 20 20 20 20 20 22 64 65 62 75 67 67 65 72 20        "debugger 
21760 61 74 74 61 63 68 65 64 2e 22 2c 20 74 72 61 63  attached.", trac
21770 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 20 20 20  eCategory);..   
21780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21790 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
217a0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
217b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
217c0 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20     else..       
217d0 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
217e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
217f0 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73          TraceOps
21800 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 54  .DebugAndTrace(T
21810 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4d 65 64  racePriority.Med
21820 69 75 6d 48 69 67 68 2c 0d 0a 20 20 20 20 20 20  iumHigh,..      
21830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21840 20 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62        debugCallb
21850 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61  ack, traceCallba
21860 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ck,..           
21870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21880 20 22 4e 6f 20 61 63 74 75 61 6c 20 63 68 61 6e   "No actual chan
21890 67 65 73 20 77 69 6c 6c 20 62 65 20 6d 61 64 65  ges will be made
218a0 20 74 6f 20 74 68 69 73 20 22 20 2b 0d 0a 20 20   to this " +..  
218b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
218c0 20 20 20 20 20 20 20 20 20 20 22 73 79 73 74 65            "syste
218d0 6d 20 62 65 63 61 75 73 65 20 5c 22 77 68 61 74  m because \"what
218e0 2d 69 66 5c 22 20 6d 6f 64 65 20 69 73 20 65 6e  -if\" mode is en
218f0 61 62 6c 65 64 2e 22 2c 0d 0a 20 20 20 20 20 20  abled.",..      
21900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21910 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67        traceCateg
21920 6f 72 79 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ory);..         
21930 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
21940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21950 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
21960 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e              // N
21970 4f 54 45 3a 20 49 66 20 74 68 65 20 63 6f 6d 6d  OTE: If the comm
21980 61 6e 64 20 6c 69 6e 65 20 68 61 73 20 6e 6f 74  and line has not
21990 20 62 65 65 6e 20 6d 61 6e 75 61 6c 6c 79 0d 0a   been manually..
219a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
219b0 20 20 20 20 2f 2f 20 20 20 20 20 20 20 63 6f 6e      //       con
219c0 66 69 72 6d 65 64 20 28 69 2e 65 2e 20 76 69 61  firmed (i.e. via
219d0 20 74 68 65 20 65 78 70 6c 69 63 69 74 20 63 6f   the explicit co
219e0 6d 6d 61 6e 64 20 6c 69 6e 65 0d 0a 20 20 20 20  mmand line..    
219f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21a00 2f 2f 20 20 20 20 20 20 20 6f 70 74 69 6f 6e 29  //       option)
21a10 2c 20 74 68 65 6e 20 73 74 6f 70 20 70 72 6f 63  , then stop proc
21a20 65 73 73 69 6e 67 20 6e 6f 77 2e 20 20 57 65 20  essing now.  We 
21a30 65 6e 66 6f 72 63 65 0d 0a 20 20 20 20 20 20 20  enforce..       
21a40 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
21a50 20 20 20 20 20 20 74 68 69 73 20 72 75 6c 65 20        this rule 
21a60 73 6f 20 74 68 61 74 20 73 69 6d 70 6c 79 20 64  so that simply d
21a70 6f 75 62 6c 65 2d 63 6c 69 63 6b 69 6e 67 20 74  ouble-clicking t
21a80 68 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  he..            
21a90 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
21aa0 20 65 78 65 63 75 74 61 62 6c 65 20 77 69 6c 6c   executable will
21ab0 20 6e 6f 74 20 72 65 73 75 6c 74 20 69 6e 20 61   not result in a
21ac0 6e 79 20 63 68 61 6e 67 65 73 20 62 65 69 6e 67  ny changes being
21ad0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
21ae0 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 6d        //       m
21af0 61 64 65 20 74 6f 20 74 68 65 20 73 79 73 74 65  ade to the syste
21b00 6d 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  m...            
21b10 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
21b20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21b30 69 66 20 28 21 63 6f 6e 66 69 67 75 72 61 74 69  if (!configurati
21b40 6f 6e 2e 63 6f 6e 66 69 72 6d 29 0d 0a 20 20 20  on.confirm)..   
21b50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21b60 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
21b70 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
21b80 72 20 3d 20 22 43 61 6e 6e 6f 74 20 63 6f 6e 74  r = "Cannot cont
21b90 69 6e 75 65 2c 20 74 68 65 20 5c 22 63 6f 6e 66  inue, the \"conf
21ba0 69 72 6d 5c 22 20 6f 70 74 69 6f 6e 20 69 73 20  irm\" option is 
21bb0 22 20 2b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  " +..           
21bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21bd0 20 22 6e 6f 74 20 65 6e 61 62 6c 65 64 2e 22 3b   "not enabled.";
21be0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
21bf0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
21c00 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20  rn false;..     
21c10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
21c20 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
21c30 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74          return t
21c40 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  rue;..          
21c50 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
21c60 20 20 20 20 20 20 20 20 20 63 61 74 63 68 20 28           catch (
21c70 45 78 63 65 70 74 69 6f 6e 20 65 29 0d 0a 20 20  Exception e)..  
21c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
21c90 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
21ca0 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65       TraceOps.De
21cb0 62 75 67 41 6e 64 54 72 61 63 65 28 54 72 61 63  bugAndTrace(Trac
21cc0 65 50 72 69 6f 72 69 74 79 2e 48 69 67 68 65 73  ePriority.Highes
21cd0 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t,..            
21ce0 20 20 20 20 20 20 20 20 20 20 20 20 64 65 62 75              debu
21cf0 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65  gCallback, trace
21d00 43 61 6c 6c 62 61 63 6b 2c 20 65 2c 20 74 72 61  Callback, e, tra
21d10 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
21d20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21d30 20 20 20 20 65 72 72 6f 72 20 3d 20 22 46 61 69      error = "Fai
21d40 6c 65 64 20 74 6f 20 70 72 6f 63 65 73 73 20 63  led to process c
21d50 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 22 3b 0d  onfiguration.";.
21d60 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
21d70 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
21d80 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
21d90 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se;..           
21da0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
21db0 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
21dc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21dd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21de0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21df0 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
21e00 20 20 20 20 20 5b 4d 65 74 68 6f 64 49 6d 70 6c       [MethodImpl
21e10 28 4d 65 74 68 6f 64 49 6d 70 6c 4f 70 74 69 6f  (MethodImplOptio
21e20 6e 73 2e 4e 6f 49 6e 6c 69 6e 69 6e 67 29 5d 0d  ns.NoInlining)].
21e30 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
21e40 6c 69 63 20 73 74 61 74 69 63 20 62 6f 6f 6c 20  lic static bool 
21e50 43 68 65 63 6b 52 75 6e 74 69 6d 65 56 65 72 73  CheckRuntimeVers
21e60 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ion(..          
21e70 20 20 20 20 20 20 43 6f 6e 66 69 67 75 72 61 74        Configurat
21e80 69 6f 6e 20 63 6f 6e 66 69 67 75 72 61 74 69 6f  ion configuratio
21e90 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n,..            
21ea0 20 20 20 20 62 6f 6f 6c 20 73 74 72 69 63 74 2c      bool strict,
21eb0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
21ec0 20 20 72 65 66 20 73 74 72 69 6e 67 20 65 72 72    ref string err
21ed0 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  or..            
21ee0 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20      )..         
21ef0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
21f00 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20        try..     
21f10 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
21f20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21f30 20 20 69 66 20 28 63 6f 6e 66 69 67 75 72 61 74    if (configurat
21f40 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  ion == null)..  
21f50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21f60 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
21f70 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
21f80 6f 72 20 3d 20 22 49 6e 76 61 6c 69 64 20 63 6f  or = "Invalid co
21f90 6e 66 69 67 75 72 61 74 69 6f 6e 2e 22 3b 0d 0a  nfiguration.";..
21fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21fb0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
21fc0 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alse;..         
21fd0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
21fe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21ff0 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
22000 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e              // N
22010 4f 54 45 3a 20 57 68 61 74 20 76 65 72 73 69 6f  OTE: What versio
22020 6e 20 6f 66 20 74 68 65 20 72 75 6e 74 69 6d 65  n of the runtime
22030 20 77 61 73 20 74 68 65 20 63 6f 72 65 20 28 70   was the core (p
22040 72 69 6d 61 72 79 29 0d 0a 20 20 20 20 20 20 20  rimary)..       
22050 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
22060 20 20 20 20 20 20 61 73 73 65 6d 62 6c 79 20 63        assembly c
22070 6f 6d 70 69 6c 65 64 20 61 67 61 69 6e 73 74 20  ompiled against 
22080 28 65 2e 67 2e 20 22 76 32 2e 30 2e 35 30 37 32  (e.g. "v2.0.5072
22090 37 22 20 6f 72 0d 0a 20 20 20 20 20 20 20 20 20  7" or..         
220a0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
220b0 20 20 20 20 22 76 34 2e 30 2e 33 30 33 31 39 22      "v4.0.30319"
220c0 29 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  )...            
220d0 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
220e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
220f0 73 74 72 69 6e 67 20 63 6f 72 65 49 6d 61 67 65  string coreImage
22100 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 20 3d  RuntimeVersion =
22110 20 47 65 74 49 6d 61 67 65 52 75 6e 74 69 6d 65   GetImageRuntime
22120 56 65 72 73 69 6f 6e 28 0d 0a 20 20 20 20 20 20  Version(..      
22130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22140 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e    configuration.
22150 63 6f 72 65 46 69 6c 65 4e 61 6d 65 29 3b 0d 0a  coreFileName);..
22160 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
22170 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
22180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
22190 20 4e 4f 54 45 3a 20 57 65 20 61 6c 6c 6f 77 20   NOTE: We allow 
221a0 74 68 65 20 61 63 74 75 61 6c 20 69 6d 61 67 65  the actual image
221b0 20 72 75 6e 74 69 6d 65 20 63 68 65 63 6b 69 6e   runtime checkin
221c0 67 20 74 6f 20 62 65 0d 0a 20 20 20 20 20 20 20  g to be..       
221d0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
221e0 20 20 20 20 20 20 62 79 70 61 73 73 65 64 20 76        bypassed v
221f0 69 61 20 74 68 65 20 22 2d 6e 6f 52 75 6e 74 69  ia the "-noRunti
22200 6d 65 56 65 72 73 69 6f 6e 22 20 63 6f 6d 6d 61  meVersion" comma
22210 6e 64 20 6c 69 6e 65 0d 0a 20 20 20 20 20 20 20  nd line..       
22220 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
22230 20 20 20 20 20 20 6f 70 74 69 6f 6e 2e 20 20 54        option.  T
22240 68 65 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 20  he command line 
22250 6f 70 74 69 6f 6e 20 69 73 20 69 6e 74 65 6e 64  option is intend
22260 65 64 20 66 6f 72 0d 0a 20 20 20 20 20 20 20 20  ed for..        
22270 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
22280 20 20 20 20 20 65 78 70 65 72 74 20 75 73 65 20       expert use 
22290 6f 6e 6c 79 2e 0d 0a 20 20 20 20 20 20 20 20 20  only...         
222a0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
222b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
222c0 20 20 20 69 66 20 28 63 6f 6e 66 69 67 75 72 61     if (configura
222d0 74 69 6f 6e 2e 6e 6f 52 75 6e 74 69 6d 65 56 65  tion.noRuntimeVe
222e0 72 73 69 6f 6e 29 0d 0a 20 20 20 20 20 20 20 20  rsion)..        
222f0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
22300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22310 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e         TraceOps.
22320 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 54 72  DebugAndTrace(Tr
22330 61 63 65 50 72 69 6f 72 69 74 79 2e 4d 65 64 69  acePriority.Medi
22340 75 6d 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  um,..           
22350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22360 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20   debugCallback, 
22370 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53  traceCallback, S
22380 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
22390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
223a0 20 20 20 20 20 20 20 20 20 20 20 22 41 73 73 65             "Asse
223b0 6d 62 6c 79 20 69 73 20 63 6f 6d 70 69 6c 65 64  mbly is compiled
223c0 20 66 6f 72 20 74 68 65 20 2e 4e 45 54 20 46 72   for the .NET Fr
223d0 61 6d 65 77 6f 72 6b 20 7b 30 7d 3b 20 22 20 2b  amework {0}; " +
223e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
223f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 68                "h
22400 6f 77 65 76 65 72 2c 20 69 6e 73 74 61 6c 6c 61  owever, installa
22410 74 69 6f 6e 20 72 65 73 74 72 69 63 74 69 6f 6e  tion restriction
22420 73 20 62 61 73 65 64 20 6f 6e 20 74 68 69 73 20  s based on this 
22430 22 20 2b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  " +..           
22440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22450 20 22 66 61 63 74 20 68 61 76 65 20 62 65 65 6e   "fact have been
22460 20 64 69 73 61 62 6c 65 64 20 76 69 61 20 74 68   disabled via th
22470 65 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 2e 22  e command line."
22480 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
22490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
224a0 6f 72 65 49 6d 61 67 65 52 75 6e 74 69 6d 65 56  oreImageRuntimeV
224b0 65 72 73 69 6f 6e 29 2c 20 74 72 61 63 65 43 61  ersion), traceCa
224c0 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
224d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
224e0 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b      return true;
224f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
22500 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
22510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
22520 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
22530 20 20 20 20 20 20 20 2f 2f 20 54 4f 44 4f 3a 20         // TODO: 
22540 52 65 73 74 72 69 63 74 20 74 68 65 20 63 6f 6e  Restrict the con
22550 66 69 67 75 72 61 74 69 6f 6e 20 62 61 73 65 64  figuration based
22560 20 6f 6e 20 77 68 69 63 68 20 69 6d 61 67 65 0d   on which image.
22570 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
22580 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 72 75       //       ru
22590 6e 74 69 6d 65 20 76 65 72 73 69 6f 6e 73 20 28  ntime versions (
225a0 77 68 69 63 68 20 6d 6f 72 65 2d 6f 72 2d 6c 65  which more-or-le
225b0 73 73 20 63 6f 72 72 65 73 70 6f 6e 64 0d 0a 20  ss correspond.. 
225c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
225d0 20 20 20 2f 2f 20 20 20 20 20 20 20 74 6f 20 2e     //       to .
225e0 4e 45 54 20 46 72 61 6d 65 77 6f 72 6b 20 76 65  NET Framework ve
225f0 72 73 69 6f 6e 73 29 20 61 72 65 20 73 75 70 70  rsions) are supp
22600 6f 72 74 65 64 20 62 79 20 74 68 65 0d 0a 20 20  orted by the..  
22610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22620 20 20 2f 2f 20 20 20 20 20 20 20 76 65 72 73 69    //       versi
22630 6f 6e 73 20 6f 66 20 56 69 73 75 61 6c 20 53 74  ons of Visual St
22640 75 64 69 6f 20 74 68 61 74 20 61 72 65 20 69 6e  udio that are in
22650 73 74 61 6c 6c 65 64 2e 0d 0a 20 20 20 20 20 20  stalled...      
22660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
22670 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
22680 20 20 20 20 20 20 69 66 20 28 53 74 72 69 6e 67        if (String
22690 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 63  .IsNullOrEmpty(c
226a0 6f 72 65 49 6d 61 67 65 52 75 6e 74 69 6d 65 56  oreImageRuntimeV
226b0 65 72 73 69 6f 6e 29 29 0d 0a 20 20 20 20 20 20  ersion))..      
226c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
226d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
226e0 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d           error =
226f0 20 22 69 6e 76 61 6c 69 64 20 63 6f 72 65 20 66   "invalid core f
22700 69 6c 65 20 69 6d 61 67 65 20 72 75 6e 74 69 6d  ile image runtim
22710 65 20 76 65 72 73 69 6f 6e 22 3b 0d 0a 20 20 20  e version";..   
22720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22730 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
22740 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
22750 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
22760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
22770 6c 73 65 20 69 66 20 28 53 74 72 69 6e 67 2e 45  lse if (String.E
22780 71 75 61 6c 73 28 0d 0a 20 20 20 20 20 20 20 20  quals(..        
22790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
227a0 20 20 20 20 63 6f 72 65 49 6d 61 67 65 52 75 6e      coreImageRun
227b0 74 69 6d 65 56 65 72 73 69 6f 6e 2c 20 43 4c 52  timeVersion, CLR
227c0 76 32 49 6d 61 67 65 52 75 6e 74 69 6d 65 56 65  v2ImageRuntimeVe
227d0 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20  rsion,..        
227e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
227f0 20 20 20 20 53 74 72 69 6e 67 43 6f 6d 70 61 72      StringCompar
22800 69 73 6f 6e 2e 4f 72 64 69 6e 61 6c 29 29 0d 0a  ison.Ordinal))..
22810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22820 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
22830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
22840 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
22850 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f             // NO
22860 54 45 3a 20 46 6f 72 20 74 68 65 20 43 4c 52 20  TE: For the CLR 
22870 76 32 2e 30 20 72 75 6e 74 69 6d 65 2c 20 6d 61  v2.0 runtime, ma
22880 6b 65 20 73 75 72 65 20 77 65 20 64 69 73 61 62  ke sure we disab
22890 6c 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  le..            
228a0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
228b0 20 20 20 20 20 61 6e 79 20 61 74 74 65 6d 70 74       any attempt
228c0 20 74 6f 20 75 73 65 20 69 74 20 66 6f 72 20 74   to use it for t
228d0 68 69 6e 67 73 20 74 68 61 74 20 72 65 71 75 69  hings that requi
228e0 72 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  re..            
228f0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
22900 20 20 20 20 20 61 6e 20 61 73 73 65 6d 62 6c 79       an assembly
22910 20 63 6f 6d 70 69 6c 65 64 20 66 6f 72 20 74 68   compiled for th
22920 65 20 43 4c 52 20 76 34 2e 30 2e 20 20 49 74 20  e CLR v4.0.  It 
22930 69 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  is..            
22940 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
22950 20 20 20 20 20 75 6e 63 65 72 74 61 69 6e 20 69       uncertain i
22960 66 20 74 68 69 73 20 69 73 20 61 63 74 75 61 6c  f this is actual
22970 6c 79 20 61 20 70 72 6f 62 6c 65 6d 20 69 6e 0d  ly a problem in.
22980 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
22990 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
229a0 20 20 70 72 61 63 74 69 63 65 20 61 73 20 74 68    practice as th
229b0 65 20 43 4c 52 20 76 34 2e 30 20 63 61 6e 20 6c  e CLR v4.0 can l
229c0 6f 61 64 20 61 6e 64 20 75 73 65 20 61 6e 0d 0a  oad and use an..
229d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
229e0 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
229f0 20 61 73 73 65 6d 62 6c 79 20 63 6f 6d 70 69 6c   assembly compil
22a00 65 64 20 77 69 74 68 20 74 68 65 20 43 4c 52 20  ed with the CLR 
22a10 76 32 2e 30 3b 20 68 6f 77 65 76 65 72 2c 0d 0a  v2.0; however,..
22a20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22a30 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
22a40 20 73 69 6e 63 65 20 74 68 69 73 20 70 72 6f 6a   since this proj
22a50 65 63 74 20 6f 66 66 65 72 73 20 62 6f 74 68 20  ect offers both 
22a60 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 73 2c 0d  configurations,.
22a70 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
22a80 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
22a90 20 20 77 65 20 63 75 72 72 65 6e 74 6c 79 20 64    we currently d
22aa0 69 73 61 6c 6c 6f 77 20 74 68 69 73 20 6d 69 73  isallow this mis
22ab0 6d 61 74 63 68 2e 0d 0a 20 20 20 20 20 20 20 20  match...        
22ac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22ad0 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
22ae0 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66              conf
22af0 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 4e 65 74 46  iguration.noNetF
22b00 78 34 30 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20  x40 = true;..   
22b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22b20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69       configurati
22b30 6f 6e 2e 6e 6f 4e 65 74 46 78 34 35 20 3d 20 74  on.noNetFx45 = t
22b40 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  rue;..          
22b50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
22b60 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 4e 65  nfiguration.noNe
22b70 74 46 78 34 35 31 20 3d 20 74 72 75 65 3b 0d 0a  tFx451 = true;..
22b80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22b90 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72          configur
22ba0 61 74 69 6f 6e 2e 6e 6f 4e 65 74 46 78 34 35 32  ation.noNetFx452
22bb0 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20   = true;..      
22bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22bd0 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e    configuration.
22be0 6e 6f 4e 65 74 46 78 34 36 20 3d 20 74 72 75 65  noNetFx46 = true
22bf0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
22c00 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69             confi
22c10 67 75 72 61 74 69 6f 6e 2e 6e 6f 4e 65 74 46 78  guration.noNetFx
22c20 34 36 31 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20  461 = true;..   
22c30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22c40 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69       configurati
22c50 6f 6e 2e 6e 6f 4e 65 74 46 78 34 36 32 20 3d 20  on.noNetFx462 = 
22c60 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  true;..         
22c70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
22c80 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 4e  onfiguration.noN
22c90 65 74 46 78 34 37 20 3d 20 74 72 75 65 3b 0d 0a  etFx47 = true;..
22ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22cb0 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72          configur
22cc0 61 74 69 6f 6e 2e 6e 6f 56 73 32 30 31 30 20 3d  ation.noVs2010 =
22cd0 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20   true;..        
22ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22cf0 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f  configuration.no
22d00 56 73 32 30 31 32 20 3d 20 74 72 75 65 3b 0d 0a  Vs2012 = true;..
22d10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22d20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72          configur
22d30 61 74 69 6f 6e 2e 6e 6f 56 73 32 30 31 33 20 3d  ation.noVs2013 =
22d40 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20   true;..        
22d50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22d60 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f  configuration.no
22d70 56 73 32 30 31 35 20 3d 20 74 72 75 65 3b 0d 0a  Vs2015 = true;..
22d80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22d90 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72          configur
22da0 61 74 69 6f 6e 2e 6e 6f 56 73 32 30 31 37 20 3d  ation.noVs2017 =
22db0 20 74 72 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20   true;....      
22dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22dd0 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67    TraceOps.Debug
22de0 41 6e 64 54 72 61 63 65 28 54 72 61 63 65 50 72  AndTrace(TracePr
22df0 69 6f 72 69 74 79 2e 4d 65 64 69 75 6d 2c 0d 0a  iority.Medium,..
22e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22e10 20 20 20 20 20 20 20 20 20 20 20 20 64 65 62 75              debu
22e20 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65  gCallback, trace
22e30 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67  Callback, String
22e40 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  .Format(..      
22e50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22e60 20 20 20 20 20 20 22 41 73 73 65 6d 62 6c 79 20        "Assembly 
22e70 69 73 20 63 6f 6d 70 69 6c 65 64 20 66 6f 72 20  is compiled for 
22e80 74 68 65 20 2e 4e 45 54 20 46 72 61 6d 65 77 6f  the .NET Framewo
22e90 72 6b 20 7b 30 7d 2c 20 22 20 2b 0d 0a 20 20 20  rk {0}, " +..   
22ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22eb0 20 20 20 20 20 20 20 20 20 22 73 75 70 70 6f 72           "suppor
22ec0 74 20 66 6f 72 20 74 68 65 20 2e 4e 45 54 20 46  t for the .NET F
22ed0 72 61 6d 65 77 6f 72 6b 20 7b 31 7d 20 69 73 20  ramework {1} is 
22ee0 6e 6f 77 20 64 69 73 61 62 6c 65 64 2e 22 2c 0d  now disabled.",.
22ef0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
22f00 20 20 20 20 20 20 20 20 20 20 20 20 20 43 4c 52               CLR
22f10 76 32 49 6d 61 67 65 52 75 6e 74 69 6d 65 56 65  v2ImageRuntimeVe
22f20 72 73 69 6f 6e 2c 20 43 4c 52 76 34 49 6d 61 67  rsion, CLRv4Imag
22f30 65 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 29  eRuntimeVersion)
22f40 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
22f50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
22f60 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
22f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22f80 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
22f90 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20             else 
22fa0 69 66 20 28 53 74 72 69 6e 67 2e 45 71 75 61 6c  if (String.Equal
22fb0 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  s(..            
22fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22fd0 63 6f 72 65 49 6d 61 67 65 52 75 6e 74 69 6d 65  coreImageRuntime
22fe0 56 65 72 73 69 6f 6e 2c 20 43 4c 52 76 34 49 6d  Version, CLRv4Im
22ff0 61 67 65 52 75 6e 74 69 6d 65 56 65 72 73 69 6f  ageRuntimeVersio
23000 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n,..            
23010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23020 53 74 72 69 6e 67 43 6f 6d 70 61 72 69 73 6f 6e  StringComparison
23030 2e 4f 72 64 69 6e 61 6c 29 29 0d 0a 20 20 20 20  .Ordinal))..    
23040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23050 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
23060 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
23070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23080 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20         // NOTE: 
23090 46 6f 72 20 74 68 65 20 43 4c 52 20 76 34 2e 30  For the CLR v4.0
230a0 20 72 75 6e 74 69 6d 65 2c 20 6d 61 6b 65 20 73   runtime, make s
230b0 75 72 65 20 77 65 20 64 69 73 61 62 6c 65 0d 0a  ure we disable..
230c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
230d0 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
230e0 20 61 6e 79 20 61 74 74 65 6d 70 74 20 74 6f 20   any attempt to 
230f0 75 73 65 20 69 74 20 66 6f 72 20 74 68 69 6e 67  use it for thing
23100 73 20 74 68 61 74 20 72 65 71 75 69 72 65 0d 0a  s that require..
23110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23120 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
23130 20 61 6e 20 61 73 73 65 6d 62 6c 79 20 63 6f 6d   an assembly com
23140 70 69 6c 65 64 20 66 6f 72 20 74 68 65 20 43 4c  piled for the CL
23150 52 20 76 32 2e 30 2e 0d 0a 20 20 20 20 20 20 20  R v2.0...       
23160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23170 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
23180 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
23190 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 4e 65 74  figuration.noNet
231a0 46 78 32 30 20 3d 20 74 72 75 65 3b 0d 0a 20 20  Fx20 = true;..  
231b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
231c0 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74        configurat
231d0 69 6f 6e 2e 6e 6f 4e 65 74 46 78 33 35 20 3d 20  ion.noNetFx35 = 
231e0 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  true;..         
231f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
23200 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 56  onfiguration.noV
23210 73 32 30 30 35 20 3d 20 74 72 75 65 3b 0d 0a 20  s2005 = true;.. 
23220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23230 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61         configura
23240 74 69 6f 6e 2e 6e 6f 56 73 32 30 30 38 20 3d 20  tion.noVs2008 = 
23250 74 72 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  true;....       
23260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23270 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41   TraceOps.DebugA
23280 6e 64 54 72 61 63 65 28 54 72 61 63 65 50 72 69  ndTrace(TracePri
23290 6f 72 69 74 79 2e 4d 65 64 69 75 6d 2c 0d 0a 20  ority.Medium,.. 
232a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
232b0 20 20 20 20 20 20 20 20 20 20 20 64 65 62 75 67             debug
232c0 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43  Callback, traceC
232d0 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e  allback, String.
232e0 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
232f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23300 20 20 20 20 20 22 41 73 73 65 6d 62 6c 79 20 69       "Assembly i
23310 73 20 63 6f 6d 70 69 6c 65 64 20 66 6f 72 20 74  s compiled for t
23320 68 65 20 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72  he .NET Framewor
23330 6b 20 7b 30 7d 2c 20 22 20 2b 0d 0a 20 20 20 20  k {0}, " +..    
23340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23350 20 20 20 20 20 20 20 20 22 73 75 70 70 6f 72 74          "support
23360 20 66 6f 72 20 74 68 65 20 2e 4e 45 54 20 46 72   for the .NET Fr
23370 61 6d 65 77 6f 72 6b 20 7b 31 7d 20 69 73 20 6e  amework {1} is n
23380 6f 77 20 64 69 73 61 62 6c 65 64 2e 22 2c 0d 0a  ow disabled.",..
23390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
233a0 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44              ForD
233b0 69 73 70 6c 61 79 28 43 4c 52 76 34 49 6d 61 67  isplay(CLRv4Imag
233c0 65 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 29  eRuntimeVersion)
233d0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
233e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46                 F
233f0 6f 72 44 69 73 70 6c 61 79 28 43 4c 52 76 32 49  orDisplay(CLRv2I
23400 6d 61 67 65 52 75 6e 74 69 6d 65 56 65 72 73 69  mageRuntimeVersi
23410 6f 6e 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  on)),..         
23420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23430 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
23440 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
23450 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
23460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
23470 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  lse..           
23480 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
23490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
234a0 20 20 20 20 65 72 72 6f 72 20 3d 20 53 74 72 69      error = Stri
234b0 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20  ng.Format(..    
234c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
234d0 20 20 20 20 20 20 20 20 22 75 6e 73 75 70 70 6f          "unsuppo
234e0 72 74 65 64 20 63 6f 72 65 20 66 69 6c 65 20 69  rted core file i
234f0 6d 61 67 65 20 72 75 6e 74 69 6d 65 20 76 65 72  mage runtime ver
23500 73 69 6f 6e 20 22 20 2b 0d 0a 20 20 20 20 20 20  sion " +..      
23510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23520 20 20 20 20 20 20 22 7b 30 7d 2c 20 6d 75 73 74        "{0}, must
23530 20 62 65 20 7b 31 7d 20 6f 72 20 7b 32 7d 22 2c   be {1} or {2}",
23540 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
23550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f                Fo
23560 72 44 69 73 70 6c 61 79 28 63 6f 72 65 49 6d 61  rDisplay(coreIma
23570 67 65 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e  geRuntimeVersion
23580 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
23590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
235a0 46 6f 72 44 69 73 70 6c 61 79 28 43 4c 52 76 32  ForDisplay(CLRv2
235b0 49 6d 61 67 65 52 75 6e 74 69 6d 65 56 65 72 73  ImageRuntimeVers
235c0 69 6f 6e 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  ion),..         
235d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
235e0 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 43 4c     ForDisplay(CL
235f0 52 76 34 49 6d 61 67 65 52 75 6e 74 69 6d 65 56  Rv4ImageRuntimeV
23600 65 72 73 69 6f 6e 29 29 3b 0d 0a 0d 0a 20 20 20  ersion));....   
23610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23620 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
23630 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
23640 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
23650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23660 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20   return true;.. 
23670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
23680 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
23690 20 20 63 61 74 63 68 20 28 45 78 63 65 70 74 69    catch (Excepti
236a0 6f 6e 20 65 29 0d 0a 20 20 20 20 20 20 20 20 20  on e)..         
236b0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
236c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
236d0 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54  aceOps.DebugAndT
236e0 72 61 63 65 28 54 72 61 63 65 50 72 69 6f 72 69  race(TracePriori
236f0 74 79 2e 48 69 67 68 65 73 74 2c 0d 0a 20 20 20  ty.Highest,..   
23700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23710 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61       debugCallba
23720 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63  ck, traceCallbac
23730 6b 2c 20 65 2c 20 74 72 61 63 65 43 61 74 65 67  k, e, traceCateg
23740 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
23750 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
23760 6f 72 20 3d 20 22 46 61 69 6c 65 64 20 74 6f 20  or = "Failed to 
23770 63 68 65 63 6b 20 69 6d 61 67 65 20 72 75 6e 74  check image runt
23780 69 6d 65 20 76 65 72 73 69 6f 6e 2e 22 3b 0d 0a  ime version.";..
23790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
237a0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
237b0 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
237c0 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
237d0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  }..            #
237e0 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20  endregion....   
237f0 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
23800 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23810 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23820 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23830 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
23840 20 20 20 20 20 20 20 20 20 20 20 20 23 72 65 67              #reg
23850 69 6f 6e 20 50 72 69 76 61 74 65 20 4d 65 74 68  ion Private Meth
23860 6f 64 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ods..           
23870 20 70 72 69 76 61 74 65 20 73 74 72 69 6e 67 20   private string 
23880 47 65 74 49 6e 76 61 72 69 61 6e 74 4e 61 6d 65  GetInvariantName
23890 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
238a0 20 20 20 62 6f 6f 6c 20 74 72 61 63 65 0d 0a 20     bool trace.. 
238b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29                 )
238c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
238d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
238e0 20 72 65 74 75 72 6e 20 55 73 65 45 66 36 50 72   return UseEf6Pr
238f0 6f 76 69 64 65 72 28 74 72 61 63 65 29 20 3f 0d  ovider(trace) ?.
23900 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
23910 20 20 20 20 20 45 66 36 49 6e 76 61 72 69 61 6e       Ef6Invarian
23920 74 4e 61 6d 65 20 3a 20 49 6e 76 61 72 69 61 6e  tName : Invarian
23930 74 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20  tName;..        
23940 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
23950 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
23960 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23970 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23980 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23990 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
239a0 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
239b0 62 6f 6f 6c 20 49 73 53 79 73 74 65 6d 45 66 36  bool IsSystemEf6
239c0 41 73 73 65 6d 62 6c 79 41 76 61 69 6c 61 62 6c  AssemblyAvailabl
239d0 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
239e0 20 20 20 20 62 6f 6f 6c 20 74 72 61 63 65 0d 0a      bool trace..
239f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23a00 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
23a10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
23a20 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20    try..         
23a30 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
23a40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
23a50 20 28 73 79 73 74 65 6d 45 66 36 41 73 73 65 6d   (systemEf6Assem
23a60 62 6c 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  bly == null)..  
23a70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23a80 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
23a90 20 20 20 20 20 20 20 20 20 20 20 20 20 73 79 73               sys
23aa0 74 65 6d 45 66 36 41 73 73 65 6d 62 6c 79 20 3d  temEf6Assembly =
23ab0 20 41 73 73 65 6d 62 6c 79 2e 52 65 66 6c 65 63   Assembly.Reflec
23ac0 74 69 6f 6e 4f 6e 6c 79 4c 6f 61 64 28 0d 0a 20  tionOnlyLoad(.. 
23ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23ae0 20 20 20 20 20 20 20 20 20 20 20 53 79 73 74 65             Syste
23af0 6d 45 66 36 41 73 73 65 6d 62 6c 79 4e 61 6d 65  mEf6AssemblyName
23b00 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
23b10 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
23b20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23b30 20 69 66 20 28 73 79 73 74 65 6d 45 66 36 41 73   if (systemEf6As
23b40 73 65 6d 62 6c 79 20 21 3d 20 6e 75 6c 6c 29 0d  sembly != null).
23b50 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
23b60 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
23b70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23b80 69 66 20 28 74 72 61 63 65 20 26 26 0d 0a 20 20  if (trace &&..  
23b90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23ba0 20 20 20 20 20 20 20 20 20 20 21 48 61 73 46 6c            !HasFl
23bb0 61 67 73 28 50 72 6f 76 69 64 65 72 46 6c 61 67  ags(ProviderFlag
23bc0 73 2e 44 69 64 45 66 36 52 65 73 6f 6c 76 65 54  s.DidEf6ResolveT
23bd0 72 61 63 65 2c 20 74 72 75 65 29 29 0d 0a 20 20  race, true))..  
23be0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23bf0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
23c00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23c10 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65       TraceOps.De
23c20 62 75 67 41 6e 64 54 72 61 63 65 28 54 72 61 63  bugAndTrace(Trac
23c30 65 50 72 69 6f 72 69 74 79 2e 48 69 67 68 65 73  ePriority.Highes
23c40 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t,..            
23c50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23c60 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63      debugCallbac
23c70 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b  k, traceCallback
23c80 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  , String.Format(
23c90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
23ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23cb0 20 20 22 45 6e 74 69 74 79 20 46 72 61 6d 65 77    "Entity Framew
23cc0 6f 72 6b 20 36 20 61 73 73 65 6d 62 6c 79 20 77  ork 6 assembly w
23cd0 61 73 20 22 20 2b 0d 0a 20 20 20 20 20 20 20 20  as " +..        
23ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23cf0 20 20 20 20 20 20 20 20 22 72 65 73 6f 6c 76 65          "resolve
23d00 64 20 74 6f 20 7b 30 7d 2e 22 2c 20 46 6f 72 44  d to {0}.", ForD
23d10 69 73 70 6c 61 79 28 0d 0a 20 20 20 20 20 20 20  isplay(..       
23d20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23d30 20 20 20 20 20 20 20 20 20 73 79 73 74 65 6d 45           systemE
23d40 66 36 41 73 73 65 6d 62 6c 79 2e 4c 6f 63 61 74  f6Assembly.Locat
23d50 69 6f 6e 29 29 2c 0d 0a 20 20 20 20 20 20 20 20  ion)),..        
23d60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23d70 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74          traceCat
23d80 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20  egory);....     
23d90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23da0 20 20 20 20 20 20 20 70 72 6f 76 69 64 65 72 46         providerF
23db0 6c 61 67 73 20 7c 3d 20 50 72 6f 76 69 64 65 72  lags |= Provider
23dc0 46 6c 61 67 73 2e 44 69 64 45 66 36 52 65 73 6f  Flags.DidEf6Reso
23dd0 6c 76 65 54 72 61 63 65 3b 0d 0a 20 20 20 20 20  lveTrace;..     
23de0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23df0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
23e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23e10 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20  return true;..  
23e20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23e30 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
23e40 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
23e50 20 20 20 20 20 20 20 20 63 61 74 63 68 0d 0a 20          catch.. 
23e60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
23e70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
23e80 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68        // do noth
23e90 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  ing...          
23ea0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
23eb0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 74             if (t
23ec0 72 61 63 65 20 26 26 0d 0a 20 20 20 20 20 20 20  race &&..       
23ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 21 48 61               !Ha
23ee0 73 46 6c 61 67 73 28 50 72 6f 76 69 64 65 72 46  sFlags(ProviderF
23ef0 6c 61 67 73 2e 44 69 64 45 66 36 52 65 73 6f 6c  lags.DidEf6Resol
23f00 76 65 54 72 61 63 65 2c 20 74 72 75 65 29 29 0d  veTrace, true)).
23f10 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
23f20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
23f30 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73          TraceOps
23f40 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 54  .DebugAndTrace(T
23f50 72 61 63 65 50 72 69 6f 72 69 74 79 2e 48 69 67  racePriority.Hig
23f60 68 65 73 74 2c 0d 0a 20 20 20 20 20 20 20 20 20  hest,..         
23f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64                 d
23f80 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72  ebugCallback, tr
23f90 61 63 65 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20  aceCallback,..  
23fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23fb0 20 20 20 20 20 20 22 45 6e 74 69 74 79 20 46 72        "Entity Fr
23fc0 61 6d 65 77 6f 72 6b 20 36 20 61 73 73 65 6d 62  amework 6 assemb
23fd0 6c 79 20 77 61 73 20 6e 6f 74 20 72 65 73 6f 6c  ly was not resol
23fe0 76 65 64 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20  ved.",..        
23ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24000 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
24010 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
24020 20 20 20 20 20 20 20 70 72 6f 76 69 64 65 72 46         providerF
24030 6c 61 67 73 20 7c 3d 20 50 72 6f 76 69 64 65 72  lags |= Provider
24040 46 6c 61 67 73 2e 44 69 64 45 66 36 52 65 73 6f  Flags.DidEf6Reso
24050 6c 76 65 54 72 61 63 65 3b 0d 0a 20 20 20 20 20  lveTrace;..     
24060 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
24070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24080 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20  return false;.. 
24090 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
240a0 20 20 20 20 20 20 20 20 20 20 23 65 6e 64 72 65            #endre
240b0 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20  gion....        
240c0 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
240d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
240e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
240f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24100 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
24110 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50         #region P
24120 75 62 6c 69 63 20 4d 65 74 68 6f 64 73 0d 0a 20  ublic Methods.. 
24130 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
24140 63 20 62 6f 6f 6c 20 48 61 73 46 6c 61 67 73 28  c bool HasFlags(
24150 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
24160 20 20 49 6e 73 74 61 6c 6c 46 6c 61 67 73 20 68    InstallFlags h
24170 61 73 46 6c 61 67 73 2c 0d 0a 20 20 20 20 20 20  asFlags,..      
24180 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 61            bool a
24190 6c 6c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ll..            
241a0 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20      )..         
241b0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
241c0 20 20 20 20 20 20 69 66 20 28 61 6c 6c 29 0d 0a        if (all)..
241d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
241e0 20 20 20 20 72 65 74 75 72 6e 20 28 28 69 6e 73      return ((ins
241f0 74 61 6c 6c 46 6c 61 67 73 20 26 20 68 61 73 46  tallFlags & hasF
24200 6c 61 67 73 29 20 3d 3d 20 68 61 73 46 6c 61 67  lags) == hasFlag
24210 73 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s);..           
24220 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20       else..     
24230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
24240 65 74 75 72 6e 20 28 28 69 6e 73 74 61 6c 6c 46  eturn ((installF
24250 6c 61 67 73 20 26 20 68 61 73 46 6c 61 67 73 29  lags & hasFlags)
24260 20 21 3d 20 49 6e 73 74 61 6c 6c 46 6c 61 67 73   != InstallFlags
24270 2e 4e 6f 6e 65 29 3b 0d 0a 20 20 20 20 20 20 20  .None);..       
24280 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
24290 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
242a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
242b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
242c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
242d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
242e0 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
242f0 62 6f 6f 6c 20 48 61 73 46 6c 61 67 73 28 0d 0a  bool HasFlags(..
24300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24310 50 72 6f 76 69 64 65 72 46 6c 61 67 73 20 68 61  ProviderFlags ha
24320 73 46 6c 61 67 73 2c 0d 0a 20 20 20 20 20 20 20  sFlags,..       
24330 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 61 6c           bool al
24340 6c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  l..             
24350 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20     )..          
24360 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
24370 20 20 20 20 20 69 66 20 28 61 6c 6c 29 0d 0a 20       if (all).. 
24380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24390 20 20 20 72 65 74 75 72 6e 20 28 28 70 72 6f 76     return ((prov
243a0 69 64 65 72 46 6c 61 67 73 20 26 20 68 61 73 46  iderFlags & hasF
243b0 6c 61 67 73 29 20 3d 3d 20 68 61 73 46 6c 61 67  lags) == hasFlag
243c0 73 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s);..           
243d0 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20       else..     
243e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
243f0 65 74 75 72 6e 20 28 28 70 72 6f 76 69 64 65 72  eturn ((provider
24400 46 6c 61 67 73 20 26 20 68 61 73 46 6c 61 67 73  Flags & hasFlags
24410 29 20 21 3d 20 50 72 6f 76 69 64 65 72 46 6c 61  ) != ProviderFla
24420 67 73 2e 4e 6f 6e 65 29 3b 0d 0a 20 20 20 20 20  gs.None);..     
24430 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
24440 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
24450 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24460 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24470 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24480 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
24490 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
244a0 63 20 62 6f 6f 6c 20 49 73 4c 69 6e 71 53 75 70  c bool IsLinqSup
244b0 70 6f 72 74 65 64 28 0d 0a 20 20 20 20 20 20 20  ported(..       
244c0 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 74 72           bool tr
244d0 61 63 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ace..           
244e0 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
244f0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
24500 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
24510 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f             // NO
24520 54 45 3a 20 43 68 65 63 6b 20 74 6f 20 73 65 65  TE: Check to see
24530 20 69 66 20 74 68 65 20 63 61 6c 6c 65 72 20 68   if the caller h
24540 61 73 20 66 6f 72 63 65 64 20 4c 49 4e 51 20 73  as forced LINQ s
24550 75 70 70 6f 72 74 20 74 6f 0d 0a 20 20 20 20 20  upport to..     
24560 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
24570 20 20 20 20 62 65 20 65 6e 61 62 6c 65 64 20 2d      be enabled -
24580 4f 52 2d 20 64 69 73 61 62 6c 65 64 2c 20 74 68  OR- disabled, th
24590 65 72 65 62 79 20 62 79 70 61 73 73 69 6e 67 20  ereby bypassing 
245a0 74 68 65 20 6e 65 65 64 0d 0a 20 20 20 20 20 20  the need..      
245b0 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
245c0 20 20 20 66 6f 72 20 22 61 75 74 6f 6d 61 74 69     for "automati
245d0 63 20 64 65 74 65 63 74 69 6f 6e 22 20 62 79 20  c detection" by 
245e0 74 68 69 73 20 6d 65 74 68 6f 64 2e 0d 0a 20 20  this method...  
245f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
24600 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
24610 20 20 69 66 20 28 48 61 73 46 6c 61 67 73 28 50    if (HasFlags(P
24620 72 6f 76 69 64 65 72 46 6c 61 67 73 2e 46 6f 72  roviderFlags.For
24630 63 65 4c 69 6e 71 45 6e 61 62 6c 65 64 2c 20 74  ceLinqEnabled, t
24640 72 75 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20  rue))..         
24650 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
24660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
24670 20 28 74 72 61 63 65 20 26 26 0d 0a 20 20 20 20   (trace &&..    
24680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24690 20 20 20 20 21 48 61 73 46 6c 61 67 73 28 50 72      !HasFlags(Pr
246a0 6f 76 69 64 65 72 46 6c 61 67 73 2e 44 69 64 4c  oviderFlags.DidL
246b0 69 6e 71 46 6f 72 63 65 54 72 61 63 65 2c 20 74  inqForceTrace, t
246c0 72 75 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20  rue))..         
246d0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
246e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
246f0 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44        TraceOps.D
24700 65 62 75 67 41 6e 64 54 72 61 63 65 28 54 72 61  ebugAndTrace(Tra
24710 63 65 50 72 69 6f 72 69 74 79 2e 4d 65 64 69 75  cePriority.Mediu
24720 6d 48 69 67 68 2c 0d 0a 20 20 20 20 20 20 20 20  mHigh,..        
24730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24740 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63      debugCallbac
24750 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b  k, traceCallback
24760 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
24770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
24780 46 6f 72 63 65 64 20 74 6f 20 65 6e 61 62 6c 65  Forced to enable
24790 20 73 75 70 70 6f 72 74 20 66 6f 72 20 5c 22 4c   support for \"L
247a0 69 6e 71 5c 22 2e 22 2c 0d 0a 20 20 20 20 20 20  inq\".",..      
247b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
247c0 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67        traceCateg
247d0 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
247e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
247f0 20 70 72 6f 76 69 64 65 72 46 6c 61 67 73 20 7c   providerFlags |
24800 3d 20 50 72 6f 76 69 64 65 72 46 6c 61 67 73 2e  = ProviderFlags.
24810 44 69 64 4c 69 6e 71 46 6f 72 63 65 54 72 61 63  DidLinqForceTrac
24820 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
24830 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
24840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24850 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20   return true;.. 
24860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
24870 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
24880 20 20 65 6c 73 65 20 69 66 20 28 48 61 73 46 6c    else if (HasFl
24890 61 67 73 28 50 72 6f 76 69 64 65 72 46 6c 61 67  ags(ProviderFlag
248a0 73 2e 46 6f 72 63 65 4c 69 6e 71 44 69 73 61 62  s.ForceLinqDisab
248b0 6c 65 64 2c 20 74 72 75 65 29 29 0d 0a 20 20 20  led, true))..   
248c0 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
248d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
248e0 20 20 20 20 69 66 20 28 74 72 61 63 65 20 26 26      if (trace &&
248f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
24900 20 20 20 20 20 20 20 20 20 20 21 48 61 73 46 6c            !HasFl
24910 61 67 73 28 50 72 6f 76 69 64 65 72 46 6c 61 67  ags(ProviderFlag
24920 73 2e 44 69 64 4c 69 6e 71 46 6f 72 63 65 54 72  s.DidLinqForceTr
24930 61 63 65 2c 20 74 72 75 65 29 29 0d 0a 20 20 20  ace, true))..   
24940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24950 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
24960 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
24970 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61  eOps.DebugAndTra
24980 63 65 28 54 72 61 63 65 50 72 69 6f 72 69 74 79  ce(TracePriority
24990 2e 4d 65 64 69 75 6d 48 69 67 68 2c 0d 0a 20 20  .MediumHigh,..  
249a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
249b0 20 20 20 20 20 20 20 20 20 20 64 65 62 75 67 43            debugC
249c0 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61  allback, traceCa
249d0 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20  llback,..       
249e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
249f0 20 20 20 20 20 22 46 6f 72 63 65 64 20 74 6f 20       "Forced to 
24a00 64 69 73 61 62 6c 65 20 73 75 70 70 6f 72 74 20  disable support 
24a10 66 6f 72 20 5c 22 4c 69 6e 71 5c 22 2e 22 2c 0d  for \"Linq\".",.
24a20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
24a30 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
24a40 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
24a50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24a60 20 20 20 20 20 20 20 20 70 72 6f 76 69 64 65 72          provider
24a70 46 6c 61 67 73 20 7c 3d 20 50 72 6f 76 69 64 65  Flags |= Provide
24a80 72 46 6c 61 67 73 2e 44 69 64 4c 69 6e 71 46 6f  rFlags.DidLinqFo
24a90 72 63 65 54 72 61 63 65 3b 0d 0a 20 20 20 20 20  rceTrace;..     
24aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
24ab0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
24ac0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
24ad0 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alse;..         
24ae0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
24af0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
24b00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24b10 2f 2f 20 4e 4f 54 45 3a 20 52 65 74 75 72 6e 20  // NOTE: Return 
24b20 6e 6f 6e 2d 7a 65 72 6f 20 69 66 20 74 68 65 20  non-zero if the 
24b30 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69  System.Data.SQLi
24b40 74 65 2e 4c 69 6e 71 0d 0a 20 20 20 20 20 20 20  te.Linq..       
24b50 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
24b60 20 20 61 73 73 65 6d 62 6c 79 20 73 68 6f 75 6c    assembly shoul
24b70 64 20 62 65 20 70 72 6f 63 65 73 73 65 64 20 64  d be processed d
24b80 75 72 69 6e 67 20 74 68 65 20 69 6e 73 74 61 6c  uring the instal
24b90 6c 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l...            
24ba0 20 20 20 20 2f 2f 20 20 20 20 20 20 20 49 66 20      //       If 
24bb0 74 68 65 20 74 61 72 67 65 74 20 69 73 20 56 69  the target is Vi
24bc0 73 75 61 6c 20 53 74 75 64 69 6f 20 32 30 30 35  sual Studio 2005
24bd0 2c 20 74 68 69 73 20 6d 75 73 74 0d 0a 20 20 20  , this must..   
24be0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
24bf0 20 20 20 20 20 20 72 65 74 75 72 6e 20 7a 65 72        return zer
24c00 6f 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  o...            
24c10 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
24c20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 21          return !
24c30 6e 6f 4e 65 74 46 78 33 35 20 7c 7c 20 21 6e 6f  noNetFx35 || !no
24c40 4e 65 74 46 78 34 30 20 7c 7c 20 21 6e 6f 4e 65  NetFx40 || !noNe
24c50 74 46 78 34 35 20 7c 7c 0d 0a 20 20 20 20 20 20  tFx45 ||..      
24c60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 21 6e                !n
24c70 6f 4e 65 74 46 78 34 35 31 20 7c 7c 20 21 6e 6f  oNetFx451 || !no
24c80 4e 65 74 46 78 34 35 32 20 7c 7c 20 21 6e 6f 4e  NetFx452 || !noN
24c90 65 74 46 78 34 36 20 7c 7c 0d 0a 20 20 20 20 20  etFx46 ||..     
24ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 21                 !
24cb0 6e 6f 4e 65 74 46 78 34 36 31 20 7c 7c 20 21 6e  noNetFx461 || !n
24cc0 6f 4e 65 74 46 78 34 36 32 20 7c 7c 20 21 6e 6f  oNetFx462 || !no
24cd0 4e 65 74 46 78 34 37 3b 0d 0a 20 20 20 20 20 20  NetFx47;..      
24ce0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
24cf0 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
24d00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24d10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24d20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24d30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
24d40 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
24d50 20 62 6f 6f 6c 20 49 73 45 66 36 53 75 70 70 6f   bool IsEf6Suppo
24d60 72 74 65 64 28 0d 0a 20 20 20 20 20 20 20 20 20  rted(..         
24d70 20 20 20 20 20 20 20 62 6f 6f 6c 20 74 72 61 63         bool trac
24d80 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e..             
24d90 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20     )..          
24da0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
24db0 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
24dc0 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45           // NOTE
24dd0 3a 20 43 68 65 63 6b 20 74 6f 20 73 65 65 20 69  : Check to see i
24de0 66 20 74 68 65 20 63 61 6c 6c 65 72 20 68 61 73  f the caller has
24df0 20 66 6f 72 63 65 64 20 45 46 36 20 73 75 70 70   forced EF6 supp
24e00 6f 72 74 20 74 6f 0d 0a 20 20 20 20 20 20 20 20  ort to..        
24e10 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
24e20 20 62 65 20 65 6e 61 62 6c 65 64 20 2d 4f 52 2d   be enabled -OR-
24e30 20 64 69 73 61 62 6c 65 64 2c 20 74 68 65 72 65   disabled, there
24e40 62 79 20 62 79 70 61 73 73 69 6e 67 20 74 68 65  by bypassing the
24e50 20 6e 65 65 64 0d 0a 20 20 20 20 20 20 20 20 20   need..         
24e60 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
24e70 66 6f 72 20 22 61 75 74 6f 6d 61 74 69 63 20 64  for "automatic d
24e80 65 74 65 63 74 69 6f 6e 22 20 62 79 20 74 68 69  etection" by thi
24e90 73 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20  s method...     
24ea0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
24eb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
24ec0 66 20 28 48 61 73 46 6c 61 67 73 28 50 72 6f 76  f (HasFlags(Prov
24ed0 69 64 65 72 46 6c 61 67 73 2e 46 6f 72 63 65 45  iderFlags.ForceE
24ee0 66 36 45 6e 61 62 6c 65 64 2c 20 74 72 75 65 29  f6Enabled, true)
24ef0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
24f00 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
24f10 20 20 20 20 20 20 20 20 20 20 69 66 20 28 74 72            if (tr
24f20 61 63 65 20 26 26 0d 0a 20 20 20 20 20 20 20 20  ace &&..        
24f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24f40 21 48 61 73 46 6c 61 67 73 28 50 72 6f 76 69 64  !HasFlags(Provid
24f50 65 72 46 6c 61 67 73 2e 44 69 64 45 66 36 46 6f  erFlags.DidEf6Fo
24f60 72 63 65 54 72 61 63 65 2c 20 74 72 75 65 29 29  rceTrace, true))
24f70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
24f80 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
24f90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24fa0 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41   TraceOps.DebugA
24fb0 6e 64 54 72 61 63 65 28 54 72 61 63 65 50 72 69  ndTrace(TracePri
24fc0 6f 72 69 74 79 2e 4d 65 64 69 75 6d 48 69 67 68  ority.MediumHigh
24fd0 2c 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 20 20 20 20 64                 d
24ff0 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72  ebugCallback, tr
25000 61 63 65 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20  aceCallback,..  
25010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25020 20 20 20 20 20 20 20 20 20 20 22 46 6f 72 63 65            "Force
25030 64 20 74 6f 20 65 6e 61 62 6c 65 20 73 75 70 70  d to enable supp
25040 6f 72 74 20 66 6f 72 20 5c 22 45 66 36 5c 22 2e  ort for \"Ef6\".
25050 22 2c 0d 0a 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 20 20                  
25070 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
25080 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
25090 20 20 20 20 20 20 20 20 20 20 20 70 72 6f 76 69             provi
250a0 64 65 72 46 6c 61 67 73 20 7c 3d 20 50 72 6f 76  derFlags |= Prov
250b0 69 64 65 72 46 6c 61 67 73 2e 44 69 64 45 66 36  iderFlags.DidEf6
250c0 46 6f 72 63 65 54 72 61 63 65 3b 0d 0a 20 20 20  ForceTrace;..   
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 72 65 74 75 72 6e            return
25100 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20   true;..        
25110 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
25120 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20             else 
25130 69 66 20 28 48 61 73 46 6c 61 67 73 28 50 72 6f  if (HasFlags(Pro
25140 76 69 64 65 72 46 6c 61 67 73 2e 46 6f 72 63 65  viderFlags.Force
25150 45 66 36 44 69 73 61 62 6c 65 64 2c 20 74 72 75  Ef6Disabled, tru
25160 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e))..           
25170 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
25180 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
25190 74 72 61 63 65 20 26 26 0d 0a 20 20 20 20 20 20  trace &&..      
251a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
251b0 20 20 21 48 61 73 46 6c 61 67 73 28 50 72 6f 76    !HasFlags(Prov
251c0 69 64 65 72 46 6c 61 67 73 2e 44 69 64 45 66 36  iderFlags.DidEf6
251d0 46 6f 72 63 65 54 72 61 63 65 2c 20 74 72 75 65  ForceTrace, true
251e0 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
251f0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
25200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25210 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75     TraceOps.Debu
25220 67 41 6e 64 54 72 61 63 65 28 54 72 61 63 65 50  gAndTrace(TraceP
25230 72 69 6f 72 69 74 79 2e 4d 65 64 69 75 6d 48 69  riority.MediumHi
25240 67 68 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  gh,..           
25250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25260 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20   debugCallback, 
25270 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 0d 0a  traceCallback,..
25280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25290 20 20 20 20 20 20 20 20 20 20 20 20 22 46 6f 72              "For
252a0 63 65 64 20 74 6f 20 64 69 73 61 62 6c 65 20 73  ced to disable s
252b0 75 70 70 6f 72 74 20 66 6f 72 20 5c 22 45 66 36  upport for \"Ef6
252c0 5c 22 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  \".",..         
252d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
252e0 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
252f0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
25300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70 72                pr
25310 6f 76 69 64 65 72 46 6c 61 67 73 20 7c 3d 20 50  oviderFlags |= P
25320 72 6f 76 69 64 65 72 46 6c 61 67 73 2e 44 69 64  roviderFlags.Did
25330 45 66 36 46 6f 72 63 65 54 72 61 63 65 3b 0d 0a  Ef6ForceTrace;..
25340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25350 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
25360 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
25370 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20  urn false;..    
25380 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
25390 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
253a0 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
253b0 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 52 65       // NOTE: Re
253c0 74 75 72 6e 20 6e 6f 6e 2d 7a 65 72 6f 20 69 66  turn non-zero if
253d0 20 74 68 65 20 53 79 73 74 65 6d 2e 44 61 74 61   the System.Data
253e0 2e 53 51 4c 69 74 65 2e 45 46 36 0d 0a 20 20 20  .SQLite.EF6..   
253f0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
25400 20 20 20 20 20 20 61 73 73 65 6d 62 6c 79 20 73        assembly s
25410 68 6f 75 6c 64 20 62 65 20 70 72 6f 63 65 73 73  hould be process
25420 65 64 20 64 75 72 69 6e 67 20 74 68 65 20 69 6e  ed during the in
25430 73 74 61 6c 6c 2e 0d 0a 20 20 20 20 20 20 20 20  stall...        
25440 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
25450 20 49 66 20 74 68 65 20 74 61 72 67 65 74 20 69   If the target i
25460 73 20 56 69 73 75 61 6c 20 53 74 75 64 69 6f 20  s Visual Studio 
25470 32 30 30 35 20 6f 72 20 56 69 73 75 61 6c 0d 0a  2005 or Visual..
25480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25490 2f 2f 20 20 20 20 20 20 20 53 74 75 64 69 6f 20  //       Studio 
254a0 32 30 30 38 2c 20 74 68 69 73 20 6d 75 73 74 20  2008, this must 
254b0 72 65 74 75 72 6e 20 7a 65 72 6f 2e 0d 0a 20 20  return zero...  
254c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
254d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
254e0 20 20 69 66 20 28 6e 6f 4e 65 74 46 78 34 30 20    if (noNetFx40 
254f0 26 26 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  &&..            
25500 20 20 20 20 20 20 20 20 6e 6f 4e 65 74 46 78 34          noNetFx4
25510 35 20 26 26 20 6e 6f 4e 65 74 46 78 34 35 31 20  5 && noNetFx451 
25520 26 26 20 6e 6f 4e 65 74 46 78 34 35 32 20 26 26  && noNetFx452 &&
25530 20 6e 6f 4e 65 74 46 78 34 36 20 26 26 0d 0a 20   noNetFx46 &&.. 
25540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25550 20 20 20 6e 6f 4e 65 74 46 78 34 36 31 20 26 26     noNetFx461 &&
25560 20 6e 6f 4e 65 74 46 78 34 36 32 20 26 26 20 6e   noNetFx462 && n
25570 6f 4e 65 74 46 78 34 37 29 0d 0a 20 20 20 20 20  oNetFx47)..     
25580 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
25590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
255a0 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
255b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
255c0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
255d0 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
255e0 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54            // NOT
255f0 45 3a 20 41 6c 73 6f 2c 20 69 66 20 74 68 65 20  E: Also, if the 
25600 45 46 36 20 63 6f 72 65 20 61 73 73 65 6d 62 6c  EF6 core assembl
25610 79 20 69 73 20 75 6e 61 76 61 69 6c 61 62 6c 65  y is unavailable
25620 2c 20 74 68 69 73 0d 0a 20 20 20 20 20 20 20 20  , this..        
25630 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
25640 20 6d 75 73 74 20 72 65 74 75 72 6e 20 7a 65 72   must return zer
25650 6f 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  o...            
25660 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
25670 20 20 20 20 20 20 20 20 69 66 20 28 21 49 73 53          if (!IsS
25680 79 73 74 65 6d 45 66 36 41 73 73 65 6d 62 6c 79  ystemEf6Assembly
25690 41 76 61 69 6c 61 62 6c 65 28 74 72 61 63 65 29  Available(trace)
256a0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
256b0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
256c0 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  lse;....        
256d0 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
256e0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e              // N
256f0 4f 54 45 3a 20 46 69 6e 61 6c 6c 79 2c 20 69 66  OTE: Finally, if
25700 20 74 68 65 20 45 46 36 20 63 6f 72 65 20 61 73   the EF6 core as
25710 73 65 6d 62 6c 79 20 69 73 20 6e 6f 74 20 61 76  sembly is not av
25720 61 69 6c 61 62 6c 65 0d 0a 20 20 20 20 20 20 20  ailable..       
25730 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
25740 20 20 67 6c 6f 62 61 6c 6c 79 20 5b 61 6e 64 20    globally [and 
25750 74 68 69 73 20 69 73 20 61 20 72 65 71 75 69 72  this is a requir
25760 65 6d 65 6e 74 20 66 6f 72 20 74 68 65 20 63 75  ement for the cu
25770 72 72 65 6e 74 0d 0a 20 20 20 20 20 20 20 20 20  rrent..         
25780 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
25790 69 6e 73 74 61 6c 6c 5d 2c 20 72 65 74 75 72 6e  install], return
257a0 20 7a 65 72 6f 2e 0d 0a 20 20 20 20 20 20 20 20   zero...        
257b0 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
257c0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
257d0 72 6e 20 48 61 73 46 6c 61 67 73 28 50 72 6f 76  rn HasFlags(Prov
257e0 69 64 65 72 46 6c 61 67 73 2e 53 79 73 74 65 6d  iderFlags.System
257f0 45 66 36 4d 75 73 74 42 65 47 6c 6f 62 61 6c 2c  Ef6MustBeGlobal,
25800 20 74 72 75 65 29 20 3f 0d 0a 20 20 20 20 20 20   true) ?..      
25810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 49 73                Is
25820 53 79 73 74 65 6d 45 66 36 41 73 73 65 6d 62 6c  SystemEf6Assembl
25830 79 47 6c 6f 62 61 6c 28 29 20 3a 20 74 72 75 65  yGlobal() : true
25840 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
25850 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
25860 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25870 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25880 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25890 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
258a0 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
258b0 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20     private bool 
258c0 49 73 45 66 36 41 73 73 65 6d 62 6c 79 47 6c 6f  IsEf6AssemblyGlo
258d0 62 61 6c 28 29 0d 0a 20 20 20 20 20 20 20 20 20  bal()..         
258e0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
258f0 20 20 20 20 20 20 69 66 20 28 65 66 36 41 73 73        if (ef6Ass
25900 65 6d 62 6c 79 4e 61 6d 65 20 3d 3d 20 6e 75 6c  emblyName == nul
25910 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
25920 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
25930 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  alse;....       
25940 20 20 20 20 20 20 20 20 20 41 73 73 65 6d 62 6c           Assembl
25950 79 20 61 73 73 65 6d 62 6c 79 20 3d 20 41 73 73  y assembly = Ass
25960 65 6d 62 6c 79 2e 52 65 66 6c 65 63 74 69 6f 6e  embly.Reflection
25970 4f 6e 6c 79 4c 6f 61 64 28 0d 0a 20 20 20 20 20  OnlyLoad(..     
25980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
25990 66 36 41 73 73 65 6d 62 6c 79 4e 61 6d 65 2e 54  f6AssemblyName.T
259a0 6f 53 74 72 69 6e 67 28 29 29 3b 0d 0a 0d 0a 20  oString());.... 
259b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
259c0 65 74 75 72 6e 20 28 61 73 73 65 6d 62 6c 79 20  eturn (assembly 
259d0 21 3d 20 6e 75 6c 6c 29 20 26 26 20 61 73 73 65  != null) && asse
259e0 6d 62 6c 79 2e 47 6c 6f 62 61 6c 41 73 73 65 6d  mbly.GlobalAssem
259f0 62 6c 79 43 61 63 68 65 3b 0d 0a 20 20 20 20 20  blyCache;..     
25a00 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
25a10 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
25a20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25a30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25a40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25a50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
25a60 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
25a70 63 20 62 6f 6f 6c 20 55 73 65 45 66 36 50 72 6f  c bool UseEf6Pro
25a80 76 69 64 65 72 28 0d 0a 20 20 20 20 20 20 20 20  vider(..        
25a90 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 74 72 61          bool tra
25aa0 63 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ce..            
25ab0 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20      )..         
25ac0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
25ad0 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
25ae0 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54            // NOT
25af0 45 3a 20 57 65 20 63 61 6e 6e 6f 74 20 75 73 65  E: We cannot use
25b00 20 74 68 65 20 45 46 36 20 61 73 73 65 6d 62 6c   the EF6 assembl
25b10 79 20 61 73 20 74 68 65 20 70 72 6f 76 69 64 65  y as the provide
25b20 72 20 69 66 20 69 74 0d 0a 20 20 20 20 20 20 20  r if it..       
25b30 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
25b40 20 20 69 73 20 6e 6f 74 20 73 75 70 70 6f 72 74    is not support
25b50 65 64 20 62 79 20 74 68 69 73 20 69 6e 73 74 61  ed by this insta
25b60 6c 6c 61 74 69 6f 6e 2e 0d 0a 20 20 20 20 20 20  llation...      
25b70 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
25b80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
25b90 20 28 21 49 73 45 66 36 53 75 70 70 6f 72 74 65   (!IsEf6Supporte
25ba0 64 28 74 72 61 63 65 29 29 0d 0a 20 20 20 20 20  d(trace))..     
25bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
25bc0 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a  eturn false;....
25bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25be0 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
25bf0 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 46 6f 72      // NOTE: For
25c00 20 74 68 65 20 45 46 36 20 61 73 73 65 6d 62 6c   the EF6 assembl
25c10 79 20 74 6f 20 62 65 20 75 73 61 62 6c 65 20 61  y to be usable a
25c20 73 20 61 20 70 72 6f 76 69 64 65 72 20 69 6e 0d  s a provider in.
25c30 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
25c40 20 2f 2f 20 20 20 20 20 20 20 74 68 65 20 6d 61   //       the ma
25c50 63 68 69 6e 65 20 63 6f 6e 66 69 67 75 72 61 74  chine configurat
25c60 69 6f 6e 20 66 69 6c 65 2c 20 69 74 20 6d 75 73  ion file, it mus
25c70 74 20 62 65 20 69 6e 20 74 68 65 0d 0a 20 20 20  t be in the..   
25c80 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
25c90 20 20 20 20 20 20 67 6c 6f 62 61 6c 20 61 73 73        global ass
25ca0 65 6d 62 6c 79 20 63 61 63 68 65 2e 0d 0a 20 20  embly cache...  
25cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
25cc0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
25cd0 20 20 72 65 74 75 72 6e 20 49 73 45 66 36 41 73    return IsEf6As
25ce0 73 65 6d 62 6c 79 47 6c 6f 62 61 6c 28 29 3b 0d  semblyGlobal();.
25cf0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
25d00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
25d10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25d20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25d30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25d40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25d50 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
25d60 20 2f 2a 20 52 45 51 55 49 52 45 44 20 2a 2f 0d   /* REQUIRED */.
25d70 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
25d80 6c 69 63 20 41 73 73 65 6d 62 6c 79 4e 61 6d 65  lic AssemblyName
25d90 20 47 65 74 43 6f 72 65 41 73 73 65 6d 62 6c 79   GetCoreAssembly
25da0 4e 61 6d 65 28 0d 0a 20 20 20 20 20 20 20 20 20  Name(..         
25db0 20 20 20 20 20 20 20 62 6f 6f 6c 20 74 72 61 63         bool trac
25dc0 65 20 2f 2a 20 4e 4f 54 20 55 53 45 44 20 2a 2f  e /* NOT USED */
25dd0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
25de0 20 20 29 20 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d    ) /* throw */.
25df0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
25e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25e10 69 66 20 28 63 6f 72 65 41 73 73 65 6d 62 6c 79  if (coreAssembly
25e20 4e 61 6d 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  Name == null).. 
25e30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
25e40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
25e50 20 20 20 20 20 20 63 6f 72 65 41 73 73 65 6d 62        coreAssemb
25e60 6c 79 4e 61 6d 65 20 3d 20 41 73 73 65 6d 62 6c  lyName = Assembl
25e70 79 4e 61 6d 65 2e 47 65 74 41 73 73 65 6d 62 6c  yName.GetAssembl
25e80 79 4e 61 6d 65 28 0d 0a 20 20 20 20 20 20 20 20  yName(..        
25e90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25ea0 43 6f 72 65 46 69 6c 65 4e 61 6d 65 29 3b 20 2f  CoreFileName); /
25eb0 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a 20 20 20 20  * throw */..    
25ec0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
25ed0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
25ee0 20 72 65 74 75 72 6e 20 63 6f 72 65 41 73 73 65   return coreAsse
25ef0 6d 62 6c 79 4e 61 6d 65 3b 0d 0a 20 20 20 20 20  mblyName;..     
25f00 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
25f10 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
25f20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25f30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25f40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25f50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
25f60 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 50             /* OP
25f70 54 49 4f 4e 41 4c 20 2a 2f 0d 0a 20 20 20 20 20  TIONAL */..     
25f80 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 41 73         public As
25f90 73 65 6d 62 6c 79 4e 61 6d 65 20 47 65 74 4c 69  semblyName GetLi
25fa0 6e 71 41 73 73 65 6d 62 6c 79 4e 61 6d 65 28 0d  nqAssemblyName(.
25fb0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
25fc0 20 62 6f 6f 6c 20 74 72 61 63 65 0d 0a 20 20 20   bool trace..   
25fd0 20 20 20 20 20 20 20 20 20 20 20 20 20 29 20 2f               ) /
25fe0 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a 20 20 20 20  * throw */..    
25ff0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
26000 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 49             if (I
26010 73 4c 69 6e 71 53 75 70 70 6f 72 74 65 64 28 74  sLinqSupported(t
26020 72 61 63 65 29 20 26 26 20 28 6c 69 6e 71 41 73  race) && (linqAs
26030 73 65 6d 62 6c 79 4e 61 6d 65 20 3d 3d 20 6e 75  semblyName == nu
26040 6c 6c 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ll))..          
26050 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
26060 20 20 20 20 20 20 20 20 20 20 20 20 20 6c 69 6e               lin
26070 71 41 73 73 65 6d 62 6c 79 4e 61 6d 65 20 3d 20  qAssemblyName = 
26080 41 73 73 65 6d 62 6c 79 4e 61 6d 65 2e 47 65 74  AssemblyName.Get
26090 41 73 73 65 6d 62 6c 79 4e 61 6d 65 28 0d 0a 20  AssemblyName(.. 
260a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
260b0 20 20 20 20 20 20 20 4c 69 6e 71 46 69 6c 65 4e         LinqFileN
260c0 61 6d 65 29 3b 20 2f 2a 20 74 68 72 6f 77 20 2a  ame); /* throw *
260d0 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
260e0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
260f0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6c          return l
26100 69 6e 71 41 73 73 65 6d 62 6c 79 4e 61 6d 65 3b  inqAssemblyName;
26110 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
26120 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
26130 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26140 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26150 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26160 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26170 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
26180 20 20 2f 2a 20 4f 50 54 49 4f 4e 41 4c 20 2a 2f    /* OPTIONAL */
26190 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
261a0 62 6c 69 63 20 41 73 73 65 6d 62 6c 79 4e 61 6d  blic AssemblyNam
261b0 65 20 47 65 74 45 66 36 41 73 73 65 6d 62 6c 79  e GetEf6Assembly
261c0 4e 61 6d 65 28 0d 0a 20 20 20 20 20 20 20 20 20  Name(..         
261d0 20 20 20 20 20 20 20 62 6f 6f 6c 20 74 72 61 63         bool trac
261e0 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e..             
261f0 20 20 20 29 20 2f 2a 20 74 68 72 6f 77 20 2a 2f     ) /* throw */
26200 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
26210 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
26220 20 69 66 20 28 49 73 45 66 36 53 75 70 70 6f 72   if (IsEf6Suppor
26230 74 65 64 28 74 72 61 63 65 29 20 26 26 20 28 65  ted(trace) && (e
26240 66 36 41 73 73 65 6d 62 6c 79 4e 61 6d 65 20 3d  f6AssemblyName =
26250 3d 20 6e 75 6c 6c 29 29 0d 0a 20 20 20 20 20 20  = null))..      
26260 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
26270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26280 20 65 66 36 41 73 73 65 6d 62 6c 79 4e 61 6d 65   ef6AssemblyName
26290 20 3d 20 41 73 73 65 6d 62 6c 79 4e 61 6d 65 2e   = AssemblyName.
262a0 47 65 74 41 73 73 65 6d 62 6c 79 4e 61 6d 65 28  GetAssemblyName(
262b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
262c0 20 20 20 20 20 20 20 20 20 20 45 66 36 46 69 6c            Ef6Fil
262d0 65 4e 61 6d 65 29 3b 20 2f 2a 20 74 68 72 6f 77  eName); /* throw
262e0 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   */..           
262f0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
26300 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
26310 20 65 66 36 41 73 73 65 6d 62 6c 79 4e 61 6d 65   ef6AssemblyName
26320 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
26330 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
26340 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26350 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26360 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26370 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26380 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
26390 20 20 20 2f 2a 20 52 45 51 55 49 52 45 44 20 2a     /* REQUIRED *
263a0 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  /..            p
263b0 75 62 6c 69 63 20 41 73 73 65 6d 62 6c 79 4e 61  ublic AssemblyNa
263c0 6d 65 20 47 65 74 44 65 73 69 67 6e 65 72 41 73  me GetDesignerAs
263d0 73 65 6d 62 6c 79 4e 61 6d 65 28 0d 0a 20 20 20  semblyName(..   
263e0 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f               boo
263f0 6c 20 74 72 61 63 65 20 2f 2a 20 4e 4f 54 20 55  l trace /* NOT U
26400 53 45 44 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20  SED */..        
26410 20 20 20 20 20 20 20 20 29 20 2f 2a 20 74 68 72          ) /* thr
26420 6f 77 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20  ow */..         
26430 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
26440 20 20 20 20 20 20 69 66 20 28 64 65 73 69 67 6e        if (design
26450 65 72 41 73 73 65 6d 62 6c 79 4e 61 6d 65 20 3d  erAssemblyName =
26460 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
26470 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
26480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26490 64 65 73 69 67 6e 65 72 41 73 73 65 6d 62 6c 79  designerAssembly
264a0 4e 61 6d 65 20 3d 20 41 73 73 65 6d 62 6c 79 4e  Name = AssemblyN
264b0 61 6d 65 2e 47 65 74 41 73 73 65 6d 62 6c 79 4e  ame.GetAssemblyN
264c0 61 6d 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ame(..          
264d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 44 65                De
264e0 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65 29 3b  signerFileName);
264f0 20 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a 20 20   /* throw */..  
26500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
26510 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
26520 20 20 20 72 65 74 75 72 6e 20 64 65 73 69 67 6e     return design
26530 65 72 41 73 73 65 6d 62 6c 79 4e 61 6d 65 3b 0d  erAssemblyName;.
26540 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
26550 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
26560 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26570 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26580 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26590 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
265a0 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
265b0 20 2f 2a 20 52 45 51 55 49 52 45 44 20 2a 2f 0d   /* REQUIRED */.
265c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
265d0 6c 69 63 20 41 73 73 65 6d 62 6c 79 4e 61 6d 65  lic AssemblyName
265e0 20 47 65 74 50 72 6f 76 69 64 65 72 41 73 73 65   GetProviderAsse
265f0 6d 62 6c 79 4e 61 6d 65 28 0d 0a 20 20 20 20 20  mblyName(..     
26600 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
26610 74 72 61 63 65 0d 0a 20 20 20 20 20 20 20 20 20  trace..         
26620 20 20 20 20 20 20 20 29 20 2f 2a 20 74 68 72 6f         ) /* thro
26630 77 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20  w */..          
26640 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
26650 20 20 20 20 20 72 65 74 75 72 6e 20 55 73 65 45       return UseE
26660 66 36 50 72 6f 76 69 64 65 72 28 74 72 61 63 65  f6Provider(trace
26670 29 20 3f 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ) ?..           
26680 20 20 20 20 20 20 20 20 20 47 65 74 45 66 36 41           GetEf6A
26690 73 73 65 6d 62 6c 79 4e 61 6d 65 28 74 72 61 63  ssemblyName(trac
266a0 65 29 20 3a 20 47 65 74 43 6f 72 65 41 73 73 65  e) : GetCoreAsse
266b0 6d 62 6c 79 4e 61 6d 65 28 74 72 61 63 65 29 3b  mblyName(trace);
266c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
266d0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
266e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
26730 20 20 70 75 62 6c 69 63 20 73 74 72 69 6e 67 20    public string 
26740 47 65 74 43 6f 6e 66 69 67 49 6e 76 61 72 69 61  GetConfigInvaria
26750 6e 74 4e 61 6d 65 28 0d 0a 20 20 20 20 20 20 20  ntName(..       
26760 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 74 72           bool tr
26770 61 63 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ace..           
26780 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
26790 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
267a0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 47 65         return Ge
267b0 74 49 6e 76 61 72 69 61 6e 74 4e 61 6d 65 28 74  tInvariantName(t
267c0 72 61 63 65 29 3b 0d 0a 20 20 20 20 20 20 20 20  race);..        
267d0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
267e0 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
267f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26800 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26810 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26820 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
26830 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73          public s
26840 74 72 69 6e 67 20 47 65 74 50 72 6f 76 69 64 65  tring GetProvide
26850 72 49 6e 76 61 72 69 61 6e 74 4e 61 6d 65 28 0d  rInvariantName(.
26860 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
26870 20 62 6f 6f 6c 20 74 72 61 63 65 0d 0a 20 20 20   bool trace..   
26880 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a               )..
26890 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
268a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
268b0 65 74 75 72 6e 20 47 65 74 49 6e 76 61 72 69 61  eturn GetInvaria
268c0 6e 74 4e 61 6d 65 28 74 72 61 63 65 29 3b 0d 0a  ntName(trace);..
268d0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
268e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
268f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26900 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26910 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26920 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26930 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
26940 70 75 62 6c 69 63 20 73 74 72 69 6e 67 20 47 65  public string Ge
26950 74 46 61 63 74 6f 72 79 54 79 70 65 4e 61 6d 65  tFactoryTypeName
26960 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
26970 20 20 20 62 6f 6f 6c 20 74 72 61 63 65 0d 0a 20     bool trace.. 
26980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29                 )
26990 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
269a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
269b0 20 72 65 74 75 72 6e 20 55 73 65 45 66 36 50 72   return UseEf6Pr
269c0 6f 76 69 64 65 72 28 74 72 61 63 65 29 20 3f 0d  ovider(trace) ?.
269d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
269e0 20 20 20 20 20 45 66 36 46 61 63 74 6f 72 79 54       Ef6FactoryT
269f0 79 70 65 4e 61 6d 65 20 3a 20 46 61 63 74 6f 72  ypeName : Factor
26a00 79 54 79 70 65 4e 61 6d 65 3b 0d 0a 20 20 20 20  yTypeName;..    
26a10 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
26a20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
26a30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26a40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26a50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26a60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
26a70 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
26a80 69 63 20 76 6f 69 64 20 44 75 6d 70 28 0d 0a 20  ic void Dump(.. 
26a90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
26aa0 72 61 63 65 43 61 6c 6c 62 61 63 6b 20 74 72 61  raceCallback tra
26ab0 63 65 43 61 6c 6c 62 61 63 6b 0d 0a 20 20 20 20  ceCallback..    
26ac0 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
26ad0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
26ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
26af0 20 28 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 20   (traceCallback 
26b00 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  != null)..      
26b10 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
26b20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26b30 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53   traceCallback(S
26b40 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d  tring.Format(Nam
26b50 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c  eAndValueFormat,
26b60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
26b70 20 20 20 20 20 20 20 20 20 20 22 41 73 73 65 6d            "Assem
26b80 62 6c 79 22 2c 20 46 6f 72 44 69 73 70 6c 61 79  bly", ForDisplay
26b90 28 61 73 73 65 6d 62 6c 79 29 29 2c 0d 0a 20 20  (assembly)),..  
26ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26bb0 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67        traceCateg
26bc0 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
26bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
26be0 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e  ceCallback(Strin
26bf0 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64  g.Format(NameAnd
26c00 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20  ValueFormat,..  
26c10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26c20 20 20 20 20 20 20 22 4c 6f 67 46 69 6c 65 4e 61        "LogFileNa
26c30 6d 65 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28  me", ForDisplay(
26c40 6c 6f 67 46 69 6c 65 4e 61 6d 65 29 29 2c 0d 0a  logFileName)),..
26c50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26c60 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74          traceCat
26c70 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20  egory);....     
26c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
26c90 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72  raceCallback(Str
26ca0 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41  ing.Format(NameA
26cb0 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a  ndValueFormat,..
26cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26cd0 20 20 20 20 20 20 20 20 22 44 69 72 65 63 74 6f          "Directo
26ce0 72 79 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28  ry", ForDisplay(
26cf0 64 69 72 65 63 74 6f 72 79 29 29 2c 0d 0a 20 20  directory)),..  
26d00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26d10 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67        traceCateg
26d20 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
26d30 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
26d40 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e  ceCallback(Strin
26d50 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64  g.Format(NameAnd
26d60 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20  ValueFormat,..  
26d70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26d80 20 20 20 20 20 20 22 43 6f 72 65 46 69 6c 65 4e        "CoreFileN
26d90 61 6d 65 22 2c 20 46 6f 72 44 69 73 70 6c 61 79  ame", ForDisplay
26da0 28 63 6f 72 65 46 69 6c 65 4e 61 6d 65 29 29 2c  (coreFileName)),
26db0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
26dc0 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
26dd0 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20  ategory);....   
26de0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26df0 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53   traceCallback(S
26e00 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d  tring.Format(Nam
26e10 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c  eAndValueFormat,
26e20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
26e30 20 20 20 20 20 20 20 20 20 20 22 4c 69 6e 71 46            "LinqF
26e40 69 6c 65 4e 61 6d 65 22 2c 20 46 6f 72 44 69 73  ileName", ForDis
26e50 70 6c 61 79 28 6c 69 6e 71 46 69 6c 65 4e 61 6d  play(linqFileNam
26e60 65 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  e)),..          
26e70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
26e80 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d  aceCategory);...
26e90 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
26ea0 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61       traceCallba
26eb0 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  ck(String.Format
26ec0 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72  (NameAndValueFor
26ed0 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  mat,..          
26ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 45                "E
26ef0 66 36 46 69 6c 65 4e 61 6d 65 22 2c 20 46 6f 72  f6FileName", For
26f00 44 69 73 70 6c 61 79 28 65 66 36 46 69 6c 65 4e  Display(ef6FileN
26f10 61 6d 65 29 29 2c 0d 0a 20 20 20 20 20 20 20 20  ame)),..        
26f20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26f30 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
26f40 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
26f50 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c         traceCall
26f60 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d  back(String.Form
26f70 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46  at(NameAndValueF
26f80 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20  ormat,..        
26f90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26fa0 22 44 65 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d  "DesignerFileNam
26fb0 65 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 64  e", ForDisplay(d
26fc0 65 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65 29  esignerFileName)
26fd0 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
26fe0 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
26ff0 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20  eCategory);.... 
27000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27010 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b     traceCallback
27020 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e  (String.Format(N
27030 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61  ameAndValueForma
27040 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t,..            
27050 20 20 20 20 20 20 20 20 20 20 20 20 22 52 65 67              "Reg
27060 69 73 74 72 79 56 65 72 73 69 6f 6e 22 2c 20 46  istryVersion", F
27070 6f 72 44 69 73 70 6c 61 79 28 72 65 67 69 73 74  orDisplay(regist
27080 72 79 56 65 72 73 69 6f 6e 29 29 2c 0d 0a 20 20  ryVersion)),..  
27090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
270a0 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67        traceCateg
270b0 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
270c0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
270d0 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e  ceCallback(Strin
270e0 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64  g.Format(NameAnd
270f0 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20  ValueFormat,..  
27100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27110 20 20 20 20 20 20 22 43 6f 6e 66 69 67 56 65 72        "ConfigVer
27120 73 69 6f 6e 22 2c 20 46 6f 72 44 69 73 70 6c 61  sion", ForDispla
27130 79 28 63 6f 6e 66 69 67 56 65 72 73 69 6f 6e 29  y(configVersion)
27140 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
27150 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
27160 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20  eCategory);.... 
27170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27180 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b     traceCallback
27190 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e  (String.Format(N
271a0 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61  ameAndValueForma
271b0 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t,..            
271c0 20 20 20 20 20 20 20 20 20 20 20 20 22 56 73 56              "VsV
271d0 65 72 73 69 6f 6e 53 75 66 66 69 78 22 2c 20 46  ersionSuffix", F
271e0 6f 72 44 69 73 70 6c 61 79 28 76 73 56 65 72 73  orDisplay(vsVers
271f0 69 6f 6e 53 75 66 66 69 78 29 29 2c 0d 0a 20 20  ionSuffix)),..  
27200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27210 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67        traceCateg
27220 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
27230 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
27240 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e  ceCallback(Strin
27250 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64  g.Format(NameAnd
27260 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20  ValueFormat,..  
27270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27280 20 20 20 20 20 20 22 44 65 62 75 67 46 6f 72 6d        "DebugForm
27290 61 74 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28  at", ForDisplay(
272a0 64 65 62 75 67 46 6f 72 6d 61 74 29 29 2c 0d 0a  debugFormat)),..
272b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
272c0 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74          traceCat
272d0 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20  egory);....     
272e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
272f0 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72  raceCallback(Str
27300 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41  ing.Format(NameA
27310 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a  ndValueFormat,..
27320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27330 20 20 20 20 20 20 20 20 22 54 72 61 63 65 46 6f          "TraceFo
27340 72 6d 61 74 22 2c 20 46 6f 72 44 69 73 70 6c 61  rmat", ForDispla
27350 79 28 74 72 61 63 65 46 6f 72 6d 61 74 29 29 2c  y(traceFormat)),
27360 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
27370 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
27380 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20  ategory);....   
27390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
273a0 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53   traceCallback(S
273b0 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d  tring.Format(Nam
273c0 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c  eAndValueFormat,
273d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
273e0 20 20 20 20 20 20 20 20 20 20 22 49 6e 73 74 61            "Insta
273f0 6c 6c 46 6c 61 67 73 22 2c 20 46 6f 72 44 69 73  llFlags", ForDis
27400 70 6c 61 79 28 69 6e 73 74 61 6c 6c 46 6c 61 67  play(installFlag
27410 73 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  s)),..          
27420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
27430 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d  aceCategory);...
27440 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
27450 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61       traceCallba
27460 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  ck(String.Format
27470 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72  (NameAndValueFor
27480 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  mat,..          
27490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 50                "P
274a0 72 6f 76 69 64 65 72 46 6c 61 67 73 22 2c 20 46  roviderFlags", F
274b0 6f 72 44 69 73 70 6c 61 79 28 70 72 6f 76 69 64  orDisplay(provid
274c0 65 72 46 6c 61 67 73 29 29 2c 0d 0a 20 20 20 20  erFlags)),..    
274d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
274e0 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72      traceCategor
274f0 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
27500 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
27510 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e  Callback(String.
27520 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61  Format(NameAndVa
27530 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20  lueFormat,..    
27540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27550 20 20 20 20 22 44 65 62 75 67 50 72 69 6f 72 69      "DebugPriori
27560 74 79 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28  ty", ForDisplay(
27570 64 65 62 75 67 50 72 69 6f 72 69 74 79 29 29 2c  debugPriority)),
27580 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
27590 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
275a0 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20  ategory);....   
275b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
275c0 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53   traceCallback(S
275d0 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d  tring.Format(Nam
275e0 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c  eAndValueFormat,
275f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
27600 20 20 20 20 20 20 20 20 20 20 22 54 72 61 63 65            "Trace
27610 50 72 69 6f 72 69 74 79 22 2c 20 46 6f 72 44 69  Priority", ForDi
27620 73 70 6c 61 79 28 74 72 61 63 65 50 72 69 6f 72  splay(tracePrior
27630 69 74 79 29 29 2c 0d 0a 20 20 20 20 20 20 20 20  ity)),..        
27640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27650 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
27660 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
27670 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c         traceCall
27680 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d  back(String.Form
27690 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46  at(NameAndValueF
276a0 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20  ormat,..        
276b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
276c0 22 50 65 72 55 73 65 72 22 2c 20 46 6f 72 44 69  "PerUser", ForDi
276d0 73 70 6c 61 79 28 70 65 72 55 73 65 72 29 29 2c  splay(perUser)),
276e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
276f0 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
27700 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20  ategory);....   
27710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27720 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53   traceCallback(S
27730 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d  tring.Format(Nam
27740 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c  eAndValueFormat,
27750 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
27760 20 20 20 20 20 20 20 20 20 20 22 49 6e 73 74 61            "Insta
27770 6c 6c 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28  ll", ForDisplay(
27780 69 6e 73 74 61 6c 6c 29 29 2c 0d 0a 20 20 20 20  install)),..    
27790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
277a0 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72      traceCategor
277b0 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
277c0 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
277d0 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e  Callback(String.
277e0 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61  Format(NameAndVa
277f0 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20  lueFormat,..    
27800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27810 20 20 20 20 22 57 6f 77 36 34 22 2c 20 46 6f 72      "Wow64", For
27820 44 69 73 70 6c 61 79 28 77 6f 77 36 34 29 29 2c  Display(wow64)),
27830 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
27840 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
27850 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20  ategory);....   
27860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27870 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53   traceCallback(S
27880 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d  tring.Format(Nam
27890 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c  eAndValueFormat,
278a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
278b0 20 20 20 20 20 20 20 20 20 20 22 4e 6f 52 75 6e            "NoRun
278c0 74 69 6d 65 56 65 72 73 69 6f 6e 22 2c 20 46 6f  timeVersion", Fo
278d0 72 44 69 73 70 6c 61 79 28 6e 6f 52 75 6e 74 69  rDisplay(noRunti
278e0 6d 65 56 65 72 73 69 6f 6e 29 29 2c 0d 0a 20 20  meVersion)),..  
278f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27900 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67        traceCateg
27910 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
27920 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
27930 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e  ceCallback(Strin
27940 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64  g.Format(NameAnd
27950 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20  ValueFormat,..  
27960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27970 20 20 20 20 20 20 22 4e 6f 44 65 73 6b 74 6f 70        "NoDesktop
27980 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 6e 6f  ", ForDisplay(no
27990 44 65 73 6b 74 6f 70 29 29 2c 0d 0a 20 20 20 20  Desktop)),..    
279a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
279b0 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72      traceCategor
279c0 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
279d0 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
279e0 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e  Callback(String.
279f0 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61  Format(NameAndVa
27a00 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20  lueFormat,..    
27a10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27a20 20 20 20 20 22 4e 6f 43 6f 6d 70 61 63 74 22 2c      "NoCompact",
27a30 20 46 6f 72 44 69 73 70 6c 61 79 28 6e 6f 43 6f   ForDisplay(noCo
27a40 6d 70 61 63 74 29 29 2c 0d 0a 20 20 20 20 20 20  mpact)),..      
27a50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27a60 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29    traceCategory)
27a70 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
27a80 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
27a90 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f  llback(String.Fo
27aa0 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75  rmat(NameAndValu
27ab0 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20  eFormat,..      
27ac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27ad0 20 20 22 4e 6f 4e 65 74 46 78 32 30 22 2c 20 46    "NoNetFx20", F
27ae0 6f 72 44 69 73 70 6c 61 79 28 6e 6f 4e 65 74 46  orDisplay(noNetF
27af0 78 32 30 29 29 2c 0d 0a 20 20 20 20 20 20 20 20  x20)),..        
27b00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27b10 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
27b20 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
27b30 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c         traceCall
27b40 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d  back(String.Form
27b50 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46  at(NameAndValueF
27b60 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20  ormat,..        
27b70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27b80 22 4e 6f 4e 65 74 46 78 33 35 22 2c 20 46 6f 72  "NoNetFx35", For
27b90 44 69 73 70 6c 61 79 28 6e 6f 4e 65 74 46 78 33  Display(noNetFx3
27ba0 35 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  5)),..          
27bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
27bc0 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d  aceCategory);...
27bd0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
27be0 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61       traceCallba
27bf0 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  ck(String.Format
27c00 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72  (NameAndValueFor
27c10 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  mat,..          
27c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 4e                "N
27c30 6f 4e 65 74 46 78 34 30 22 2c 20 46 6f 72 44 69  oNetFx40", ForDi
27c40 73 70 6c 61 79 28 6e 6f 4e 65 74 46 78 34 30 29  splay(noNetFx40)
27c50 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
27c60 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
27c70 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20  eCategory);.... 
27c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27c90 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b     traceCallback
27ca0 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e  (String.Format(N
27cb0 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61  ameAndValueForma
27cc0 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t,..            
27cd0 20 20 20 20 20 20 20 20 20 20 20 20 22 4e 6f 4e              "NoN
27ce0 65 74 46 78 34 35 22 2c 20 46 6f 72 44 69 73 70  etFx45", ForDisp
27cf0 6c 61 79 28 6e 6f 4e 65 74 46 78 34 35 29 29 2c  lay(noNetFx45)),
27d00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
27d10 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
27d20 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20  ategory);....   
27d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27d40 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53   traceCallback(S
27d50 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d  tring.Format(Nam
27d60 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c  eAndValueFormat,
27d70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
27d80 20 20 20 20 20 20 20 20 20 20 22 4e 6f 4e 65 74            "NoNet
27d90 46 78 34 35 31 22 2c 20 46 6f 72 44 69 73 70 6c  Fx451", ForDispl
27da0 61 79 28 6e 6f 4e 65 74 46 78 34 35 31 29 29 2c  ay(noNetFx451)),
27db0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
27dc0 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
27dd0 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20  ategory);....   
27de0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27df0 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53   traceCallback(S
27e00 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d  tring.Format(Nam
27e10 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c  eAndValueFormat,
27e20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
27e30 20 20 20 20 20 20 20 20 20 20 22 4e 6f 4e 65 74            "NoNet
27e40 46 78 34 35 32 22 2c 20 46 6f 72 44 69 73 70 6c  Fx452", ForDispl
27e50 61 79 28 6e 6f 4e 65 74 46 78 34 35 32 29 29 2c  ay(noNetFx452)),
27e60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
27e70 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
27e80 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20  ategory);....   
27e90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27ea0 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53   traceCallback(S
27eb0 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d  tring.Format(Nam
27ec0 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c  eAndValueFormat,
27ed0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
27ee0 20 20 20 20 20 20 20 20 20 20 22 4e 6f 4e 65 74            "NoNet
27ef0 46 78 34 36 22 2c 20 46 6f 72 44 69 73 70 6c 61  Fx46", ForDispla
27f00 79 28 6e 6f 4e 65 74 46 78 34 36 29 29 2c 0d 0a  y(noNetFx46)),..
27f10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27f20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74          traceCat
27f30 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20  egory);....     
27f40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
27f50 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72  raceCallback(Str
27f60 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41  ing.Format(NameA
27f70 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a  ndValueFormat,..
27f80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27f90 20 20 20 20 20 20 20 20 22 4e 6f 4e 65 74 46 78          "NoNetFx
27fa0 34 36 31 22 2c 20 46 6f 72 44 69 73 70 6c 61 79  461", ForDisplay
27fb0 28 6e 6f 4e 65 74 46 78 34 36 31 29 29 2c 0d 0a  (noNetFx461)),..
27fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27fd0 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74          traceCat
27fe0 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20  egory);....     
27ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
28000 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72  raceCallback(Str
28010 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41  ing.Format(NameA
28020 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a  ndValueFormat,..
28030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28040 20 20 20 20 20 20 20 20 22 4e 6f 4e 65 74 46 78          "NoNetFx
28050 34 36 32 22 2c 20 46 6f 72 44 69 73 70 6c 61 79  462", ForDisplay
28060 28 6e 6f 4e 65 74 46 78 34 36 32 29 29 2c 0d 0a  (noNetFx462)),..
28070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28080 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74          traceCat
28090 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20  egory);....     
280a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
280b0 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72  raceCallback(Str
280c0 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41  ing.Format(NameA
280d0 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a  ndValueFormat,..
280e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
280f0 20 20 20 20 20 20 20 20 22 4e 6f 4e 65 74 46 78          "NoNetFx
28100 34 37 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28  47", ForDisplay(
28110 6e 6f 4e 65 74 46 78 34 37 29 29 2c 0d 0a 20 20  noNetFx47)),..  
28120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28130 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67        traceCateg
28140 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
28150 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
28160 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e  ceCallback(Strin
28170 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64  g.Format(NameAnd
28180 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20  ValueFormat,..  
28190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
281a0 20 20 20 20 20 20 22 4e 6f 56 73 32 30 30 35 22        "NoVs2005"
281b0 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 6e 6f 56  , ForDisplay(noV
281c0 73 32 30 30 35 29 29 2c 0d 0a 20 20 20 20 20 20  s2005)),..      
281d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
281e0 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29    traceCategory)
281f0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
28200 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
28210 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f  llback(String.Fo
28220 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75  rmat(NameAndValu
28230 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20  eFormat,..      
28240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28250 20 20 22 4e 6f 56 73 32 30 30 38 22 2c 20 46 6f    "NoVs2008", Fo
28260 72 44 69 73 70 6c 61 79 28 6e 6f 56 73 32 30 30  rDisplay(noVs200
28270 38 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  8)),..          
28280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
28290 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d  aceCategory);...
282a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
282b0 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61       traceCallba
282c0 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  ck(String.Format
282d0 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72  (NameAndValueFor
282e0 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  mat,..          
282f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 4e                "N
28300 6f 56 73 32 30 31 30 22 2c 20 46 6f 72 44 69 73  oVs2010", ForDis
28310 70 6c 61 79 28 6e 6f 56 73 32 30 31 30 29 29 2c  play(noVs2010)),
28320 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
28330 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
28340 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20  ategory);....   
28350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28360 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53   traceCallback(S
28370 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d  tring.Format(Nam
28380 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c  eAndValueFormat,
28390 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
283a0 20 20 20 20 20 20 20 20 20 20 22 4e 6f 56 73 32            "NoVs2
283b0 30 31 32 22 2c 20 46 6f 72 44 69 73 70 6c 61 79  012", ForDisplay
283c0 28 6e 6f 56 73 32 30 31 32 29 29 2c 0d 0a 20 20  (noVs2012)),..  
283d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
283e0 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67        traceCateg
283f0 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
28400 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
28410 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e  ceCallback(Strin
28420 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64  g.Format(NameAnd
28430 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20  ValueFormat,..  
28440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28450 20 20 20 20 20 20 22 4e 6f 56 73 32 30 31 33 22        "NoVs2013"
28460 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 6e 6f 56  , ForDisplay(noV
28470 73 32 30 31 33 29 29 2c 0d 0a 20 20 20 20 20 20  s2013)),..      
28480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28490 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29    traceCategory)
284a0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
284b0 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
284c0 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f  llback(String.Fo
284d0 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75  rmat(NameAndValu
284e0 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20  eFormat,..      
284f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28500 20 20 22 4e 6f 56 73 32 30 31 35 22 2c 20 46 6f    "NoVs2015", Fo
28510 72 44 69 73 70 6c 61 79 28 6e 6f 56 73 32 30 31  rDisplay(noVs201
28520 35 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  5)),..          
28530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
28540 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d  aceCategory);...
28550 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
28560 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61       traceCallba
28570 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  ck(String.Format
28580 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72  (NameAndValueFor
28590 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  mat,..          
285a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 4e                "N
285b0 6f 56 73 32 30 31 37 22 2c 20 46 6f 72 44 69 73  oVs2017", ForDis
285c0 70 6c 61 79 28 6e 6f 56 73 32 30 31 37 29 29 2c  play(noVs2017)),
285d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
285e0 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
285f0 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20  ategory);....   
28600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28610 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53   traceCallback(S
28620 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d  tring.Format(Nam
28630 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c  eAndValueFormat,
28640 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
28650 20 20 20 20 20 20 20 20 20 20 22 4e 6f 54 72 61            "NoTra
28660 63 65 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28  ce", ForDisplay(
28670 6e 6f 54 72 61 63 65 29 29 2c 0d 0a 20 20 20 20  noTrace)),..    
28680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28690 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72      traceCategor
286a0 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
286b0 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
286c0 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e  Callback(String.
286d0 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61  Format(NameAndVa
286e0 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20  lueFormat,..    
286f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28700 20 20 20 20 22 4e 6f 43 6f 6e 73 6f 6c 65 22 2c      "NoConsole",
28710 20 46 6f 72 44 69 73 70 6c 61 79 28 6e 6f 43 6f   ForDisplay(noCo
28720 6e 73 6f 6c 65 29 29 2c 0d 0a 20 20 20 20 20 20  nsole)),..      
28730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28740 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29    traceCategory)
28750 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
28760 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
28770 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f  llback(String.Fo
28780 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75  rmat(NameAndValu
28790 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20  eFormat,..      
287a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
287b0 20 20 22 4e 6f 4c 6f 67 22 2c 20 46 6f 72 44 69    "NoLog", ForDi
287c0 73 70 6c 61 79 28 6e 6f 4c 6f 67 29 29 2c 0d 0a  splay(noLog)),..
287d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
287e0 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74          traceCat
287f0 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20  egory);....     
28800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
28810 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72  raceCallback(Str
28820 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41  ing.Format(NameA
28830 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a  ndValueFormat,..
28840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28850 20 20 20 20 20 20 20 20 22 54 68 72 6f 77 4f 6e          "ThrowOn
28860 4d 69 73 73 69 6e 67 22 2c 20 46 6f 72 44 69 73  Missing", ForDis
28870 70 6c 61 79 28 74 68 72 6f 77 4f 6e 4d 69 73 73  play(throwOnMiss
28880 69 6e 67 29 29 2c 0d 0a 20 20 20 20 20 20 20 20  ing)),..        
28890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
288a0 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
288b0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
288c0 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c         traceCall
288d0 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d  back(String.Form
288e0 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46  at(NameAndValueF
288f0 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20  ormat,..        
28900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28910 22 57 68 61 74 49 66 22 2c 20 46 6f 72 44 69 73  "WhatIf", ForDis
28920 70 6c 61 79 28 77 68 61 74 49 66 29 29 2c 0d 0a  play(whatIf)),..
28930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28940 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74          traceCat
28950 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20  egory);....     
28960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
28970 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72  raceCallback(Str
28980 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41  ing.Format(NameA
28990 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a  ndValueFormat,..
289a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
289b0 20 20 20 20 20 20 20 20 22 44 65 62 75 67 22 2c          "Debug",
289c0 20 46 6f 72 44 69 73 70 6c 61 79 28 64 65 62 75   ForDisplay(debu
289d0 67 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  g)),..          
289e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
289f0 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d  aceCategory);...
28a00 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
28a10 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61       traceCallba
28a20 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  ck(String.Format
28a30 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72  (NameAndValueFor
28a40 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  mat,..          
28a50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 56                "V
28a60 65 72 62 6f 73 65 22 2c 20 46 6f 72 44 69 73 70  erbose", ForDisp
28a70 6c 61 79 28 76 65 72 62 6f 73 65 29 29 2c 0d 0a  lay(verbose)),..
28a80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28a90 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74          traceCat
28aa0 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20  egory);....     
28ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
28ac0 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72  raceCallback(Str
28ad0 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41  ing.Format(NameA
28ae0 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a  ndValueFormat,..
28af0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28b00 20 20 20 20 20 20 20 20 22 43 6f 6e 66 69 72 6d          "Confirm
28b10 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 63 6f  ", ForDisplay(co
28b20 6e 66 69 72 6d 29 29 2c 0d 0a 20 20 20 20 20 20  nfirm)),..      
28b30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28b40 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29    traceCategory)
28b50 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
28b60 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
28b70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28b80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28b90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28ba0 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
28bb0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
28bc0 61 73 73 65 6d 62 6c 79 20 21 3d 20 6e 75 6c 6c  assembly != null
28bd0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
28be0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
28bf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28c00 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28    traceCallback(
28c10 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61  String.Format(Na
28c20 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74  meAndValueFormat
28c30 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
28c40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
28c50 41 73 73 65 6d 62 6c 79 54 69 74 6c 65 22 2c 0d  AssemblyTitle",.
28c60 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
28c70 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72               For
28c80 44 69 73 70 6c 61 79 28 47 65 74 41 73 73 65 6d  Display(GetAssem
28c90 62 6c 79 54 69 74 6c 65 28 61 73 73 65 6d 62 6c  blyTitle(assembl
28ca0 79 29 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  y))),..         
28cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28cc0 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
28cd0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
28ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
28cf0 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69  aceCallback(Stri
28d00 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e  ng.Format(NameAn
28d10 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20  dValueFormat,.. 
28d20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28d30 20 20 20 20 20 20 20 20 20 20 20 22 41 73 73 65             "Asse
28d40 6d 62 6c 79 43 6f 6e 66 69 67 75 72 61 74 69 6f  mblyConfiguratio
28d50 6e 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n",..           
28d60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28d70 20 46 6f 72 44 69 73 70 6c 61 79 28 47 65 74 41   ForDisplay(GetA
28d80 73 73 65 6d 62 6c 79 43 6f 6e 66 69 67 75 72 61  ssemblyConfigura
28d90 74 69 6f 6e 28 61 73 73 65 6d 62 6c 79 29 29 29  tion(assembly)))
28da0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
28db0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
28dc0 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
28dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28de0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
28df0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f               ///
28e00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28e10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28e20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28e30 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
28e40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28e50 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74  traceCallback(St
28e60 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65  ring.Format(Name
28e70 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d  AndValueFormat,.
28e80 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
28e90 20 20 20 20 20 20 20 20 20 22 49 73 53 79 73 74           "IsSyst
28ea0 65 6d 45 66 36 41 73 73 65 6d 62 6c 79 41 76 61  emEf6AssemblyAva
28eb0 69 6c 61 62 6c 65 22 2c 20 46 6f 72 44 69 73 70  ilable", ForDisp
28ec0 6c 61 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20  lay(..          
28ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 49 73                Is
28ee0 53 79 73 74 65 6d 45 66 36 41 73 73 65 6d 62 6c  SystemEf6Assembl
28ef0 79 41 76 61 69 6c 61 62 6c 65 28 66 61 6c 73 65  yAvailable(false
28f00 29 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ))),..          
28f10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
28f20 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d  aceCategory);...
28f30 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
28f40 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61       traceCallba
28f50 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  ck(String.Format
28f60 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72  (NameAndValueFor
28f70 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  mat,..          
28f80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 49                "I
28f90 73 53 79 73 74 65 6d 45 66 36 41 73 73 65 6d 62  sSystemEf6Assemb
28fa0 6c 79 47 6c 6f 62 61 6c 22 2c 20 46 6f 72 44 69  lyGlobal", ForDi
28fb0 73 70 6c 61 79 28 0d 0a 20 20 20 20 20 20 20 20  splay(..        
28fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28fd0 49 73 53 79 73 74 65 6d 45 66 36 41 73 73 65 6d  IsSystemEf6Assem
28fe0 62 6c 79 47 6c 6f 62 61 6c 28 29 29 29 2c 0d 0a  blyGlobal())),..
28ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29000 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74          traceCat
29010 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20  egory);....     
29020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
29030 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29040 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29050 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29060 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
29070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29080 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28    traceCallback(
29090 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61  String.Format(Na
290a0 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74  meAndValueFormat
290b0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
290c0 20 20 20 20 20 20 20 20 20 20 20 22 49 73 4c 69             "IsLi
290d0 6e 71 53 75 70 70 6f 72 74 65 64 22 2c 20 46 6f  nqSupported", Fo
290e0 72 44 69 73 70 6c 61 79 28 49 73 4c 69 6e 71 53  rDisplay(IsLinqS
290f0 75 70 70 6f 72 74 65 64 28 66 61 6c 73 65 29 29  upported(false))
29100 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
29110 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
29120 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20  eCategory);.... 
29130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29140 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b     traceCallback
29150 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e  (String.Format(N
29160 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61  ameAndValueForma
29170 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t,..            
29180 20 20 20 20 20 20 20 20 20 20 20 20 22 49 73 45              "IsE
29190 66 36 53 75 70 70 6f 72 74 65 64 22 2c 20 46 6f  f6Supported", Fo
291a0 72 44 69 73 70 6c 61 79 28 49 73 45 66 36 53 75  rDisplay(IsEf6Su
291b0 70 70 6f 72 74 65 64 28 66 61 6c 73 65 29 29 29  pported(false)))
291c0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
291d0 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
291e0 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  Category);....  
291f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29200 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28    traceCallback(
29210 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61  String.Format(Na
29220 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74  meAndValueFormat
29230 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
29240 20 20 20 20 20 20 20 20 20 20 20 22 49 73 45 66             "IsEf
29250 36 41 73 73 65 6d 62 6c 79 47 6c 6f 62 61 6c 22  6AssemblyGlobal"
29260 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 0d 0a 20  , ForDisplay(.. 
29270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29280 20 20 20 20 20 20 20 49 73 45 66 36 41 73 73 65         IsEf6Asse
29290 6d 62 6c 79 47 6c 6f 62 61 6c 28 29 29 29 2c 0d  mblyGlobal())),.
292a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
292b0 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
292c0 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
292d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
292e0 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74  traceCallback(St
292f0 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65  ring.Format(Name
29300 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d  AndValueFormat,.
29310 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
29320 20 20 20 20 20 20 20 20 20 22 55 73 65 45 66 36           "UseEf6
29330 50 72 6f 76 69 64 65 72 22 2c 20 46 6f 72 44 69  Provider", ForDi
29340 73 70 6c 61 79 28 55 73 65 45 66 36 50 72 6f 76  splay(UseEf6Prov
29350 69 64 65 72 28 66 61 6c 73 65 29 29 29 2c 0d 0a  ider(false))),..
29360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29370 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74          traceCat
29380 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20  egory);....     
29390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
293a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
293b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
293c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
293d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
293e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
293f0 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20    try..         
29400 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
29410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29420 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62        traceCallb
29430 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ack(String.Forma
29440 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f  t(NameAndValueFo
29450 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20  rmat,..         
29460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29470 20 20 20 22 47 65 74 43 6f 72 65 41 73 73 65 6d     "GetCoreAssem
29480 62 6c 79 4e 61 6d 65 22 2c 20 46 6f 72 44 69 73  blyName", ForDis
29490 70 6c 61 79 28 0d 0a 20 20 20 20 20 20 20 20 20  play(..         
294a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
294b0 20 20 20 47 65 74 43 6f 72 65 41 73 73 65 6d 62     GetCoreAssemb
294c0 6c 79 4e 61 6d 65 28 66 61 6c 73 65 29 29 29 2c  lyName(false))),
294d0 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
294e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
294f0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
29500 20 20 20 20 20 20 20 20 20 20 20 20 20 63 61 74               cat
29510 63 68 20 28 45 78 63 65 70 74 69 6f 6e 20 65 29  ch (Exception e)
29520 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
29530 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
29540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29550 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53   traceCallback(S
29560 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d  tring.Format(Nam
29570 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c  eAndValueFormat,
29580 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
29590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 47                "G
295a0 65 74 43 6f 72 65 41 73 73 65 6d 62 6c 79 4e 61  etCoreAssemblyNa
295b0 6d 65 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28  me", ForDisplay(
295c0 65 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  e)),..          
295d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
295e0 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29    traceCategory)
295f0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
29600 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
29610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29620 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29630 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29640 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29650 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
29660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29670 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20     try..        
29680 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
29690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
296a0 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c         traceCall
296b0 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d  back(String.Form
296c0 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46  at(NameAndValueF
296d0 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20  ormat,..        
296e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
296f0 20 20 20 20 22 47 65 74 4c 69 6e 71 41 73 73 65      "GetLinqAsse
29700 6d 62 6c 79 4e 61 6d 65 22 2c 20 46 6f 72 44 69  mblyName", ForDi
29710 73 70 6c 61 79 28 0d 0a 20 20 20 20 20 20 20 20  splay(..        
29720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29730 20 20 20 20 47 65 74 4c 69 6e 71 41 73 73 65 6d      GetLinqAssem
29740 62 6c 79 4e 61 6d 65 28 66 61 6c 73 65 29 29 29  blyName(false)))
29750 2c 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29  , traceCategory)
29760 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
29770 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
29780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 61                ca
29790 74 63 68 20 28 45 78 63 65 70 74 69 6f 6e 20 65  tch (Exception e
297a0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
297b0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
297c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
297d0 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28    traceCallback(
297e0 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61  String.Format(Na
297f0 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74  meAndValueFormat
29800 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
29810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
29820 47 65 74 4c 69 6e 71 41 73 73 65 6d 62 6c 79 4e  GetLinqAssemblyN
29830 61 6d 65 22 2c 20 46 6f 72 44 69 73 70 6c 61 79  ame", ForDisplay
29840 28 65 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  (e)),..         
29850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29860 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
29870 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
29880 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
29890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
298a0 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
298b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
298c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
298d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
298e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
298f0 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20      try..       
29900 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
29910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29920 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c          traceCal
29930 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72  lback(String.For
29940 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65  mat(NameAndValue
29950 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20  Format,..       
29960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29970 20 20 20 20 20 22 47 65 74 45 66 36 41 73 73 65       "GetEf6Asse
29980 6d 62 6c 79 4e 61 6d 65 22 2c 20 46 6f 72 44 69  mblyName", ForDi
29990 73 70 6c 61 79 28 0d 0a 20 20 20 20 20 20 20 20  splay(..        
299a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
299b0 20 20 20 20 47 65 74 45 66 36 41 73 73 65 6d 62      GetEf6Assemb
299c0 6c 79 4e 61 6d 65 28 66 61 6c 73 65 29 29 29 2c  lyName(false))),
299d0 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
299e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
299f0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
29a00 20 20 20 20 20 20 20 20 20 20 20 20 20 63 61 74               cat
29a10 63 68 20 28 45 78 63 65 70 74 69 6f 6e 20 65 29  ch (Exception e)
29a20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
29a30 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
29a40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29a50 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53   traceCallback(S
29a60 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d  tring.Format(Nam
29a70 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c  eAndValueFormat,
29a80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
29a90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 47                "G
29aa0 65 74 45 66 36 41 73 73 65 6d 62 6c 79 4e 61 6d  etEf6AssemblyNam
29ab0 65 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 65  e", ForDisplay(e
29ac0 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  )),..           
29ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29ae0 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
29af0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
29b00 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
29b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
29b60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29b70 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20    try..         
29b80 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
29b90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29ba0 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62        traceCallb
29bb0 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ack(String.Forma
29bc0 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f  t(NameAndValueFo
29bd0 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20  rmat,..         
29be0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29bf0 20 20 20 22 47 65 74 44 65 73 69 67 6e 65 72 41     "GetDesignerA
29c00 73 73 65 6d 62 6c 79 4e 61 6d 65 22 2c 20 46 6f  ssemblyName", Fo
29c10 72 44 69 73 70 6c 61 79 28 0d 0a 20 20 20 20 20  rDisplay(..     
29c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29c30 20 20 20 20 20 20 20 47 65 74 44 65 73 69 67 6e         GetDesign
29c40 65 72 41 73 73 65 6d 62 6c 79 4e 61 6d 65 28 66  erAssemblyName(f
29c50 61 6c 73 65 29 29 29 2c 20 74 72 61 63 65 43 61  alse))), traceCa
29c60 74 65 67 6f 72 79 29 3b 0d 0a 20 20 20 20 20 20  tegory);..      
29c70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
29c80 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
29c90 20 20 20 20 20 63 61 74 63 68 20 28 45 78 63 65       catch (Exce
29ca0 70 74 69 6f 6e 20 65 29 0d 0a 20 20 20 20 20 20  ption e)..      
29cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
29cc0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
29cd0 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
29ce0 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f  llback(String.Fo
29cf0 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75  rmat(NameAndValu
29d00 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20  eFormat,..      
29d10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29d20 20 20 20 20 20 20 22 47 65 74 44 65 73 69 67 6e        "GetDesign
29d30 65 72 41 73 73 65 6d 62 6c 79 4e 61 6d 65 22 2c  erAssemblyName",
29d40 20 46 6f 72 44 69 73 70 6c 61 79 28 65 29 29 2c   ForDisplay(e)),
29d50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
29d60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
29d70 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 20  aceCategory);.. 
29d80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29d90 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
29da0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
29db0 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20  ///////....     
29df0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
29e00 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72  raceCallback(Str
29e10 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41  ing.Format(NameA
29e20 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a  ndValueFormat,..
29e30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29e40 20 20 20 20 20 20 20 20 22 47 65 74 49 6e 76 61          "GetInva
29e50 72 69 61 6e 74 4e 61 6d 65 22 2c 20 46 6f 72 44  riantName", ForD
29e60 69 73 70 6c 61 79 28 47 65 74 49 6e 76 61 72 69  isplay(GetInvari
29e70 61 6e 74 4e 61 6d 65 28 0d 0a 20 20 20 20 20 20  antName(..      
29e80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29e90 20 20 66 61 6c 73 65 29 29 29 2c 20 74 72 61 63    false))), trac
29ea0 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20  eCategory);.... 
29eb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29ec0 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b     traceCallback
29ed0 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e  (String.Format(N
29ee0 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61  ameAndValueForma
29ef0 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t,..            
29f00 20 20 20 20 20 20 20 20 20 20 20 20 22 47 65 74              "Get
29f10 43 6f 6e 66 69 67 49 6e 76 61 72 69 61 6e 74 4e  ConfigInvariantN
29f20 61 6d 65 22 2c 20 46 6f 72 44 69 73 70 6c 61 79  ame", ForDisplay
29f30 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
29f40 20 20 20 20 20 20 20 20 20 20 20 47 65 74 43 6f             GetCo
29f50 6e 66 69 67 49 6e 76 61 72 69 61 6e 74 4e 61 6d  nfigInvariantNam
29f60 65 28 66 61 6c 73 65 29 29 29 2c 20 74 72 61 63  e(false))), trac
29f70 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20  eCategory);.... 
29f80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29f90 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b     traceCallback
29fa0 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e  (String.Format(N
29fb0 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61  ameAndValueForma
29fc0 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t,..            
29fd0 20 20 20 20 20 20 20 20 20 20 20 20 22 47 65 74              "Get
29fe0 50 72 6f 76 69 64 65 72 49 6e 76 61 72 69 61 6e  ProviderInvarian
29ff0 74 4e 61 6d 65 22 2c 20 46 6f 72 44 69 73 70 6c  tName", ForDispl
2a000 61 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ay(..           
2a010 20 20 20 20 20 20 20 20 20 20 20 20 20 47 65 74               Get
2a020 50 72 6f 76 69 64 65 72 49 6e 76 61 72 69 61 6e  ProviderInvarian
2a030 74 4e 61 6d 65 28 66 61 6c 73 65 29 29 29 2c 20  tName(false))), 
2a040 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
2a050 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
2a060 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c         traceCall
2a070 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d  back(String.Form
2a080 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46  at(NameAndValueF
2a090 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20  ormat,..        
2a0a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a0b0 22 47 65 74 46 61 63 74 6f 72 79 54 79 70 65 4e  "GetFactoryTypeN
2a0c0 61 6d 65 22 2c 20 46 6f 72 44 69 73 70 6c 61 79  ame", ForDisplay
2a0d0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
2a0e0 20 20 20 20 20 20 20 20 20 20 20 47 65 74 46 61             GetFa
2a0f0 63 74 6f 72 79 54 79 70 65 4e 61 6d 65 28 66 61  ctoryTypeName(fa
2a100 6c 73 65 29 29 29 2c 20 74 72 61 63 65 43 61 74  lse))), traceCat
2a110 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20  egory);....     
2a120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
2a130 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a140 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a150 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a160 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
2a170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a180 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20    try..         
2a190 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
2a1a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a1b0 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62        traceCallb
2a1c0 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ack(String.Forma
2a1d0 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f  t(NameAndValueFo
2a1e0 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20  rmat,..         
2a1f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a200 20 20 20 22 47 65 74 50 72 6f 76 69 64 65 72 41     "GetProviderA
2a210 73 73 65 6d 62 6c 79 4e 61 6d 65 22 2c 20 46 6f  ssemblyName", Fo
2a220 72 44 69 73 70 6c 61 79 28 0d 0a 20 20 20 20 20  rDisplay(..     
2a230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a240 20 20 20 20 20 20 20 47 65 74 50 72 6f 76 69 64         GetProvid
2a250 65 72 41 73 73 65 6d 62 6c 79 4e 61 6d 65 28 66  erAssemblyName(f
2a260 61 6c 73 65 29 29 29 2c 20 74 72 61 63 65 43 61  alse))), traceCa
2a270 74 65 67 6f 72 79 29 3b 0d 0a 20 20 20 20 20 20  tegory);..      
2a280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
2a290 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2a2a0 20 20 20 20 20 63 61 74 63 68 20 28 45 78 63 65       catch (Exce
2a2b0 70 74 69 6f 6e 20 65 29 0d 0a 20 20 20 20 20 20  ption e)..      
2a2c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
2a2d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2a2e0 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
2a2f0 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f  llback(String.Fo
2a300 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75  rmat(NameAndValu
2a310 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20  eFormat,..      
2a320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a330 20 20 20 20 20 20 22 47 65 74 50 72 6f 76 69 64        "GetProvid
2a340 65 72 41 73 73 65 6d 62 6c 79 4e 61 6d 65 22 2c  erAssemblyName",
2a350 20 46 6f 72 44 69 73 70 6c 61 79 28 65 29 29 2c   ForDisplay(e)),
2a360 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2a370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
2a380 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 20  aceCategory);.. 
2a390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a3a0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
2a3b0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
2a3c0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
2a3d0 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
2a3e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
2a3f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a400 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a410 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a420 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a430 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
2a440 20 23 72 65 67 69 6f 6e 20 50 75 62 6c 69 63 20   #region Public 
2a450 50 72 6f 70 65 72 74 69 65 73 0d 0a 20 20 20 20  Properties..    
2a460 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
2a470 41 73 73 65 6d 62 6c 79 20 61 73 73 65 6d 62 6c  Assembly assembl
2a480 79 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y;..            
2a490 70 75 62 6c 69 63 20 41 73 73 65 6d 62 6c 79 20  public Assembly 
2a4a0 41 73 73 65 6d 62 6c 79 0d 0a 20 20 20 20 20 20  Assembly..      
2a4b0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
2a4c0 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72           get { r
2a4d0 65 74 75 72 6e 20 61 73 73 65 6d 62 6c 79 3b 20  eturn assembly; 
2a4e0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
2a4f0 20 20 20 73 65 74 20 7b 20 61 73 73 65 6d 62 6c     set { assembl
2a500 79 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20  y = value; }..  
2a510 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
2a520 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
2a530 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a540 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a550 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a560 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
2a570 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
2a580 69 76 61 74 65 20 73 74 72 69 6e 67 20 6c 6f 67  ivate string log
2a590 46 69 6c 65 4e 61 6d 65 3b 0d 0a 20 20 20 20 20  FileName;..     
2a5a0 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74         public st
2a5b0 72 69 6e 67 20 4c 6f 67 46 69 6c 65 4e 61 6d 65  ring LogFileName
2a5c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
2a5d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2a5e0 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 6c 6f   get { return lo
2a5f0 67 46 69 6c 65 4e 61 6d 65 3b 20 7d 0d 0a 20 20  gFileName; }..  
2a600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65                se
2a610 74 20 7b 20 6c 6f 67 46 69 6c 65 4e 61 6d 65 20  t { logFileName 
2a620 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20  = value; }..    
2a630 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
2a640 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
2a650 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a  ////////////....
2a690 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76              priv
2a6a0 61 74 65 20 73 74 72 69 6e 67 20 64 69 72 65 63  ate string direc
2a6b0 74 6f 72 79 3b 0d 0a 20 20 20 20 20 20 20 20 20  tory;..         
2a6c0 20 20 20 70 75 62 6c 69 63 20 73 74 72 69 6e 67     public string
2a6d0 20 44 69 72 65 63 74 6f 72 79 0d 0a 20 20 20 20   Directory..    
2a6e0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
2a6f0 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b             get {
2a700 20 72 65 74 75 72 6e 20 64 69 72 65 63 74 6f 72   return director
2a710 79 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  y; }..          
2a720 20 20 20 20 20 20 73 65 74 20 7b 20 64 69 72 65        set { dire
2a730 63 74 6f 72 79 20 3d 20 76 61 6c 75 65 3b 20 7d  ctory = value; }
2a740 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
2a750 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
2a760 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a770 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a780 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a790 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a7a0 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
2a7b0 20 20 70 72 69 76 61 74 65 20 73 74 72 69 6e 67    private string
2a7c0 20 63 6f 72 65 46 69 6c 65 4e 61 6d 65 3b 0d 0a   coreFileName;..
2a7d0 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
2a7e0 69 63 20 73 74 72 69 6e 67 20 43 6f 72 65 46 69  ic string CoreFi
2a7f0 6c 65 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20 20  leName..        
2a800 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
2a810 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74         get { ret
2a820 75 72 6e 20 63 6f 72 65 46 69 6c 65 4e 61 6d 65  urn coreFileName
2a830 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
2a840 20 20 20 20 20 73 65 74 20 7b 20 63 6f 72 65 46       set { coreF
2a850 69 6c 65 4e 61 6d 65 20 3d 20 76 61 6c 75 65 3b  ileName = value;
2a860 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
2a870 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
2a880 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
2a890 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a8a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a8b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a8c0 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
2a8d0 20 20 20 20 70 72 69 76 61 74 65 20 73 74 72 69      private stri
2a8e0 6e 67 20 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 3b  ng linqFileName;
2a8f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
2a900 62 6c 69 63 20 73 74 72 69 6e 67 20 4c 69 6e 71  blic string Linq
2a910 46 69 6c 65 4e 61 6d 65 0d 0a 20 20 20 20 20 20  FileName..      
2a920 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
2a930 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72           get { r
2a940 65 74 75 72 6e 20 6c 69 6e 71 46 69 6c 65 4e 61  eturn linqFileNa
2a950 6d 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  me; }..         
2a960 20 20 20 20 20 20 20 73 65 74 20 7b 20 6c 69 6e         set { lin
2a970 71 46 69 6c 65 4e 61 6d 65 20 3d 20 76 61 6c 75  qFileName = valu
2a980 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  e; }..          
2a990 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
2a9a0 20 20 20 2f 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 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
2a9f0 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74        private st
2aa00 72 69 6e 67 20 65 66 36 46 69 6c 65 4e 61 6d 65  ring ef6FileName
2aa10 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ;..            p
2aa20 75 62 6c 69 63 20 73 74 72 69 6e 67 20 45 66 36  ublic string Ef6
2aa30 46 69 6c 65 4e 61 6d 65 0d 0a 20 20 20 20 20 20  FileName..      
2aa40 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
2aa50 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72           get { r
2aa60 65 74 75 72 6e 20 65 66 36 46 69 6c 65 4e 61 6d  eturn ef6FileNam
2aa70 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  e; }..          
2aa80 20 20 20 20 20 20 73 65 74 20 7b 20 65 66 36 46        set { ef6F
2aa90 69 6c 65 4e 61 6d 65 20 3d 20 76 61 6c 75 65 3b  ileName = value;
2aaa0 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
2aab0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
2aac0 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
2aad0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2aae0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2aaf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ab00 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
2ab10 20 20 20 20 70 72 69 76 61 74 65 20 73 74 72 69      private stri
2ab20 6e 67 20 64 65 73 69 67 6e 65 72 46 69 6c 65 4e  ng designerFileN
2ab30 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ame;..          
2ab40 20 20 70 75 62 6c 69 63 20 73 74 72 69 6e 67 20    public string 
2ab50 44 65 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65  DesignerFileName
2ab60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
2ab70 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2ab80 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 64 65   get { return de
2ab90 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65 3b 20  signerFileName; 
2aba0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
2abb0 20 20 20 73 65 74 20 7b 20 64 65 73 69 67 6e 65     set { designe
2abc0 72 46 69 6c 65 4e 61 6d 65 20 3d 20 76 61 6c 75  rFileName = valu
2abd0 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  e; }..          
2abe0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
2abf0 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ac20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ac30 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
2ac40 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74        private st
2ac50 72 69 6e 67 20 72 65 67 69 73 74 72 79 56 65 72  ring registryVer
2ac60 73 69 6f 6e 3b 0d 0a 20 20 20 20 20 20 20 20 20  sion;..         
2ac70 20 20 20 70 75 62 6c 69 63 20 73 74 72 69 6e 67     public string
2ac80 20 52 65 67 69 73 74 72 79 56 65 72 73 69 6f 6e   RegistryVersion
2ac90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
2aca0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2acb0 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 72 65   get { return re
2acc0 67 69 73 74 72 79 56 65 72 73 69 6f 6e 3b 20 7d  gistryVersion; }
2acd0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2ace0 20 20 73 65 74 20 7b 20 72 65 67 69 73 74 72 79    set { registry
2acf0 56 65 72 73 69 6f 6e 20 3d 20 76 61 6c 75 65 3b  Version = value;
2ad00 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
2ad10 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
2ad20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
2ad30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ad40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ad50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ad60 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
2ad70 20 20 20 20 70 72 69 76 61 74 65 20 73 74 72 69      private stri
2ad80 6e 67 20 63 6f 6e 66 69 67 56 65 72 73 69 6f 6e  ng configVersion
2ad90 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ;..            p
2ada0 75 62 6c 69 63 20 73 74 72 69 6e 67 20 43 6f 6e  ublic string Con
2adb0 66 69 67 56 65 72 73 69 6f 6e 0d 0a 20 20 20 20  figVersion..    
2adc0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
2add0 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b             get {
2ade0 20 72 65 74 75 72 6e 20 63 6f 6e 66 69 67 56 65   return configVe
2adf0 72 73 69 6f 6e 3b 20 7d 0d 0a 20 20 20 20 20 20  rsion; }..      
2ae00 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20            set { 
2ae10 63 6f 6e 66 69 67 56 65 72 73 69 6f 6e 20 3d 20  configVersion = 
2ae20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20  value; }..      
2ae30 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
2ae40 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
2ae50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ae60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ae70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ae80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
2ae90 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
2aea0 65 20 73 74 72 69 6e 67 20 76 73 56 65 72 73 69  e string vsVersi
2aeb0 6f 6e 53 75 66 66 69 78 3b 0d 0a 20 20 20 20 20  onSuffix;..     
2aec0 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74         public st
2aed0 72 69 6e 67 20 56 73 56 65 72 73 69 6f 6e 53 75  ring VsVersionSu
2aee0 66 66 69 78 0d 0a 20 20 20 20 20 20 20 20 20 20  ffix..          
2aef0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
2af00 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72       get { retur
2af10 6e 20 76 73 56 65 72 73 69 6f 6e 53 75 66 66 69  n vsVersionSuffi
2af20 78 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  x; }..          
2af30 20 20 20 20 20 20 73 65 74 20 7b 20 76 73 56 65        set { vsVe
2af40 72 73 69 6f 6e 53 75 66 66 69 78 20 3d 20 76 61  rsionSuffix = va
2af50 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  lue; }..        
2af60 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
2af70 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
2af80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2af90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2afa0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2afb0 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
2afc0 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
2afd0 73 74 72 69 6e 67 20 64 65 62 75 67 46 6f 72 6d  string debugForm
2afe0 61 74 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at;..           
2aff0 20 70 75 62 6c 69 63 20 73 74 72 69 6e 67 20 44   public string D
2b000 65 62 75 67 46 6f 72 6d 61 74 0d 0a 20 20 20 20  ebugFormat..    
2b010 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
2b020 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b             get {
2b030 20 72 65 74 75 72 6e 20 64 65 62 75 67 46 6f 72   return debugFor
2b040 6d 61 74 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  mat; }..        
2b050 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 64 65          set { de
2b060 62 75 67 46 6f 72 6d 61 74 20 3d 20 76 61 6c 75  bugFormat = valu
2b070 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  e; }..          
2b080 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
2b090 20 20 20 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 2f  ////////////////
2b0c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b0d0 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
2b0e0 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74        private st
2b0f0 72 69 6e 67 20 74 72 61 63 65 46 6f 72 6d 61 74  ring traceFormat
2b100 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ;..            p
2b110 75 62 6c 69 63 20 73 74 72 69 6e 67 20 54 72 61  ublic string Tra
2b120 63 65 46 6f 72 6d 61 74 0d 0a 20 20 20 20 20 20  ceFormat..      
2b130 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
2b140 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72           get { r
2b150 65 74 75 72 6e 20 74 72 61 63 65 46 6f 72 6d 61  eturn traceForma
2b160 74 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  t; }..          
2b170 20 20 20 20 20 20 73 65 74 20 7b 20 74 72 61 63        set { trac
2b180 65 46 6f 72 6d 61 74 20 3d 20 76 61 6c 75 65 3b  eFormat = value;
2b190 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
2b1a0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
2b1b0 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b1e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b1f0 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
2b200 20 20 20 20 70 72 69 76 61 74 65 20 49 6e 73 74      private Inst
2b210 61 6c 6c 46 6c 61 67 73 20 69 6e 73 74 61 6c 6c  allFlags install
2b220 46 6c 61 67 73 3b 0d 0a 20 20 20 20 20 20 20 20  Flags;..        
2b230 20 20 20 20 70 75 62 6c 69 63 20 49 6e 73 74 61      public Insta
2b240 6c 6c 46 6c 61 67 73 20 49 6e 73 74 61 6c 6c 46  llFlags InstallF
2b250 6c 61 67 73 0d 0a 20 20 20 20 20 20 20 20 20 20  lags..          
2b260 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
2b270 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72       get { retur
2b280 6e 20 69 6e 73 74 61 6c 6c 46 6c 61 67 73 3b 20  n installFlags; 
2b290 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
2b2a0 20 20 20 73 65 74 20 7b 20 69 6e 73 74 61 6c 6c     set { install
2b2b0 46 6c 61 67 73 20 3d 20 76 61 6c 75 65 3b 20 7d  Flags = value; }
2b2c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
2b2d0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b310 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b320 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
2b330 20 20 70 72 69 76 61 74 65 20 50 72 6f 76 69 64    private Provid
2b340 65 72 46 6c 61 67 73 20 70 72 6f 76 69 64 65 72  erFlags provider
2b350 46 6c 61 67 73 3b 0d 0a 20 20 20 20 20 20 20 20  Flags;..        
2b360 20 20 20 20 70 75 62 6c 69 63 20 50 72 6f 76 69      public Provi
2b370 64 65 72 46 6c 61 67 73 20 50 72 6f 76 69 64 65  derFlags Provide
2b380 72 46 6c 61 67 73 0d 0a 20 20 20 20 20 20 20 20  rFlags..        
2b390 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
2b3a0 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74         get { ret
2b3b0 75 72 6e 20 70 72 6f 76 69 64 65 72 46 6c 61 67  urn providerFlag
2b3c0 73 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  s; }..          
2b3d0 20 20 20 20 20 20 73 65 74 20 7b 20 70 72 6f 76        set { prov
2b3e0 69 64 65 72 46 6c 61 67 73 20 3d 20 76 61 6c 75  iderFlags = valu
2b3f0 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  e; }..          
2b400 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
2b410 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
2b420 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b430 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b440 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b450 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
2b460 20 20 20 20 20 20 70 72 69 76 61 74 65 20 54 72        private Tr
2b470 61 63 65 50 72 69 6f 72 69 74 79 20 64 65 62 75  acePriority debu
2b480 67 50 72 69 6f 72 69 74 79 3b 0d 0a 20 20 20 20  gPriority;..    
2b490 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 54          public T
2b4a0 72 61 63 65 50 72 69 6f 72 69 74 79 20 44 65 62  racePriority Deb
2b4b0 75 67 50 72 69 6f 72 69 74 79 0d 0a 20 20 20 20  ugPriority..    
2b4c0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
2b4d0 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b             get {
2b4e0 20 72 65 74 75 72 6e 20 64 65 62 75 67 50 72 69   return debugPri
2b4f0 6f 72 69 74 79 3b 20 7d 0d 0a 20 20 20 20 20 20  ority; }..      
2b500 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20            set { 
2b510 64 65 62 75 67 50 72 69 6f 72 69 74 79 20 3d 20  debugPriority = 
2b520 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20  value; }..      
2b530 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
2b540 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
2b550 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b560 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b570 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b580 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
2b590 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
2b5a0 65 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 20  e TracePriority 
2b5b0 74 72 61 63 65 50 72 69 6f 72 69 74 79 3b 0d 0a  tracePriority;..
2b5c0 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
2b5d0 69 63 20 54 72 61 63 65 50 72 69 6f 72 69 74 79  ic TracePriority
2b5e0 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 0d 0a   TracePriority..
2b5f0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
2b600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67                 g
2b610 65 74 20 7b 20 72 65 74 75 72 6e 20 74 72 61 63  et { return trac
2b620 65 50 72 69 6f 72 69 74 79 3b 20 7d 0d 0a 20 20  ePriority; }..  
2b630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65                se
2b640 74 20 7b 20 74 72 61 63 65 50 72 69 6f 72 69 74  t { tracePriorit
2b650 79 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20  y = value; }..  
2b660 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
2b670 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
2b680 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b690 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b6a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b6b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
2b6c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
2b6d0 69 76 61 74 65 20 62 6f 6f 6c 20 70 65 72 55 73  ivate bool perUs
2b6e0 65 72 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  er;..           
2b6f0 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 50 65 72   public bool Per
2b700 55 73 65 72 0d 0a 20 20 20 20 20 20 20 20 20 20  User..          
2b710 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
2b720 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72       get { retur
2b730 6e 20 70 65 72 55 73 65 72 3b 20 7d 0d 0a 20 20  n perUser; }..  
2b740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65                se
2b750 74 20 7b 20 70 65 72 55 73 65 72 20 3d 20 76 61  t { perUser = va
2b760 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  lue; }..        
2b770 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
2b780 20 20 20 20 20 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 2f 2f 2f 2f 2f  ////////////////
2b7b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b7c0 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
2b7d0 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
2b7e0 62 6f 6f 6c 20 69 6e 73 74 61 6c 6c 3b 0d 0a 20  bool install;.. 
2b7f0 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
2b800 63 20 62 6f 6f 6c 20 49 6e 73 74 61 6c 6c 0d 0a  c bool Install..
2b810 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
2b820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67                 g
2b830 65 74 20 7b 20 72 65 74 75 72 6e 20 69 6e 73 74  et { return inst
2b840 61 6c 6c 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  all; }..        
2b850 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 69 6e          set { in
2b860 73 74 61 6c 6c 20 3d 20 76 61 6c 75 65 3b 20 7d  stall = value; }
2b870 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
2b880 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
2b890 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b8a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b8b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b8c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b8d0 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
2b8e0 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 77    private bool w
2b8f0 6f 77 36 34 3b 0d 0a 20 20 20 20 20 20 20 20 20  ow64;..         
2b900 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 57     public bool W
2b910 6f 77 36 34 0d 0a 20 20 20 20 20 20 20 20 20 20  ow64..          
2b920 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
2b930 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72       get { retur
2b940 6e 20 77 6f 77 36 34 3b 20 7d 0d 0a 20 20 20 20  n wow64; }..    
2b950 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20              set 
2b960 7b 20 77 6f 77 36 34 20 3d 20 76 61 6c 75 65 3b  { wow64 = value;
2b970 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
2b980 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
2b990 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
2b9a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b9b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b9c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b9d0 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
2b9e0 20 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c      private bool
2b9f0 20 6e 6f 52 75 6e 74 69 6d 65 56 65 72 73 69 6f   noRuntimeVersio
2ba00 6e 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n;..            
2ba10 70 75 62 6c 69 63 20 62 6f 6f 6c 20 4e 6f 52 75  public bool NoRu
2ba20 6e 74 69 6d 65 56 65 72 73 69 6f 6e 0d 0a 20 20  ntimeVersion..  
2ba30 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
2ba40 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74               get
2ba50 20 7b 20 72 65 74 75 72 6e 20 6e 6f 52 75 6e 74   { return noRunt
2ba60 69 6d 65 56 65 72 73 69 6f 6e 3b 20 7d 0d 0a 20  imeVersion; }.. 
2ba70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
2ba80 65 74 20 7b 20 6e 6f 52 75 6e 74 69 6d 65 56 65  et { noRuntimeVe
2ba90 72 73 69 6f 6e 20 3d 20 76 61 6c 75 65 3b 20 7d  rsion = value; }
2baa0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
2bab0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
2bac0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2bad0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2bae0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2baf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2bb00 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
2bb10 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 6e    private bool n
2bb20 6f 44 65 73 6b 74 6f 70 3b 0d 0a 20 20 20 20 20  oDesktop;..     
2bb30 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f         public bo
2bb40 6f 6c 20 4e 6f 44 65 73 6b 74 6f 70 0d 0a 20 20  ol NoDesktop..  
2bb50 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
2bb60 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74               get
2bb70 20 7b 20 72 65 74 75 72 6e 20 6e 6f 44 65 73 6b   { return noDesk
2bb80 74 6f 70 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  top; }..        
2bb90 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 6e 6f          set { no
2bba0 44 65 73 6b 74 6f 70 20 3d 20 76 61 6c 75 65 3b  Desktop = value;
2bbb0 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
2bbc0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
2bbd0 20 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 2f 2f 2f 2f 2f  ////////////////
2bc10 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
2bc20 20 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c      private bool
2bc30 20 6e 6f 43 6f 6d 70 61 63 74 3b 0d 0a 20 20 20   noCompact;..   
2bc40 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
2bc50 62 6f 6f 6c 20 4e 6f 43 6f 6d 70 61 63 74 0d 0a  bool NoCompact..
2bc60 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
2bc70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67                 g
2bc80 65 74 20 7b 20 72 65 74 75 72 6e 20 6e 6f 43 6f  et { return noCo
2bc90 6d 70 61 63 74 3b 20 7d 0d 0a 20 20 20 20 20 20  mpact; }..      
2bca0 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20            set { 
2bcb0 6e 6f 43 6f 6d 70 61 63 74 20 3d 20 76 61 6c 75  noCompact = valu
2bcc0 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  e; }..          
2bcd0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
2bce0 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
2bcf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2bd00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2bd10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2bd20 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
2bd30 20 20 20 20 20 20 70 72 69 76 61 74 65 20 62 6f        private bo
2bd40 6f 6c 20 6e 6f 4e 65 74 46 78 32 30 3b 0d 0a 20  ol noNetFx20;.. 
2bd50 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
2bd60 63 20 62 6f 6f 6c 20 4e 6f 4e 65 74 46 78 32 30  c bool NoNetFx20
2bd70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
2bd80 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2bd90 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 6e 6f   get { return no
2bda0 4e 65 74 46 78 32 30 3b 20 7d 0d 0a 20 20 20 20  NetFx20; }..    
2bdb0 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20              set 
2bdc0 7b 20 6e 6f 4e 65 74 46 78 32 30 20 3d 20 76 61  { noNetFx20 = va
2bdd0 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  lue; }..        
2bde0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
2bdf0 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
2be00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2be10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2be20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2be30 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
2be40 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
2be50 62 6f 6f 6c 20 6e 6f 4e 65 74 46 78 33 35 3b 0d  bool noNetFx35;.
2be60 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
2be70 6c 69 63 20 62 6f 6f 6c 20 4e 6f 4e 65 74 46 78  lic bool NoNetFx
2be80 33 35 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  35..            
2be90 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
2bea0 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20     get { return 
2beb0 6e 6f 4e 65 74 46 78 33 35 3b 20 7d 0d 0a 20 20  noNetFx35; }..  
2bec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65                se
2bed0 74 20 7b 20 6e 6f 4e 65 74 46 78 33 35 20 3d 20  t { noNetFx35 = 
2bee0 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20  value; }..      
2bef0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
2bf00 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
2bf10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2bf20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2bf30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2bf40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
2bf50 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
2bf60 65 20 62 6f 6f 6c 20 6e 6f 4e 65 74 46 78 34 30  e bool noNetFx40
2bf70 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ;..            p
2bf80 75 62 6c 69 63 20 62 6f 6f 6c 20 4e 6f 4e 65 74  ublic bool NoNet
2bf90 46 78 34 30 0d 0a 20 20 20 20 20 20 20 20 20 20  Fx40..          
2bfa0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
2bfb0 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72       get { retur
2bfc0 6e 20 6e 6f 4e 65 74 46 78 34 30 3b 20 7d 0d 0a  n noNetFx40; }..
2bfd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bfe0 73 65 74 20 7b 20 6e 6f 4e 65 74 46 78 34 30 20  set { noNetFx40 
2bff0 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20  = value; }..    
2c000 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
2c010 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 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 0d 0a 0d 0a  ////////////....
2c060 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76              priv
2c070 61 74 65 20 62 6f 6f 6c 20 6e 6f 4e 65 74 46 78  ate bool noNetFx
2c080 34 35 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  45;..           
2c090 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 4e 6f 4e   public bool NoN
2c0a0 65 74 46 78 34 35 0d 0a 20 20 20 20 20 20 20 20  etFx45..        
2c0b0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
2c0c0 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74         get { ret
2c0d0 75 72 6e 20 6e 6f 4e 65 74 46 78 34 35 3b 20 7d  urn noNetFx45; }
2c0e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2c0f0 20 20 73 65 74 20 7b 20 6e 6f 4e 65 74 46 78 34    set { noNetFx4
2c100 35 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20  5 = value; }..  
2c110 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
2c120 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
2c130 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c140 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c150 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c160 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
2c170 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
2c180 69 76 61 74 65 20 62 6f 6f 6c 20 6e 6f 4e 65 74  ivate bool noNet
2c190 46 78 34 35 31 3b 0d 0a 20 20 20 20 20 20 20 20  Fx451;..        
2c1a0 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20      public bool 
2c1b0 4e 6f 4e 65 74 46 78 34 35 31 0d 0a 20 20 20 20  NoNetFx451..    
2c1c0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
2c1d0 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b             get {
2c1e0 20 72 65 74 75 72 6e 20 6e 6f 4e 65 74 46 78 34   return noNetFx4
2c1f0 35 31 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  51; }..         
2c200 20 20 20 20 20 20 20 73 65 74 20 7b 20 6e 6f 4e         set { noN
2c210 65 74 46 78 34 35 31 20 3d 20 76 61 6c 75 65 3b  etFx451 = value;
2c220 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
2c230 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
2c240 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
2c250 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c260 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c270 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c280 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
2c290 20 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c      private bool
2c2a0 20 6e 6f 4e 65 74 46 78 34 35 32 3b 0d 0a 20 20   noNetFx452;..  
2c2b0 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
2c2c0 20 62 6f 6f 6c 20 4e 6f 4e 65 74 46 78 34 35 32   bool NoNetFx452
2c2d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
2c2e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2c2f0 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 6e 6f   get { return no
2c300 4e 65 74 46 78 34 35 32 3b 20 7d 0d 0a 20 20 20  NetFx452; }..   
2c310 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74               set
2c320 20 7b 20 6e 6f 4e 65 74 46 78 34 35 32 20 3d 20   { noNetFx452 = 
2c330 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20  value; }..      
2c340 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
2c350 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
2c360 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c370 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c380 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c390 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
2c3a0 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
2c3b0 65 20 62 6f 6f 6c 20 6e 6f 4e 65 74 46 78 34 36  e bool noNetFx46
2c3c0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ;..            p
2c3d0 75 62 6c 69 63 20 62 6f 6f 6c 20 4e 6f 4e 65 74  ublic bool NoNet
2c3e0 46 78 34 36 0d 0a 20 20 20 20 20 20 20 20 20 20  Fx46..          
2c3f0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
2c400 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72       get { retur
2c410 6e 20 6e 6f 4e 65 74 46 78 34 36 3b 20 7d 0d 0a  n noNetFx46; }..
2c420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c430 73 65 74 20 7b 20 6e 6f 4e 65 74 46 78 34 36 20  set { noNetFx46 
2c440 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20  = value; }..    
2c450 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
2c460 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
2c470 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c480 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c490 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c4a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
2c4b0 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76              priv
2c4c0 61 74 65 20 62 6f 6f 6c 20 6e 6f 4e 65 74 46 78  ate bool noNetFx
2c4d0 34 36 31 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  461;..          
2c4e0 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 4e 6f    public bool No
2c4f0 4e 65 74 46 78 34 36 31 0d 0a 20 20 20 20 20 20  NetFx461..      
2c500 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
2c510 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72           get { r
2c520 65 74 75 72 6e 20 6e 6f 4e 65 74 46 78 34 36 31  eturn noNetFx461
2c530 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
2c540 20 20 20 20 20 73 65 74 20 7b 20 6e 6f 4e 65 74       set { noNet
2c550 46 78 34 36 31 20 3d 20 76 61 6c 75 65 3b 20 7d  Fx461 = value; }
2c560 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
2c570 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
2c580 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c590 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c5a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c5b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c5c0 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
2c5d0 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 6e    private bool n
2c5e0 6f 4e 65 74 46 78 34 36 32 3b 0d 0a 20 20 20 20  oNetFx462;..    
2c5f0 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 62          public b
2c600 6f 6f 6c 20 4e 6f 4e 65 74 46 78 34 36 32 0d 0a  ool NoNetFx462..
2c610 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
2c620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67                 g
2c630 65 74 20 7b 20 72 65 74 75 72 6e 20 6e 6f 4e 65  et { return noNe
2c640 74 46 78 34 36 32 3b 20 7d 0d 0a 20 20 20 20 20  tFx462; }..     
2c650 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b             set {
2c660 20 6e 6f 4e 65 74 46 78 34 36 32 20 3d 20 76 61   noNetFx462 = va
2c670 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  lue; }..        
2c680 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
2c690 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
2c6a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c6b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c6c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c6d0 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
2c6e0 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
2c6f0 62 6f 6f 6c 20 6e 6f 4e 65 74 46 78 34 37 3b 0d  bool noNetFx47;.
2c700 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
2c710 6c 69 63 20 62 6f 6f 6c 20 4e 6f 4e 65 74 46 78  lic bool NoNetFx
2c720 34 37 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  47..            
2c730 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
2c740 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20     get { return 
2c750 6e 6f 4e 65 74 46 78 34 37 3b 20 7d 0d 0a 20 20  noNetFx47; }..  
2c760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65                se
2c770 74 20 7b 20 6e 6f 4e 65 74 46 78 34 37 20 3d 20  t { noNetFx47 = 
2c780 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20  value; }..      
2c790 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
2c7a0 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
2c7b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c7c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c7d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c7e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
2c7f0 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
2c800 65 20 62 6f 6f 6c 20 6e 6f 56 73 32 30 30 35 3b  e bool noVs2005;
2c810 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
2c820 62 6c 69 63 20 62 6f 6f 6c 20 4e 6f 56 73 32 30  blic bool NoVs20
2c830 30 35 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  05..            
2c840 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
2c850 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20     get { return 
2c860 6e 6f 56 73 32 30 30 35 3b 20 7d 0d 0a 20 20 20  noVs2005; }..   
2c870 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74               set
2c880 20 7b 20 6e 6f 56 73 32 30 30 35 20 3d 20 76 61   { noVs2005 = va
2c890 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  lue; }..        
2c8a0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
2c8b0 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
2c8c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c8d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c8e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c8f0 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
2c900 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
2c910 62 6f 6f 6c 20 6e 6f 56 73 32 30 30 38 3b 0d 0a  bool noVs2008;..
2c920 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
2c930 69 63 20 62 6f 6f 6c 20 4e 6f 56 73 32 30 30 38  ic bool NoVs2008
2c940 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
2c950 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2c960 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 6e 6f   get { return no
2c970 56 73 32 30 30 38 3b 20 7d 0d 0a 20 20 20 20 20  Vs2008; }..     
2c980 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b             set {
2c990 20 6e 6f 56 73 32 30 30 38 20 3d 20 76 61 6c 75   noVs2008 = valu
2c9a0 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  e; }..          
2c9b0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
2c9c0 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
2c9d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c9e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c9f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ca00 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
2ca10 20 20 20 20 20 20 70 72 69 76 61 74 65 20 62 6f        private bo
2ca20 6f 6c 20 6e 6f 56 73 32 30 31 30 3b 0d 0a 20 20  ol noVs2010;..  
2ca30 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
2ca40 20 62 6f 6f 6c 20 4e 6f 56 73 32 30 31 30 0d 0a   bool NoVs2010..
2ca50 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
2ca60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67                 g
2ca70 65 74 20 7b 20 72 65 74 75 72 6e 20 6e 6f 56 73  et { return noVs
2ca80 32 30 31 30 3b 20 7d 0d 0a 20 20 20 20 20 20 20  2010; }..       
2ca90 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 6e           set { n
2caa0 6f 56 73 32 30 31 30 20 3d 20 76 61 6c 75 65 3b  oVs2010 = value;
2cab0 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
2cac0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
2cad0 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
2cae0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2caf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2cb00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2cb10 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
2cb20 20 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c      private bool
2cb30 20 6e 6f 56 73 32 30 31 32 3b 0d 0a 20 20 20 20   noVs2012;..    
2cb40 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 62          public b
2cb50 6f 6f 6c 20 4e 6f 56 73 32 30 31 32 0d 0a 20 20  ool NoVs2012..  
2cb60 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
2cb70 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74               get
2cb80 20 7b 20 72 65 74 75 72 6e 20 6e 6f 56 73 32 30   { return noVs20
2cb90 31 32 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  12; }..         
2cba0 20 20 20 20 20 20 20 73 65 74 20 7b 20 6e 6f 56         set { noV
2cbb0 73 32 30 31 32 20 3d 20 76 61 6c 75 65 3b 20 7d  s2012 = value; }
2cbc0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
2cbd0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
2cbe0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2cbf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2cc00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2cc10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2cc20 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
2cc30 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 6e    private bool n
2cc40 6f 56 73 32 30 31 33 3b 0d 0a 20 20 20 20 20 20  oVs2013;..      
2cc50 20 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f        public boo
2cc60 6c 20 4e 6f 56 73 32 30 31 33 0d 0a 20 20 20 20  l NoVs2013..    
2cc70 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
2cc80 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b             get {
2cc90 20 72 65 74 75 72 6e 20 6e 6f 56 73 32 30 31 33   return noVs2013
2cca0 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
2ccb0 20 20 20 20 20 73 65 74 20 7b 20 6e 6f 56 73 32       set { noVs2
2ccc0 30 31 33 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a  013 = value; }..
2ccd0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
2cce0 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
2ccf0 2f 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 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2cd40 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 6e 6f 56  private bool noV
2cd50 73 32 30 31 35 3b 0d 0a 20 20 20 20 20 20 20 20  s2015;..        
2cd60 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20      public bool 
2cd70 4e 6f 56 73 32 30 31 35 0d 0a 20 20 20 20 20 20  NoVs2015..      
2cd80 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
2cd90 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72           get { r
2cda0 65 74 75 72 6e 20 6e 6f 56 73 32 30 31 35 3b 20  eturn noVs2015; 
2cdb0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
2cdc0 20 20 20 73 65 74 20 7b 20 6e 6f 56 73 32 30 31     set { noVs201
2cdd0 35 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20  5 = value; }..  
2cde0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
2cdf0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
2ce00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ce10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ce20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ce30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
2ce40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
2ce50 69 76 61 74 65 20 62 6f 6f 6c 20 6e 6f 56 73 32  ivate bool noVs2
2ce60 30 31 37 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  017;..          
2ce70 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 4e 6f    public bool No
2ce80 56 73 32 30 31 37 0d 0a 20 20 20 20 20 20 20 20  Vs2017..        
2ce90 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
2cea0 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74         get { ret
2ceb0 75 72 6e 20 6e 6f 56 73 32 30 31 37 3b 20 7d 0d  urn noVs2017; }.
2cec0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2ced0 20 73 65 74 20 7b 20 6e 6f 56 73 32 30 31 37 20   set { noVs2017 
2cee0 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20  = value; }..    
2cef0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
2cf00 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
2cf10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2cf20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2cf30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2cf40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
2cf50 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76              priv
2cf60 61 74 65 20 62 6f 6f 6c 20 6e 6f 54 72 61 63 65  ate bool noTrace
2cf70 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ;..            p
2cf80 75 62 6c 69 63 20 62 6f 6f 6c 20 4e 6f 54 72 61  ublic bool NoTra
2cf90 63 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ce..            
2cfa0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
2cfb0 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20     get { return 
2cfc0 6e 6f 54 72 61 63 65 3b 20 7d 0d 0a 20 20 20 20  noTrace; }..    
2cfd0 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20              set 
2cfe0 7b 20 6e 6f 54 72 61 63 65 20 3d 20 76 61 6c 75  { noTrace = valu
2cff0 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  e; }..          
2d000 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
2d010 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
2d020 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d030 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d040 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d050 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
2d060 20 20 20 20 20 20 70 72 69 76 61 74 65 20 62 6f        private bo
2d070 6f 6c 20 6e 6f 43 6f 6e 73 6f 6c 65 3b 0d 0a 20  ol noConsole;.. 
2d080 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
2d090 63 20 62 6f 6f 6c 20 4e 6f 43 6f 6e 73 6f 6c 65  c bool NoConsole
2d0a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
2d0b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2d0c0 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 6e 6f   get { return no
2d0d0 43 6f 6e 73 6f 6c 65 3b 20 7d 0d 0a 20 20 20 20  Console; }..    
2d0e0 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20              set 
2d0f0 7b 20 6e 6f 43 6f 6e 73 6f 6c 65 20 3d 20 76 61  { noConsole = va
2d100 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  lue; }..        
2d110 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
2d120 20 20 20 20 20 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 2f 2f 2f 2f  ////////////////
2d150 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d160 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
2d170 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
2d180 62 6f 6f 6c 20 6e 6f 4c 6f 67 3b 0d 0a 20 20 20  bool noLog;..   
2d190 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
2d1a0 62 6f 6f 6c 20 4e 6f 4c 6f 67 0d 0a 20 20 20 20  bool NoLog..    
2d1b0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
2d1c0 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b             get {
2d1d0 20 72 65 74 75 72 6e 20 6e 6f 4c 6f 67 3b 20 7d   return noLog; }
2d1e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2d1f0 20 20 73 65 74 20 7b 20 6e 6f 4c 6f 67 20 3d 20    set { noLog = 
2d200 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20  value; }..      
2d210 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
2d220 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
2d230 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d240 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d250 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d260 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
2d270 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
2d280 65 20 62 6f 6f 6c 20 74 68 72 6f 77 4f 6e 4d 69  e bool throwOnMi
2d290 73 73 69 6e 67 3b 0d 0a 20 20 20 20 20 20 20 20  ssing;..        
2d2a0 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20      public bool 
2d2b0 54 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 0d 0a  ThrowOnMissing..
2d2c0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
2d2d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67                 g
2d2e0 65 74 20 7b 20 72 65 74 75 72 6e 20 74 68 72 6f  et { return thro
2d2f0 77 4f 6e 4d 69 73 73 69 6e 67 3b 20 7d 0d 0a 20  wOnMissing; }.. 
2d300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
2d310 65 74 20 7b 20 74 68 72 6f 77 4f 6e 4d 69 73 73  et { throwOnMiss
2d320 69 6e 67 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a  ing = value; }..
2d330 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
2d340 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
2d350 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d360 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d370 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d380 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d390 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2d3a0 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 77 68 61  private bool wha
2d3b0 74 49 66 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  tIf;..          
2d3c0 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 57 68    public bool Wh
2d3d0 61 74 49 66 0d 0a 20 20 20 20 20 20 20 20 20 20  atIf..          
2d3e0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
2d3f0 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72       get { retur
2d400 6e 20 77 68 61 74 49 66 3b 20 7d 0d 0a 20 20 20  n whatIf; }..   
2d410 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74               set
2d420 20 7b 20 77 68 61 74 49 66 20 3d 20 76 61 6c 75   { whatIf = valu
2d430 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  e; }..          
2d440 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
2d450 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
2d460 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d470 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d480 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d490 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
2d4a0 20 20 20 20 20 20 70 72 69 76 61 74 65 20 62 6f        private bo
2d4b0 6f 6c 20 64 65 62 75 67 3b 0d 0a 20 20 20 20 20  ol debug;..     
2d4c0 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f         public bo
2d4d0 6f 6c 20 44 65 62 75 67 0d 0a 20 20 20 20 20 20  ol Debug..      
2d4e0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
2d4f0 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72           get { r
2d500 65 74 75 72 6e 20 64 65 62 75 67 3b 20 7d 0d 0a  eturn debug; }..
2d510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d520 73 65 74 20 7b 20 64 65 62 75 67 20 3d 20 76 61  set { debug = va
2d530 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  lue; }..        
2d540 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
2d550 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
2d560 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d570 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d580 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d590 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
2d5a0 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
2d5b0 62 6f 6f 6c 20 76 65 72 62 6f 73 65 3b 0d 0a 20  bool verbose;.. 
2d5c0 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
2d5d0 63 20 62 6f 6f 6c 20 56 65 72 62 6f 73 65 0d 0a  c bool Verbose..
2d5e0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
2d5f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67                 g
2d600 65 74 20 7b 20 72 65 74 75 72 6e 20 76 65 72 62  et { return verb
2d610 6f 73 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  ose; }..        
2d620 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 76 65          set { ve
2d630 72 62 6f 73 65 20 3d 20 76 61 6c 75 65 3b 20 7d  rbose = value; }
2d640 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
2d650 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
2d660 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d670 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d680 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d690 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d6a0 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
2d6b0 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 63    private bool c
2d6c0 6f 6e 66 69 72 6d 3b 0d 0a 20 20 20 20 20 20 20  onfirm;..       
2d6d0 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c       public bool
2d6e0 20 43 6f 6e 66 69 72 6d 0d 0a 20 20 20 20 20 20   Confirm..      
2d6f0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
2d700 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72           get { r
2d710 65 74 75 72 6e 20 63 6f 6e 66 69 72 6d 3b 20 7d  eturn confirm; }
2d720 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2d730 20 20 73 65 74 20 7b 20 63 6f 6e 66 69 72 6d 20    set { confirm 
2d740 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20  = value; }..    
2d750 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
2d760 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f         #endregio
2d770 6e 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  n..        }..  
2d780 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
2d790 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
2d7a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d7b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d7c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d7d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d7e0 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23  ///....        #
2d7f0 72 65 67 69 6f 6e 20 46 72 61 6d 65 77 6f 72 6b  region Framework
2d800 4c 69 73 74 20 43 6c 61 73 73 0d 0a 20 20 20 20  List Class..    
2d810 20 20 20 20 70 72 69 76 61 74 65 20 73 65 61 6c      private seal
2d820 65 64 20 63 6c 61 73 73 20 46 72 61 6d 65 77 6f  ed class Framewo
2d830 72 6b 4c 69 73 74 0d 0a 20 20 20 20 20 20 20 20  rkList..        
2d840 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  {..            #
2d850 72 65 67 69 6f 6e 20 50 75 62 6c 69 63 20 43 6f  region Public Co
2d860 6e 73 74 72 75 63 74 6f 72 73 0d 0a 20 20 20 20  nstructors..    
2d870 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 46          public F
2d880 72 61 6d 65 77 6f 72 6b 4c 69 73 74 28 29 0d 0a  rameworkList()..
2d890 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
2d8a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
2d8b0 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20  / do nothing... 
2d8c0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
2d8d0 20 20 20 20 20 20 20 20 20 20 23 65 6e 64 72 65            #endre
2d8e0 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20  gion....        
2d8f0 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
2d900 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d910 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d920 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d930 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
2d940 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50         #region P
2d950 75 62 6c 69 63 20 4d 65 74 68 6f 64 73 0d 0a 20  ublic Methods.. 
2d960 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
2d970 74 65 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b  te MockRegistryK
2d980 65 79 20 72 6f 6f 74 4b 65 79 3b 0d 0a 20 20 20  ey rootKey;..   
2d990 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
2d9a0 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20  MockRegistryKey 
2d9b0 52 6f 6f 74 4b 65 79 0d 0a 20 20 20 20 20 20 20  RootKey..       
2d9c0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
2d9d0 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65          get { re
2d9e0 74 75 72 6e 20 72 6f 6f 74 4b 65 79 3b 20 7d 0d  turn rootKey; }.
2d9f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2da00 20 73 65 74 20 7b 20 72 6f 6f 74 4b 65 79 20 3d   set { rootKey =
2da10 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20   value; }..     
2da20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
2da30 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
2da40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2da50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2da60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2da70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
2da80 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
2da90 74 65 20 53 74 72 69 6e 67 4c 69 73 74 20 6e 61  te StringList na
2daa0 6d 65 73 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  mes;..          
2dab0 20 20 70 75 62 6c 69 63 20 53 74 72 69 6e 67 4c    public StringL
2dac0 69 73 74 20 4e 61 6d 65 73 0d 0a 20 20 20 20 20  ist Names..     
2dad0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
2dae0 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20            get { 
2daf0 72 65 74 75 72 6e 20 6e 61 6d 65 73 3b 20 7d 0d  return names; }.
2db00 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2db10 20 73 65 74 20 7b 20 6e 61 6d 65 73 20 3d 20 76   set { names = v
2db20 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20  alue; }..       
2db30 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
2db40 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
2db50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2db60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2db70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2db80 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
2db90 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65           private
2dba0 20 56 65 72 73 69 6f 6e 4d 61 70 20 76 65 72 73   VersionMap vers
2dbb0 69 6f 6e 73 3b 0d 0a 20 20 20 20 20 20 20 20 20  ions;..         
2dbc0 20 20 20 70 75 62 6c 69 63 20 56 65 72 73 69 6f     public Versio
2dbd0 6e 4d 61 70 20 56 65 72 73 69 6f 6e 73 0d 0a 20  nMap Versions.. 
2dbe0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
2dbf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65                ge
2dc00 74 20 7b 20 72 65 74 75 72 6e 20 76 65 72 73 69  t { return versi
2dc10 6f 6e 73 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  ons; }..        
2dc20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 76 65          set { ve
2dc30 72 73 69 6f 6e 73 20 3d 20 76 61 6c 75 65 3b 20  rsions = value; 
2dc40 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
2dc50 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2dc60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2dc70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2dc80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2dc90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2dca0 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
2dcb0 20 20 20 70 72 69 76 61 74 65 20 53 74 72 69 6e     private Strin
2dcc0 67 4c 69 73 74 20 70 6c 61 74 66 6f 72 6d 4e 61  gList platformNa
2dcd0 6d 65 73 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  mes;..          
2dce0 20 20 70 75 62 6c 69 63 20 53 74 72 69 6e 67 4c    public StringL
2dcf0 69 73 74 20 50 6c 61 74 66 6f 72 6d 4e 61 6d 65  ist PlatformName
2dd00 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  s..            {
2dd10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2dd20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 70    get { return p
2dd30 6c 61 74 66 6f 72 6d 4e 61 6d 65 73 3b 20 7d 0d  latformNames; }.
2dd40 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2dd50 20 73 65 74 20 7b 20 70 6c 61 74 66 6f 72 6d 4e   set { platformN
2dd60 61 6d 65 73 20 3d 20 76 61 6c 75 65 3b 20 7d 0d  ames = value; }.
2dd70 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
2dd80 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e 64              #end
2dd90 72 65 67 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20  region..        
2dda0 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72  }..        #endr
2ddb0 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20  egion....       
2ddc0 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
2ddd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2dde0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ddf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2de00 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
2de10 20 20 20 20 23 72 65 67 69 6f 6e 20 56 73 4c 69      #region VsLi
2de20 73 74 20 43 6c 61 73 73 0d 0a 20 20 20 20 20 20  st Class..      
2de30 20 20 70 72 69 76 61 74 65 20 73 65 61 6c 65 64    private sealed
2de40 20 63 6c 61 73 73 20 56 73 4c 69 73 74 0d 0a 20   class VsList.. 
2de50 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
2de60 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50 75        #region Pu
2de70 62 6c 69 63 20 43 6f 6e 73 74 72 75 63 74 6f 72  blic Constructor
2de80 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  s..            p
2de90 75 62 6c 69 63 20 56 73 4c 69 73 74 28 29 0d 0a  ublic VsList()..
2dea0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
2deb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
2dec0 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20  / do nothing... 
2ded0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
2dee0 20 20 20 20 20 20 20 20 20 20 23 65 6e 64 72 65            #endre
2def0 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20  gion....        
2df00 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
2df10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2df20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2df30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2df40 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
2df50 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50         #region P
2df60 75 62 6c 69 63 20 50 72 6f 70 65 72 74 69 65 73  ublic Properties
2df70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
2df80 69 76 61 74 65 20 4d 6f 63 6b 52 65 67 69 73 74  ivate MockRegist
2df90 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79 3b 0d 0a  ryKey rootKey;..
2dfa0 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
2dfb0 69 63 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b  ic MockRegistryK
2dfc0 65 79 20 52 6f 6f 74 4b 65 79 0d 0a 20 20 20 20  ey RootKey..    
2dfd0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
2dfe0 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b             get {
2dff0 20 72 65 74 75 72 6e 20 72 6f 6f 74 4b 65 79 3b   return rootKey;
2e000 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
2e010 20 20 20 20 73 65 74 20 7b 20 72 6f 6f 74 4b 65      set { rootKe
2e020 79 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20  y = value; }..  
2e030 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
2e040 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
2e050 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e060 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e070 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e080 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
2e090 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
2e0a0 69 76 61 74 65 20 56 65 72 73 69 6f 6e 4c 69 73  ivate VersionLis
2e0b0 74 20 76 65 72 73 69 6f 6e 73 3b 0d 0a 20 20 20  t versions;..   
2e0c0 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
2e0d0 56 65 72 73 69 6f 6e 4c 69 73 74 20 56 65 72 73  VersionList Vers
2e0e0 69 6f 6e 73 0d 0a 20 20 20 20 20 20 20 20 20 20  ions..          
2e0f0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
2e100 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72       get { retur
2e110 6e 20 76 65 72 73 69 6f 6e 73 3b 20 7d 0d 0a 20  n versions; }.. 
2e120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
2e130 65 74 20 7b 20 76 65 72 73 69 6f 6e 73 20 3d 20  et { versions = 
2e140 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20  value; }..      
2e150 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
2e160 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d       #endregion.
2e170 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..    
2e180 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
2e190 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
2e1a0 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  on....        //
2e1b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e1c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e1d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e1e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e1f0 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
2e200 20 23 72 65 67 69 6f 6e 20 50 72 69 76 61 74 65   #region Private
2e210 20 43 6f 6e 73 74 61 6e 74 20 44 61 74 61 0d 0a   Constant Data..
2e220 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20          #region 
2e230 50 61 63 6b 61 67 65 20 26 20 50 72 6f 76 69 64  Package & Provid
2e240 65 72 20 4e 61 6d 65 73 0d 0a 20 20 20 20 20 20  er Names..      
2e250 20 20 70 72 69 76 61 74 65 20 63 6f 6e 73 74 20    private const 
2e260 73 74 72 69 6e 67 20 43 6f 72 65 46 69 6c 65 4e  string CoreFileN
2e270 61 6d 65 20 3d 20 22 53 79 73 74 65 6d 2e 44 61  ame = "System.Da
2e280 74 61 2e 53 51 4c 69 74 65 2e 64 6c 6c 22 3b 0d  ta.SQLite.dll";.
2e290 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65  .        private
2e2a0 20 63 6f 6e 73 74 20 73 74 72 69 6e 67 20 4c 69   const string Li
2e2b0 6e 71 46 69 6c 65 4e 61 6d 65 20 3d 20 22 53 79  nqFileName = "Sy
2e2c0 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65  stem.Data.SQLite
2e2d0 2e 4c 69 6e 71 2e 64 6c 6c 22 3b 0d 0a 20 20 20  .Linq.dll";..   
2e2e0 20 20 20 20 20 70 72 69 76 61 74 65 20 63 6f 6e       private con
2e2f0 73 74 20 73 74 72 69 6e 67 20 45 66 36 46 69 6c  st string Ef6Fil
2e300 65 4e 61 6d 65 20 3d 20 22 53 79 73 74 65 6d 2e  eName = "System.
2e310 44 61 74 61 2e 53 51 4c 69 74 65 2e 45 46 36 2e  Data.SQLite.EF6.
2e320 64 6c 6c 22 3b 0d 0a 20 20 20 20 20 20 20 20 70  dll";..        p
2e330 72 69 76 61 74 65 20 63 6f 6e 73 74 20 73 74 72  rivate const str
2e340 69 6e 67 20 44 65 73 69 67 6e 65 72 46 69 6c 65  ing DesignerFile
2e350 4e 61 6d 65 20 3d 20 22 53 51 4c 69 74 65 2e 44  Name = "SQLite.D
2e360 65 73 69 67 6e 65 72 2e 64 6c 6c 22 3b 0d 0a 20  esigner.dll";.. 
2e370 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 63         private c
2e380 6f 6e 73 74 20 73 74 72 69 6e 67 20 50 72 6f 76  onst string Prov
2e390 69 64 65 72 4e 61 6d 65 20 3d 20 22 53 51 4c 69  iderName = "SQLi
2e3a0 74 65 20 44 61 74 61 20 50 72 6f 76 69 64 65 72  te Data Provider
2e3b0 22 3b 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76  ";..        priv
2e3c0 61 74 65 20 63 6f 6e 73 74 20 73 74 72 69 6e 67  ate const string
2e3d0 20 50 72 6f 6a 65 63 74 4e 61 6d 65 20 3d 20 22   ProjectName = "
2e3e0 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69  System.Data.SQLi
2e3f0 74 65 22 3b 0d 0a 20 20 20 20 20 20 20 20 70 72  te";..        pr
2e400 69 76 61 74 65 20 63 6f 6e 73 74 20 73 74 72 69  ivate const stri
2e410 6e 67 20 4c 65 67 61 63 79 50 72 6f 6a 65 63 74  ng LegacyProject
2e420 4e 61 6d 65 20 3d 20 22 53 51 4c 69 74 65 22 3b  Name = "SQLite";
2e430 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
2e440 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e450 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e460 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e470 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e480 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70  ///....        p
2e490 72 69 76 61 74 65 20 63 6f 6e 73 74 20 73 74 72  rivate const str
2e4a0 69 6e 67 20 44 65 73 63 72 69 70 74 69 6f 6e 20  ing Description 
2e4b0 3d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22  =..            "
2e4c0 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72 6b 20 44  .NET Framework D
2e4d0 61 74 61 20 50 72 6f 76 69 64 65 72 20 66 6f 72  ata Provider for
2e4e0 20 53 51 4c 69 74 65 22 3b 0d 0a 20 20 20 20 20   SQLite";..     
2e4f0 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
2e500 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
2e510 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e520 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e530 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e540 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e550 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76  ....        priv
2e560 61 74 65 20 63 6f 6e 73 74 20 73 74 72 69 6e 67  ate const string
2e570 20 43 4c 52 76 32 49 6d 61 67 65 52 75 6e 74 69   CLRv2ImageRunti
2e580 6d 65 56 65 72 73 69 6f 6e 20 3d 20 22 76 32 2e  meVersion = "v2.
2e590 30 2e 35 30 37 32 37 22 3b 0d 0a 20 20 20 20 20  0.50727";..     
2e5a0 20 20 20 70 72 69 76 61 74 65 20 63 6f 6e 73 74     private const
2e5b0 20 73 74 72 69 6e 67 20 43 4c 52 76 34 49 6d 61   string CLRv4Ima
2e5c0 67 65 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e  geRuntimeVersion
2e5d0 20 3d 20 22 76 34 2e 30 2e 33 30 33 31 39 22 3b   = "v4.0.30319";
2e5e0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
2e5f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e600 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e610 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e620 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e630 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70  ///....        p
2e640 72 69 76 61 74 65 20 63 6f 6e 73 74 20 73 74 72  rivate const str
2e650 69 6e 67 20 53 79 73 74 65 6d 45 66 36 41 73 73  ing SystemEf6Ass
2e660 65 6d 62 6c 79 4e 61 6d 65 20 3d 20 22 45 6e 74  emblyName = "Ent
2e670 69 74 79 46 72 61 6d 65 77 6f 72 6b 2c 20 22 20  ityFramework, " 
2e680 2b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22  +..            "
2e690 56 65 72 73 69 6f 6e 3d 36 2e 30 2e 30 2e 30 2c  Version=6.0.0.0,
2e6a0 20 43 75 6c 74 75 72 65 3d 6e 65 75 74 72 61 6c   Culture=neutral
2e6b0 2c 20 50 75 62 6c 69 63 4b 65 79 54 6f 6b 65 6e  , PublicKeyToken
2e6c0 3d 62 37 37 61 35 63 35 36 31 39 33 34 65 30 38  =b77a5c561934e08
2e6d0 39 22 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f  9";....        /
2e6e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e6f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e700 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e710 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e720 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
2e730 20 20 70 72 69 76 61 74 65 20 63 6f 6e 73 74 20    private const 
2e740 73 74 72 69 6e 67 20 4e 61 6d 65 41 6e 64 56 61  string NameAndVa
2e750 6c 75 65 46 6f 72 6d 61 74 20 3d 20 22 7b 30 7d  lueFormat = "{0}
2e760 3a 20 7b 31 7d 22 3b 0d 0a 20 20 20 20 20 20 20  : {1}";..       
2e770 20 70 72 69 76 61 74 65 20 63 6f 6e 73 74 20 73   private const s
2e780 74 72 69 6e 67 20 4c 6f 67 46 69 6c 65 53 75 66  tring LogFileSuf
2e790 66 69 78 20 3d 20 22 2e 6c 6f 67 22 3b 0d 0a 0d  fix = ".log";...
2e7a0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
2e7b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e7c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e7d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e7e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e7f0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76  ....        priv
2e800 61 74 65 20 63 6f 6e 73 74 20 73 74 72 69 6e 67  ate const string
2e810 20 56 73 44 65 76 45 6e 76 53 65 74 75 70 46 6f   VsDevEnvSetupFo
2e820 72 6d 61 74 20 3d 20 22 7b 30 7d 3a 20 7b 31 7d  rmat = "{0}: {1}
2e830 22 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ";....        //
2e840 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e850 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e860 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e870 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e880 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
2e890 20 70 72 69 76 61 74 65 20 63 6f 6e 73 74 20 73   private const s
2e8a0 74 72 69 6e 67 20 52 6f 6f 74 4b 65 79 4e 61 6d  tring RootKeyNam
2e8b0 65 20 3d 20 22 53 6f 66 74 77 61 72 65 22 3b 0d  e = "Software";.
2e8c0 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65  .        private
2e8d0 20 63 6f 6e 73 74 20 73 74 72 69 6e 67 20 57 6f   const string Wo
2e8e0 77 36 34 53 75 62 4b 65 79 4e 61 6d 65 20 3d 20  w64SubKeyName = 
2e8f0 22 57 6f 77 36 34 33 32 4e 6f 64 65 22 3b 0d 0a  "Wow6432Node";..
2e900 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
2e910 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e920 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e930 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e940 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e950 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 0d  /....        //.
2e960 0a 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45  .        // NOTE
2e970 3a 20 54 68 65 20 2e 4e 45 54 20 46 72 61 6d 65  : The .NET Frame
2e980 77 6f 72 6b 20 68 61 73 20 62 6f 74 68 20 33 32  work has both 32
2e990 2d 62 69 74 20 61 6e 64 20 36 34 2d 62 69 74 20  -bit and 64-bit 
2e9a0 65 64 69 74 69 6f 6e 73 2e 0d 0a 20 20 20 20 20  editions...     
2e9b0 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 70     //..        p
2e9c0 72 69 76 61 74 65 20 73 74 61 74 69 63 20 72 65  rivate static re
2e9d0 61 64 6f 6e 6c 79 20 62 6f 6f 6c 20 4e 65 74 46  adonly bool NetF
2e9e0 78 49 73 33 32 42 69 74 4f 6e 6c 79 20 3d 20 66  xIs32BitOnly = f
2e9f0 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  alse;....       
2ea00 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
2ea10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ea20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ea30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ea40 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
2ea50 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
2ea60 2f 2f 20 4e 4f 54 45 3a 20 46 6f 72 20 6e 6f 77  // NOTE: For now
2ea70 2c 20 56 69 73 75 61 6c 20 53 74 75 64 69 6f 20  , Visual Studio 
2ea80 69 73 20 61 6c 77 61 79 73 20 61 20 33 32 2d 62  is always a 32-b
2ea90 69 74 20 61 70 70 6c 69 63 61 74 69 6f 6e 2e 0d  it application..
2eaa0 0a 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20  .        //..   
2eab0 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61       private sta
2eac0 74 69 63 20 72 65 61 64 6f 6e 6c 79 20 62 6f 6f  tic readonly boo
2ead0 6c 20 56 73 49 73 33 32 42 69 74 4f 6e 6c 79 20  l VsIs32BitOnly 
2eae0 3d 20 74 72 75 65 3b 0d 0a 0d 0a 20 20 20 20 20  = true;....     
2eaf0 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
2eb00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2eb10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2eb20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2eb30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
2eb40 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74        private st
2eb50 61 74 69 63 20 72 65 61 64 6f 6e 6c 79 20 73 74  atic readonly st
2eb60 72 69 6e 67 20 56 73 49 64 46 6f 72 6d 61 74 20  ring VsIdFormat 
2eb70 3d 20 22 42 22 3b 0d 0a 0d 0a 20 20 20 20 20 20  = "B";....      
2eb80 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
2eb90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2eba0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ebb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ebc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
2ebd0 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61       private sta
2ebe0 74 69 63 20 72 65 61 64 6f 6e 6c 79 20 73 74 72  tic readonly str
2ebf0 69 6e 67 20 58 50 61 74 68 46 6f 72 41 64 64 45  ing XPathForAddE
2ec00 6c 65 6d 65 6e 74 20 3d 0d 0a 20 20 20 20 20 20  lement =..      
2ec10 20 20 20 20 20 20 22 63 6f 6e 66 69 67 75 72 61        "configura
2ec20 74 69 6f 6e 2f 73 79 73 74 65 6d 2e 64 61 74 61  tion/system.data
2ec30 2f 44 62 50 72 6f 76 69 64 65 72 46 61 63 74 6f  /DbProviderFacto
2ec40 72 69 65 73 2f 61 64 64 5b 40 69 6e 76 61 72 69  ries/add[@invari
2ec50 61 6e 74 3d 5c 22 7b 30 7d 5c 22 5d 22 3b 0d 0a  ant=\"{0}\"]";..
2ec60 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
2ec70 65 20 73 74 61 74 69 63 20 72 65 61 64 6f 6e 6c  e static readonl
2ec80 79 20 73 74 72 69 6e 67 20 58 50 61 74 68 46 6f  y string XPathFo
2ec90 72 52 65 6d 6f 76 65 45 6c 65 6d 65 6e 74 20 3d  rRemoveElement =
2eca0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 63  ..            "c
2ecb0 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2f 73 79 73  onfiguration/sys
2ecc0 74 65 6d 2e 64 61 74 61 2f 44 62 50 72 6f 76 69  tem.data/DbProvi
2ecd0 64 65 72 46 61 63 74 6f 72 69 65 73 2f 72 65 6d  derFactories/rem
2ece0 6f 76 65 5b 40 69 6e 76 61 72 69 61 6e 74 3d 5c  ove[@invariant=\
2ecf0 22 7b 30 7d 5c 22 5d 22 3b 0d 0a 20 20 20 20 20  "{0}\"]";..     
2ed00 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
2ed10 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
2ed20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ed30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ed40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ed50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ed60 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67  ....        #reg
2ed70 69 6f 6e 20 50 72 69 76 61 74 65 20 53 74 61 74  ion Private Stat
2ed80 69 63 20 44 61 74 61 0d 0a 20 20 20 20 20 20 20  ic Data..       
2ed90 20 23 72 65 67 69 6f 6e 20 44 69 61 67 6e 6f 73   #region Diagnos
2eda0 74 69 63 73 20 26 20 4c 6f 67 67 69 6e 67 0d 0a  tics & Logging..
2edb0 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
2edc0 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 43 61 63      // NOTE: Cac
2edd0 68 65 20 74 68 65 20 63 75 72 72 65 6e 74 20 70  he the current p
2ede0 72 6f 63 65 73 73 20 61 6e 64 20 61 73 73 65 6d  rocess and assem
2edf0 62 6c 79 20 61 73 20 74 68 65 79 20 64 6f 20 6e  bly as they do n
2ee00 6f 74 20 63 68 61 6e 67 65 0d 0a 20 20 20 20 20  ot change..     
2ee10 20 20 20 2f 2f 20 20 20 20 20 20 20 61 6e 64 20     //       and 
2ee20 6d 61 79 20 62 65 20 6e 65 65 64 65 64 20 69 6e  may be needed in
2ee30 20 71 75 69 74 65 20 61 20 66 65 77 20 64 69 66   quite a few dif
2ee40 66 65 72 65 6e 74 20 70 6c 61 63 65 73 2e 0d 0a  ferent places...
2ee50 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
2ee60 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74      private stat
2ee70 69 63 20 50 72 6f 63 65 73 73 20 74 68 69 73 50  ic Process thisP
2ee80 72 6f 63 65 73 73 20 3d 20 50 72 6f 63 65 73 73  rocess = Process
2ee90 2e 47 65 74 43 75 72 72 65 6e 74 50 72 6f 63 65  .GetCurrentProce
2eea0 73 73 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 70  ss();..        p
2eeb0 72 69 76 61 74 65 20 73 74 61 74 69 63 20 41 73  rivate static As
2eec0 73 65 6d 62 6c 79 20 74 68 69 73 41 73 73 65 6d  sembly thisAssem
2eed0 62 6c 79 20 3d 20 41 73 73 65 6d 62 6c 79 2e 47  bly = Assembly.G
2eee0 65 74 45 78 65 63 75 74 69 6e 67 41 73 73 65 6d  etExecutingAssem
2eef0 62 6c 79 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  bly();....      
2ef00 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
2ef10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ef20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ef30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ef40 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
2ef50 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
2ef60 20 2f 2f 20 4e 4f 54 45 3a 20 54 68 65 20 74 72   // NOTE: The tr
2ef70 61 63 65 20 63 61 74 65 67 6f 72 79 20 69 73 20  ace category is 
2ef80 74 68 65 20 73 61 6d 65 20 66 6f 72 20 62 6f 74  the same for bot
2ef90 68 20 74 68 65 20 64 65 62 75 67 20 61 6e 64 20  h the debug and 
2efa0 74 72 61 63 65 0d 0a 20 20 20 20 20 20 20 20 2f  trace..        /
2efb0 2f 20 20 20 20 20 20 20 63 61 6c 6c 62 61 63 6b  /       callback
2efc0 73 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 0d 0a  s...        //..
2efd0 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
2efe0 73 74 61 74 69 63 20 73 74 72 69 6e 67 20 74 72  static string tr
2eff0 61 63 65 43 61 74 65 67 6f 72 79 20 3d 20 28 74  aceCategory = (t
2f000 68 69 73 41 73 73 65 6d 62 6c 79 20 21 3d 20 6e  hisAssembly != n
2f010 75 6c 6c 29 20 3f 0d 0a 20 20 20 20 20 20 20 20  ull) ?..        
2f020 20 20 20 20 50 61 74 68 2e 47 65 74 46 69 6c 65      Path.GetFile
2f030 4e 61 6d 65 28 74 68 69 73 41 73 73 65 6d 62 6c  Name(thisAssembl
2f040 79 2e 4c 6f 63 61 74 69 6f 6e 29 20 3a 20 6e 75  y.Location) : nu
2f050 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f  ll;....        /
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 2f 2f 2f 2f 2f 2f  ////////////////
2f090 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f0a0 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
2f0b0 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 2f 2f    //..        //
2f0c0 20 4e 4f 54 45 3a 20 53 65 74 20 74 68 65 20 64   NOTE: Set the d
2f0d0 65 62 75 67 20 61 6e 64 20 74 72 61 63 65 20 6c  ebug and trace l
2f0e0 6f 67 67 69 6e 67 20 63 61 6c 6c 62 61 63 6b 73  ogging callbacks
2f0f0 20 75 73 65 64 20 62 79 20 74 68 65 0d 0a 20 20   used by the..  
2f100 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 61        //       a
2f110 70 70 6c 69 63 61 74 69 6f 6e 2e 0d 0a 20 20 20  pplication...   
2f120 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
2f130 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20   private static 
2f140 54 72 61 63 65 43 61 6c 6c 62 61 63 6b 20 64 65  TraceCallback de
2f150 62 75 67 43 61 6c 6c 62 61 63 6b 20 3d 20 41 70  bugCallback = Ap
2f160 70 44 65 62 75 67 3b 0d 0a 20 20 20 20 20 20 20  pDebug;..       
2f170 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20   private static 
2f180 54 72 61 63 65 43 61 6c 6c 62 61 63 6b 20 74 72  TraceCallback tr
2f190 61 63 65 43 61 6c 6c 62 61 63 6b 20 3d 20 41 70  aceCallback = Ap
2f1a0 70 54 72 61 63 65 3b 0d 0a 20 20 20 20 20 20 20  pTrace;..       
2f1b0 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20   #endregion.... 
2f1c0 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
2f1d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f1e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f1f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f200 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
2f210 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f  ..        #regio
2f220 6e 20 53 79 73 74 65 6d 20 44 69 72 65 63 74 6f  n System Directo
2f230 72 79 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76  ry..        priv
2f240 61 74 65 20 73 74 61 74 69 63 20 73 74 72 69 6e  ate static strin
2f250 67 20 73 79 73 74 65 6d 44 69 72 65 63 74 6f 72  g systemDirector
2f260 79 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a 23 69 66  y = null;....#if
2f270 20 57 49 4e 44 4f 57 53 0d 0a 20 20 20 20 20 20   WINDOWS..      
2f280 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63    private static
2f290 20 73 74 72 69 6e 67 20 73 79 73 74 65 6d 44 69   string systemDi
2f2a0 72 65 63 74 6f 72 79 57 6f 77 36 34 20 3d 20 6e  rectoryWow64 = n
2f2b0 75 6c 6c 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20  ull;..#endif..  
2f2c0 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
2f2d0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
2f2e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f2f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23  ///....        #
2f330 72 65 67 69 6f 6e 20 52 65 67 69 73 74 72 79 20  region Registry 
2f340 53 74 61 74 69 73 74 69 63 73 0d 0a 20 20 20 20  Statistics..    
2f350 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74      private stat
2f360 69 63 20 69 6e 74 20 66 69 6c 65 73 43 72 65 61  ic int filesCrea
2f370 74 65 64 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20  ted = 0;..      
2f380 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63    private static
2f390 20 69 6e 74 20 66 69 6c 65 73 4d 6f 64 69 66 69   int filesModifi
2f3a0 65 64 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20 20  ed = 0;..       
2f3b0 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20   private static 
2f3c0 69 6e 74 20 66 69 6c 65 73 44 65 6c 65 74 65 64  int filesDeleted
2f3d0 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20 20 20 23   = 0;..        #
2f3e0 65 6e 64 72 65 67 69 6f 6e 0d 0a 20 20 20 20 20  endregion..     
2f3f0 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
2f400 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
2f410 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f420 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f430 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f440 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f450 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67  ....        #reg
2f460 69 6f 6e 20 54 72 61 63 65 20 48 61 6e 64 6c 69  ion Trace Handli
2f470 6e 67 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76  ng..        priv
2f480 61 74 65 20 73 74 61 74 69 63 20 73 74 72 69 6e  ate static strin
2f490 67 20 47 65 74 4c 6f 67 46 69 6c 65 4e 61 6d 65  g GetLogFileName
2f4a0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  (..            s
2f4b0 74 72 69 6e 67 20 74 79 70 65 4e 61 6d 65 0d 0a  tring typeName..
2f4c0 20 20 20 20 20 20 20 20 20 20 20 20 29 20 2f 2a              ) /*
2f4d0 20 74 68 72 6f 77 20 2a 2f 0d 0a 20 20 20 20 20   throw */..     
2f4e0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
2f4f0 20 20 73 74 72 69 6e 67 20 66 69 6c 65 4e 61 6d    string fileNam
2f500 65 20 3d 20 50 61 74 68 2e 47 65 74 54 65 6d 70  e = Path.GetTemp
2f510 46 69 6c 65 4e 61 6d 65 28 29 3b 0d 0a 20 20 20  FileName();..   
2f520 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
2f530 64 69 72 65 63 74 6f 72 79 20 3d 20 50 61 74 68  directory = Path
2f540 2e 47 65 74 44 69 72 65 63 74 6f 72 79 4e 61 6d  .GetDirectoryNam
2f550 65 28 66 69 6c 65 4e 61 6d 65 29 3b 0d 0a 20 20  e(fileName);..  
2f560 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
2f570 20 66 69 6c 65 4e 61 6d 65 4f 6e 6c 79 20 3d 20   fileNameOnly = 
2f580 50 61 74 68 2e 47 65 74 46 69 6c 65 4e 61 6d 65  Path.GetFileName
2f590 57 69 74 68 6f 75 74 45 78 74 65 6e 73 69 6f 6e  WithoutExtension
2f5a0 28 66 69 6c 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20  (fileName);.... 
2f5b0 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
2f5c0 67 20 6e 65 77 46 69 6c 65 4e 61 6d 65 20 3d 20  g newFileName = 
2f5d0 50 61 74 68 2e 43 6f 6d 62 69 6e 65 28 64 69 72  Path.Combine(dir
2f5e0 65 63 74 6f 72 79 2c 20 53 74 72 69 6e 67 2e 46  ectory, String.F
2f5f0 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
2f600 20 20 20 20 20 20 20 20 22 7b 30 7d 7b 31 7d 7b          "{0}{1}{
2f610 32 7d 22 2c 20 74 72 61 63 65 43 61 74 65 67 6f  2}", traceCatego
2f620 72 79 2c 20 21 53 74 72 69 6e 67 2e 49 73 4e 75  ry, !String.IsNu
2f630 6c 6c 4f 72 45 6d 70 74 79 28 74 79 70 65 4e 61  llOrEmpty(typeNa
2f640 6d 65 29 20 3f 0d 0a 20 20 20 20 20 20 20 20 20  me) ?..         
2f650 20 20 20 20 20 20 20 20 20 20 20 22 2e 22 20 2b             "." +
2f660 20 74 79 70 65 4e 61 6d 65 20 3a 20 53 74 72 69   typeName : Stri
2f670 6e 67 2e 45 6d 70 74 79 2c 20 22 2e 22 20 2b 20  ng.Empty, "." + 
2f680 66 69 6c 65 4e 61 6d 65 4f 6e 6c 79 20 2b 0d 0a  fileNameOnly +..
2f690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f6a0 20 20 20 20 4c 6f 67 46 69 6c 65 53 75 66 66 69      LogFileSuffi
2f6b0 78 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  x));....        
2f6c0 20 20 20 20 46 69 6c 65 2e 4d 6f 76 65 28 66 69      File.Move(fi
2f6d0 6c 65 4e 61 6d 65 2c 20 6e 65 77 46 69 6c 65 4e  leName, newFileN
2f6e0 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ame);....       
2f6f0 20 20 20 20 20 72 65 74 75 72 6e 20 6e 65 77 46       return newF
2f700 69 6c 65 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20  ileName;..      
2f710 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f    }....        /
2f720 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f730 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f740 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f750 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f760 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
2f770 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63    private static
2f780 20 76 6f 69 64 20 41 70 70 44 65 62 75 67 28 0d   void AppDebug(.
2f790 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72  .            str
2f7a0 69 6e 67 20 6d 65 73 73 61 67 65 2c 0d 0a 20 20  ing message,..  
2f7b0 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
2f7c0 20 63 61 74 65 67 6f 72 79 0d 0a 20 20 20 20 20   category..     
2f7d0 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
2f7e0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
2f7f0 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 43   TraceOps.DebugC
2f800 6f 72 65 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ore(String.Forma
2f810 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
2f820 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62      TraceOps.Deb
2f830 75 67 46 6f 72 6d 61 74 2c 20 54 72 61 63 65 4f  ugFormat, TraceO
2f840 70 73 2e 4e 65 78 74 44 65 62 75 67 49 64 28 29  ps.NextDebugId()
2f850 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
2f860 20 20 20 54 72 61 63 65 4f 70 73 2e 54 69 6d 65     TraceOps.Time
2f870 53 74 61 6d 70 28 44 61 74 65 54 69 6d 65 2e 55  Stamp(DateTime.U
2f880 74 63 4e 6f 77 29 2c 20 6d 65 73 73 61 67 65 29  tcNow), message)
2f890 2c 20 63 61 74 65 67 6f 72 79 29 3b 0d 0a 20 20  , category);..  
2f8a0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
2f8b0 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
2f8c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f8d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f8e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f8f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
2f900 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74        private st
2f910 61 74 69 63 20 76 6f 69 64 20 41 70 70 54 72 61  atic void AppTra
2f920 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ce(..           
2f930 20 73 74 72 69 6e 67 20 6d 65 73 73 61 67 65 2c   string message,
2f940 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74  ..            st
2f950 72 69 6e 67 20 63 61 74 65 67 6f 72 79 0d 0a 20  ring category.. 
2f960 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
2f970 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
2f980 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 54 72       TraceOps.Tr
2f990 61 63 65 43 6f 72 65 28 53 74 72 69 6e 67 2e 46  aceCore(String.F
2f9a0 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
2f9b0 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73          TraceOps
2f9c0 2e 54 72 61 63 65 46 6f 72 6d 61 74 2c 20 54 72  .TraceFormat, Tr
2f9d0 61 63 65 4f 70 73 2e 4e 65 78 74 54 72 61 63 65  aceOps.NextTrace
2f9e0 49 64 28 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  Id(),..         
2f9f0 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e         TraceOps.
2fa00 54 69 6d 65 53 74 61 6d 70 28 44 61 74 65 54 69  TimeStamp(DateTi
2fa10 6d 65 2e 55 74 63 4e 6f 77 29 2c 20 6d 65 73 73  me.UtcNow), mess
2fa20 61 67 65 29 2c 20 63 61 74 65 67 6f 72 79 29 3b  age), category);
2fa30 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..   
2fa40 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d       #endregion.
2fa50 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
2fa60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2fa70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2fa80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2fa90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2faa0 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72  //....        #r
2fab0 65 67 69 6f 6e 20 47 65 6e 65 72 69 63 20 50 6c  egion Generic Pl
2fac0 61 74 66 6f 72 6d 20 48 61 6e 64 6c 69 6e 67 0d  atform Handling.
2fad0 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65  .        private
2fae0 20 73 74 61 74 69 63 20 62 6f 6f 6c 20 49 73 36   static bool Is6
2faf0 34 42 69 74 50 72 6f 63 65 73 73 28 29 0d 0a 20  4BitProcess().. 
2fb00 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
2fb10 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
2fb20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 52        // NOTE: R
2fb30 65 74 75 72 6e 73 20 74 72 75 65 20 69 66 20 74  eturns true if t
2fb40 68 65 20 63 75 72 72 65 6e 74 20 70 72 6f 63 65  he current proce
2fb50 73 73 20 69 73 20 36 34 2d 62 69 74 2e 20 20 49  ss is 64-bit.  I
2fb60 66 20 74 68 69 73 0d 0a 20 20 20 20 20 20 20 20  f this..        
2fb70 20 20 20 20 2f 2f 20 20 20 20 20 20 20 69 73 20      //       is 
2fb80 74 72 75 65 2c 20 77 65 20 2a 6b 6e 6f 77 2a 20  true, we *know* 
2fb90 74 68 61 74 20 77 65 20 6d 75 73 74 20 62 65 20  that we must be 
2fba0 72 75 6e 6e 69 6e 67 20 6f 6e 20 61 20 36 34 2d  running on a 64-
2fbb0 62 69 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20  bit..           
2fbc0 20 2f 2f 20 20 20 20 20 20 20 6f 70 65 72 61 74   //       operat
2fbd0 69 6e 67 20 73 79 73 74 65 6d 20 61 73 20 77 65  ing system as we
2fbe0 6c 6c 2e 20 20 48 6f 77 65 76 65 72 2c 20 69 66  ll.  However, if
2fbf0 20 74 68 69 73 20 69 73 20 66 61 6c 73 65 2c 20   this is false, 
2fc00 77 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  we..            
2fc10 2f 2f 20 20 20 20 20 20 20 64 6f 20 6e 6f 74 20  //       do not 
2fc20 6e 65 63 65 73 73 61 72 69 6c 79 20 6b 6e 6f 77  necessarily know
2fc30 20 74 68 61 74 20 77 65 20 61 72 65 20 72 75 6e   that we are run
2fc40 6e 69 6e 67 20 6f 6e 20 61 20 33 32 2d 62 69 74  ning on a 32-bit
2fc50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
2fc60 20 20 20 20 20 20 20 6f 70 65 72 61 74 69 6e 67         operating
2fc70 20 73 79 73 74 65 6d 2c 20 64 75 65 20 74 6f 20   system, due to 
2fc80 57 6f 57 36 34 20 28 57 69 6e 33 32 2d 6f 6e 2d  WoW64 (Win32-on-
2fc90 57 69 6e 36 34 29 2c 20 65 74 63 2e 0d 0a 20 20  Win64), etc...  
2fca0 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
2fcb0 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
2fcc0 20 28 49 6e 74 50 74 72 2e 53 69 7a 65 20 3d 3d   (IntPtr.Size ==
2fcd0 20 73 69 7a 65 6f 66 28 6c 6f 6e 67 29 29 3b 20   sizeof(long)); 
2fce0 2f 2f 20 4e 4f 54 45 3a 20 50 6f 69 6e 74 65 72  // NOTE: Pointer
2fcf0 20 69 73 20 36 34 2d 62 69 74 73 3f 0d 0a 20 20   is 64-bits?..  
2fd00 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
2fd10 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
2fd20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2fd30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2fd40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2fd50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
2fd60 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74        private st
2fd70 61 74 69 63 20 62 6f 6f 6c 20 49 73 53 75 70 70  atic bool IsSupp
2fd80 6f 72 74 65 64 52 6f 6f 74 4b 65 79 28 0d 0a 20  ortedRootKey(.. 
2fd90 20 20 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52             MockR
2fda0 65 67 69 73 74 72 79 20 72 65 67 69 73 74 72 79  egistry registry
2fdb0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 4d  ,..            M
2fdc0 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 72  ockRegistryKey r
2fdd0 6f 6f 74 4b 65 79 0d 0a 20 20 20 20 20 20 20 20  ootKey..        
2fde0 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b      )..        {
2fdf0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
2fe00 74 75 72 6e 20 4f 62 6a 65 63 74 2e 52 65 66 65  turn Object.Refe
2fe10 72 65 6e 63 65 45 71 75 61 6c 73 28 72 6f 6f 74  renceEquals(root
2fe20 4b 65 79 2c 20 72 65 67 69 73 74 72 79 2e 43 75  Key, registry.Cu
2fe30 72 72 65 6e 74 55 73 65 72 29 20 7c 7c 0d 0a 20  rrentUser) ||.. 
2fe40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4f                 O
2fe50 62 6a 65 63 74 2e 52 65 66 65 72 65 6e 63 65 45  bject.ReferenceE
2fe60 71 75 61 6c 73 28 72 6f 6f 74 4b 65 79 2c 20 72  quals(rootKey, r
2fe70 65 67 69 73 74 72 79 2e 4c 6f 63 61 6c 4d 61 63  egistry.LocalMac
2fe80 68 69 6e 65 29 3b 0d 0a 20 20 20 20 20 20 20 20  hine);..        
2fe90 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f  ////////////////
2fec0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2fed0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2fee0 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
2fef0 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 73  private static s
2ff00 74 72 69 6e 67 20 47 65 74 52 6f 6f 74 4b 65 79  tring GetRootKey
2ff10 4e 61 6d 65 28 0d 0a 20 20 20 20 20 20 20 20 20  Name(..         
2ff20 20 20 20 62 6f 6f 6c 20 70 65 72 55 73 65 72 2c     bool perUser,
2ff30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f  ..            bo
2ff40 6f 6c 20 77 6f 77 36 34 0d 0a 20 20 20 20 20 20  ol wow64..      
2ff50 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
2ff60 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
2ff70 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
2ff80 2f 2f 20 42 55 47 46 49 58 3a 20 41 70 70 61 72  // BUGFIX: Appar
2ff90 65 6e 74 6c 79 2c 20 74 68 65 20 70 65 72 2d 75  ently, the per-u
2ffa0 73 65 72 20 72 65 67 69 73 74 72 79 20 68 69 76  ser registry hiv
2ffb0 65 20 64 6f 65 73 20 6e 6f 74 20 75 73 65 0d 0a  e does not use..
2ffc0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
2ffd0 20 20 20 20 20 20 20 74 68 65 20 22 57 6f 77 36         the "Wow6
2ffe0 34 33 32 4e 6f 64 65 22 20 6e 6f 64 65 20 74 6f  432Node" node to
2fff0 20 73 74 6f 72 65 20 73 65 74 74 69 6e 67 73 20   store settings 
30000 66 6f 72 20 33 32 2d 62 69 74 0d 0a 20 20 20 20  for 32-bit..    
30010 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
30020 20 20 20 61 70 70 6c 69 63 61 74 69 6f 6e 73 20     applications 
30030 72 75 6e 6e 69 6e 67 20 6f 6e 20 61 20 36 34 2d  running on a 64-
30040 62 69 74 20 6f 70 65 72 61 74 69 6e 67 20 73 79  bit operating sy
30050 73 74 65 6d 2e 0d 0a 20 20 20 20 20 20 20 20 20  stem...         
30060 20 20 20 2f 2f 20 20 20 20 20 20 20 20 20 54 69     //         Ti
30070 63 6b 65 74 20 5b 61 30 36 37 37 33 30 39 66 30  cket [a0677309f0
30080 5d 20 68 61 73 20 66 75 72 74 68 65 72 20 64 65  ] has further de
30090 74 61 69 6c 73 2e 0d 0a 20 20 20 20 20 20 20 20  tails...        
300a0 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
300b0 20 20 20 20 72 65 74 75 72 6e 20 52 65 67 69 73      return Regis
300c0 74 72 79 48 65 6c 70 65 72 2e 4a 6f 69 6e 4b 65  tryHelper.JoinKe
300d0 79 4e 61 6d 65 73 28 52 6f 6f 74 4b 65 79 4e 61  yNames(RootKeyNa
300e0 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me,..           
300f0 20 20 20 20 20 21 70 65 72 55 73 65 72 20 26 26       !perUser &&
30100 20 77 6f 77 36 34 20 26 26 20 49 73 36 34 42 69   wow64 && Is64Bi
30110 74 50 72 6f 63 65 73 73 28 29 20 3f 0d 0a 20 20  tProcess() ?..  
30120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30130 20 20 57 6f 77 36 34 53 75 62 4b 65 79 4e 61 6d    Wow64SubKeyNam
30140 65 20 3a 20 53 74 72 69 6e 67 2e 45 6d 70 74 79  e : String.Empty
30150 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d  );..        }...
30160 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
30170 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30180 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30190 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
301a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
301b0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76  ....        priv
301c0 61 74 65 20 73 74 61 74 69 63 20 73 74 72 69 6e  ate static strin
301d0 67 20 47 65 74 53 79 73 74 65 6d 44 69 72 65 63  g GetSystemDirec
301e0 74 6f 72 79 28 0d 0a 20 20 20 20 20 20 20 20 20  tory(..         
301f0 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34 0d 0a 20     bool wow64.. 
30200 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
30210 20 20 20 20 20 20 7b 0d 0a 23 69 66 20 57 49 4e        {..#if WIN
30220 44 4f 57 53 0d 0a 20 20 20 20 20 20 20 20 20 20  DOWS..          
30230 20 20 69 66 20 28 77 6f 77 36 34 29 0d 0a 20 20    if (wow64)..  
30240 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
30250 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
30260 28 73 79 73 74 65 6d 44 69 72 65 63 74 6f 72 79  (systemDirectory
30270 57 6f 77 36 34 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  Wow64 == null)..
30280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30290 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
302a0 20 20 20 20 20 20 20 73 79 73 74 65 6d 44 69 72         systemDir
302b0 65 63 74 6f 72 79 57 6f 77 36 34 20 3d 0d 0a 20  ectoryWow64 =.. 
302c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
302d0 20 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74         UnsafeNat
302e0 69 76 65 4d 65 74 68 6f 64 73 2e 47 65 74 53 79  iveMethods.GetSy
302f0 73 74 65 6d 44 69 72 65 63 74 6f 72 79 28 29 3b  stemDirectory();
30300 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
30310 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
30320 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 73 79         return sy
30330 73 74 65 6d 44 69 72 65 63 74 6f 72 79 57 6f 77  stemDirectoryWow
30340 36 34 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  64;..           
30350 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
30360 65 6c 73 65 0d 0a 23 65 6e 64 69 66 0d 0a 20 20  else..#endif..  
30370 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
30380 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
30390 28 73 79 73 74 65 6d 44 69 72 65 63 74 6f 72 79  (systemDirectory
303a0 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
303b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
303c0 79 73 74 65 6d 44 69 72 65 63 74 6f 72 79 20 3d  ystemDirectory =
303d0 20 45 6e 76 69 72 6f 6e 6d 65 6e 74 2e 53 79 73   Environment.Sys
303e0 74 65 6d 44 69 72 65 63 74 6f 72 79 3b 0d 0a 0d  temDirectory;...
303f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
30400 20 72 65 74 75 72 6e 20 73 79 73 74 65 6d 44 69   return systemDi
30410 72 65 63 74 6f 72 79 3b 0d 0a 20 20 20 20 20 20  rectory;..      
30420 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
30430 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64   }..        #end
30440 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20  region....      
30450 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
30460 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30470 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30480 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30490 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
304a0 20 20 20 20 20 23 72 65 67 69 6f 6e 20 47 65 6e       #region Gen
304b0 65 72 69 63 20 53 74 72 69 6e 67 20 48 61 6e 64  eric String Hand
304c0 6c 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 70 72  ling..        pr
304d0 69 76 61 74 65 20 73 74 61 74 69 63 20 73 74 72  ivate static str
304e0 69 6e 67 20 46 6f 72 44 69 73 70 6c 61 79 28 0d  ing ForDisplay(.
304f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a  .            obj
30500 65 63 74 20 76 61 6c 75 65 0d 0a 20 20 20 20 20  ect value..     
30510 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
30520 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
30530 20 69 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75   if (value == nu
30540 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
30550 20 20 20 20 20 72 65 74 75 72 6e 20 22 3c 6e 75       return "<nu
30560 6c 6c 3e 22 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ll>";....       
30570 20 20 20 20 20 73 74 72 69 6e 67 20 72 65 73 75       string resu
30580 6c 74 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  lt;..           
30590 20 54 79 70 65 20 74 79 70 65 20 3d 20 76 61 6c   Type type = val
305a0 75 65 2e 47 65 74 54 79 70 65 28 29 3b 0d 0a 0d  ue.GetType();...
305b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
305c0 28 74 79 70 65 20 3d 3d 20 74 79 70 65 6f 66 28  (type == typeof(
305d0 58 6d 6c 45 6c 65 6d 65 6e 74 29 29 0d 0a 20 20  XmlElement))..  
305e0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
305f0 20 20 20 20 20 20 20 20 20 20 20 20 20 58 6d 6c               Xml
30600 45 6c 65 6d 65 6e 74 20 65 6c 65 6d 65 6e 74 20  Element element 
30610 3d 20 28 58 6d 6c 45 6c 65 6d 65 6e 74 29 76 61  = (XmlElement)va
30620 6c 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  lue;....        
30630 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 20 3d          result =
30640 20 65 6c 65 6d 65 6e 74 2e 4f 75 74 65 72 58 6d   element.OuterXm
30650 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l;..            
30660 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 65  }..            e
30670 6c 73 65 20 69 66 20 28 74 79 70 65 20 3d 3d 20  lse if (type == 
30680 74 79 70 65 6f 66 28 56 65 72 73 69 6f 6e 29 29  typeof(Version))
30690 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
306a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
306b0 20 56 65 72 73 69 6f 6e 20 76 65 72 73 69 6f 6e   Version version
306c0 20 3d 20 28 56 65 72 73 69 6f 6e 29 76 61 6c 75   = (Version)valu
306d0 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e;....          
306e0 20 20 20 20 20 20 72 65 73 75 6c 74 20 3d 20 53        result = S
306f0 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 22 76 7b  tring.Format("v{
30700 30 7d 22 2c 20 76 65 72 73 69 6f 6e 29 3b 0d 0a  0}", version);..
30710 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
30720 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20             else 
30730 69 66 20 28 74 79 70 65 20 3d 3d 20 74 79 70 65  if (type == type
30740 6f 66 28 50 72 6f 63 65 73 73 53 74 61 72 74 49  of(ProcessStartI
30750 6e 66 6f 29 29 0d 0a 20 20 20 20 20 20 20 20 20  nfo))..         
30760 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
30770 20 20 20 20 20 20 50 72 6f 63 65 73 73 53 74 61        ProcessSta
30780 72 74 49 6e 66 6f 20 73 74 61 72 74 49 6e 66 6f  rtInfo startInfo
30790 20 3d 20 28 50 72 6f 63 65 73 73 53 74 61 72 74   = (ProcessStart
307a0 49 6e 66 6f 29 76 61 6c 75 65 3b 0d 0a 0d 0a 20  Info)value;.... 
307b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
307c0 65 73 75 6c 74 20 3d 20 53 74 72 69 6e 67 2e 46  esult = String.F
307d0 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
307e0 20 20 20 20 20 20 20 20 20 20 20 20 22 66 69 6c              "fil
307f0 65 4e 61 6d 65 20 3d 20 7b 30 7d 2c 20 61 72 67  eName = {0}, arg
30800 75 6d 65 6e 74 73 20 3d 20 7b 31 7d 2c 20 77 6f  uments = {1}, wo
30810 72 6b 69 6e 67 44 69 72 65 63 74 6f 72 79 20 3d  rkingDirectory =
30820 20 7b 32 7d 2c 20 22 20 2b 0d 0a 20 20 20 20 20   {2}, " +..     
30830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
30840 75 73 65 53 68 65 6c 6c 45 78 65 63 75 74 65 20  useShellExecute 
30850 3d 20 7b 33 7d 2c 20 72 65 64 69 72 65 63 74 53  = {3}, redirectS
30860 74 61 6e 64 61 72 64 4f 75 74 70 75 74 20 3d 20  tandardOutput = 
30870 7b 34 7d 2c 20 22 20 2b 0d 0a 20 20 20 20 20 20  {4}, " +..      
30880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 72                "r
30890 65 64 69 72 65 63 74 53 74 61 6e 64 61 72 64 45  edirectStandardE
308a0 72 72 6f 72 20 3d 20 7b 35 7d 22 2c 20 46 6f 72  rror = {5}", For
308b0 44 69 73 70 6c 61 79 28 0d 0a 20 20 20 20 20 20  Display(..      
308c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
308d0 61 72 74 49 6e 66 6f 2e 46 69 6c 65 4e 61 6d 65  artInfo.FileName
308e0 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 73 74  ), ForDisplay(st
308f0 61 72 74 49 6e 66 6f 2e 41 72 67 75 6d 65 6e 74  artInfo.Argument
30900 73 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s),..           
30910 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70           ForDisp
30920 6c 61 79 28 73 74 61 72 74 49 6e 66 6f 2e 57 6f  lay(startInfo.Wo
30930 72 6b 69 6e 67 44 69 72 65 63 74 6f 72 79 29 2c  rkingDirectory),
30940 20 46 6f 72 44 69 73 70 6c 61 79 28 0d 0a 20 20   ForDisplay(..  
30950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30960 20 20 73 74 61 72 74 49 6e 66 6f 2e 55 73 65 53    startInfo.UseS
30970 68 65 6c 6c 45 78 65 63 75 74 65 29 2c 20 46 6f  hellExecute), Fo
30980 72 44 69 73 70 6c 61 79 28 0d 0a 20 20 20 20 20  rDisplay(..     
30990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
309a0 74 61 72 74 49 6e 66 6f 2e 52 65 64 69 72 65 63  tartInfo.Redirec
309b0 74 53 74 61 6e 64 61 72 64 4f 75 74 70 75 74 29  tStandardOutput)
309c0 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 0d 0a 20  , ForDisplay(.. 
309d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
309e0 20 20 20 73 74 61 72 74 49 6e 66 6f 2e 52 65 64     startInfo.Red
309f0 69 72 65 63 74 53 74 61 6e 64 61 72 64 45 72 72  irectStandardErr
30a00 6f 72 29 29 3b 20 2f 2a 20 52 45 43 55 52 53 49  or)); /* RECURSI
30a10 56 45 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20  VE */..         
30a20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
30a30 20 20 65 6c 73 65 20 69 66 20 28 74 79 70 65 20    else if (type 
30a40 3d 3d 20 74 79 70 65 6f 66 28 50 72 6f 63 65 73  == typeof(Proces
30a50 73 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s))..           
30a60 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
30a70 20 20 20 20 50 72 6f 63 65 73 73 20 70 72 6f 63      Process proc
30a80 65 73 73 20 3d 20 28 50 72 6f 63 65 73 73 29 76  ess = (Process)v
30a90 61 6c 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  alue;....       
30aa0 20 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 20           result 
30ab0 3d 20 70 72 6f 63 65 73 73 2e 49 64 2e 54 6f 53  = process.Id.ToS
30ac0 74 72 69 6e 67 28 29 3b 0d 0a 20 20 20 20 20 20  tring();..      
30ad0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
30ae0 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 74 79       else if (ty
30af0 70 65 20 3d 3d 20 74 79 70 65 6f 66 28 44 61 74  pe == typeof(Dat
30b00 61 52 65 63 65 69 76 65 64 45 76 65 6e 74 41 72  aReceivedEventAr
30b10 67 73 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  gs))..          
30b20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
30b30 20 20 20 20 20 44 61 74 61 52 65 63 65 69 76 65       DataReceive
30b40 64 45 76 65 6e 74 41 72 67 73 20 65 76 65 6e 74  dEventArgs event
30b50 41 72 67 73 20 3d 20 28 44 61 74 61 52 65 63 65  Args = (DataRece
30b60 69 76 65 64 45 76 65 6e 74 41 72 67 73 29 76 61  ivedEventArgs)va
30b70 6c 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  lue;....        
30b80 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 20 3d          result =
30b90 20 46 6f 72 44 69 73 70 6c 61 79 28 65 76 65 6e   ForDisplay(even
30ba0 74 41 72 67 73 2e 44 61 74 61 29 3b 20 2f 2a 20  tArgs.Data); /* 
30bb0 52 45 43 55 52 53 49 56 45 20 2a 2f 0d 0a 20 20  RECURSIVE */..  
30bc0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
30bd0 20 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20           else.. 
30be0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
30bf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
30c00 73 75 6c 74 20 3d 20 76 61 6c 75 65 2e 54 6f 53  sult = value.ToS
30c10 74 72 69 6e 67 28 29 3b 0d 0a 0d 0a 20 20 20 20  tring();....    
30c20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
30c30 72 65 73 75 6c 74 2e 4c 65 6e 67 74 68 20 3d 3d  result.Length ==
30c40 20 30 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20   0)..           
30c50 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
30c60 22 3c 65 6d 70 74 79 3e 22 3b 0d 0a 0d 0a 20 20  "<empty>";....  
30c70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
30c80 20 28 74 79 70 65 2e 49 73 53 75 62 63 6c 61 73   (type.IsSubclas
30c90 73 4f 66 28 74 79 70 65 6f 66 28 45 78 63 65 70  sOf(typeof(Excep
30ca0 74 69 6f 6e 29 29 29 0d 0a 20 20 20 20 20 20 20  tion)))..       
30cb0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
30cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30cd0 72 65 73 75 6c 74 20 3d 20 53 74 72 69 6e 67 2e  result = String.
30ce0 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
30cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30d00 20 22 7b 30 7d 7b 31 7d 7b 30 7d 22 2c 20 45 6e   "{0}{1}{0}", En
30d10 76 69 72 6f 6e 6d 65 6e 74 2e 4e 65 77 4c 69 6e  vironment.NewLin
30d20 65 2c 20 72 65 73 75 6c 74 29 3b 0d 0a 20 20 20  e, result);..   
30d30 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
30d40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30d50 65 6c 73 65 20 69 66 20 28 21 74 79 70 65 2e 49  else if (!type.I
30d60 73 53 75 62 63 6c 61 73 73 4f 66 28 74 79 70 65  sSubclassOf(type
30d70 6f 66 28 56 61 6c 75 65 54 79 70 65 29 29 29 0d  of(ValueType))).
30d80 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
30d90 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
30da0 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 20 3d          result =
30db0 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 22   String.Format("
30dc0 5c 22 7b 30 7d 5c 22 22 2c 20 72 65 73 75 6c 74  \"{0}\"", result
30dd0 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
30de0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
30df0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
30e00 20 20 20 20 72 65 74 75 72 6e 20 72 65 73 75 6c      return resul
30e10 74 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20  t;..        }.. 
30e20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f         #endregio
30e30 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  n....        ///
30e40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30e50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30e60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30e70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30e80 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
30e90 23 72 65 67 69 6f 6e 20 41 73 73 65 6d 62 6c 79  #region Assembly
30ea0 20 41 74 74 72 69 62 75 74 65 20 48 61 6e 64 6c   Attribute Handl
30eb0 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 70 75 62  ing..        pub
30ec0 6c 69 63 20 73 74 61 74 69 63 20 73 74 72 69 6e  lic static strin
30ed0 67 20 47 65 74 41 73 73 65 6d 62 6c 79 43 6f 6e  g GetAssemblyCon
30ee0 66 69 67 75 72 61 74 69 6f 6e 28 0d 0a 20 20 20  figuration(..   
30ef0 20 20 20 20 20 20 20 20 20 41 73 73 65 6d 62 6c           Assembl
30f00 79 20 61 73 73 65 6d 62 6c 79 0d 0a 20 20 20 20  y assembly..    
30f10 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
30f20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
30f30 20 20 69 66 20 28 61 73 73 65 6d 62 6c 79 20 21    if (assembly !
30f40 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
30f50 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
30f60 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20          try..   
30f70 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
30f80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30f90 20 20 20 20 69 66 20 28 61 73 73 65 6d 62 6c 79      if (assembly
30fa0 2e 49 73 44 65 66 69 6e 65 64 28 0d 0a 20 20 20  .IsDefined(..   
30fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30fc0 20 20 20 20 20 20 20 20 20 74 79 70 65 6f 66 28           typeof(
30fd0 41 73 73 65 6d 62 6c 79 43 6f 6e 66 69 67 75 72  AssemblyConfigur
30fe0 61 74 69 6f 6e 41 74 74 72 69 62 75 74 65 29 2c  ationAttribute),
30ff0 20 66 61 6c 73 65 29 29 0d 0a 20 20 20 20 20 20   false))..      
31000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
31010 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
31020 20 20 20 20 20 20 20 20 20 41 73 73 65 6d 62 6c           Assembl
31030 79 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 41 74  yConfigurationAt
31040 74 72 69 62 75 74 65 20 63 6f 6e 66 69 67 75 72  tribute configur
31050 61 74 69 6f 6e 20 3d 0d 0a 20 20 20 20 20 20 20  ation =..       
31060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31070 20 20 20 20 20 28 41 73 73 65 6d 62 6c 79 43 6f       (AssemblyCo
31080 6e 66 69 67 75 72 61 74 69 6f 6e 41 74 74 72 69  nfigurationAttri
31090 62 75 74 65 29 0d 0a 20 20 20 20 20 20 20 20 20  bute)..         
310a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
310b0 20 20 20 61 73 73 65 6d 62 6c 79 2e 47 65 74 43     assembly.GetC
310c0 75 73 74 6f 6d 41 74 74 72 69 62 75 74 65 73 28  ustomAttributes(
310d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
310e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
310f0 20 20 74 79 70 65 6f 66 28 41 73 73 65 6d 62 6c    typeof(Assembl
31100 79 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 41 74  yConfigurationAt
31110 74 72 69 62 75 74 65 29 2c 0d 0a 20 20 20 20 20  tribute),..     
31120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31130 20 20 20 20 20 20 20 20 20 20 20 66 61 6c 73 65             false
31140 29 5b 30 5d 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  )[0];....       
31150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31160 20 72 65 74 75 72 6e 20 63 6f 6e 66 69 67 75 72   return configur
31170 61 74 69 6f 6e 2e 43 6f 6e 66 69 67 75 72 61 74  ation.Configurat
31180 69 6f 6e 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ion;..          
31190 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
311a0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
311b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
311c0 63 61 74 63 68 0d 0a 20 20 20 20 20 20 20 20 20  catch..         
311d0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
311e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
311f0 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20   do nothing...  
31200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
31210 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
31220 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
31230 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20  turn null;..    
31240 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
31250 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
31260 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31270 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31280 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31290 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
312a0 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69      public stati
312b0 63 20 73 74 72 69 6e 67 20 47 65 74 41 73 73 65  c string GetAsse
312c0 6d 62 6c 79 54 69 74 6c 65 28 0d 0a 20 20 20 20  mblyTitle(..    
312d0 20 20 20 20 20 20 20 20 41 73 73 65 6d 62 6c 79          Assembly
312e0 20 61 73 73 65 6d 62 6c 79 0d 0a 20 20 20 20 20   assembly..     
312f0 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
31300 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
31310 20 69 66 20 28 61 73 73 65 6d 62 6c 79 20 21 3d   if (assembly !=
31320 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
31330 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
31340 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20         try..    
31350 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
31360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31370 20 20 20 69 66 20 28 61 73 73 65 6d 62 6c 79 2e     if (assembly.
31380 49 73 44 65 66 69 6e 65 64 28 0d 0a 20 20 20 20  IsDefined(..    
31390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
313a0 20 20 20 20 20 20 20 20 74 79 70 65 6f 66 28 41          typeof(A
313b0 73 73 65 6d 62 6c 79 54 69 74 6c 65 41 74 74 72  ssemblyTitleAttr
313c0 69 62 75 74 65 29 2c 20 66 61 6c 73 65 29 29 0d  ibute), false)).
313d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
313e0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
313f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31400 41 73 73 65 6d 62 6c 79 54 69 74 6c 65 41 74 74  AssemblyTitleAtt
31410 72 69 62 75 74 65 20 74 69 74 6c 65 20 3d 0d 0a  ribute title =..
31420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31430 20 20 20 20 20 20 20 20 20 20 20 20 28 41 73 73              (Ass
31440 65 6d 62 6c 79 54 69 74 6c 65 41 74 74 72 69 62  emblyTitleAttrib
31450 75 74 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ute)..          
31460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31470 20 20 61 73 73 65 6d 62 6c 79 2e 47 65 74 43 75    assembly.GetCu
31480 73 74 6f 6d 41 74 74 72 69 62 75 74 65 73 28 0d  stomAttributes(.
31490 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
314a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
314b0 20 74 79 70 65 6f 66 28 41 73 73 65 6d 62 6c 79   typeof(Assembly
314c0 54 69 74 6c 65 41 74 74 72 69 62 75 74 65 29 2c  TitleAttribute),
314d0 20 66 61 6c 73 65 29 5b 30 5d 3b 0d 0a 0d 0a 20   false)[0];.... 
314e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
314f0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 69         return ti
31500 74 6c 65 2e 54 69 74 6c 65 3b 0d 0a 20 20 20 20  tle.Title;..    
31510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31520 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
31530 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
31540 20 20 20 20 20 20 63 61 74 63 68 0d 0a 20 20 20        catch..   
31550 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
31560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31570 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e      // do nothin
31580 67 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  g...            
31590 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
315a0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
315b0 20 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b      return null;
315c0 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..   
315d0 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d       #endregion.
315e0 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
315f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31600 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31610 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31620 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31630 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72  //....        #r
31640 65 67 69 6f 6e 20 2e 4e 45 54 20 46 72 61 6d 65  egion .NET Frame
31650 77 6f 72 6b 20 48 61 6e 64 6c 69 6e 67 0d 0a 20  work Handling.. 
31660 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
31670 74 61 74 69 63 20 73 74 72 69 6e 67 20 47 65 74  tatic string Get
31680 46 72 61 6d 65 77 6f 72 6b 52 6f 6f 74 4b 65 79  FrameworkRootKey
31690 4e 61 6d 65 28 0d 0a 20 20 20 20 20 20 20 20 20  Name(..         
316a0 20 20 20 62 6f 6f 6c 20 70 65 72 55 73 65 72 2c     bool perUser,
316b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f  ..            bo
316c0 6f 6c 20 77 6f 77 36 34 0d 0a 20 20 20 20 20 20  ol wow64..      
316d0 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
316e0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
316f0 72 65 74 75 72 6e 20 52 65 67 69 73 74 72 79 48  return RegistryH
31700 65 6c 70 65 72 2e 4a 6f 69 6e 4b 65 79 4e 61 6d  elper.JoinKeyNam
31710 65 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  es(..           
31720 20 20 20 20 20 47 65 74 52 6f 6f 74 4b 65 79 4e       GetRootKeyN
31730 61 6d 65 28 70 65 72 55 73 65 72 2c 20 77 6f 77  ame(perUser, wow
31740 36 34 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  64),..          
31750 20 20 20 20 20 20 22 4d 69 63 72 6f 73 6f 66 74        "Microsoft
31760 22 2c 20 22 2e 4e 45 54 46 72 61 6d 65 77 6f 72  ", ".NETFramewor
31770 6b 22 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  k");..        }.
31780 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
31790 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
317a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
317b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
317c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
317d0 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72  //....        pr
317e0 69 76 61 74 65 20 73 74 61 74 69 63 20 73 74 72  ivate static str
317f0 69 6e 67 20 47 65 74 46 72 61 6d 65 77 6f 72 6b  ing GetFramework
31800 4b 65 79 4e 61 6d 65 28 0d 0a 20 20 20 20 20 20  KeyName(..      
31810 20 20 20 20 20 20 73 74 72 69 6e 67 20 66 72 61        string fra
31820 6d 65 77 6f 72 6b 4e 61 6d 65 2c 0d 0a 20 20 20  meworkName,..   
31830 20 20 20 20 20 20 20 20 20 56 65 72 73 69 6f 6e           Version
31840 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f   frameworkVersio
31850 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n,..            
31860 73 74 72 69 6e 67 20 70 6c 61 74 66 6f 72 6d 4e  string platformN
31870 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ame,..          
31880 20 20 62 6f 6f 6c 20 70 65 72 55 73 65 72 2c 0d    bool perUser,.
31890 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f  .            boo
318a0 6c 20 77 6f 77 36 34 0d 0a 20 20 20 20 20 20 20  l wow64..       
318b0 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
318c0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  {..            s
318d0 74 72 69 6e 67 20 66 72 61 6d 65 77 6f 72 6b 56  tring frameworkV
318e0 65 72 73 69 6f 6e 53 74 72 69 6e 67 20 3d 20 28  ersionString = (
318f0 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e  frameworkVersion
31900 20 21 3d 20 6e 75 6c 6c 29 20 3f 0d 0a 20 20 20   != null) ?..   
31910 20 20 20 20 20 20 20 20 20 20 20 20 20 22 76 22               "v"
31920 20 2b 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73   + frameworkVers
31930 69 6f 6e 2e 54 6f 53 74 72 69 6e 67 28 29 20 3a  ion.ToString() :
31940 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20   null;....      
31950 20 20 20 20 20 20 72 65 74 75 72 6e 20 52 65 67        return Reg
31960 69 73 74 72 79 48 65 6c 70 65 72 2e 4a 6f 69 6e  istryHelper.Join
31970 4b 65 79 4e 61 6d 65 73 28 0d 0a 20 20 20 20 20  KeyNames(..     
31980 20 20 20 20 20 20 20 20 20 20 20 47 65 74 52 6f             GetRo
31990 6f 74 4b 65 79 4e 61 6d 65 28 70 65 72 55 73 65  otKeyName(perUse
319a0 72 2c 20 77 6f 77 36 34 29 2c 20 22 4d 69 63 72  r, wow64), "Micr
319b0 6f 73 6f 66 74 22 2c 20 66 72 61 6d 65 77 6f 72  osoft", framewor
319c0 6b 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20  kName,..        
319d0 20 20 20 20 20 20 20 20 66 72 61 6d 65 77 6f 72          framewor
319e0 6b 56 65 72 73 69 6f 6e 53 74 72 69 6e 67 2c 20  kVersionString, 
319f0 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 29 3b 0d 0a  platformName);..
31a00 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
31a10 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
31a20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31a30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31a40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31a50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
31a60 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
31a70 73 74 61 74 69 63 20 73 74 72 69 6e 67 20 47 65  static string Ge
31a80 74 49 6d 61 67 65 52 75 6e 74 69 6d 65 56 65 72  tImageRuntimeVer
31a90 73 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20  sion(..         
31aa0 20 20 20 73 74 72 69 6e 67 20 66 69 6c 65 4e 61     string fileNa
31ab0 6d 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  me..            
31ac0 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
31ad0 20 20 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20            try.. 
31ae0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
31af0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 41 73                As
31b00 73 65 6d 62 6c 79 20 61 73 73 65 6d 62 6c 79 20  sembly assembly 
31b10 3d 20 41 73 73 65 6d 62 6c 79 2e 52 65 66 6c 65  = Assembly.Refle
31b20 63 74 69 6f 6e 4f 6e 6c 79 4c 6f 61 64 46 72 6f  ctionOnlyLoadFro
31b30 6d 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  m(..            
31b40 20 20 20 20 20 20 20 20 66 69 6c 65 4e 61 6d 65          fileName
31b50 29 3b 20 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a  ); /* throw */..
31b60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
31b70 20 20 69 66 20 28 61 73 73 65 6d 62 6c 79 20 21    if (assembly !
31b80 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
31b90 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
31ba0 75 72 6e 20 61 73 73 65 6d 62 6c 79 2e 49 6d 61  urn assembly.Ima
31bb0 67 65 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e  geRuntimeVersion
31bc0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
31bd0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 63 61  ..            ca
31be0 74 63 68 0d 0a 20 20 20 20 20 20 20 20 20 20 20  tch..           
31bf0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
31c00 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e      // do nothin
31c10 67 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  g...            
31c20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
31c30 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 20   return null;.. 
31c40 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
31c50 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
31c60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31c70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31c80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31c90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
31ca0 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
31cb0 74 61 74 69 63 20 73 74 72 69 6e 67 20 47 65 74  tatic string Get
31cc0 46 72 61 6d 65 77 6f 72 6b 44 69 72 65 63 74 6f  FrameworkDirecto
31cd0 72 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ry(..           
31ce0 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79   MockRegistryKey
31cf0 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20 20 20   rootKey,..     
31d00 20 20 20 20 20 20 20 56 65 72 73 69 6f 6e 20 66         Version f
31d10 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 2c  rameworkVersion,
31d20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f  ..            bo
31d30 6f 6c 20 70 65 72 55 73 65 72 2c 0d 0a 20 20 20  ol perUser,..   
31d40 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 6f           bool wo
31d50 77 36 34 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  w64,..          
31d60 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a    bool whatIf,..
31d70 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
31d80 20 76 65 72 62 6f 73 65 0d 0a 20 20 20 20 20 20   verbose..      
31d90 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
31da0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
31db0 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73  using (MockRegis
31dc0 74 72 79 4b 65 79 20 6b 65 79 20 3d 20 52 65 67  tryKey key = Reg
31dd0 69 73 74 72 79 48 65 6c 70 65 72 2e 4f 70 65 6e  istryHelper.Open
31de0 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20 20  SubKey(..       
31df0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f               roo
31e00 74 4b 65 79 2c 20 47 65 74 46 72 61 6d 65 77 6f  tKey, GetFramewo
31e10 72 6b 52 6f 6f 74 4b 65 79 4e 61 6d 65 28 70 65  rkRootKeyName(pe
31e20 72 55 73 65 72 2c 20 77 6f 77 36 34 29 2c 0d 0a  rUser, wow64),..
31e30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31e40 20 20 20 20 66 61 6c 73 65 2c 20 77 68 61 74 49      false, whatI
31e50 66 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a 20 20  f, verbose))..  
31e60 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
31e70 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
31e80 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  (key == null).. 
31e90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31ea0 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d     return null;.
31eb0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
31ec0 20 20 20 6f 62 6a 65 63 74 20 76 61 6c 75 65 20     object value 
31ed0 3d 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72  = RegistryHelper
31ee0 2e 47 65 74 56 61 6c 75 65 28 0d 0a 20 20 20 20  .GetValue(..    
31ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31f00 6b 65 79 2c 20 22 49 6e 73 74 61 6c 6c 52 6f 6f  key, "InstallRoo
31f10 74 22 2c 20 6e 75 6c 6c 2c 20 77 68 61 74 49 66  t", null, whatIf
31f20 2c 20 76 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20  , verbose);.... 
31f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
31f40 66 20 28 21 28 76 61 6c 75 65 20 69 73 20 73 74  f (!(value is st
31f50 72 69 6e 67 29 29 0d 0a 20 20 20 20 20 20 20 20  ring))..        
31f60 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
31f70 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20  rn null;....    
31f80 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
31f90 72 6e 20 50 61 74 68 2e 43 6f 6d 62 69 6e 65 28  rn Path.Combine(
31fa0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
31fb0 20 20 20 20 20 20 28 73 74 72 69 6e 67 29 76 61        (string)va
31fc0 6c 75 65 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d  lue, String.Form
31fd0 61 74 28 22 76 7b 30 7d 22 2c 20 66 72 61 6d 65  at("v{0}", frame
31fe0 77 6f 72 6b 56 65 72 73 69 6f 6e 29 29 3b 0d 0a  workVersion));..
31ff0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
32000 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
32010 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a    #endregion....
32020 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
32030 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32040 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32050 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32060 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
32070 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69  ...        #regi
32080 6f 6e 20 50 65 72 2d 46 72 61 6d 65 77 6f 72 6b  on Per-Framework
32090 2f 50 6c 61 74 66 6f 72 6d 20 48 61 6e 64 6c 69  /Platform Handli
320a0 6e 67 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76  ng..        priv
320b0 61 74 65 20 73 74 61 74 69 63 20 76 6f 69 64 20  ate static void 
320c0 49 6e 69 74 69 61 6c 69 7a 65 46 72 61 6d 65 77  InitializeFramew
320d0 6f 72 6b 4c 69 73 74 28 0d 0a 20 20 20 20 20 20  orkList(..      
320e0 20 20 20 20 20 20 4d 6f 63 6b 52 65 67 69 73 74        MockRegist
320f0 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a  ryKey rootKey,..
32100 20 20 20 20 20 20 20 20 20 20 20 20 43 6f 6e 66              Conf
32110 69 67 75 72 61 74 69 6f 6e 20 63 6f 6e 66 69 67  iguration config
32120 75 72 61 74 69 6f 6e 2c 0d 0a 20 20 20 20 20 20  uration,..      
32130 20 20 20 20 20 20 72 65 66 20 46 72 61 6d 65 77        ref Framew
32140 6f 72 6b 4c 69 73 74 20 66 72 61 6d 65 77 6f 72  orkList framewor
32150 6b 4c 69 73 74 0d 0a 20 20 20 20 20 20 20 20 20  kList..         
32160 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d     )..        {.
32170 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
32180 28 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 20 3d  (frameworkList =
32190 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
321a0 20 20 20 20 20 20 20 20 20 66 72 61 6d 65 77 6f           framewo
321b0 72 6b 4c 69 73 74 20 3d 20 6e 65 77 20 46 72 61  rkList = new Fra
321c0 6d 65 77 6f 72 6b 4c 69 73 74 28 29 3b 0d 0a 0d  meworkList();...
321d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
321e0 28 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 52  (frameworkList.R
321f0 6f 6f 74 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d  ootKey == null).
32200 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
32210 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 52   frameworkList.R
32220 6f 6f 74 4b 65 79 20 3d 20 72 6f 6f 74 4b 65 79  ootKey = rootKey
32230 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
32240 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
32250 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32260 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32270 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32280 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
32290 20 20 20 20 69 66 20 28 66 72 61 6d 65 77 6f 72      if (framewor
322a0 6b 4c 69 73 74 2e 4e 61 6d 65 73 20 3d 3d 20 6e  kList.Names == n
322b0 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
322c0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
322d0 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 4c 69       frameworkLi
322e0 73 74 2e 4e 61 6d 65 73 20 3d 20 6e 65 77 20 53  st.Names = new S
322f0 74 72 69 6e 67 4c 69 73 74 28 29 3b 0d 0a 0d 0a  tringList();....
32300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32310 69 66 20 28 28 63 6f 6e 66 69 67 75 72 61 74 69  if ((configurati
32320 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20 21  on == null) || !
32330 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 4e 6f  configuration.No
32340 44 65 73 6b 74 6f 70 29 0d 0a 20 20 20 20 20 20  Desktop)..      
32350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 72                fr
32360 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 4e 61 6d 65  ameworkList.Name
32370 73 2e 41 64 64 28 22 2e 4e 45 54 46 72 61 6d 65  s.Add(".NETFrame
32380 77 6f 72 6b 22 29 3b 0d 0a 0d 0a 20 20 20 20 20  work");....     
32390 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 28             if ((
323a0 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 3d 3d  configuration ==
323b0 20 6e 75 6c 6c 29 20 7c 7c 20 21 63 6f 6e 66 69   null) || !confi
323c0 67 75 72 61 74 69 6f 6e 2e 4e 6f 43 6f 6d 70 61  guration.NoCompa
323d0 63 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ct)..           
323e0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
323f0 20 20 20 20 20 20 20 20 20 20 20 20 66 72 61 6d              fram
32400 65 77 6f 72 6b 4c 69 73 74 2e 4e 61 6d 65 73 2e  eworkList.Names.
32410 41 64 64 28 22 2e 4e 45 54 43 6f 6d 70 61 63 74  Add(".NETCompact
32420 46 72 61 6d 65 77 6f 72 6b 22 29 3b 0d 0a 20 20  Framework");..  
32430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32440 20 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e    frameworkList.
32450 4e 61 6d 65 73 2e 41 64 64 28 22 2e 4e 45 54 43  Names.Add(".NETC
32460 6f 6d 70 61 63 74 46 72 61 6d 65 77 6f 72 6b 22  ompactFramework"
32470 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
32480 20 20 20 20 20 20 20 20 66 72 61 6d 65 77 6f 72          framewor
32490 6b 4c 69 73 74 2e 4e 61 6d 65 73 2e 41 64 64 28  kList.Names.Add(
324a0 22 2e 4e 45 54 43 6f 6d 70 61 63 74 46 72 61 6d  ".NETCompactFram
324b0 65 77 6f 72 6b 22 29 3b 0d 0a 20 20 20 20 20 20  ework");..      
324c0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
324d0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
324e0 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
324f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32500 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32510 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32520 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
32530 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
32540 28 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 56  (frameworkList.V
32550 65 72 73 69 6f 6e 73 20 3d 3d 20 6e 75 6c 6c 29  ersions == null)
32560 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
32570 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
32580 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 56   frameworkList.V
32590 65 72 73 69 6f 6e 73 20 3d 20 6e 65 77 20 56 65  ersions = new Ve
325a0 72 73 69 6f 6e 4d 61 70 28 29 3b 0d 0a 0d 0a 20  rsionMap();.... 
325b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
325c0 66 20 28 28 63 6f 6e 66 69 67 75 72 61 74 69 6f  f ((configuratio
325d0 6e 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20 21 63  n == null) || !c
325e0 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 4e 6f 44  onfiguration.NoD
325f0 65 73 6b 74 6f 70 29 0d 0a 20 20 20 20 20 20 20  esktop)..       
32600 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
32610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32620 56 65 72 73 69 6f 6e 4c 69 73 74 20 64 65 73 6b  VersionList desk
32630 74 6f 70 56 65 72 73 69 6f 6e 4c 69 73 74 20 3d  topVersionList =
32640 20 6e 65 77 20 56 65 72 73 69 6f 6e 4c 69 73 74   new VersionList
32650 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ();....         
32660 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 28             if ((
32670 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 3d 3d  configuration ==
32680 20 6e 75 6c 6c 29 20 7c 7c 20 21 63 6f 6e 66 69   null) || !confi
32690 67 75 72 61 74 69 6f 6e 2e 4e 6f 4e 65 74 46 78  guration.NoNetFx
326a0 32 30 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  20)..           
326b0 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65 73               des
326c0 6b 74 6f 70 56 65 72 73 69 6f 6e 4c 69 73 74 2e  ktopVersionList.
326d0 41 64 64 28 6e 65 77 20 56 65 72 73 69 6f 6e 28  Add(new Version(
326e0 32 2c 20 30 2c 20 35 30 37 32 37 29 29 3b 0d 0a  2, 0, 50727));..
326f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
32700 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
32710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
32720 20 4e 4f 54 45 3a 20 54 68 65 20 2e 4e 45 54 20   NOTE: The .NET 
32730 46 72 61 6d 65 77 6f 72 6b 20 33 2e 35 20 64 6f  Framework 3.5 do
32740 65 73 20 6e 6f 74 20 68 61 76 65 20 69 74 73 20  es not have its 
32750 6f 77 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  own..           
32760 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
32770 20 20 64 69 72 65 63 74 6f 72 79 3b 20 68 6f 77    directory; how
32780 65 76 65 72 2c 20 69 74 20 73 74 69 6c 6c 20 6d  ever, it still m
32790 61 79 20 68 61 76 65 20 61 73 73 65 6d 62 6c 79  ay have assembly
327a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
327b0 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 66        //       f
327c0 6f 6c 64 65 72 73 20 66 6f 72 20 75 73 65 20 69  olders for use i
327d0 6e 20 56 69 73 75 61 6c 20 53 74 75 64 69 6f 2c  n Visual Studio,
327e0 20 65 74 63 2e 0d 0a 20 20 20 20 20 20 20 20 20   etc...         
327f0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
32800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32810 20 20 20 69 66 20 28 28 63 6f 6e 66 69 67 75 72     if ((configur
32820 61 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 20 7c  ation == null) |
32830 7c 20 21 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  | !configuration
32840 2e 4e 6f 4e 65 74 46 78 33 35 29 0d 0a 20 20 20  .NoNetFx35)..   
32850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32860 20 20 20 20 20 64 65 73 6b 74 6f 70 56 65 72 73       desktopVers
32870 69 6f 6e 4c 69 73 74 2e 41 64 64 28 6e 65 77 20  ionList.Add(new 
32880 56 65 72 73 69 6f 6e 28 33 2c 20 35 29 29 3b 0d  Version(3, 5));.
32890 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
328a0 20 20 20 20 20 20 20 69 66 20 28 28 63 6f 6e 66         if ((conf
328b0 69 67 75 72 61 74 69 6f 6e 20 3d 3d 20 6e 75 6c  iguration == nul
328c0 6c 29 20 7c 7c 20 21 63 6f 6e 66 69 67 75 72 61  l) || !configura
328d0 74 69 6f 6e 2e 4e 6f 4e 65 74 46 78 34 30 29 0d  tion.NoNetFx40).
328e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
328f0 20 20 20 20 20 20 20 20 20 64 65 73 6b 74 6f 70           desktop
32900 56 65 72 73 69 6f 6e 4c 69 73 74 2e 41 64 64 28  VersionList.Add(
32910 6e 65 77 20 56 65 72 73 69 6f 6e 28 34 2c 20 30  new Version(4, 0
32920 2c 20 33 30 33 31 39 29 29 3b 0d 0a 0d 0a 20 20  , 30319));....  
32930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32940 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
32950 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54            // NOT
32960 45 3a 20 54 68 65 20 2e 4e 45 54 20 46 72 61 6d  E: The .NET Fram
32970 65 77 6f 72 6b 20 34 2e 35 20 64 6f 65 73 20 6e  ework 4.5 does n
32980 6f 74 20 68 61 76 65 20 69 74 73 20 6f 77 6e 0d  ot have its own.
32990 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
329a0 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 64 69       //       di
329b0 72 65 63 74 6f 72 79 3b 20 68 6f 77 65 76 65 72  rectory; however
329c0 2c 20 69 74 20 73 74 69 6c 6c 20 6d 61 79 20 68  , it still may h
329d0 61 76 65 20 61 73 73 65 6d 62 6c 79 0d 0a 20 20  ave assembly..  
329e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
329f0 20 20 2f 2f 20 20 20 20 20 20 20 66 6f 6c 64 65    //       folde
32a00 72 73 20 66 6f 72 20 75 73 65 20 69 6e 20 56 69  rs for use in Vi
32a10 73 75 61 6c 20 53 74 75 64 69 6f 2c 20 65 74 63  sual Studio, etc
32a20 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
32a30 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
32a40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
32a50 66 20 28 28 63 6f 6e 66 69 67 75 72 61 74 69 6f  f ((configuratio
32a60 6e 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20 21 63  n == null) || !c
32a70 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 4e 6f 4e  onfiguration.NoN
32a80 65 74 46 78 34 35 29 0d 0a 20 20 20 20 20 20 20  etFx45)..       
32a90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32aa0 20 64 65 73 6b 74 6f 70 56 65 72 73 69 6f 6e 4c   desktopVersionL
32ab0 69 73 74 2e 41 64 64 28 6e 65 77 20 56 65 72 73  ist.Add(new Vers
32ac0 69 6f 6e 28 34 2c 20 35 2c 20 35 30 37 30 39 29  ion(4, 5, 50709)
32ad0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
32ae0 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
32af0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32b00 20 20 2f 2f 20 4e 4f 54 45 3a 20 54 68 65 20 2e    // NOTE: The .
32b10 4e 45 54 20 46 72 61 6d 65 77 6f 72 6b 20 34 2e  NET Framework 4.
32b20 35 2e 31 20 64 6f 65 73 20 6e 6f 74 20 68 61 76  5.1 does not hav
32b30 65 20 69 74 73 20 6f 77 6e 0d 0a 20 20 20 20 20  e its own..     
32b40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
32b50 2f 20 20 20 20 20 20 20 64 69 72 65 63 74 6f 72  /       director
32b60 79 3b 20 68 6f 77 65 76 65 72 2c 20 69 74 20 73  y; however, it s
32b70 74 69 6c 6c 20 6d 61 79 20 68 61 76 65 20 61 73  till may have as
32b80 73 65 6d 62 6c 79 0d 0a 20 20 20 20 20 20 20 20  sembly..        
32b90 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
32ba0 20 20 20 20 20 66 6f 6c 64 65 72 73 20 66 6f 72       folders for
32bb0 20 75 73 65 20 69 6e 20 56 69 73 75 61 6c 20 53   use in Visual S
32bc0 74 75 64 69 6f 2c 20 65 74 63 2e 0d 0a 20 20 20  tudio, etc...   
32bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32be0 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
32bf0 20 20 20 20 20 20 20 20 20 69 66 20 28 28 63 6f           if ((co
32c00 6e 66 69 67 75 72 61 74 69 6f 6e 20 3d 3d 20 6e  nfiguration == n
32c10 75 6c 6c 29 20 7c 7c 20 21 63 6f 6e 66 69 67 75  ull) || !configu
32c20 72 61 74 69 6f 6e 2e 4e 6f 4e 65 74 46 78 34 35  ration.NoNetFx45
32c30 31 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  1)..            
32c40 20 20 20 20 20 20 20 20 20 20 20 20 64 65 73 6b              desk
32c50 74 6f 70 56 65 72 73 69 6f 6e 4c 69 73 74 2e 41  topVersionList.A
32c60 64 64 28 6e 65 77 20 56 65 72 73 69 6f 6e 28 34  dd(new Version(4
32c70 2c 20 35 2c 20 31 29 29 3b 0d 0a 0d 0a 20 20 20  , 5, 1));....   
32c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32c90 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
32ca0 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45           // NOTE
32cb0 3a 20 54 68 65 20 2e 4e 45 54 20 46 72 61 6d 65  : The .NET Frame
32cc0 77 6f 72 6b 20 34 2e 35 2e 32 20 64 6f 65 73 20  work 4.5.2 does 
32cd0 6e 6f 74 20 68 61 76 65 20 69 74 73 20 6f 77 6e  not have its own
32ce0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
32cf0 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 64        //       d
32d00 69 72 65 63 74 6f 72 79 3b 20 68 6f 77 65 76 65  irectory; howeve
32d10 72 2c 20 69 74 20 73 74 69 6c 6c 20 6d 61 79 20  r, it still may 
32d20 68 61 76 65 20 61 73 73 65 6d 62 6c 79 0d 0a 20  have assembly.. 
32d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32d40 20 20 20 2f 2f 20 20 20 20 20 20 20 66 6f 6c 64     //       fold
32d50 65 72 73 20 66 6f 72 20 75 73 65 20 69 6e 20 56  ers for use in V
32d60 69 73 75 61 6c 20 53 74 75 64 69 6f 2c 20 65 74  isual Studio, et
32d70 63 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  c...            
32d80 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
32d90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32da0 69 66 20 28 28 63 6f 6e 66 69 67 75 72 61 74 69  if ((configurati
32db0 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20 21  on == null) || !
32dc0 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 4e 6f  configuration.No
32dd0 4e 65 74 46 78 34 35 32 29 0d 0a 20 20 20 20 20  NetFx452)..     
32de0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32df0 20 20 20 64 65 73 6b 74 6f 70 56 65 72 73 69 6f     desktopVersio
32e00 6e 4c 69 73 74 2e 41 64 64 28 6e 65 77 20 56 65  nList.Add(new Ve
32e10 72 73 69 6f 6e 28 34 2c 20 35 2c 20 32 29 29 3b  rsion(4, 5, 2));
32e20 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
32e30 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
32e40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32e50 2f 2f 20 4e 4f 54 45 3a 20 54 68 65 20 2e 4e 45  // NOTE: The .NE
32e60 54 20 46 72 61 6d 65 77 6f 72 6b 20 34 2e 36 20  T Framework 4.6 
32e70 64 6f 65 73 20 6e 6f 74 20 68 61 76 65 20 69 74  does not have it
32e80 73 20 6f 77 6e 0d 0a 20 20 20 20 20 20 20 20 20  s own..         
32e90 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
32ea0 20 20 20 20 64 69 72 65 63 74 6f 72 79 3b 20 68      directory; h
32eb0 6f 77 65 76 65 72 2c 20 69 74 20 73 74 69 6c 6c  owever, it still
32ec0 20 6d 61 79 20 68 61 76 65 20 61 73 73 65 6d 62   may have assemb
32ed0 6c 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ly..            
32ee0 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
32ef0 20 66 6f 6c 64 65 72 73 20 66 6f 72 20 75 73 65   folders for use
32f00 20 69 6e 20 56 69 73 75 61 6c 20 53 74 75 64 69   in Visual Studi
32f10 6f 2c 20 65 74 63 2e 0d 0a 20 20 20 20 20 20 20  o, etc...       
32f20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
32f30 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
32f40 20 20 20 20 20 69 66 20 28 28 63 6f 6e 66 69 67       if ((config
32f50 75 72 61 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29  uration == null)
32f60 20 7c 7c 20 21 63 6f 6e 66 69 67 75 72 61 74 69   || !configurati
32f70 6f 6e 2e 4e 6f 4e 65 74 46 78 34 36 29 0d 0a 20  on.NoNetFx46).. 
32f80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32f90 20 20 20 20 20 20 20 64 65 73 6b 74 6f 70 56 65         desktopVe
32fa0 72 73 69 6f 6e 4c 69 73 74 2e 41 64 64 28 6e 65  rsionList.Add(ne
32fb0 77 20 56 65 72 73 69 6f 6e 28 34 2c 20 36 29 29  w Version(4, 6))
32fc0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
32fd0 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
32fe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32ff0 20 2f 2f 20 4e 4f 54 45 3a 20 54 68 65 20 2e 4e   // NOTE: The .N
33000 45 54 20 46 72 61 6d 65 77 6f 72 6b 20 34 2e 36  ET Framework 4.6
33010 2e 31 20 64 6f 65 73 20 6e 6f 74 20 68 61 76 65  .1 does not have
33020 20 69 74 73 20 6f 77 6e 0d 0a 20 20 20 20 20 20   its own..      
33030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
33040 20 20 20 20 20 20 20 64 69 72 65 63 74 6f 72 79         directory
33050 3b 20 68 6f 77 65 76 65 72 2c 20 69 74 20 73 74  ; however, it st
33060 69 6c 6c 20 6d 61 79 20 68 61 76 65 20 61 73 73  ill may have ass
33070 65 6d 62 6c 79 0d 0a 20 20 20 20 20 20 20 20 20  embly..         
33080 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
33090 20 20 20 20 66 6f 6c 64 65 72 73 20 66 6f 72 20      folders for 
330a0 75 73 65 20 69 6e 20 56 69 73 75 61 6c 20 53 74  use in Visual St
330b0 75 64 69 6f 2c 20 65 74 63 2e 0d 0a 20 20 20 20  udio, etc...    
330c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
330d0 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
330e0 20 20 20 20 20 20 20 20 69 66 20 28 28 63 6f 6e          if ((con
330f0 66 69 67 75 72 61 74 69 6f 6e 20 3d 3d 20 6e 75  figuration == nu
33100 6c 6c 29 20 7c 7c 20 21 63 6f 6e 66 69 67 75 72  ll) || !configur
33110 61 74 69 6f 6e 2e 4e 6f 4e 65 74 46 78 34 36 31  ation.NoNetFx461
33120 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
33130 20 20 20 20 20 20 20 20 20 20 20 64 65 73 6b 74             deskt
33140 6f 70 56 65 72 73 69 6f 6e 4c 69 73 74 2e 41 64  opVersionList.Ad
33150 64 28 6e 65 77 20 56 65 72 73 69 6f 6e 28 34 2c  d(new Version(4,
33160 20 36 2c 20 31 29 29 3b 0d 0a 0d 0a 20 20 20 20   6, 1));....    
33170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33180 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
33190 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a          // NOTE:
331a0 20 54 68 65 20 2e 4e 45 54 20 46 72 61 6d 65 77   The .NET Framew
331b0 6f 72 6b 20 34 2e 36 2e 32 20 64 6f 65 73 20 6e  ork 4.6.2 does n
331c0 6f 74 20 68 61 76 65 20 69 74 73 20 6f 77 6e 0d  ot have its own.
331d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
331e0 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 64 69       //       di
331f0 72 65 63 74 6f 72 79 3b 20 68 6f 77 65 76 65 72  rectory; however
33200 2c 20 69 74 20 73 74 69 6c 6c 20 6d 61 79 20 68  , it still may h
33210 61 76 65 20 61 73 73 65 6d 62 6c 79 0d 0a 20 20  ave assembly..  
33220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33230 20 20 2f 2f 20 20 20 20 20 20 20 66 6f 6c 64 65    //       folde
33240 72 73 20 66 6f 72 20 75 73 65 20 69 6e 20 56 69  rs for use in Vi
33250 73 75 61 6c 20 53 74 75 64 69 6f 2c 20 65 74 63  sual Studio, etc
33260 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
33270 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
33280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
33290 66 20 28 28 63 6f 6e 66 69 67 75 72 61 74 69 6f  f ((configuratio
332a0 6e 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20 21 63  n == null) || !c
332b0 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 4e 6f 4e  onfiguration.NoN
332c0 65 74 46 78 34 36 32 29 0d 0a 20 20 20 20 20 20  etFx462)..      
332d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
332e0 20 20 64 65 73 6b 74 6f 70 56 65 72 73 69 6f 6e    desktopVersion
332f0 4c 69 73 74 2e 41 64 64 28 6e 65 77 20 56 65 72  List.Add(new Ver
33300 73 69 6f 6e 28 34 2c 20 36 2c 20 32 29 29 3b 0d  sion(4, 6, 2));.
33310 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
33320 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
33330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
33340 2f 20 4e 4f 54 45 3a 20 54 68 65 20 2e 4e 45 54  / NOTE: The .NET
33350 20 46 72 61 6d 65 77 6f 72 6b 20 34 2e 37 20 64   Framework 4.7 d
33360 6f 65 73 20 6e 6f 74 20 68 61 76 65 20 69 74 73  oes not have its
33370 20 6f 77 6e 0d 0a 20 20 20 20 20 20 20 20 20 20   own..          
33380 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
33390 20 20 20 64 69 72 65 63 74 6f 72 79 3b 20 68 6f     directory; ho
333a0 77 65 76 65 72 2c 20 69 74 20 73 74 69 6c 6c 20  wever, it still 
333b0 6d 61 79 20 68 61 76 65 20 61 73 73 65 6d 62 6c  may have assembl
333c0 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  y..             
333d0 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
333e0 66 6f 6c 64 65 72 73 20 66 6f 72 20 75 73 65 20  folders for use 
333f0 69 6e 20 56 69 73 75 61 6c 20 53 74 75 64 69 6f  in Visual Studio
33400 2c 20 65 74 63 2e 0d 0a 20 20 20 20 20 20 20 20  , etc...        
33410 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
33420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33430 20 20 20 20 69 66 20 28 28 63 6f 6e 66 69 67 75      if ((configu
33440 72 61 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 20  ration == null) 
33450 7c 7c 20 21 63 6f 6e 66 69 67 75 72 61 74 69 6f  || !configuratio
33460 6e 2e 4e 6f 4e 65 74 46 78 34 37 29 0d 0a 20 20  n.NoNetFx47)..  
33470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33480 20 20 20 20 20 20 64 65 73 6b 74 6f 70 56 65 72        desktopVer
33490 73 69 6f 6e 4c 69 73 74 2e 41 64 64 28 6e 65 77  sionList.Add(new
334a0 20 56 65 72 73 69 6f 6e 28 34 2c 20 37 29 29 3b   Version(4, 7));
334b0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
334c0 20 20 20 20 20 20 20 20 66 72 61 6d 65 77 6f 72          framewor
334d0 6b 4c 69 73 74 2e 56 65 72 73 69 6f 6e 73 2e 41  kList.Versions.A
334e0 64 64 28 22 2e 4e 45 54 46 72 61 6d 65 77 6f 72  dd(".NETFramewor
334f0 6b 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  k",..           
33500 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65 73               des
33510 6b 74 6f 70 56 65 72 73 69 6f 6e 4c 69 73 74 29  ktopVersionList)
33520 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
33530 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
33540 20 20 20 20 20 20 20 20 69 66 20 28 28 63 6f 6e          if ((con
33550 66 69 67 75 72 61 74 69 6f 6e 20 3d 3d 20 6e 75  figuration == nu
33560 6c 6c 29 20 7c 7c 20 21 63 6f 6e 66 69 67 75 72  ll) || !configur
33570 61 74 69 6f 6e 2e 4e 6f 43 6f 6d 70 61 63 74 29  ation.NoCompact)
33580 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
33590 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
335a0 20 20 20 20 20 20 20 20 20 66 72 61 6d 65 77 6f           framewo
335b0 72 6b 4c 69 73 74 2e 56 65 72 73 69 6f 6e 73 2e  rkList.Versions.
335c0 41 64 64 28 22 2e 4e 45 54 43 6f 6d 70 61 63 74  Add(".NETCompact
335d0 46 72 61 6d 65 77 6f 72 6b 22 2c 0d 0a 20 20 20  Framework",..   
335e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
335f0 20 20 20 20 20 6e 65 77 20 56 65 72 73 69 6f 6e       new Version
33600 4c 69 73 74 28 6e 65 77 20 56 65 72 73 69 6f 6e  List(new Version
33610 5b 5d 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  [] {..          
33620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 65                ne
33630 77 20 56 65 72 73 69 6f 6e 28 32 2c 20 30 2c 20  w Version(2, 0, 
33640 30 2c 20 30 29 2c 20 6e 65 77 20 56 65 72 73 69  0, 0), new Versi
33650 6f 6e 28 33 2c 20 35 2c 20 30 2c 20 30 29 0d 0a  on(3, 5, 0, 0)..
33660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33670 20 20 20 20 7d 29 29 3b 0d 0a 20 20 20 20 20 20      }));..      
33680 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
33690 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
336a0 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
336b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
336c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
336d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
336e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
336f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
33700 28 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 50  (frameworkList.P
33710 6c 61 74 66 6f 72 6d 4e 61 6d 65 73 20 3d 3d 20  latformNames == 
33720 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
33730 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
33740 20 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 4c        frameworkL
33750 69 73 74 2e 50 6c 61 74 66 6f 72 6d 4e 61 6d 65  ist.PlatformName
33760 73 20 3d 20 6e 65 77 20 53 74 72 69 6e 67 4c 69  s = new StringLi
33770 73 74 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  st();....       
33780 20 20 20 20 20 20 20 20 20 69 66 20 28 28 63 6f           if ((co
33790 6e 66 69 67 75 72 61 74 69 6f 6e 20 3d 3d 20 6e  nfiguration == n
337a0 75 6c 6c 29 20 7c 7c 20 21 63 6f 6e 66 69 67 75  ull) || !configu
337b0 72 61 74 69 6f 6e 2e 4e 6f 44 65 73 6b 74 6f 70  ration.NoDesktop
337c0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
337d0 20 20 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b         framework
337e0 4c 69 73 74 2e 50 6c 61 74 66 6f 72 6d 4e 61 6d  List.PlatformNam
337f0 65 73 2e 41 64 64 28 6e 75 6c 6c 29 3b 0d 0a 0d  es.Add(null);...
33800 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
33810 20 69 66 20 28 28 63 6f 6e 66 69 67 75 72 61 74   if ((configurat
33820 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20  ion == null) || 
33830 21 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 4e  !configuration.N
33840 6f 43 6f 6d 70 61 63 74 29 0d 0a 20 20 20 20 20  oCompact)..     
33850 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
33860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33870 20 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e    frameworkList.
33880 50 6c 61 74 66 6f 72 6d 4e 61 6d 65 73 2e 41 64  PlatformNames.Ad
33890 64 28 22 50 6f 63 6b 65 74 50 43 22 29 3b 0d 0a  d("PocketPC");..
338a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
338b0 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73      frameworkLis
338c0 74 2e 50 6c 61 74 66 6f 72 6d 4e 61 6d 65 73 2e  t.PlatformNames.
338d0 41 64 64 28 22 53 6d 61 72 74 70 68 6f 6e 65 22  Add("Smartphone"
338e0 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
338f0 20 20 20 20 20 20 20 20 66 72 61 6d 65 77 6f 72          framewor
33900 6b 4c 69 73 74 2e 50 6c 61 74 66 6f 72 6d 4e 61  kList.PlatformNa
33910 6d 65 73 2e 41 64 64 28 22 57 69 6e 64 6f 77 73  mes.Add("Windows
33920 43 45 22 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  CE");..         
33930 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
33940 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
33950 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f   }....        //
33960 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33970 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33980 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33990 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
339a0 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
339b0 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20   private static 
339c0 62 6f 6f 6c 20 48 61 76 65 46 72 61 6d 65 77 6f  bool HaveFramewo
339d0 72 6b 44 69 72 65 63 74 6f 72 79 28 0d 0a 20 20  rkDirectory(..  
339e0 20 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65            MockRe
339f0 67 69 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65  gistryKey rootKe
33a00 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y,..            
33a10 73 74 72 69 6e 67 20 66 72 61 6d 65 77 6f 72 6b  string framework
33a20 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  Name,..         
33a30 20 20 20 56 65 72 73 69 6f 6e 20 66 72 61 6d 65     Version frame
33a40 77 6f 72 6b 56 65 72 73 69 6f 6e 2c 0d 0a 20 20  workVersion,..  
33a50 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
33a60 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 2c 0d 0a   platformName,..
33a70 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
33a80 20 70 65 72 55 73 65 72 2c 0d 0a 20 20 20 20 20   perUser,..     
33a90 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36         bool wow6
33aa0 34 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  4,..            
33ab0 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20  bool whatIf,..  
33ac0 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76            bool v
33ad0 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20  erbose,..       
33ae0 20 20 20 20 20 72 65 66 20 73 74 72 69 6e 67 20       ref string 
33af0 69 6e 73 74 61 6c 6c 44 69 72 65 63 74 6f 72 79  installDirectory
33b00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d  ..            ).
33b10 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
33b20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6b          string k
33b30 65 79 4e 61 6d 65 20 3d 20 47 65 74 46 72 61 6d  eyName = GetFram
33b40 65 77 6f 72 6b 4b 65 79 4e 61 6d 65 28 0d 0a 20  eworkKeyName(.. 
33b50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66                 f
33b60 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c 20 66 72  rameworkName, fr
33b70 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 2c 20  ameworkVersion, 
33b80 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 2c 20 70 65  platformName, pe
33b90 72 55 73 65 72 2c 0d 0a 20 20 20 20 20 20 20 20  rUser,..        
33ba0 20 20 20 20 20 20 20 20 77 6f 77 36 34 29 3b 0d          wow64);.
33bb0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 75  ...            u
33bc0 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73 74  sing (MockRegist
33bd0 72 79 4b 65 79 20 6b 65 79 20 3d 20 52 65 67 69  ryKey key = Regi
33be0 73 74 72 79 48 65 6c 70 65 72 2e 4f 70 65 6e 53  stryHelper.OpenS
33bf0 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20  ubKey(..        
33c00 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74              root
33c10 4b 65 79 2c 20 6b 65 79 4e 61 6d 65 2c 20 66 61  Key, keyName, fa
33c20 6c 73 65 2c 20 77 68 61 74 49 66 2c 20 76 65 72  lse, whatIf, ver
33c30 62 6f 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20  bose))..        
33c40 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
33c50 20 20 20 20 20 20 20 69 66 20 28 6b 65 79 20 3d         if (key =
33c60 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
33c70 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
33c80 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20  urn false;....  
33c90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
33ca0 20 28 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 20 21   (platformName !
33cb0 3d 20 6e 75 6c 6c 29 20 2f 2f 20 4e 4f 54 45 3a  = null) // NOTE:
33cc0 20 53 6b 69 70 20 6e 6f 6e 2d 64 65 73 6b 74 6f   Skip non-deskto
33cd0 70 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  p...            
33ce0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74          return t
33cf0 72 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  rue;....        
33d00 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 64          string d
33d10 69 72 65 63 74 6f 72 79 20 3d 20 47 65 74 46 72  irectory = GetFr
33d20 61 6d 65 77 6f 72 6b 44 69 72 65 63 74 6f 72 79  ameworkDirectory
33d30 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
33d40 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20         rootKey, 
33d50 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e  frameworkVersion
33d60 2c 20 70 65 72 55 73 65 72 2c 20 77 6f 77 36 34  , perUser, wow64
33d70 2c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20  , whatIf,..     
33d80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 76                 v
33d90 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20  erbose);....    
33da0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
33db0 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45  String.IsNullOrE
33dc0 6d 70 74 79 28 64 69 72 65 63 74 6f 72 79 29 29  mpty(directory))
33dd0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
33de0 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
33df0 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  se;....         
33e00 20 20 20 20 20 20 20 69 66 20 28 21 44 69 72 65         if (!Dire
33e10 63 74 6f 72 79 2e 45 78 69 73 74 73 28 64 69 72  ctory.Exists(dir
33e20 65 63 74 6f 72 79 29 29 0d 0a 20 20 20 20 20 20  ectory))..      
33e30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
33e40 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20  turn false;.... 
33e50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
33e60 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64  raceOps.DebugAnd
33e70 54 72 61 63 65 28 54 72 61 63 65 50 72 69 6f 72  Trace(TracePrior
33e80 69 74 79 2e 4c 6f 77 65 72 2c 0d 0a 20 20 20 20  ity.Lower,..    
33e90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33ea0 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74  debugCallback, t
33eb0 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74  raceCallback, St
33ec0 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
33ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33ee0 20 20 22 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72    ".NET Framewor
33ef0 6b 20 7b 30 7d 20 66 6f 75 6e 64 20 76 69 61 20  k {0} found via 
33f00 64 69 72 65 63 74 6f 72 79 20 7b 31 7d 2e 22 2c  directory {1}.",
33f10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
33f20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79        ForDisplay
33f30 28 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f  (frameworkVersio
33f40 6e 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 64  n), ForDisplay(d
33f50 69 72 65 63 74 6f 72 79 29 29 2c 0d 0a 20 20 20  irectory)),..   
33f60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33f70 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
33f80 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
33f90 20 20 20 20 69 6e 73 74 61 6c 6c 44 69 72 65 63      installDirec
33fa0 74 6f 72 79 20 3d 20 64 69 72 65 63 74 6f 72 79  tory = directory
33fb0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
33fc0 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d     return true;.
33fd0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
33fe0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
33ff0 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
34000 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34010 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34020 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34030 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
34040 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
34050 73 74 61 74 69 63 20 62 6f 6f 6c 20 48 61 76 65  static bool Have
34060 46 72 61 6d 65 77 6f 72 6b 52 65 67 69 73 74 72  FrameworkRegistr
34070 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y(..            
34080 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20  MockRegistryKey 
34090 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20 20 20 20  rootKey,..      
340a0 20 20 20 20 20 20 73 74 72 69 6e 67 20 66 72 61        string fra
340b0 6d 65 77 6f 72 6b 4e 61 6d 65 2c 0d 0a 20 20 20  meworkName,..   
340c0 20 20 20 20 20 20 20 20 20 56 65 72 73 69 6f 6e           Version
340d0 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f   frameworkVersio
340e0 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n,..            
340f0 73 74 72 69 6e 67 20 70 6c 61 74 66 6f 72 6d 4e  string platformN
34100 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ame,..          
34110 20 20 62 6f 6f 6c 20 70 65 72 55 73 65 72 2c 0d    bool perUser,.
34120 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f  .            boo
34130 6c 20 77 6f 77 36 34 2c 0d 0a 20 20 20 20 20 20  l wow64,..      
34140 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49        bool whatI
34150 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  f,..            
34160 62 6f 6f 6c 20 76 65 72 62 6f 73 65 0d 0a 20 20  bool verbose..  
34170 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
34180 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
34190 20 20 20 20 73 74 72 69 6e 67 20 6b 65 79 4e 61      string keyNa
341a0 6d 65 20 3d 20 47 65 74 46 72 61 6d 65 77 6f 72  me = GetFramewor
341b0 6b 4b 65 79 4e 61 6d 65 28 0d 0a 20 20 20 20 20  kKeyName(..     
341c0 20 20 20 20 20 20 20 20 20 20 20 66 72 61 6d 65             frame
341d0 77 6f 72 6b 4e 61 6d 65 2c 20 66 72 61 6d 65 77  workName, framew
341e0 6f 72 6b 56 65 72 73 69 6f 6e 2c 20 70 6c 61 74  orkVersion, plat
341f0 66 6f 72 6d 4e 61 6d 65 2c 20 70 65 72 55 73 65  formName, perUse
34200 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  r,..            
34210 20 20 20 20 77 6f 77 36 34 29 3b 0d 0a 0d 0a 20      wow64);.... 
34220 20 20 20 20 20 20 20 20 20 20 20 75 73 69 6e 67             using
34230 20 28 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65   (MockRegistryKe
34240 79 20 6b 65 79 20 3d 20 52 65 67 69 73 74 72 79  y key = Registry
34250 48 65 6c 70 65 72 2e 4f 70 65 6e 53 75 62 4b 65  Helper.OpenSubKe
34260 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y(..            
34270 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c          rootKey,
34280 20 6b 65 79 4e 61 6d 65 2c 20 66 61 6c 73 65 2c   keyName, false,
34290 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65   whatIf, verbose
342a0 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
342b0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
342c0 20 20 20 69 66 20 28 6b 65 79 20 3d 3d 20 6e 75     if (key == nu
342d0 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
342e0 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
342f0 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  false;....      
34300 20 20 20 20 20 20 20 20 20 20 69 66 20 28 70 6c            if (pl
34310 61 74 66 6f 72 6d 4e 61 6d 65 20 21 3d 20 6e 75  atformName != nu
34320 6c 6c 29 20 2f 2f 20 4e 4f 54 45 3a 20 53 6b 69  ll) // NOTE: Ski
34330 70 20 6e 6f 6e 2d 64 65 73 6b 74 6f 70 2e 0d 0a  p non-desktop...
34340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34350 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b      return true;
34360 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
34370 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62      TraceOps.Deb
34380 75 67 41 6e 64 54 72 61 63 65 28 54 72 61 63 65  ugAndTrace(Trace
34390 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 72 2c 0d  Priority.Lower,.
343a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
343b0 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61       debugCallba
343c0 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63  ck, traceCallbac
343d0 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  k, String.Format
343e0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
343f0 20 20 20 20 20 20 20 22 2e 4e 45 54 20 46 72 61         ".NET Fra
34400 6d 65 77 6f 72 6b 20 7b 30 7d 20 66 6f 75 6e 64  mework {0} found
34410 20 76 69 61 20 72 65 67 69 73 74 72 79 20 7b 31   via registry {1
34420 7d 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  }.",..          
34430 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73            ForDis
34440 70 6c 61 79 28 66 72 61 6d 65 77 6f 72 6b 56 65  play(frameworkVe
34450 72 73 69 6f 6e 29 2c 20 46 6f 72 44 69 73 70 6c  rsion), ForDispl
34460 61 79 28 6b 65 79 4e 61 6d 65 29 29 2c 0d 0a 20  ay(keyName)),.. 
34470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34480 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
34490 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
344a0 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75        return tru
344b0 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
344c0 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  }..        }....
344d0 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
344e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
344f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34500 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34510 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
34520 0a 0d 0a 20 20 20 20 20 20 20 20 5b 4d 65 74 68  ...        [Meth
34530 6f 64 49 6d 70 6c 28 4d 65 74 68 6f 64 49 6d 70  odImpl(MethodImp
34540 6c 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e  lOptions.NoInlin
34550 69 6e 67 29 5d 0d 0a 20 20 20 20 20 20 20 20 70  ing)]..        p
34560 72 69 76 61 74 65 20 73 74 61 74 69 63 20 62 6f  rivate static bo
34570 6f 6c 20 46 6f 72 45 61 63 68 46 72 61 6d 65 77  ol ForEachFramew
34580 6f 72 6b 43 6f 6e 66 69 67 28 0d 0a 20 20 20 20  orkConfig(..    
34590 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65 67 69          MockRegi
345a0 73 74 72 79 20 72 65 67 69 73 74 72 79 2c 0d 0a  stry registry,..
345b0 20 20 20 20 20 20 20 20 20 20 20 20 46 72 61 6d              Fram
345c0 65 77 6f 72 6b 4c 69 73 74 20 66 72 61 6d 65 77  eworkList framew
345d0 6f 72 6b 4c 69 73 74 2c 0d 0a 20 20 20 20 20 20  orkList,..      
345e0 20 20 20 20 20 20 46 72 61 6d 65 77 6f 72 6b 43        FrameworkC
345f0 6f 6e 66 69 67 43 61 6c 6c 62 61 63 6b 20 63 61  onfigCallback ca
34600 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20  llback,..       
34610 20 20 20 20 20 73 74 72 69 6e 67 20 76 65 72 73       string vers
34620 69 6f 6e 2c 20 2f 2a 20 4e 4f 54 45 3a 20 4f 70  ion, /* NOTE: Op
34630 74 69 6f 6e 61 6c 2e 20 2a 2f 0d 0a 20 20 20 20  tional. */..    
34640 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 69          string i
34650 6e 76 61 72 69 61 6e 74 4e 61 6d 65 2c 0d 0a 20  nvariantName,.. 
34660 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
34670 67 20 6e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20  g name,..       
34680 20 20 20 20 20 73 74 72 69 6e 67 20 64 65 73 63       string desc
34690 72 69 70 74 69 6f 6e 2c 0d 0a 20 20 20 20 20 20  ription,..      
346a0 20 20 20 20 20 20 73 74 72 69 6e 67 20 74 79 70        string typ
346b0 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20  eName,..        
346c0 20 20 20 20 41 73 73 65 6d 62 6c 79 4e 61 6d 65      AssemblyName
346d0 20 61 73 73 65 6d 62 6c 79 4e 61 6d 65 2c 0d 0a   assemblyName,..
346e0 20 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65              obje
346f0 63 74 20 63 6c 69 65 6e 74 44 61 74 61 2c 0d 0a  ct clientData,..
34700 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
34710 20 70 65 72 55 73 65 72 2c 0d 0a 20 20 20 20 20   perUser,..     
34720 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36         bool wow6
34730 34 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  4,..            
34740 62 6f 6f 6c 20 74 68 72 6f 77 4f 6e 4d 69 73 73  bool throwOnMiss
34750 69 6e 67 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ing,..          
34760 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a    bool whatIf,..
34770 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
34780 20 76 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20   verbose,..     
34790 20 20 20 20 20 20 20 72 65 66 20 62 6f 6f 6c 20         ref bool 
347a0 73 61 76 65 64 2c 0d 0a 20 20 20 20 20 20 20 20  saved,..        
347b0 20 20 20 20 72 65 66 20 73 74 72 69 6e 67 20 65      ref string e
347c0 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20  rror..          
347d0 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a    )..        {..
347e0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
347f0 72 65 67 69 73 74 72 79 20 3d 3d 20 6e 75 6c 6c  registry == null
34800 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
34810 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
34820 20 20 65 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c    error = "inval
34830 69 64 20 72 65 67 69 73 74 72 79 22 3b 0d 0a 20  id registry";.. 
34840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
34850 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20  eturn false;..  
34860 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
34870 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 66             if (f
34880 72 61 6d 65 77 6f 72 6b 4c 69 73 74 20 3d 3d 20  rameworkList == 
34890 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
348a0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
348b0 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 69        error = "i
348c0 6e 76 61 6c 69 64 20 66 72 61 6d 65 77 6f 72 6b  nvalid framework
348d0 20 6c 69 73 74 22 3b 0d 0a 20 20 20 20 20 20 20   list";..       
348e0 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
348f0 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20  false;..        
34900 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
34910 20 20 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72       MockRegistr
34920 79 4b 65 79 20 72 6f 6f 74 4b 65 79 20 3d 20 66  yKey rootKey = f
34930 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 52 6f 6f  rameworkList.Roo
34940 74 4b 65 79 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  tKey;....       
34950 20 20 20 20 20 69 66 20 28 72 6f 6f 74 4b 65 79       if (rootKey
34960 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
34970 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
34980 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20            error 
34990 3d 20 22 69 6e 76 61 6c 69 64 20 72 6f 6f 74 20  = "invalid root 
349a0 6b 65 79 22 3b 0d 0a 20 20 20 20 20 20 20 20 20  key";..         
349b0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
349c0 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lse;..          
349d0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
349e0 20 20 20 69 66 20 28 21 49 73 53 75 70 70 6f 72     if (!IsSuppor
349f0 74 65 64 52 6f 6f 74 4b 65 79 28 72 65 67 69 73  tedRootKey(regis
34a00 74 72 79 2c 20 72 6f 6f 74 4b 65 79 29 29 0d 0a  try, rootKey))..
34a10 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
34a20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
34a30 72 72 6f 72 20 3d 20 22 72 6f 6f 74 20 6b 65 79  rror = "root key
34a40 20 6d 75 73 74 20 62 65 20 70 65 72 2d 75 73 65   must be per-use
34a50 72 20 6f 72 20 70 65 72 2d 6d 61 63 68 69 6e 65  r or per-machine
34a60 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ";..            
34a70 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
34a80 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
34a90 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
34aa0 69 66 20 28 66 72 61 6d 65 77 6f 72 6b 4c 69 73  if (frameworkLis
34ab0 74 2e 4e 61 6d 65 73 20 3d 3d 20 6e 75 6c 6c 29  t.Names == null)
34ac0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
34ad0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
34ae0 20 65 72 72 6f 72 20 3d 20 22 6e 6f 20 66 72 61   error = "no fra
34af0 6d 65 77 6f 72 6b 20 6e 61 6d 65 73 20 66 6f 75  mework names fou
34b00 6e 64 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  nd";..          
34b10 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
34b20 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se;..           
34b30 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
34b40 20 20 69 66 20 28 66 72 61 6d 65 77 6f 72 6b 4c    if (frameworkL
34b50 69 73 74 2e 56 65 72 73 69 6f 6e 73 20 3d 3d 20  ist.Versions == 
34b60 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
34b70 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
34b80 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 6e        error = "n
34b90 6f 20 66 72 61 6d 65 77 6f 72 6b 20 76 65 72 73  o framework vers
34ba0 69 6f 6e 73 20 66 6f 75 6e 64 22 3b 0d 0a 20 20  ions found";..  
34bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
34bc0 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20  turn false;..   
34bd0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
34be0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 66 72            if (fr
34bf0 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 50 6c 61 74  ameworkList.Plat
34c00 66 6f 72 6d 4e 61 6d 65 73 20 3d 3d 20 6e 75 6c  formNames == nul
34c10 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
34c20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
34c30 20 20 20 65 72 72 6f 72 20 3d 20 22 6e 6f 20 70     error = "no p
34c40 6c 61 74 66 6f 72 6d 20 6e 61 6d 65 73 20 66 6f  latform names fo
34c50 75 6e 64 22 3b 0d 0a 20 20 20 20 20 20 20 20 20  und";..         
34c60 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
34c70 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lse;..          
34c80 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
34c90 20 20 20 69 66 20 28 66 72 61 6d 65 77 6f 72 6b     if (framework
34ca0 4c 69 73 74 2e 4e 61 6d 65 73 2e 43 6f 75 6e 74  List.Names.Count
34cb0 20 21 3d 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73   != frameworkLis
34cc0 74 2e 50 6c 61 74 66 6f 72 6d 4e 61 6d 65 73 2e  t.PlatformNames.
34cd0 43 6f 75 6e 74 29 0d 0a 20 20 20 20 20 20 20 20  Count)..        
34ce0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
34cf0 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 53         error = S
34d00 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 22 66 72  tring.Format("fr
34d10 61 6d 65 77 6f 72 6b 20 6e 61 6d 65 20 63 6f 75  amework name cou
34d20 6e 74 20 7b 30 7d 20 64 6f 65 73 20 6e 6f 74 20  nt {0} does not 
34d30 22 20 2b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  " +..           
34d40 20 20 20 20 20 20 20 20 20 22 6d 61 74 63 68 20           "match 
34d50 70 6c 61 74 66 6f 72 6d 20 6e 61 6d 65 20 63 6f  platform name co
34d60 75 6e 74 20 7b 31 7d 22 2c 20 66 72 61 6d 65 77  unt {1}", framew
34d70 6f 72 6b 4c 69 73 74 2e 4e 61 6d 65 73 2e 43 6f  orkList.Names.Co
34d80 75 6e 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  unt,..          
34d90 20 20 20 20 20 20 20 20 20 20 66 72 61 6d 65 77            framew
34da0 6f 72 6b 4c 69 73 74 2e 50 6c 61 74 66 6f 72 6d  orkList.Platform
34db0 4e 61 6d 65 73 2e 43 6f 75 6e 74 29 3b 0d 0a 0d  Names.Count);...
34dc0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
34dd0 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
34de0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
34df0 0a 20 20 20 20 20 20 20 20 20 20 20 20 66 6f 72  .            for
34e00 20 28 69 6e 74 20 69 6e 64 65 78 20 3d 20 30 3b   (int index = 0;
34e10 20 69 6e 64 65 78 20 3c 20 66 72 61 6d 65 77 6f   index < framewo
34e20 72 6b 4c 69 73 74 2e 4e 61 6d 65 73 2e 43 6f 75  rkList.Names.Cou
34e30 6e 74 3b 20 69 6e 64 65 78 2b 2b 29 0d 0a 20 20  nt; index++)..  
34e40 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
34e50 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
34e60 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
34e70 20 2f 2f 20 4e 4f 54 45 3a 20 47 72 61 62 20 74   // NOTE: Grab t
34e80 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 66  he name of the f
34e90 72 61 6d 65 77 6f 72 6b 20 28 65 2e 67 2e 20 22  ramework (e.g. "
34ea0 2e 4e 45 54 46 72 61 6d 65 77 6f 72 6b 22 29 0d  .NETFramework").
34eb0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
34ec0 20 2f 2f 20 20 20 20 20 20 20 61 6e 64 20 74 68   //       and th
34ed0 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 70 6c  e name of the pl
34ee0 61 74 66 6f 72 6d 20 28 65 2e 67 2e 20 22 57 69  atform (e.g. "Wi
34ef0 6e 64 6f 77 73 43 45 22 29 2e 0d 0a 20 20 20 20  ndowsCE")...    
34f00 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
34f10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34f20 73 74 72 69 6e 67 20 66 72 61 6d 65 77 6f 72 6b  string framework
34f30 4e 61 6d 65 20 3d 20 66 72 61 6d 65 77 6f 72 6b  Name = framework
34f40 4c 69 73 74 2e 4e 61 6d 65 73 5b 69 6e 64 65 78  List.Names[index
34f50 5d 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ];..            
34f60 20 20 20 20 73 74 72 69 6e 67 20 70 6c 61 74 66      string platf
34f70 6f 72 6d 4e 61 6d 65 20 3d 20 66 72 61 6d 65 77  ormName = framew
34f80 6f 72 6b 4c 69 73 74 2e 50 6c 61 74 66 6f 72 6d  orkList.Platform
34f90 4e 61 6d 65 73 5b 69 6e 64 65 78 5d 3b 0d 0a 0d  Names[index];...
34fa0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
34fb0 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
34fc0 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 53 6b       // NOTE: Sk
34fd0 69 70 20 61 6c 6c 20 6e 6f 6e 2d 64 65 73 6b 74  ip all non-deskt
34fe0 6f 70 20 66 72 61 6d 65 77 6f 72 6b 73 20 28 69  op frameworks (i
34ff0 2e 65 2e 20 69 66 20 74 68 65 20 70 6c 61 74 66  .e. if the platf
35000 6f 72 6d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  orm..           
35010 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 6e 61       //       na
35020 6d 65 20 69 73 20 6e 6f 74 20 6e 75 6c 6c 29 2e  me is not null).
35030 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
35040 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
35050 20 20 20 20 20 20 69 66 20 28 70 6c 61 74 66 6f        if (platfo
35060 72 6d 4e 61 6d 65 20 21 3d 20 6e 75 6c 6c 29 0d  rmName != null).
35070 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
35080 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a       continue;..
35090 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
350a0 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
350b0 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 47        // NOTE: G
350c0 72 61 62 20 74 68 65 20 73 75 70 70 6f 72 74 65  rab the supporte
350d0 64 20 76 65 72 73 69 6f 6e 73 20 6f 66 20 74 68  d versions of th
350e0 69 73 20 70 61 72 74 69 63 75 6c 61 72 0d 0a 20  is particular.. 
350f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
35100 2f 20 20 20 20 20 20 20 66 72 61 6d 65 77 6f 72  /       framewor
35110 6b 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  k...            
35120 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
35130 20 20 20 20 20 20 20 20 56 65 72 73 69 6f 6e 4c          VersionL
35140 69 73 74 20 66 72 61 6d 65 77 6f 72 6b 56 65 72  ist frameworkVer
35150 73 69 6f 6e 4c 69 73 74 3b 0d 0a 0d 0a 20 20 20  sionList;....   
35160 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
35170 28 76 65 72 73 69 6f 6e 20 21 3d 20 6e 75 6c 6c  (version != null
35180 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
35190 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
351a0 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
351b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
351c0 20 20 2f 2f 20 4e 4f 54 45 3a 20 4d 61 6e 75 61    // NOTE: Manua
351d0 6c 20 6f 76 65 72 72 69 64 65 20 6f 66 20 74 68  l override of th
351e0 65 20 2a 4f 4e 45 2a 20 66 72 61 6d 65 77 6f 72  e *ONE* framewor
351f0 6b 20 76 65 72 73 69 6f 6e 0d 0a 20 20 20 20 20  k version..     
35200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
35210 2f 20 20 20 20 20 20 20 74 6f 20 70 72 6f 63 65  /       to proce
35220 73 73 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ss...           
35230 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
35240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35250 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f   frameworkVersio
35260 6e 4c 69 73 74 20 3d 20 6e 65 77 20 56 65 72 73  nList = new Vers
35270 69 6f 6e 4c 69 73 74 28 29 3b 0d 0a 20 20 20 20  ionList();..    
35280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35290 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e  frameworkVersion
352a0 4c 69 73 74 2e 41 64 64 28 6e 65 77 20 56 65 72  List.Add(new Ver
352b0 73 69 6f 6e 28 76 65 72 73 69 6f 6e 29 29 3b 0d  sion(version));.
352c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
352d0 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
352e0 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20      else..      
352f0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
35300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35310 20 69 66 20 28 21 66 72 61 6d 65 77 6f 72 6b 4c   if (!frameworkL
35320 69 73 74 2e 56 65 72 73 69 6f 6e 73 2e 54 72 79  ist.Versions.Try
35330 47 65 74 56 61 6c 75 65 28 0d 0a 20 20 20 20 20  GetValue(..     
35340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35350 20 20 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b         framework
35360 4e 61 6d 65 2c 20 6f 75 74 20 66 72 61 6d 65 77  Name, out framew
35370 6f 72 6b 56 65 72 73 69 6f 6e 4c 69 73 74 29 20  orkVersionList) 
35380 7c 7c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ||..            
35390 20 20 20 20 20 20 20 20 20 20 20 20 28 66 72 61              (fra
353a0 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 4c 69 73  meworkVersionLis
353b0 74 20 3d 3d 20 6e 75 6c 6c 29 29 0d 0a 20 20 20  t == null))..   
353c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
353d0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
353e0 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74              cont
353f0 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  inue;..         
35400 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
35410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
35420 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
35430 20 20 20 66 6f 72 65 61 63 68 20 28 56 65 72 73     foreach (Vers
35440 69 6f 6e 20 66 72 61 6d 65 77 6f 72 6b 56 65 72  ion frameworkVer
35450 73 69 6f 6e 20 69 6e 20 66 72 61 6d 65 77 6f 72  sion in framewor
35460 6b 56 65 72 73 69 6f 6e 4c 69 73 74 29 0d 0a 20  kVersionList).. 
35470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
35480 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
35490 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44        TraceOps.D
354a0 65 62 75 67 41 6e 64 54 72 61 63 65 28 54 72 61  ebugAndTrace(Tra
354b0 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 72  cePriority.Lower
354c0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
354d0 20 20 20 20 20 20 20 20 20 20 20 64 65 62 75 67             debug
354e0 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43  Callback, traceC
354f0 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e  allback, String.
35500 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
35510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35520 20 22 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 20   "frameworkName 
35530 3d 20 7b 30 7d 2c 20 66 72 61 6d 65 77 6f 72 6b  = {0}, framework
35540 56 65 72 73 69 6f 6e 20 3d 20 7b 31 7d 2c 20 22  Version = {1}, "
35550 20 2b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   +..            
35560 20 20 20 20 20 20 20 20 20 20 20 20 22 70 6c 61              "pla
35570 74 66 6f 72 6d 4e 61 6d 65 20 3d 20 7b 32 7d 22  tformName = {2}"
35580 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 66 72 61  , ForDisplay(fra
35590 6d 65 77 6f 72 6b 4e 61 6d 65 29 2c 0d 0a 20 20  meworkName),..  
355a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
355b0 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79        ForDisplay
355c0 28 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f  (frameworkVersio
355d0 6e 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n),..           
355e0 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72               For
355f0 44 69 73 70 6c 61 79 28 70 6c 61 74 66 6f 72 6d  Display(platform
35600 4e 61 6d 65 29 29 2c 20 74 72 61 63 65 43 61 74  Name)), traceCat
35610 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20  egory);....     
35620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
35630 74 72 69 6e 67 20 69 6e 73 74 61 6c 6c 44 69 72  tring installDir
35640 65 63 74 6f 72 79 20 3d 20 6e 75 6c 6c 3b 0d 0a  ectory = null;..
35650 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
35660 20 20 20 20 20 20 69 66 20 28 21 48 61 76 65 46        if (!HaveF
35670 72 61 6d 65 77 6f 72 6b 44 69 72 65 63 74 6f 72  rameworkDirector
35680 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y(..            
35690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
356a0 72 6f 6f 74 4b 65 79 2c 20 66 72 61 6d 65 77 6f  rootKey, framewo
356b0 72 6b 4e 61 6d 65 2c 20 66 72 61 6d 65 77 6f 72  rkName, framewor
356c0 6b 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20  kVersion,..     
356d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
356e0 20 20 20 20 20 20 20 70 6c 61 74 66 6f 72 6d 4e         platformN
356f0 61 6d 65 2c 20 70 65 72 55 73 65 72 2c 20 77 6f  ame, perUser, wo
35700 77 36 34 2c 20 77 68 61 74 49 66 2c 20 76 65 72  w64, whatIf, ver
35710 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  bose,..         
35720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35730 20 20 20 72 65 66 20 69 6e 73 74 61 6c 6c 44 69     ref installDi
35740 72 65 63 74 6f 72 79 29 29 0d 0a 20 20 20 20 20  rectory))..     
35750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
35760 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
35770 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f            TraceO
35780 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65  ps.DebugAndTrace
35790 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c  (TracePriority.L
357a0 6f 77 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ow,..           
357b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
357c0 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20   debugCallback, 
357d0 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53  traceCallback, S
357e0 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
357f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35800 20 20 20 20 20 20 20 20 20 20 20 22 2e 4e 45 54             ".NET
35810 20 46 72 61 6d 65 77 6f 72 6b 20 7b 30 7d 20 64   Framework {0} d
35820 69 72 65 63 74 6f 72 79 20 6e 6f 74 20 66 6f 75  irectory not fou
35830 6e 64 2c 20 22 20 2b 0d 0a 20 20 20 20 20 20 20  nd, " +..       
35840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35850 20 20 20 20 20 22 73 6b 69 70 70 69 6e 67 2e 2e       "skipping..
35860 2e 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 66  .", ForDisplay(f
35870 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 29  rameworkVersion)
35880 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
35890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
358a0 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
358b0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
358c0 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69             conti
358d0 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  nue;..          
358e0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
358f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35900 20 20 20 69 66 20 28 63 61 6c 6c 62 61 63 6b 20     if (callback 
35910 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
35920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35930 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 0d 0a 20    continue;.... 
35940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35950 20 20 20 73 74 72 69 6e 67 20 64 69 72 65 63 74     string direct
35960 6f 72 79 20 3d 20 69 6e 73 74 61 6c 6c 44 69 72  ory = installDir
35970 65 63 74 6f 72 79 3b 0d 0a 0d 0a 20 20 20 20 20  ectory;....     
35980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
35990 66 20 28 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c  f (String.IsNull
359a0 4f 72 45 6d 70 74 79 28 64 69 72 65 63 74 6f 72  OrEmpty(director
359b0 79 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  y))..           
359c0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
359d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
359e0 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62      TraceOps.Deb
359f0 75 67 41 6e 64 54 72 61 63 65 28 54 72 61 63 65  ugAndTrace(Trace
35a00 50 72 69 6f 72 69 74 79 2e 4c 6f 77 2c 0d 0a 20  Priority.Low,.. 
35a10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35a20 20 20 20 20 20 20 20 20 20 20 20 64 65 62 75 67             debug
35a30 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43  Callback, traceC
35a40 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e  allback, String.
35a50 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
35a60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35a70 20 20 20 20 20 22 2e 4e 45 54 20 46 72 61 6d 65       ".NET Frame
35a80 77 6f 72 6b 20 7b 30 7d 20 64 69 72 65 63 74 6f  work {0} directo
35a90 72 79 20 69 73 20 69 6e 76 61 6c 69 64 2c 20 22  ry is invalid, "
35aa0 20 2b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   +..            
35ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35ac0 22 73 6b 69 70 70 69 6e 67 2e 2e 2e 22 2c 20 46  "skipping...", F
35ad0 6f 72 44 69 73 70 6c 61 79 28 66 72 61 6d 65 77  orDisplay(framew
35ae0 6f 72 6b 56 65 72 73 69 6f 6e 29 29 2c 0d 0a 20  orkVersion)),.. 
35af0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35b00 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
35b10 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  Category);....  
35b20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35b30 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d        continue;.
35b40 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
35b50 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
35b60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 69                di
35b70 72 65 63 74 6f 72 79 20 3d 20 50 61 74 68 2e 43  rectory = Path.C
35b80 6f 6d 62 69 6e 65 28 64 69 72 65 63 74 6f 72 79  ombine(directory
35b90 2c 20 22 43 6f 6e 66 69 67 22 29 3b 0d 0a 0d 0a  , "Config");....
35ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35bb0 20 20 20 20 69 66 20 28 21 44 69 72 65 63 74 6f      if (!Directo
35bc0 72 79 2e 45 78 69 73 74 73 28 64 69 72 65 63 74  ry.Exists(direct
35bd0 6f 72 79 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ory))..         
35be0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
35bf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35c00 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44        TraceOps.D
35c10 65 62 75 67 41 6e 64 54 72 61 63 65 28 54 72 61  ebugAndTrace(Tra
35c20 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 2c 0d  cePriority.Low,.
35c30 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
35c40 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65 62               deb
35c50 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63  ugCallback, trac
35c60 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e  eCallback, Strin
35c70 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
35c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35c90 20 20 20 20 20 20 20 22 2e 4e 45 54 20 46 72 61         ".NET Fra
35ca0 6d 65 77 6f 72 6b 20 7b 30 7d 20 64 69 72 65 63  mework {0} direc
35cb0 74 6f 72 79 20 7b 31 7d 20 64 6f 65 73 20 6e 6f  tory {1} does no
35cc0 74 20 22 20 2b 0d 0a 20 20 20 20 20 20 20 20 20  t " +..         
35cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35ce0 20 20 20 22 65 78 69 73 74 2c 20 73 6b 69 70 70     "exist, skipp
35cf0 69 6e 67 2e 2e 2e 22 2c 20 46 6f 72 44 69 73 70  ing...", ForDisp
35d00 6c 61 79 28 66 72 61 6d 65 77 6f 72 6b 56 65 72  lay(frameworkVer
35d10 73 69 6f 6e 29 2c 0d 0a 20 20 20 20 20 20 20 20  sion),..        
35d20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35d30 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 64      ForDisplay(d
35d40 69 72 65 63 74 6f 72 79 29 29 2c 20 74 72 61 63  irectory)), trac
35d50 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20  eCategory);.... 
35d60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35d70 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b         continue;
35d80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
35d90 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
35da0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
35db0 74 72 69 6e 67 20 66 69 6c 65 4e 61 6d 65 20 3d  tring fileName =
35dc0 20 50 61 74 68 2e 43 6f 6d 62 69 6e 65 28 64 69   Path.Combine(di
35dd0 72 65 63 74 6f 72 79 2c 20 22 6d 61 63 68 69 6e  rectory, "machin
35de0 65 2e 63 6f 6e 66 69 67 22 29 3b 0d 0a 0d 0a 20  e.config");.... 
35df0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35e00 20 20 20 69 66 20 28 21 46 69 6c 65 2e 45 78 69     if (!File.Exi
35e10 73 74 73 28 66 69 6c 65 4e 61 6d 65 29 29 0d 0a  sts(fileName))..
35e20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35e30 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
35e40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
35e50 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64  raceOps.DebugAnd
35e60 54 72 61 63 65 28 54 72 61 63 65 50 72 69 6f 72  Trace(TracePrior
35e70 69 74 79 2e 4c 6f 77 2c 0d 0a 20 20 20 20 20 20  ity.Low,..      
35e80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35e90 20 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62        debugCallb
35ea0 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61  ack, traceCallba
35eb0 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ck, String.Forma
35ec0 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
35ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35ee0 22 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72 6b 20  ".NET Framework 
35ef0 7b 30 7d 20 66 69 6c 65 20 7b 31 7d 20 64 6f 65  {0} file {1} doe
35f00 73 20 6e 6f 74 20 65 78 69 73 74 2c 20 22 20 2b  s not exist, " +
35f10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
35f20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 73                "s
35f30 6b 69 70 70 69 6e 67 2e 2e 2e 22 2c 20 46 6f 72  kipping...", For
35f40 44 69 73 70 6c 61 79 28 66 72 61 6d 65 77 6f 72  Display(framewor
35f50 6b 56 65 72 73 69 6f 6e 29 2c 0d 0a 20 20 20 20  kVersion),..    
35f60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35f70 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c          ForDispl
35f80 61 79 28 66 69 6c 65 4e 61 6d 65 29 29 2c 20 74  ay(fileName)), t
35f90 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
35fa0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
35fb0 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e            contin
35fc0 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
35fd0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
35fe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35ff0 20 20 62 6f 6f 6c 20 6c 6f 63 61 6c 53 61 76 65    bool localSave
36000 64 20 3d 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20  d = false;....  
36010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36020 20 20 69 66 20 28 21 63 61 6c 6c 62 61 63 6b 28    if (!callback(
36030 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
36040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 69                fi
36050 6c 65 4e 61 6d 65 2c 20 69 6e 76 61 72 69 61 6e  leName, invarian
36060 74 4e 61 6d 65 2c 20 6e 61 6d 65 2c 20 64 65 73  tName, name, des
36070 63 72 69 70 74 69 6f 6e 2c 0d 0a 20 20 20 20 20  cription,..     
36080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36090 20 20 20 20 20 20 20 74 79 70 65 4e 61 6d 65 2c         typeName,
360a0 20 61 73 73 65 6d 62 6c 79 4e 61 6d 65 2c 20 69   assemblyName, i
360b0 6e 73 74 61 6c 6c 44 69 72 65 63 74 6f 72 79 2c  nstallDirectory,
360c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
360d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6c                cl
360e0 69 65 6e 74 44 61 74 61 2c 20 70 65 72 55 73 65  ientData, perUse
360f0 72 2c 20 77 6f 77 36 34 2c 20 74 68 72 6f 77 4f  r, wow64, throwO
36100 6e 4d 69 73 73 69 6e 67 2c 0d 0a 20 20 20 20 20  nMissing,..     
36110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36120 20 20 20 20 20 20 20 77 68 61 74 49 66 2c 20 76         whatIf, v
36130 65 72 62 6f 73 65 2c 20 72 65 66 20 6c 6f 63 61  erbose, ref loca
36140 6c 53 61 76 65 64 2c 20 72 65 66 20 65 72 72 6f  lSaved, ref erro
36150 72 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  r))..           
36160 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
36170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36180 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
36190 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
361a0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
361b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c                el
361c0 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  se..            
361d0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
361e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
361f0 20 20 20 69 66 20 28 6c 6f 63 61 6c 53 61 76 65     if (localSave
36200 64 20 26 26 20 21 73 61 76 65 64 29 0d 0a 20 20  d && !saved)..  
36210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36220 20 20 20 20 20 20 20 20 20 20 73 61 76 65 64 20            saved 
36230 3d 20 74 72 75 65 3b 0d 0a 0d 0a 20 20 20 20 20  = true;....     
36240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36250 20 20 20 69 66 20 28 76 65 72 62 6f 73 65 29 0d     if (verbose).
36260 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
36270 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
36280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36290 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73          TraceOps
362a0 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 54  .DebugAndTrace(T
362b0 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77  racePriority.Low
362c0 65 73 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  est,..          
362d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
362e0 20 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62        debugCallb
362f0 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61  ack, traceCallba
36300 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ck, String.Forma
36310 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
36320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36330 20 20 20 20 22 6c 6f 63 61 6c 53 61 76 65 64 20      "localSaved 
36340 3d 20 7b 30 7d 2c 20 73 61 76 65 64 20 3d 20 7b  = {0}, saved = {
36350 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  1}",..          
36360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36370 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79        ForDisplay
36380 28 6c 6f 63 61 6c 53 61 76 65 64 29 2c 20 46 6f  (localSaved), Fo
36390 72 44 69 73 70 6c 61 79 28 73 61 76 65 64 29 29  rDisplay(saved))
363a0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
363b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
363c0 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
363d0 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
363e0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
363f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36400 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
36410 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
36420 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
36430 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75        return tru
36440 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d  e;..        }...
36450 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
36460 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36470 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36480 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36490 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
364a0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 5b 4d 65 74  ....        [Met
364b0 68 6f 64 49 6d 70 6c 28 4d 65 74 68 6f 64 49 6d  hodImpl(MethodIm
364c0 70 6c 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e 6c 69  plOptions.NoInli
364d0 6e 69 6e 67 29 5d 0d 0a 20 20 20 20 20 20 20 20  ning)]..        
364e0 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 62  private static b
364f0 6f 6f 6c 20 46 6f 72 45 61 63 68 46 72 61 6d 65  ool ForEachFrame
36500 77 6f 72 6b 52 65 67 69 73 74 72 79 28 0d 0a 20  workRegistry(.. 
36510 20 20 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52             MockR
36520 65 67 69 73 74 72 79 20 72 65 67 69 73 74 72 79  egistry registry
36530 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 46  ,..            F
36540 72 61 6d 65 77 6f 72 6b 4c 69 73 74 20 66 72 61  rameworkList fra
36550 6d 65 77 6f 72 6b 4c 69 73 74 2c 0d 0a 20 20 20  meworkList,..   
36560 20 20 20 20 20 20 20 20 20 46 72 61 6d 65 77 6f           Framewo
36570 72 6b 52 65 67 69 73 74 72 79 43 61 6c 6c 62 61  rkRegistryCallba
36580 63 6b 20 63 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20  ck callback,..  
36590 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
365a0 20 76 65 72 73 69 6f 6e 2c 20 2f 2a 20 4e 4f 54   version, /* NOT
365b0 45 3a 20 4f 70 74 69 6f 6e 61 6c 2e 20 2a 2f 0d  E: Optional. */.
365c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a  .            obj
365d0 65 63 74 20 63 6c 69 65 6e 74 44 61 74 61 2c 0d  ect clientData,.
365e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f  .            boo
365f0 6c 20 70 65 72 55 73 65 72 2c 0d 0a 20 20 20 20  l perUser,..    
36600 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 6f 77          bool wow
36610 36 34 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  64,..           
36620 20 62 6f 6f 6c 20 74 68 72 6f 77 4f 6e 4d 69 73   bool throwOnMis
36630 73 69 6e 67 2c 0d 0a 20 20 20 20 20 20 20 20 20  sing,..         
36640 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d     bool whatIf,.
36650 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f  .            boo
36660 6c 20 76 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20  l verbose,..    
36670 20 20 20 20 20 20 20 20 72 65 66 20 73 74 72 69          ref stri
36680 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20 20 20 20  ng error..      
36690 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
366a0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
366b0 69 66 20 28 72 65 67 69 73 74 72 79 20 3d 3d 20  if (registry == 
366c0 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
366d0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
366e0 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 69        error = "i
366f0 6e 76 61 6c 69 64 20 72 65 67 69 73 74 72 79 22  nvalid registry"
36700 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
36710 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
36720 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
36730 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
36740 66 20 28 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74  f (frameworkList
36750 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
36760 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
36770 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20            error 
36780 3d 20 22 69 6e 76 61 6c 69 64 20 66 72 61 6d 65  = "invalid frame
36790 77 6f 72 6b 20 6c 69 73 74 22 3b 0d 0a 20 20 20  work list";..   
367a0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
367b0 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20  urn false;..    
367c0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
367d0 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65 67           MockReg
367e0 69 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79  istryKey rootKey
367f0 20 3d 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74   = frameworkList
36800 2e 52 6f 6f 74 4b 65 79 3b 0d 0a 0d 0a 20 20 20  .RootKey;....   
36810 20 20 20 20 20 20 20 20 20 69 66 20 28 72 6f 6f           if (roo
36820 74 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  tKey == null).. 
36830 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
36840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72                er
36850 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64 20 72  ror = "invalid r
36860 6f 6f 74 20 6b 65 79 22 3b 0d 0a 20 20 20 20 20  oot key";..     
36870 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
36880 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  n false;..      
36890 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
368a0 20 20 20 20 20 20 20 69 66 20 28 21 49 73 53 75         if (!IsSu
368b0 70 70 6f 72 74 65 64 52 6f 6f 74 4b 65 79 28 72  pportedRootKey(r
368c0 65 67 69 73 74 72 79 2c 20 72 6f 6f 74 4b 65 79  egistry, rootKey
368d0 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
368e0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
368f0 20 20 20 65 72 72 6f 72 20 3d 20 22 72 6f 6f 74     error = "root
36900 20 6b 65 79 20 6d 75 73 74 20 62 65 20 70 65 72   key must be per
36910 2d 75 73 65 72 20 6f 72 20 70 65 72 2d 6d 61 63  -user or per-mac
36920 68 69 6e 65 22 3b 0d 0a 20 20 20 20 20 20 20 20  hine";..        
36930 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
36940 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alse;..         
36950 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
36960 20 20 20 20 69 66 20 28 66 72 61 6d 65 77 6f 72      if (framewor
36970 6b 4c 69 73 74 2e 4e 61 6d 65 73 20 3d 3d 20 6e  kList.Names == n
36980 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
36990 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
369a0 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 6e 6f       error = "no
369b0 20 66 72 61 6d 65 77 6f 72 6b 20 6e 61 6d 65 73   framework names
369c0 20 66 6f 75 6e 64 22 3b 0d 0a 20 20 20 20 20 20   found";..      
369d0 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
369e0 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20   false;..       
369f0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
36a00 20 20 20 20 20 20 69 66 20 28 66 72 61 6d 65 77        if (framew
36a10 6f 72 6b 4c 69 73 74 2e 56 65 72 73 69 6f 6e 73  orkList.Versions
36a20 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
36a30 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
36a40 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20            error 
36a50 3d 20 22 6e 6f 20 66 72 61 6d 65 77 6f 72 6b 20  = "no framework 
36a60 76 65 72 73 69 6f 6e 73 20 66 6f 75 6e 64 22 3b  versions found";
36a70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
36a80 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
36a90 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
36aa0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
36ab0 20 28 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e   (frameworkList.
36ac0 50 6c 61 74 66 6f 72 6d 4e 61 6d 65 73 20 3d 3d  PlatformNames ==
36ad0 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
36ae0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
36af0 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22         error = "
36b00 6e 6f 20 70 6c 61 74 66 6f 72 6d 20 6e 61 6d 65  no platform name
36b10 73 20 66 6f 75 6e 64 22 3b 0d 0a 20 20 20 20 20  s found";..     
36b20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
36b30 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  n false;..      
36b40 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
36b50 20 20 20 20 20 20 20 69 66 20 28 66 72 61 6d 65         if (frame
36b60 77 6f 72 6b 4c 69 73 74 2e 4e 61 6d 65 73 2e 43  workList.Names.C
36b70 6f 75 6e 74 20 21 3d 20 66 72 61 6d 65 77 6f 72  ount != framewor
36b80 6b 4c 69 73 74 2e 50 6c 61 74 66 6f 72 6d 4e 61  kList.PlatformNa
36b90 6d 65 73 2e 43 6f 75 6e 74 29 0d 0a 20 20 20 20  mes.Count)..    
36ba0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
36bb0 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72             error
36bc0 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74   = String.Format
36bd0 28 22 66 72 61 6d 65 77 6f 72 6b 20 6e 61 6d 65  ("framework name
36be0 20 63 6f 75 6e 74 20 7b 30 7d 20 64 6f 65 73 20   count {0} does 
36bf0 6e 6f 74 20 22 20 2b 0d 0a 20 20 20 20 20 20 20  not " +..       
36c00 20 20 20 20 20 20 20 20 20 20 20 20 20 22 6d 61               "ma
36c10 74 63 68 20 70 6c 61 74 66 6f 72 6d 20 6e 61 6d  tch platform nam
36c20 65 20 63 6f 75 6e 74 20 7b 31 7d 22 2c 20 66 72  e count {1}", fr
36c30 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 4e 61 6d 65  ameworkList.Name
36c40 73 2e 43 6f 75 6e 74 2c 0d 0a 20 20 20 20 20 20  s.Count,..      
36c50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 72                fr
36c60 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 50 6c 61 74  ameworkList.Plat
36c70 66 6f 72 6d 4e 61 6d 65 73 2e 43 6f 75 6e 74 29  formNames.Count)
36c80 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
36c90 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
36ca0 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
36cb0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
36cc0 20 66 6f 72 20 28 69 6e 74 20 69 6e 64 65 78 20   for (int index 
36cd0 3d 20 30 3b 20 69 6e 64 65 78 20 3c 20 66 72 61  = 0; index < fra
36ce0 6d 65 77 6f 72 6b 4c 69 73 74 2e 4e 61 6d 65 73  meworkList.Names
36cf0 2e 43 6f 75 6e 74 3b 20 69 6e 64 65 78 2b 2b 29  .Count; index++)
36d00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
36d10 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
36d20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
36d30 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 47 72       // NOTE: Gr
36d40 61 62 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74  ab the name of t
36d50 68 65 20 66 72 61 6d 65 77 6f 72 6b 20 28 65 2e  he framework (e.
36d60 67 2e 20 22 2e 4e 45 54 46 72 61 6d 65 77 6f 72  g. ".NETFramewor
36d70 6b 22 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  k")..           
36d80 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 61 6e       //       an
36d90 64 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68  d the name of th
36da0 65 20 70 6c 61 74 66 6f 72 6d 20 28 65 2e 67 2e  e platform (e.g.
36db0 20 22 57 69 6e 64 6f 77 73 43 45 22 29 2e 0d 0a   "WindowsCE")...
36dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36dd0 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
36de0 20 20 20 20 73 74 72 69 6e 67 20 66 72 61 6d 65      string frame
36df0 77 6f 72 6b 4e 61 6d 65 20 3d 20 66 72 61 6d 65  workName = frame
36e00 77 6f 72 6b 4c 69 73 74 2e 4e 61 6d 65 73 5b 69  workList.Names[i
36e10 6e 64 65 78 5d 3b 0d 0a 20 20 20 20 20 20 20 20  ndex];..        
36e20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 70          string p
36e30 6c 61 74 66 6f 72 6d 4e 61 6d 65 20 3d 20 66 72  latformName = fr
36e40 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 50 6c 61 74  ameworkList.Plat
36e50 66 6f 72 6d 4e 61 6d 65 73 5b 69 6e 64 65 78 5d  formNames[index]
36e60 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
36e70 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
36e80 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45           // NOTE
36e90 3a 20 47 72 61 62 20 74 68 65 20 73 75 70 70 6f  : Grab the suppo
36ea0 72 74 65 64 20 76 65 72 73 69 6f 6e 73 20 6f 66  rted versions of
36eb0 20 74 68 69 73 20 70 61 72 74 69 63 75 6c 61 72   this particular
36ec0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
36ed0 20 20 2f 2f 20 20 20 20 20 20 20 66 72 61 6d 65    //       frame
36ee0 77 6f 72 6b 2e 0d 0a 20 20 20 20 20 20 20 20 20  work...         
36ef0 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
36f00 20 20 20 20 20 20 20 20 20 20 20 56 65 72 73 69             Versi
36f10 6f 6e 4c 69 73 74 20 66 72 61 6d 65 77 6f 72 6b  onList framework
36f20 56 65 72 73 69 6f 6e 4c 69 73 74 3b 0d 0a 0d 0a  VersionList;....
36f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36f40 69 66 20 28 76 65 72 73 69 6f 6e 20 21 3d 20 6e  if (version != n
36f50 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
36f60 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
36f70 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
36f80 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
36f90 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 4d 61       // NOTE: Ma
36fa0 6e 75 61 6c 20 6f 76 65 72 72 69 64 65 20 6f 66  nual override of
36fb0 20 74 68 65 20 2a 4f 4e 45 2a 20 66 72 61 6d 65   the *ONE* frame
36fc0 77 6f 72 6b 20 76 65 72 73 69 6f 6e 0d 0a 20 20  work version..  
36fd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36fe0 20 20 2f 2f 20 20 20 20 20 20 20 74 6f 20 70 72    //       to pr
36ff0 6f 63 65 73 73 2e 0d 0a 20 20 20 20 20 20 20 20  ocess...        
37000 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
37010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37020 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 56 65 72      frameworkVer
37030 73 69 6f 6e 4c 69 73 74 20 3d 20 6e 65 77 20 56  sionList = new V
37040 65 72 73 69 6f 6e 4c 69 73 74 28 29 3b 0d 0a 20  ersionList();.. 
37050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37060 20 20 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73     frameworkVers
37070 69 6f 6e 4c 69 73 74 2e 41 64 64 28 6e 65 77 20  ionList.Add(new 
37080 56 65 72 73 69 6f 6e 28 76 65 72 73 69 6f 6e 29  Version(version)
37090 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
370a0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
370b0 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20         else..   
370c0 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
370d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
370e0 20 20 20 20 69 66 20 28 21 66 72 61 6d 65 77 6f      if (!framewo
370f0 72 6b 4c 69 73 74 2e 56 65 72 73 69 6f 6e 73 2e  rkList.Versions.
37100 54 72 79 47 65 74 56 61 6c 75 65 28 0d 0a 20 20  TryGetValue(..  
37110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37120 20 20 20 20 20 20 20 20 20 20 66 72 61 6d 65 77            framew
37130 6f 72 6b 4e 61 6d 65 2c 20 6f 75 74 20 66 72 61  orkName, out fra
37140 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 4c 69 73  meworkVersionLis
37150 74 29 20 7c 7c 0d 0a 20 20 20 20 20 20 20 20 20  t) ||..         
37160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28                 (
37170 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e  frameworkVersion
37180 4c 69 73 74 20 3d 3d 20 6e 75 6c 6c 29 29 0d 0a  List == null))..
37190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
371a0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
371b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
371c0 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20  ontinue;..      
371d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
371e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
371f0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
37200 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 28 56        foreach (V
37210 65 72 73 69 6f 6e 20 66 72 61 6d 65 77 6f 72 6b  ersion framework
37220 56 65 72 73 69 6f 6e 20 69 6e 20 66 72 61 6d 65  Version in frame
37230 77 6f 72 6b 56 65 72 73 69 6f 6e 4c 69 73 74 29  workVersionList)
37240 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
37250 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
37260 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70           TraceOp
37270 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28  s.DebugAndTrace(
37280 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f  TracePriority.Lo
37290 77 65 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  wer,..          
372a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65                de
372b0 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61  bugCallback, tra
372c0 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69  ceCallback, Stri
372d0 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20  ng.Format(..    
372e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
372f0 20 20 20 20 22 66 72 61 6d 65 77 6f 72 6b 4e 61      "frameworkNa
37300 6d 65 20 3d 20 7b 30 7d 2c 20 66 72 61 6d 65 77  me = {0}, framew
37310 6f 72 6b 56 65 72 73 69 6f 6e 20 3d 20 7b 31 7d  orkVersion = {1}
37320 2c 20 22 20 2b 0d 0a 20 20 20 20 20 20 20 20 20  , " +..         
37330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
37340 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 20 3d 20 7b  platformName = {
37350 32 7d 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28  2}", ForDisplay(
37360 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 29 2c 0d  frameworkName),.
37370 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
37380 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70           ForDisp
37390 6c 61 79 28 66 72 61 6d 65 77 6f 72 6b 56 65 72  lay(frameworkVer
373a0 73 69 6f 6e 29 2c 0d 0a 20 20 20 20 20 20 20 20  sion),..        
373b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
373c0 46 6f 72 44 69 73 70 6c 61 79 28 70 6c 61 74 66  ForDisplay(platf
373d0 6f 72 6d 4e 61 6d 65 29 29 2c 20 74 72 61 63 65  ormName)), trace
373e0 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  Category);....  
373f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37400 20 20 69 66 20 28 21 48 61 76 65 46 72 61 6d 65    if (!HaveFrame
37410 77 6f 72 6b 52 65 67 69 73 74 72 79 28 0d 0a 20  workRegistry(.. 
37420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37430 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b             rootK
37440 65 79 2c 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d  ey, frameworkNam
37450 65 2c 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73  e, frameworkVers
37460 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ion,..          
37470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37480 20 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 2c 20    platformName, 
37490 70 65 72 55 73 65 72 2c 20 77 6f 77 36 34 2c 20  perUser, wow64, 
374a0 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29  whatIf, verbose)
374b0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
374c0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
374d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
374e0 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67    TraceOps.Debug
374f0 41 6e 64 54 72 61 63 65 28 54 72 61 63 65 50 72  AndTrace(TracePr
37500 69 6f 72 69 74 79 2e 4c 6f 77 2c 0d 0a 20 20 20  iority.Low,..   
37510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37520 20 20 20 20 20 20 20 20 20 64 65 62 75 67 43 61           debugCa
37530 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c  llback, traceCal
37540 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f  lback, String.Fo
37550 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
37560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37570 20 20 20 22 2e 4e 45 54 20 46 72 61 6d 65 77 6f     ".NET Framewo
37580 72 6b 20 7b 30 7d 20 72 65 67 69 73 74 72 79 20  rk {0} registry 
37590 6e 6f 74 20 66 6f 75 6e 64 2c 20 22 20 2b 0d 0a  not found, " +..
375a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
375b0 20 20 20 20 20 20 20 20 20 20 20 20 22 73 6b 69              "ski
375c0 70 70 69 6e 67 2e 2e 2e 22 2c 20 46 6f 72 44 69  pping...", ForDi
375d0 73 70 6c 61 79 28 66 72 61 6d 65 77 6f 72 6b 56  splay(frameworkV
375e0 65 72 73 69 6f 6e 29 29 2c 0d 0a 20 20 20 20 20  ersion)),..     
375f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37600 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65         traceCate
37610 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
37620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37630 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20    continue;..   
37640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37650 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
37660 20 20 20 20 20 20 20 20 20 20 69 66 20 28 63 61            if (ca
37670 6c 6c 62 61 63 6b 20 3d 3d 20 6e 75 6c 6c 29 0d  llback == null).
37680 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
37690 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75           continu
376a0 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e;....          
376b0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21 63            if (!c
376c0 61 6c 6c 62 61 63 6b 28 0d 0a 20 20 20 20 20 20  allback(..      
376d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
376e0 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 66        rootKey, f
376f0 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c 20 66 72  rameworkName, fr
37700 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 2c 0d  ameworkVersion,.
37710 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
37720 20 20 20 20 20 20 20 20 20 20 20 20 20 70 6c 61               pla
37730 74 66 6f 72 6d 4e 61 6d 65 2c 20 6e 75 6c 6c 2c  tformName, null,
37740 20 63 6c 69 65 6e 74 44 61 74 61 2c 20 70 65 72   clientData, per
37750 55 73 65 72 2c 0d 0a 20 20 20 20 20 20 20 20 20  User,..         
37760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37770 20 20 20 77 6f 77 36 34 2c 20 74 68 72 6f 77 4f     wow64, throwO
37780 6e 4d 69 73 73 69 6e 67 2c 20 77 68 61 74 49 66  nMissing, whatIf
37790 2c 20 76 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20  , verbose,..    
377a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
377b0 20 20 20 20 20 20 20 20 72 65 66 20 65 72 72 6f          ref erro
377c0 72 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  r))..           
377d0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
377e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
377f0 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
37800 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
37810 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
37820 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
37830 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
37840 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
37850 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20   true;..        
37860 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72  }..        #endr
37870 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20  egion....       
37880 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
37890 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
378a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
378b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
378c0 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
378d0 20 20 20 20 23 72 65 67 69 6f 6e 20 50 65 72 2d      #region Per-
378e0 56 69 73 75 61 6c 20 53 74 75 64 69 6f 20 56 65  Visual Studio Ve
378f0 72 73 69 6f 6e 20 48 61 6e 64 6c 69 6e 67 0d 0a  rsion Handling..
37900 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
37910 73 74 61 74 69 63 20 76 6f 69 64 20 49 6e 69 74  static void Init
37920 69 61 6c 69 7a 65 56 73 4c 69 73 74 28 0d 0a 20  ializeVsList(.. 
37930 20 20 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52             MockR
37940 65 67 69 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b  egistryKey rootK
37950 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ey,..           
37960 20 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 63   Configuration c
37970 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2c 0d 0a 20  onfiguration,.. 
37980 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20 56             ref V
37990 73 4c 69 73 74 20 76 73 4c 69 73 74 0d 0a 20 20  sList vsList..  
379a0 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
379b0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
379c0 20 20 20 20 69 66 20 28 76 73 4c 69 73 74 20 3d      if (vsList =
379d0 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
379e0 20 20 20 20 20 20 20 20 20 76 73 4c 69 73 74 20           vsList 
379f0 3d 20 6e 65 77 20 56 73 4c 69 73 74 28 29 3b 0d  = new VsList();.
37a00 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
37a10 66 20 28 76 73 4c 69 73 74 2e 52 6f 6f 74 4b 65  f (vsList.RootKe
37a20 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  y == null)..    
37a30 20 20 20 20 20 20 20 20 20 20 20 20 76 73 4c 69              vsLi
37a40 73 74 2e 52 6f 6f 74 4b 65 79 20 3d 20 72 6f 6f  st.RootKey = roo
37a50 74 4b 65 79 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  tKey;....       
37a60 20 20 20 20 20 69 66 20 28 76 73 4c 69 73 74 2e       if (vsList.
37a70 56 65 72 73 69 6f 6e 73 20 3d 3d 20 6e 75 6c 6c  Versions == null
37a80 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
37a90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
37aa0 20 20 76 73 4c 69 73 74 2e 56 65 72 73 69 6f 6e    vsList.Version
37ab0 73 20 3d 20 6e 65 77 20 56 65 72 73 69 6f 6e 4c  s = new VersionL
37ac0 69 73 74 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  ist();....      
37ad0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 28 63            if ((c
37ae0 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 3d 3d 20  onfiguration == 
37af0 6e 75 6c 6c 29 20 7c 7c 20 21 63 6f 6e 66 69 67  null) || !config
37b00 75 72 61 74 69 6f 6e 2e 4e 6f 56 73 32 30 30 35  uration.NoVs2005
37b10 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
37b20 20 20 20 20 20 20 20 76 73 4c 69 73 74 2e 56 65         vsList.Ve
37b30 72 73 69 6f 6e 73 2e 41 64 64 28 6e 65 77 20 56  rsions.Add(new V
37b40 65 72 73 69 6f 6e 28 38 2c 20 30 29 29 3b 20 2f  ersion(8, 0)); /
37b50 2f 20 32 30 30 35 0d 0a 0d 0a 20 20 20 20 20 20  / 2005....      
37b60 20 20 20 20 20 20 20 20 20 20 69 66 20 28 28 63            if ((c
37b70 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 3d 3d 20  onfiguration == 
37b80 6e 75 6c 6c 29 20 7c 7c 20 21 63 6f 6e 66 69 67  null) || !config
37b90 75 72 61 74 69 6f 6e 2e 4e 6f 56 73 32 30 30 38  uration.NoVs2008
37ba0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
37bb0 20 20 20 20 20 20 20 76 73 4c 69 73 74 2e 56 65         vsList.Ve
37bc0 72 73 69 6f 6e 73 2e 41 64 64 28 6e 65 77 20 56  rsions.Add(new V
37bd0 65 72 73 69 6f 6e 28 39 2c 20 30 29 29 3b 20 2f  ersion(9, 0)); /
37be0 2f 20 32 30 30 38 0d 0a 0d 0a 20 20 20 20 20 20  / 2008....      
37bf0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 28 63            if ((c
37c00 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 3d 3d 20  onfiguration == 
37c10 6e 75 6c 6c 29 20 7c 7c 20 21 63 6f 6e 66 69 67  null) || !config
37c20 75 72 61 74 69 6f 6e 2e 4e 6f 56 73 32 30 31 30  uration.NoVs2010
37c30 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
37c40 20 20 20 20 20 20 20 76 73 4c 69 73 74 2e 56 65         vsList.Ve
37c50 72 73 69 6f 6e 73 2e 41 64 64 28 6e 65 77 20 56  rsions.Add(new V
37c60 65 72 73 69 6f 6e 28 31 30 2c 20 30 29 29 3b 2f  ersion(10, 0));/
37c70 2f 20 32 30 31 30 0d 0a 0d 0a 20 20 20 20 20 20  / 2010....      
37c80 20 20 20 20 20 20 20 20 20 20 69 66 20 28 28 63            if ((c
37c90 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 3d 3d 20  onfiguration == 
37ca0 6e 75 6c 6c 29 20 7c 7c 20 21 63 6f 6e 66 69 67  null) || !config
37cb0 75 72 61 74 69 6f 6e 2e 4e 6f 56 73 32 30 31 32  uration.NoVs2012
37cc0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
37cd0 20 20 20 20 20 20 20 76 73 4c 69 73 74 2e 56 65         vsList.Ve
37ce0 72 73 69 6f 6e 73 2e 41 64 64 28 6e 65 77 20 56  rsions.Add(new V
37cf0 65 72 73 69 6f 6e 28 31 31 2c 20 30 29 29 3b 2f  ersion(11, 0));/
37d00 2f 20 32 30 31 32 0d 0a 0d 0a 20 20 20 20 20 20  / 2012....      
37d10 20 20 20 20 20 20 20 20 20 20 69 66 20 28 28 63            if ((c
37d20 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 3d 3d 20  onfiguration == 
37d30 6e 75 6c 6c 29 20 7c 7c 20 21 63 6f 6e 66 69 67  null) || !config
37d40 75 72 61 74 69 6f 6e 2e 4e 6f 56 73 32 30 31 33  uration.NoVs2013
37d50 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
37d60 20 20 20 20 20 20 20 76 73 4c 69 73 74 2e 56 65         vsList.Ve
37d70 72 73 69 6f 6e 73 2e 41 64 64 28 6e 65 77 20 56  rsions.Add(new V
37d80 65 72 73 69 6f 6e 28 31 32 2c 20 30 29 29 3b 2f  ersion(12, 0));/
37d90 2f 20 32 30 31 33 0d 0a 0d 0a 20 20 20 20 20 20  / 2013....      
37da0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 28 63            if ((c
37db0 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 3d 3d 20  onfiguration == 
37dc0 6e 75 6c 6c 29 20 7c 7c 20 21 63 6f 6e 66 69 67  null) || !config
37dd0 75 72 61 74 69 6f 6e 2e 4e 6f 56 73 32 30 31 35  uration.NoVs2015
37de0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
37df0 20 20 20 20 20 20 20 76 73 4c 69 73 74 2e 56 65         vsList.Ve
37e00 72 73 69 6f 6e 73 2e 41 64 64 28 6e 65 77 20 56  rsions.Add(new V
37e10 65 72 73 69 6f 6e 28 31 34 2c 20 30 29 29 3b 2f  ersion(14, 0));/
37e20 2f 20 32 30 31 35 0d 0a 0d 0a 20 20 20 20 20 20  / 2015....      
37e30 20 20 20 20 20 20 20 20 20 20 69 66 20 28 28 63            if ((c
37e40 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 3d 3d 20  onfiguration == 
37e50 6e 75 6c 6c 29 20 7c 7c 20 21 63 6f 6e 66 69 67  null) || !config
37e60 75 72 61 74 69 6f 6e 2e 4e 6f 56 73 32 30 31 37  uration.NoVs2017
37e70 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
37e80 20 20 20 20 20 20 20 76 73 4c 69 73 74 2e 56 65         vsList.Ve
37e90 72 73 69 6f 6e 73 2e 41 64 64 28 6e 65 77 20 56  rsions.Add(new V
37ea0 65 72 73 69 6f 6e 28 31 35 2c 20 30 29 29 3b 2f  ersion(15, 0));/
37eb0 2f 20 32 30 31 37 0d 0a 20 20 20 20 20 20 20 20  / 2017..        
37ec0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d      }..        }
37ed0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
37ee0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37ef0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37f00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37f10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37f20 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70  ///....        p
37f30 72 69 76 61 74 65 20 73 74 61 74 69 63 20 62 6f  rivate static bo
37f40 6f 6c 20 48 61 76 65 56 73 56 65 72 73 69 6f 6e  ol HaveVsVersion
37f50 44 69 72 65 63 74 6f 72 79 28 0d 0a 20 20 20 20  Directory(..    
37f60 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65 67 69          MockRegi
37f70 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79 2c  stryKey rootKey,
37f80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 56 65  ..            Ve
37f90 72 73 69 6f 6e 20 76 73 56 65 72 73 69 6f 6e 2c  rsion vsVersion,
37fa0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74  ..            st
37fb0 72 69 6e 67 20 73 75 66 66 69 78 2c 0d 0a 20 20  ring suffix,..  
37fc0 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 70            bool p
37fd0 65 72 55 73 65 72 2c 0d 0a 20 20 20 20 20 20 20  erUser,..       
37fe0 20 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34 2c       bool wow64,
37ff0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f  ..            bo
38000 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20  ol whatIf,..    
38010 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65 72          bool ver
38020 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  bose,..         
38030 20 20 20 72 65 66 20 73 74 72 69 6e 67 20 69 6e     ref string in
38040 73 74 61 6c 6c 44 69 72 65 63 74 6f 72 79 0d 0a  stallDirectory..
38050 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
38060 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
38070 20 20 20 20 20 20 69 66 20 28 76 73 56 65 72 73        if (vsVers
38080 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  ion == null)..  
38090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
380a0 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20  turn false;.... 
380b0 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
380c0 67 20 6b 65 79 4e 61 6d 65 20 3d 20 47 65 74 56  g keyName = GetV
380d0 73 4b 65 79 4e 61 6d 65 28 76 73 56 65 72 73 69  sKeyName(vsVersi
380e0 6f 6e 2c 20 73 75 66 66 69 78 2c 20 70 65 72 55  on, suffix, perU
380f0 73 65 72 2c 20 77 6f 77 36 34 29 3b 0d 0a 0d 0a  ser, wow64);....
38100 20 20 20 20 20 20 20 20 20 20 20 20 75 73 69 6e              usin
38110 67 20 28 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b  g (MockRegistryK
38120 65 79 20 6b 65 79 20 3d 20 52 65 67 69 73 74 72  ey key = Registr
38130 79 48 65 6c 70 65 72 2e 4f 70 65 6e 53 75 62 4b  yHelper.OpenSubK
38140 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ey(..           
38150 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79           rootKey
38160 2c 20 6b 65 79 4e 61 6d 65 2c 20 66 61 6c 73 65  , keyName, false
38170 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73  , whatIf, verbos
38180 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e))..           
38190 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
381a0 20 20 20 20 69 66 20 28 6b 65 79 20 3d 3d 20 6e      if (key == n
381b0 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
381c0 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
381d0 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20   false;....     
381e0 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63             objec
381f0 74 20 76 61 6c 75 65 20 3d 20 52 65 67 69 73 74  t value = Regist
38200 72 79 48 65 6c 70 65 72 2e 47 65 74 56 61 6c 75  ryHelper.GetValu
38210 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
38220 20 20 20 20 20 20 20 20 6b 65 79 2c 20 22 49 6e          key, "In
38230 73 74 61 6c 6c 44 69 72 22 2c 20 6e 75 6c 6c 2c  stallDir", null,
38240 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65   whatIf, verbose
38250 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
38260 20 20 20 20 20 20 69 66 20 28 21 28 76 61 6c 75        if (!(valu
38270 65 20 69 73 20 73 74 72 69 6e 67 29 29 0d 0a 20  e is string)).. 
38280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38290 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
382a0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
382b0 20 20 20 20 73 74 72 69 6e 67 20 64 69 72 65 63      string direc
382c0 74 6f 72 79 20 3d 20 28 73 74 72 69 6e 67 29 76  tory = (string)v
382d0 61 6c 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  alue;....       
382e0 20 20 20 20 20 20 20 20 20 69 66 20 28 53 74 72           if (Str
382f0 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74  ing.IsNullOrEmpt
38300 79 28 64 69 72 65 63 74 6f 72 79 29 29 0d 0a 20  y(directory)).. 
38310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38320 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
38330 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
38340 20 20 20 20 69 66 20 28 21 44 69 72 65 63 74 6f      if (!Directo
38350 72 79 2e 45 78 69 73 74 73 28 64 69 72 65 63 74  ry.Exists(direct
38360 6f 72 79 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ory))..         
38370 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
38380 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20  n false;....    
38390 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
383a0 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61  eOps.DebugAndTra
383b0 63 65 28 54 72 61 63 65 50 72 69 6f 72 69 74 79  ce(TracePriority
383c0 2e 4c 6f 77 65 72 2c 0d 0a 20 20 20 20 20 20 20  .Lower,..       
383d0 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65 62               deb
383e0 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63  ugCallback, trac
383f0 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e  eCallback, Strin
38400 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
38410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
38420 56 69 73 75 61 6c 20 53 74 75 64 69 6f 20 7b 30  Visual Studio {0
38430 7d 20 66 6f 75 6e 64 20 69 6e 20 64 69 72 65 63  } found in direc
38440 74 6f 72 79 20 7b 31 7d 2e 22 2c 0d 0a 20 20 20  tory {1}.",..   
38450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38460 20 46 6f 72 44 69 73 70 6c 61 79 28 76 73 56 65   ForDisplay(vsVe
38470 72 73 69 6f 6e 29 2c 20 46 6f 72 44 69 73 70 6c  rsion), ForDispl
38480 61 79 28 64 69 72 65 63 74 6f 72 79 29 29 2c 0d  ay(directory)),.
38490 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
384a0 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f       traceCatego
384b0 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
384c0 20 20 20 20 20 20 20 20 69 6e 73 74 61 6c 6c 44          installD
384d0 69 72 65 63 74 6f 72 79 20 3d 20 64 69 72 65 63  irectory = direc
384e0 74 6f 72 79 3b 0d 0a 20 20 20 20 20 20 20 20 20  tory;..         
384f0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72         return tr
38500 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
38510 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d   }..        }...
38520 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
38530 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
38540 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
38550 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
38560 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
38570 0d 0a 0d 0a 20 20 20 20 20 20 20 20 5b 4d 65 74  ....        [Met
38580 68 6f 64 49 6d 70 6c 28 4d 65 74 68 6f 64 49 6d  hodImpl(MethodIm
38590 70 6c 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e 6c 69  plOptions.NoInli
385a0 6e 69 6e 67 29 5d 0d 0a 20 20 20 20 20 20 20 20  ning)]..        
385b0 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 62  private static b
385c0 6f 6f 6c 20 46 6f 72 45 61 63 68 56 73 56 65 72  ool ForEachVsVer
385d0 73 69 6f 6e 52 65 67 69 73 74 72 79 28 0d 0a 20  sionRegistry(.. 
385e0 20 20 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52             MockR
385f0 65 67 69 73 74 72 79 20 72 65 67 69 73 74 72 79  egistry registry
38600 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 56  ,..            V
38610 73 4c 69 73 74 20 76 73 4c 69 73 74 2c 0d 0a 20  sList vsList,.. 
38620 20 20 20 20 20 20 20 20 20 20 20 56 69 73 75 61             Visua
38630 6c 53 74 75 64 69 6f 52 65 67 69 73 74 72 79 43  lStudioRegistryC
38640 61 6c 6c 62 61 63 6b 20 63 61 6c 6c 62 61 63 6b  allback callback
38650 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  ,..            s
38660 74 72 69 6e 67 20 73 75 66 66 69 78 2c 0d 0a 20  tring suffix,.. 
38670 20 20 20 20 20 20 20 20 20 20 20 50 61 63 6b 61             Packa
38680 67 65 20 70 61 63 6b 61 67 65 2c 0d 0a 20 20 20  ge package,..   
38690 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20           object 
386a0 63 6c 69 65 6e 74 44 61 74 61 2c 0d 0a 20 20 20  clientData,..   
386b0 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 70 65           bool pe
386c0 72 55 73 65 72 2c 0d 0a 20 20 20 20 20 20 20 20  rUser,..        
386d0 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34 2c 0d      bool wow64,.
386e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f  .            boo
386f0 6c 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67  l throwOnMissing
38700 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  ,..            b
38710 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20  ool whatIf,..   
38720 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65           bool ve
38730 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20 20  rbose,..        
38740 20 20 20 20 72 65 66 20 73 74 72 69 6e 67 20 65      ref string e
38750 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20  rror..          
38760 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a    )..        {..
38770 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
38780 72 65 67 69 73 74 72 79 20 3d 3d 20 6e 75 6c 6c  registry == null
38790 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
387a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
387b0 20 20 65 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c    error = "inval
387c0 69 64 20 72 65 67 69 73 74 72 79 22 3b 0d 0a 20  id registry";.. 
387d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
387e0 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20  eturn false;..  
387f0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
38800 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76             if (v
38810 73 4c 69 73 74 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  sList == null)..
38820 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
38830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
38840 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64 20  rror = "invalid 
38850 56 53 20 6c 69 73 74 22 3b 0d 0a 20 20 20 20 20  VS