System.Data.SQLite
Hex Artifact Content
Not logged in

Artifact 01cbf816f3f020520515d4e021bd34f06f060833:


0000: 2f 2a 0d 0a 20 2a 20 49 6e 73 74 61 6c 6c 65 72  /*.. * Installer
0010: 2e 63 73 20 2d 2d 0d 0a 20 2a 0d 0a 20 2a 20 57  .cs --.. *.. * W
0020: 72 69 74 74 65 6e 20 62 79 20 4a 6f 65 20 4d 69  ritten by Joe Mi
0030: 73 74 61 63 68 6b 69 6e 2e 0d 0a 20 2a 20 52 65  stachkin... * Re
0040: 6c 65 61 73 65 64 20 74 6f 20 74 68 65 20 70 75  leased to the pu
0050: 62 6c 69 63 20 64 6f 6d 61 69 6e 2c 20 75 73 65  blic domain, use
0060: 20 61 74 20 79 6f 75 72 20 6f 77 6e 20 72 69 73   at your own ris
0070: 6b 21 0d 0a 20 2a 2f 0d 0a 0d 0a 75 73 69 6e 67  k!.. */....using
0080: 20 53 79 73 74 65 6d 3b 0d 0a 75 73 69 6e 67 20   System;..using 
0090: 53 79 73 74 65 6d 2e 43 6f 6c 6c 65 63 74 69 6f  System.Collectio
00a0: 6e 73 2e 47 65 6e 65 72 69 63 3b 0d 0a 75 73 69  ns.Generic;..usi
00b0: 6e 67 20 53 79 73 74 65 6d 2e 44 69 61 67 6e 6f  ng System.Diagno
00c0: 73 74 69 63 73 3b 0d 0a 75 73 69 6e 67 20 53 79  stics;..using Sy
00d0: 73 74 65 6d 2e 45 6e 74 65 72 70 72 69 73 65 53  stem.EnterpriseS
00e0: 65 72 76 69 63 65 73 2e 49 6e 74 65 72 6e 61 6c  ervices.Internal
00f0: 3b 0d 0a 75 73 69 6e 67 20 53 79 73 74 65 6d 2e  ;..using System.
0100: 49 4f 3b 0d 0a 75 73 69 6e 67 20 53 79 73 74 65  IO;..using Syste
0110: 6d 2e 52 65 66 6c 65 63 74 69 6f 6e 3b 0d 0a 75  m.Reflection;..u
0120: 73 69 6e 67 20 53 79 73 74 65 6d 2e 52 75 6e 74  sing System.Runt
0130: 69 6d 65 2e 43 6f 6d 70 69 6c 65 72 53 65 72 76  ime.CompilerServ
0140: 69 63 65 73 3b 0d 0a 0d 0a 23 69 66 20 57 49 4e  ices;....#if WIN
0150: 44 4f 57 53 0d 0a 75 73 69 6e 67 20 53 79 73 74  DOWS..using Syst
0160: 65 6d 2e 52 75 6e 74 69 6d 65 2e 49 6e 74 65 72  em.Runtime.Inter
0170: 6f 70 53 65 72 76 69 63 65 73 3b 0d 0a 23 65 6e  opServices;..#en
0180: 64 69 66 0d 0a 0d 0a 75 73 69 6e 67 20 53 79 73  dif....using Sys
0190: 74 65 6d 2e 53 65 63 75 72 69 74 79 3b 0d 0a 0d  tem.Security;...
01a0: 0a 23 69 66 20 4e 45 54 5f 32 30 20 7c 7c 20 4e  .#if NET_20 || N
01b0: 45 54 5f 33 35 0d 0a 75 73 69 6e 67 20 53 79 73  ET_35..using Sys
01c0: 74 65 6d 2e 53 65 63 75 72 69 74 79 2e 50 65 72  tem.Security.Per
01d0: 6d 69 73 73 69 6f 6e 73 3b 0d 0a 23 65 6e 64 69  missions;..#endi
01e0: 66 0d 0a 0d 0a 75 73 69 6e 67 20 53 79 73 74 65  f....using Syste
01f0: 6d 2e 54 68 72 65 61 64 69 6e 67 3b 0d 0a 75 73  m.Threading;..us
0200: 69 6e 67 20 53 79 73 74 65 6d 2e 57 69 6e 64 6f  ing System.Windo
0210: 77 73 2e 46 6f 72 6d 73 3b 0d 0a 75 73 69 6e 67  ws.Forms;..using
0220: 20 53 79 73 74 65 6d 2e 58 6d 6c 3b 0d 0a 75 73   System.Xml;..us
0230: 69 6e 67 20 4d 69 63 72 6f 73 6f 66 74 2e 57 69  ing Microsoft.Wi
0240: 6e 33 32 3b 0d 0a 0d 0a 6e 61 6d 65 73 70 61 63  n32;....namespac
0250: 65 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51  e System.Data.SQ
0260: 4c 69 74 65 0d 0a 7b 0d 0a 20 20 20 20 23 72 65  Lite..{..    #re
0270: 67 69 6f 6e 20 50 75 62 6c 69 63 20 44 65 6c 65  gion Public Dele
0280: 67 61 74 65 73 0d 0a 20 20 20 20 69 6e 74 65 72  gates..    inter
0290: 6e 61 6c 20 64 65 6c 65 67 61 74 65 20 76 6f 69  nal delegate voi
02a0: 64 20 54 72 61 63 65 43 61 6c 6c 62 61 63 6b 28  d TraceCallback(
02b0: 0d 0a 20 20 20 20 20 20 20 20 73 74 72 69 6e 67  ..        string
02c0: 20 6d 65 73 73 61 67 65 2c 20 2f 2a 20 69 6e 20   message, /* in 
02d0: 2a 2f 0d 0a 20 20 20 20 20 20 20 20 73 74 72 69  */..        stri
02e0: 6e 67 20 63 61 74 65 67 6f 72 79 20 2f 2a 20 69  ng category /* i
02f0: 6e 20 2a 2f 0d 0a 20 20 20 20 29 3b 0d 0a 0d 0a  n */..    );....
0300: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
0310: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0320: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0330: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0340: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
0350: 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
0360: 64 65 6c 65 67 61 74 65 20 62 6f 6f 6c 20 46 72  delegate bool Fr
0370: 61 6d 65 77 6f 72 6b 43 6f 6e 66 69 67 43 61 6c  ameworkConfigCal
0380: 6c 62 61 63 6b 28 0d 0a 20 20 20 20 20 20 20 20  lback(..        
0390: 73 74 72 69 6e 67 20 66 69 6c 65 4e 61 6d 65 2c  string fileName,
03a0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e             /* in
03b0: 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 73 74 72   */..        str
03c0: 69 6e 67 20 69 6e 76 61 72 69 61 6e 74 4e 61 6d  ing invariantNam
03d0: 65 2c 20 20 20 20 20 20 2f 2a 20 69 6e 20 2a 2f  e,      /* in */
03e0: 0d 0a 20 20 20 20 20 20 20 20 73 74 72 69 6e 67  ..        string
03f0: 20 6e 61 6d 65 2c 20 20 20 20 20 20 20 20 20 20   name,          
0400: 20 20 20 20 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20       /* in */.. 
0410: 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 64 65         string de
0420: 73 63 72 69 70 74 69 6f 6e 2c 20 20 20 20 20 20  scription,      
0430: 20 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20    /* in */..    
0440: 20 20 20 20 73 74 72 69 6e 67 20 74 79 70 65 4e      string typeN
0450: 61 6d 65 2c 20 20 20 20 20 20 20 20 20 20 20 2f  ame,           /
0460: 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20  * in */..       
0470: 20 41 73 73 65 6d 62 6c 79 4e 61 6d 65 20 61 73   AssemblyName as
0480: 73 65 6d 62 6c 79 4e 61 6d 65 2c 20 2f 2a 20 69  semblyName, /* i
0490: 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 73 74  n */..        st
04a0: 72 69 6e 67 20 64 69 72 65 63 74 6f 72 79 2c 20  ring directory, 
04b0: 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 20 2a           /* in *
04c0: 2f 0d 0a 20 20 20 20 20 20 20 20 6f 62 6a 65 63  /..        objec
04d0: 74 20 63 6c 69 65 6e 74 44 61 74 61 2c 20 20 20  t clientData,   
04e0: 20 20 20 20 20 20 2f 2a 20 69 6e 20 2a 2f 0d 0a        /* in */..
04f0: 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 70 65 72          bool per
0500: 55 73 65 72 2c 20 20 20 20 20 20 20 20 20 20 20  User,           
0510: 20 20 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20     /* in */..   
0520: 20 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34 2c       bool wow64,
0530: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0540: 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20  /* in */..      
0550: 20 20 62 6f 6f 6c 20 74 68 72 6f 77 4f 6e 4d 69    bool throwOnMi
0560: 73 73 69 6e 67 2c 20 20 20 20 20 20 20 2f 2a 20  ssing,       /* 
0570: 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 62  in */..        b
0580: 6f 6f 6c 20 77 68 61 74 49 66 2c 20 20 20 20 20  ool whatIf,     
0590: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 20            /* in 
05a0: 2a 2f 0d 0a 20 20 20 20 20 20 20 20 62 6f 6f 6c  */..        bool
05b0: 20 76 65 72 62 6f 73 65 2c 20 20 20 20 20 20 20   verbose,       
05c0: 20 20 20 20 20 20 20 2f 2a 20 69 6e 20 2a 2f 0d         /* in */.
05d0: 0a 20 20 20 20 20 20 20 20 72 65 66 20 62 6f 6f  .        ref boo
05e0: 6c 20 73 61 76 65 64 2c 20 20 20 20 20 20 20 20  l saved,        
05f0: 20 20 20 20 2f 2a 20 6f 75 74 20 2a 2f 0d 0a 20      /* out */.. 
0600: 20 20 20 20 20 20 20 72 65 66 20 73 74 72 69 6e         ref strin
0610: 67 20 65 72 72 6f 72 20 20 20 20 20 20 20 20 20  g error         
0620: 20 20 2f 2a 20 6f 75 74 20 2a 2f 0d 0a 20 20 20    /* out */..   
0630: 20 29 3b 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f   );....    /////
0640: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0650: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0660: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0670: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0680: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 69 6e  //////....    in
0690: 74 65 72 6e 61 6c 20 64 65 6c 65 67 61 74 65 20  ternal delegate 
06a0: 62 6f 6f 6c 20 46 72 61 6d 65 77 6f 72 6b 52 65  bool FrameworkRe
06b0: 67 69 73 74 72 79 43 61 6c 6c 62 61 63 6b 28 0d  gistryCallback(.
06c0: 0a 20 20 20 20 20 20 20 20 49 6e 73 74 61 6c 6c  .        Install
06d0: 65 72 2e 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b  er.MockRegistryK
06e0: 65 79 20 72 6f 6f 74 4b 65 79 2c 20 2f 2a 20 69  ey rootKey, /* i
06f0: 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 73 74  n */..        st
0700: 72 69 6e 67 20 66 72 61 6d 65 77 6f 72 6b 4e 61  ring frameworkNa
0710: 6d 65 2c 20 20 20 20 20 20 20 20 20 20 20 20 20  me,             
0720: 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20   /* in */..     
0730: 20 20 20 56 65 72 73 69 6f 6e 20 66 72 61 6d 65     Version frame
0740: 77 6f 72 6b 56 65 72 73 69 6f 6e 2c 20 20 20 20  workVersion,    
0750: 20 20 20 20 20 20 2f 2a 20 69 6e 20 2a 2f 0d 0a        /* in */..
0760: 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 70          string p
0770: 6c 61 74 66 6f 72 6d 4e 61 6d 65 2c 20 20 20 20  latformName,    
0780: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e             /* in
0790: 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 73 74 72   */..        str
07a0: 69 6e 67 20 64 69 72 65 63 74 6f 72 79 2c 20 20  ing directory,  
07b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
07c0: 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20  /* in */..      
07d0: 20 20 6f 62 6a 65 63 74 20 63 6c 69 65 6e 74 44    object clientD
07e0: 61 74 61 2c 20 20 20 20 20 20 20 20 20 20 20 20  ata,            
07f0: 20 20 20 20 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20       /* in */.. 
0800: 20 20 20 20 20 20 20 62 6f 6f 6c 20 70 65 72 55         bool perU
0810: 73 65 72 2c 20 20 20 20 20 20 20 20 20 20 20 20  ser,            
0820: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 20            /* in 
0830: 2a 2f 0d 0a 20 20 20 20 20 20 20 20 62 6f 6f 6c  */..        bool
0840: 20 77 6f 77 36 34 2c 20 20 20 20 20 20 20 20 20   wow64,         
0850: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
0860: 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20  * in */..       
0870: 20 62 6f 6f 6c 20 74 68 72 6f 77 4f 6e 4d 69 73   bool throwOnMis
0880: 73 69 6e 67 2c 20 20 20 20 20 20 20 20 20 20 20  sing,           
0890: 20 20 20 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20      /* in */..  
08a0: 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49        bool whatI
08b0: 66 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20  f,              
08c0: 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 20 2a           /* in *
08d0: 2f 0d 0a 20 20 20 20 20 20 20 20 62 6f 6f 6c 20  /..        bool 
08e0: 76 65 72 62 6f 73 65 2c 20 20 20 20 20 20 20 20  verbose,        
08f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
0900: 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20   in */..        
0910: 72 65 66 20 73 74 72 69 6e 67 20 65 72 72 6f 72  ref string error
0920: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0930: 20 20 20 2f 2a 20 6f 75 74 20 2a 2f 0d 0a 20 20     /* out */..  
0940: 20 20 29 3b 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f    );....    ////
0950: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0960: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0970: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0980: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0990: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 69  ///////....    i
09a0: 6e 74 65 72 6e 61 6c 20 64 65 6c 65 67 61 74 65  nternal delegate
09b0: 20 62 6f 6f 6c 20 56 69 73 75 61 6c 53 74 75 64   bool VisualStud
09c0: 69 6f 52 65 67 69 73 74 72 79 43 61 6c 6c 62 61  ioRegistryCallba
09d0: 63 6b 28 0d 0a 20 20 20 20 20 20 20 20 49 6e 73  ck(..        Ins
09e0: 74 61 6c 6c 65 72 2e 4d 6f 63 6b 52 65 67 69 73  taller.MockRegis
09f0: 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79 2c 20  tryKey rootKey, 
0a00: 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20  /* in */..      
0a10: 20 20 56 65 72 73 69 6f 6e 20 76 73 56 65 72 73    Version vsVers
0a20: 69 6f 6e 2c 20 20 20 20 20 20 20 20 20 20 20 20  ion,            
0a30: 20 20 20 20 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20       /* in */.. 
0a40: 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 73 75         string su
0a50: 66 66 69 78 2c 20 20 20 20 20 20 20 20 20 20 20  ffix,           
0a60: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 2c            /* in,
0a70: 20 6f 70 74 69 6f 6e 61 6c 20 2a 2f 0d 0a 20 20   optional */..  
0a80: 20 20 20 20 20 20 49 6e 73 74 61 6c 6c 65 72 2e        Installer.
0a90: 50 61 63 6b 61 67 65 20 70 61 63 6b 61 67 65 2c  Package package,
0aa0: 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 20 2a           /* in *
0ab0: 2f 0d 0a 20 20 20 20 20 20 20 20 73 74 72 69 6e  /..        strin
0ac0: 67 20 64 69 72 65 63 74 6f 72 79 2c 20 20 20 20  g directory,    
0ad0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
0ae0: 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20   in */..        
0af0: 6f 62 6a 65 63 74 20 63 6c 69 65 6e 74 44 61 74  object clientDat
0b00: 61 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20  a,              
0b10: 20 20 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20     /* in */..   
0b20: 20 20 20 20 20 62 6f 6f 6c 20 70 65 72 55 73 65       bool perUse
0b30: 72 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20  r,              
0b40: 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 20 2a 2f          /* in */
0b50: 0d 0a 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77  ..        bool w
0b60: 6f 77 36 34 2c 20 20 20 20 20 20 20 20 20 20 20  ow64,           
0b70: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
0b80: 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 62  in */..        b
0b90: 6f 6f 6c 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69  ool throwOnMissi
0ba0: 6e 67 2c 20 20 20 20 20 20 20 20 20 20 20 20 20  ng,             
0bb0: 20 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20    /* in */..    
0bc0: 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c      bool whatIf,
0bd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0be0: 20 20 20 20 20 20 20 2f 2a 20 69 6e 20 2a 2f 0d         /* in */.
0bf0: 0a 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65  .        bool ve
0c00: 72 62 6f 73 65 2c 20 20 20 20 20 20 20 20 20 20  rbose,          
0c10: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69              /* i
0c20: 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 72 65  n */..        re
0c30: 66 20 73 74 72 69 6e 67 20 65 72 72 6f 72 20 20  f string error  
0c40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0c50: 20 2f 2a 20 6f 75 74 20 2a 2f 0d 0a 20 20 20 20   /* out */..    
0c60: 29 3b 0d 0a 20 20 20 20 23 65 6e 64 72 65 67 69  );..    #endregi
0c70: 6f 6e 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f  on....    //////
0c80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0c90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0ca0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0cb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0cc0: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 23 72 65  /////....    #re
0cd0: 67 69 6f 6e 20 50 75 62 6c 69 63 20 45 6e 75 6d  gion Public Enum
0ce0: 65 72 61 74 69 6f 6e 73 0d 0a 20 20 20 20 5b 46  erations..    [F
0cf0: 6c 61 67 73 28 29 5d 0d 0a 20 20 20 20 70 75 62  lags()]..    pub
0d00: 6c 69 63 20 65 6e 75 6d 20 49 6e 73 74 61 6c 6c  lic enum Install
0d10: 46 6c 61 67 73 0d 0a 20 20 20 20 7b 0d 0a 20 20  Flags..    {..  
0d20: 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 4e 6f        #region No
0d30: 72 6d 61 6c 20 46 6c 61 67 73 0d 0a 20 20 20 20  rmal Flags..    
0d40: 20 20 20 20 4e 6f 6e 65 20 3d 20 30 78 30 2c 0d      None = 0x0,.
0d50: 0a 20 20 20 20 20 20 20 20 47 6c 6f 62 61 6c 41  .        GlobalA
0d60: 73 73 65 6d 62 6c 79 43 61 63 68 65 20 3d 20 30  ssemblyCache = 0
0d70: 78 31 2c 0d 0a 20 20 20 20 20 20 20 20 41 73 73  x1,..        Ass
0d80: 65 6d 62 6c 79 46 6f 6c 64 65 72 73 20 3d 20 30  emblyFolders = 0
0d90: 78 32 2c 0d 0a 20 20 20 20 20 20 20 20 44 62 50  x2,..        DbP
0da0: 72 6f 76 69 64 65 72 46 61 63 74 6f 72 79 20 3d  roviderFactory =
0db0: 20 30 78 34 2c 0d 0a 20 20 20 20 20 20 20 20 56   0x4,..        V
0dc0: 73 50 61 63 6b 61 67 65 20 3d 20 30 78 38 2c 0d  sPackage = 0x8,.
0dd0: 0a 20 20 20 20 20 20 20 20 56 73 50 61 63 6b 61  .        VsPacka
0de0: 67 65 47 6c 6f 62 61 6c 41 73 73 65 6d 62 6c 79  geGlobalAssembly
0df0: 43 61 63 68 65 20 3d 20 30 78 31 30 2c 0d 0a 20  Cache = 0x10,.. 
0e00: 20 20 20 20 20 20 20 56 73 44 61 74 61 53 6f 75         VsDataSou
0e10: 72 63 65 20 3d 20 30 78 32 30 2c 0d 0a 20 20 20  rce = 0x20,..   
0e20: 20 20 20 20 20 56 73 44 61 74 61 50 72 6f 76 69       VsDataProvi
0e30: 64 65 72 20 3d 20 30 78 34 30 2c 0d 0a 20 20 20  der = 0x40,..   
0e40: 20 20 20 20 20 56 73 44 65 76 45 6e 76 53 65 74       VsDevEnvSet
0e50: 75 70 20 3d 20 30 78 38 30 2c 0d 0a 20 20 20 20  up = 0x80,..    
0e60: 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
0e70: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
0e80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0e90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0ea0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0eb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0ec0: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65  /....        #re
0ed0: 67 69 6f 6e 20 43 6f 6d 70 6f 73 69 74 65 20 46  gion Composite F
0ee0: 6c 61 67 73 0d 0a 20 20 20 20 20 20 20 20 46 72  lags..        Fr
0ef0: 61 6d 65 77 6f 72 6b 20 3d 20 47 6c 6f 62 61 6c  amework = Global
0f00: 41 73 73 65 6d 62 6c 79 43 61 63 68 65 20 7c 20  AssemblyCache | 
0f10: 41 73 73 65 6d 62 6c 79 46 6f 6c 64 65 72 73 20  AssemblyFolders 
0f20: 7c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  |..             
0f30: 20 20 20 20 20 20 20 44 62 50 72 6f 76 69 64 65         DbProvide
0f40: 72 46 61 63 74 6f 72 79 2c 0d 0a 0d 0a 20 20 20  rFactory,....   
0f50: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
0f60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0f70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0f80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0f90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
0fa0: 20 20 20 20 20 20 20 20 56 73 20 3d 20 56 73 50          Vs = VsP
0fb0: 61 63 6b 61 67 65 20 7c 20 56 73 50 61 63 6b 61  ackage | VsPacka
0fc0: 67 65 47 6c 6f 62 61 6c 41 73 73 65 6d 62 6c 79  geGlobalAssembly
0fd0: 43 61 63 68 65 20 7c 20 56 73 44 61 74 61 53 6f  Cache | VsDataSo
0fe0: 75 72 63 65 20 7c 0d 0a 20 20 20 20 20 20 20 20  urce |..        
0ff0: 20 20 20 20 20 56 73 44 61 74 61 50 72 6f 76 69       VsDataProvi
1000: 64 65 72 20 7c 20 56 73 44 65 76 45 6e 76 53 65  der | VsDevEnvSe
1010: 74 75 70 2c 0d 0a 0d 0a 20 20 20 20 20 20 20 20  tup,....        
1020: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1030: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1040: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1050: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1060: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
1070: 20 20 20 41 6c 6c 20 3d 20 46 72 61 6d 65 77 6f     All = Framewo
1080: 72 6b 20 7c 20 56 73 2c 0d 0a 0d 0a 20 20 20 20  rk | Vs,....    
1090: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
10a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
10e0: 20 20 20 20 20 20 20 41 6c 6c 45 78 63 65 70 74         AllExcept
10f0: 47 6c 6f 62 61 6c 41 73 73 65 6d 62 6c 79 43 61  GlobalAssemblyCa
1100: 63 68 65 20 3d 20 41 6c 6c 20 26 20 7e 28 47 6c  che = All & ~(Gl
1110: 6f 62 61 6c 41 73 73 65 6d 62 6c 79 43 61 63 68  obalAssemblyCach
1120: 65 20 7c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e |..           
1130: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1140: 20 20 20 20 20 20 20 20 20 20 20 20 56 73 50 61              VsPa
1150: 63 6b 61 67 65 47 6c 6f 62 61 6c 41 73 73 65 6d  ckageGlobalAssem
1160: 62 6c 79 43 61 63 68 65 29 2c 0d 0a 20 20 20 20  blyCache),..    
1170: 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
1180: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
1190: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11d0: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 44 65 66  /....        Def
11e0: 61 75 6c 74 20 3d 20 41 6c 6c 0d 0a 20 20 20 20  ault = All..    
11f0: 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  }....    ///////
1200: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1210: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1220: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1230: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1240: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 5b 46 6c 61  ////....    [Fla
1250: 67 73 28 29 5d 0d 0a 20 20 20 20 70 75 62 6c 69  gs()]..    publi
1260: 63 20 65 6e 75 6d 20 54 72 61 63 65 50 72 69 6f  c enum TracePrio
1270: 72 69 74 79 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  rity..    {..   
1280: 20 20 20 20 20 4e 6f 6e 65 20 3d 20 30 78 30 2c       None = 0x0,
1290: 0d 0a 20 20 20 20 20 20 20 20 4c 6f 77 65 73 74  ..        Lowest
12a0: 20 3d 20 30 78 31 2c 0d 0a 20 20 20 20 20 20 20   = 0x1,..       
12b0: 20 4c 6f 77 65 72 20 3d 20 30 78 32 2c 0d 0a 20   Lower = 0x2,.. 
12c0: 20 20 20 20 20 20 20 4c 6f 77 20 3d 20 30 78 34         Low = 0x4
12d0: 2c 0d 0a 20 20 20 20 20 20 20 20 4d 65 64 69 75  ,..        Mediu
12e0: 6d 4c 6f 77 20 3d 20 30 78 38 2c 0d 0a 20 20 20  mLow = 0x8,..   
12f0: 20 20 20 20 20 4d 65 64 69 75 6d 20 3d 20 30 78       Medium = 0x
1300: 31 30 2c 0d 0a 20 20 20 20 20 20 20 20 4d 65 64  10,..        Med
1310: 69 75 6d 48 69 67 68 20 3d 20 30 78 32 30 2c 0d  iumHigh = 0x20,.
1320: 0a 20 20 20 20 20 20 20 20 48 69 67 68 20 3d 20  .        High = 
1330: 30 78 34 30 2c 0d 0a 20 20 20 20 20 20 20 20 48  0x40,..        H
1340: 69 67 68 65 72 20 3d 20 30 78 38 30 2c 0d 0a 20  igher = 0x80,.. 
1350: 20 20 20 20 20 20 20 48 69 67 68 65 73 74 20 3d         Highest =
1360: 20 30 78 31 30 30 2c 0d 0a 20 20 20 20 20 20 20   0x100,..       
1370: 20 44 65 66 61 75 6c 74 20 3d 20 4d 65 64 69 75   Default = Mediu
1380: 6d 0d 0a 20 20 20 20 7d 0d 0a 20 20 20 20 23 65  m..    }..    #e
1390: 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20  ndregion....    
13a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
13b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
13c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
13d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
13e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
13f0: 20 20 20 23 72 65 67 69 6f 6e 20 49 6e 73 74 61     #region Insta
1400: 6c 6c 65 72 20 43 6c 61 73 73 0d 0a 23 69 66 20  ller Class..#if 
1410: 4e 45 54 5f 34 30 20 7c 7c 20 4e 45 54 5f 34 35  NET_40 || NET_45
1420: 20 7c 7c 20 4e 45 54 5f 34 35 31 0d 0a 20 20 20   || NET_451..   
1430: 20 5b 53 65 63 75 72 69 74 79 43 72 69 74 69 63   [SecurityCritic
1440: 61 6c 28 29 5d 0d 0a 23 65 6c 73 65 0d 0a 20 20  al()]..#else..  
1450: 20 20 5b 53 65 63 75 72 69 74 79 50 65 72 6d 69    [SecurityPermi
1460: 73 73 69 6f 6e 28 53 65 63 75 72 69 74 79 41 63  ssion(SecurityAc
1470: 74 69 6f 6e 2e 4c 69 6e 6b 44 65 6d 61 6e 64 2c  tion.LinkDemand,
1480: 20 55 6e 6d 61 6e 61 67 65 64 43 6f 64 65 20 3d   UnmanagedCode =
1490: 20 74 72 75 65 29 5d 0d 0a 23 65 6e 64 69 66 0d   true)]..#endif.
14a0: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 73 74  .    internal st
14b0: 61 74 69 63 20 63 6c 61 73 73 20 49 6e 73 74 61  atic class Insta
14c0: 6c 6c 65 72 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  ller..    {..   
14d0: 20 20 20 20 20 23 72 65 67 69 6f 6e 20 55 6e 73       #region Uns
14e0: 61 66 65 20 4e 61 74 69 76 65 20 4d 65 74 68 6f  afe Native Metho
14f0: 64 73 20 43 6c 61 73 73 0d 0a 20 20 20 20 20 20  ds Class..      
1500: 20 20 5b 53 75 70 70 72 65 73 73 55 6e 6d 61 6e    [SuppressUnman
1510: 61 67 65 64 43 6f 64 65 53 65 63 75 72 69 74 79  agedCodeSecurity
1520: 28 29 5d 0d 0a 20 20 20 20 20 20 20 20 70 72 69  ()]..        pri
1530: 76 61 74 65 20 73 65 61 6c 65 64 20 63 6c 61 73  vate sealed clas
1540: 73 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  s UnsafeNativeMe
1550: 74 68 6f 64 73 0d 0a 20 20 20 20 20 20 20 20 7b  thods..        {
1560: 0d 0a 23 69 66 20 57 49 4e 44 4f 57 53 0d 0a 20  ..#if WINDOWS.. 
1570: 20 20 20 20 20 20 20 20 20 20 20 23 72 65 67 69             #regi
1580: 6f 6e 20 4e 61 74 69 76 65 20 57 69 6e 33 32 20  on Native Win32 
1590: 43 6f 6e 73 74 61 6e 74 73 0d 0a 20 20 20 20 20  Constants..     
15a0: 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 63         private c
15b0: 6f 6e 73 74 20 69 6e 74 20 4d 41 58 5f 50 41 54  onst int MAX_PAT
15c0: 48 20 3d 20 32 36 30 3b 0d 0a 0d 0a 20 20 20 20  H = 260;....    
15d0: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
15e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1600: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1610: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
1620: 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
1630: 74 65 20 63 6f 6e 73 74 20 69 6e 74 20 43 53 49  te const int CSI
1640: 44 4c 5f 53 59 53 54 45 4d 58 38 36 20 3d 20 30  DL_SYSTEMX86 = 0
1650: 78 30 30 32 39 3b 0d 0a 0d 0a 20 20 20 20 20 20  x0029;....      
1660: 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1690: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
16b0: 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65           private
16c0: 20 63 6f 6e 73 74 20 69 6e 74 20 53 48 47 46 50   const int SHGFP
16d0: 5f 54 59 50 45 5f 43 55 52 52 45 4e 54 20 3d 20  _TYPE_CURRENT = 
16e0: 30 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  0;....          
16f0: 20 20 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 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
1740: 20 20 20 20 20 70 72 69 76 61 74 65 20 63 6f 6e       private con
1750: 73 74 20 69 6e 74 20 53 5f 4f 4b 20 3d 20 30 3b  st int S_OK = 0;
1760: 20 2f 2a 20 48 52 45 53 55 4c 54 20 2a 2f 0d 0a   /* HRESULT */..
1770: 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e 64              #end
1780: 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20  region....      
1790: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
17a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
17e0: 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e           #region
17f0: 20 4e 61 74 69 76 65 20 57 69 6e 64 6f 77 73 20   Native Windows 
1800: 4d 65 74 68 6f 64 73 0d 0a 20 20 20 20 20 20 20  Methods..       
1810: 20 20 20 20 20 5b 44 6c 6c 49 6d 70 6f 72 74 28       [DllImport(
1820: 22 73 68 66 6f 6c 64 65 72 2e 64 6c 6c 22 2c 0d  "shfolder.dll",.
1830: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1840: 20 43 61 6c 6c 69 6e 67 43 6f 6e 76 65 6e 74 69   CallingConventi
1850: 6f 6e 20 3d 20 43 61 6c 6c 69 6e 67 43 6f 6e 76  on = CallingConv
1860: 65 6e 74 69 6f 6e 2e 57 69 6e 61 70 69 2c 0d 0a  ention.Winapi,..
1870: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1880: 43 68 61 72 53 65 74 20 3d 20 43 68 61 72 53 65  CharSet = CharSe
1890: 74 2e 41 75 74 6f 2c 20 42 65 73 74 46 69 74 4d  t.Auto, BestFitM
18a0: 61 70 70 69 6e 67 20 3d 20 66 61 6c 73 65 2c 0d  apping = false,.
18b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
18c0: 20 54 68 72 6f 77 4f 6e 55 6e 6d 61 70 70 61 62   ThrowOnUnmappab
18d0: 6c 65 43 68 61 72 20 3d 20 74 72 75 65 2c 20 53  leChar = true, S
18e0: 65 74 4c 61 73 74 45 72 72 6f 72 20 3d 20 74 72  etLastError = tr
18f0: 75 65 29 5d 0d 0a 20 20 20 20 20 20 20 20 20 20  ue)]..          
1900: 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63    private static
1910: 20 65 78 74 65 72 6e 20 69 6e 74 20 53 48 47 65   extern int SHGe
1920: 74 46 6f 6c 64 65 72 50 61 74 68 28 0d 0a 20 20  tFolderPath(..  
1930: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 49 6e                In
1940: 74 50 74 72 20 68 57 6e 64 4f 77 6e 65 72 2c 20  tPtr hWndOwner, 
1950: 69 6e 74 20 6e 46 6f 6c 64 65 72 2c 20 49 6e 74  int nFolder, Int
1960: 50 74 72 20 68 54 6f 6b 65 6e 2c 20 75 69 6e 74  Ptr hToken, uint
1970: 20 66 6c 61 67 73 2c 0d 0a 20 20 20 20 20 20 20   flags,..       
1980: 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20           IntPtr 
1990: 62 75 66 66 65 72 20 2f 2a 20 3e 3d 20 4d 41 58  buffer /* >= MAX
19a0: 5f 50 41 54 48 20 2a 2f 29 3b 0d 0a 20 20 20 20  _PATH */);..    
19b0: 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
19c0: 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  on....          
19d0: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
19e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a10: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
1a20: 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50 75 62       #region Pub
1a30: 6c 69 63 20 57 72 61 70 70 65 72 20 4d 65 74 68  lic Wrapper Meth
1a40: 6f 64 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ods..           
1a50: 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 73   public static s
1a60: 74 72 69 6e 67 20 47 65 74 53 79 73 74 65 6d 44  tring GetSystemD
1a70: 69 72 65 63 74 6f 72 79 28 29 0d 0a 20 20 20 20  irectory()..    
1a80: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
1a90: 20 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74             IntPt
1aa0: 72 20 62 75 66 66 65 72 20 3d 20 49 6e 74 50 74  r buffer = IntPt
1ab0: 72 2e 5a 65 72 6f 3b 0d 0a 0d 0a 20 20 20 20 20  r.Zero;....     
1ac0: 20 20 20 20 20 20 20 20 20 20 20 74 72 79 0d 0a             try..
1ad0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ae0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
1af0: 20 20 20 20 20 20 20 62 75 66 66 65 72 20 3d 20         buffer = 
1b00: 4d 61 72 73 68 61 6c 2e 41 6c 6c 6f 63 43 6f 54  Marshal.AllocCoT
1b10: 61 73 6b 4d 65 6d 28 0d 0a 20 20 20 20 20 20 20  askMem(..       
1b20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b30: 20 73 69 7a 65 6f 66 28 63 68 61 72 29 20 2a 20   sizeof(char) * 
1b40: 28 4d 41 58 5f 50 41 54 48 20 2b 20 31 29 29 3b  (MAX_PATH + 1));
1b50: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1b60: 20 20 20 20 20 20 20 20 69 66 20 28 62 75 66 66          if (buff
1b70: 65 72 20 21 3d 20 49 6e 74 50 74 72 2e 5a 65 72  er != IntPtr.Zer
1b80: 6f 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  o)..            
1b90: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
1ba0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bb0: 20 20 20 69 66 20 28 53 48 47 65 74 46 6f 6c 64     if (SHGetFold
1bc0: 65 72 50 61 74 68 28 49 6e 74 50 74 72 2e 5a 65  erPath(IntPtr.Ze
1bd0: 72 6f 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ro,..           
1be0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bf0: 20 20 20 20 20 43 53 49 44 4c 5f 53 59 53 54 45       CSIDL_SYSTE
1c00: 4d 58 38 36 2c 20 49 6e 74 50 74 72 2e 5a 65 72  MX86, IntPtr.Zer
1c10: 6f 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  o,..            
1c20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c30: 20 20 20 20 53 48 47 46 50 5f 54 59 50 45 5f 43      SHGFP_TYPE_C
1c40: 55 52 52 45 4e 54 2c 20 62 75 66 66 65 72 29 20  URRENT, buffer) 
1c50: 3d 3d 20 53 5f 4f 4b 29 0d 0a 20 20 20 20 20 20  == S_OK)..      
1c60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c70: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
1c80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c90: 20 72 65 74 75 72 6e 20 4d 61 72 73 68 61 6c 2e   return Marshal.
1ca0: 50 74 72 54 6f 53 74 72 69 6e 67 41 75 74 6f 28  PtrToStringAuto(
1cb0: 62 75 66 66 65 72 29 3b 0d 0a 20 20 20 20 20 20  buffer);..      
1cc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cd0: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
1ce0: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
1cf0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
1d00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
1d10: 61 74 63 68 20 28 45 78 63 65 70 74 69 6f 6e 20  atch (Exception 
1d20: 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e)..            
1d30: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
1d40: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
1d50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d60: 20 20 20 2f 2f 20 54 4f 44 4f 3a 20 49 73 20 74     // TODO: Is t
1d70: 68 69 73 20 74 68 65 20 72 69 67 68 74 20 65 72  his the right er
1d80: 72 6f 72 20 68 61 6e 64 6c 69 6e 67 20 73 6f 6c  ror handling sol
1d90: 75 74 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20 20  ution..         
1da0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
1db0: 20 20 20 20 74 6f 20 75 73 65 20 61 74 20 74 68      to use at th
1dc0: 69 73 20 70 6f 69 6e 74 3f 0d 0a 20 20 20 20 20  is point?..     
1dd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1de0: 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
1df0: 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e         TraceOps.
1e00: 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 54 72  DebugAndTrace(Tr
1e10: 61 63 65 50 72 69 6f 72 69 74 79 2e 4d 65 64 69  acePriority.Medi
1e20: 75 6d 48 69 67 68 2c 0d 0a 20 20 20 20 20 20 20  umHigh,..       
1e30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e40: 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20   debugCallback, 
1e50: 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53  traceCallback, S
1e60: 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
1e70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e80: 20 20 20 20 20 20 20 22 43 6f 75 6c 64 20 6e 6f         "Could no
1e90: 74 20 67 65 74 20 73 79 73 74 65 6d 20 64 69 72  t get system dir
1ea0: 65 63 74 6f 72 79 3a 20 7b 30 7d 22 2c 20 65 29  ectory: {0}", e)
1eb0: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
1ec0: 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
1ed0: 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  Category);....  
1ee0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ef0: 20 20 74 68 72 6f 77 3b 0d 0a 20 20 20 20 20 20    throw;..      
1f00: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
1f10: 20 20 20 20 20 20 20 20 20 20 20 20 20 66 69 6e               fin
1f20: 61 6c 6c 79 0d 0a 20 20 20 20 20 20 20 20 20 20  ally..          
1f30: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
1f40: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
1f50: 28 62 75 66 66 65 72 20 21 3d 20 49 6e 74 50 74  (buffer != IntPt
1f60: 72 2e 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20 20  r.Zero)..       
1f70: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
1f80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f90: 20 20 20 20 20 20 20 20 4d 61 72 73 68 61 6c 2e          Marshal.
1fa0: 46 72 65 65 43 6f 54 61 73 6b 4d 65 6d 28 62 75  FreeCoTaskMem(bu
1fb0: 66 66 65 72 29 3b 0d 0a 20 20 20 20 20 20 20 20  ffer);..        
1fc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fd0: 62 75 66 66 65 72 20 3d 20 49 6e 74 50 74 72 2e  buffer = IntPtr.
1fe0: 5a 65 72 6f 3b 0d 0a 20 20 20 20 20 20 20 20 20  Zero;..         
1ff0: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
2000: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
2010: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
2020: 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d     return null;.
2030: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
2040: 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e 64              #end
2050: 72 65 67 69 6f 6e 0d 0a 23 65 6e 64 69 66 0d 0a  region..#endif..
2060: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
2070: 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
2080: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
2090: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20d0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67  ....        #reg
20e0: 69 6f 6e 20 50 72 69 76 61 74 65 20 48 65 6c 70  ion Private Help
20f0: 65 72 20 43 6c 61 73 73 65 73 0d 0a 20 20 20 20  er Classes..    
2100: 20 20 20 20 23 72 65 67 69 6f 6e 20 41 6e 79 50      #region AnyP
2110: 61 69 72 20 43 6c 61 73 73 0d 0a 20 20 20 20 20  air Class..     
2120: 20 20 20 70 72 69 76 61 74 65 20 73 65 61 6c 65     private seale
2130: 64 20 63 6c 61 73 73 20 41 6e 79 50 61 69 72 3c  d class AnyPair<
2140: 54 31 2c 20 54 32 3e 0d 0a 20 20 20 20 20 20 20  T1, T2>..       
2150: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
2160: 23 72 65 67 69 6f 6e 20 50 75 62 6c 69 63 20 43  #region Public C
2170: 6f 6e 73 74 72 75 63 74 6f 72 73 0d 0a 20 20 20  onstructors..   
2180: 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
2190: 20 20 20 20 20 20 20 20 20 2f 2f 20 57 41 52 4e           // WARN
21a0: 49 4e 47 3a 20 54 68 69 73 20 63 6f 6e 73 74 72  ING: This constr
21b0: 75 63 74 6f 72 20 70 72 6f 64 75 63 65 73 20 61  uctor produces a
21c0: 6e 20 69 6d 6d 75 74 61 62 6c 65 20 22 65 6d 70  n immutable "emp
21d0: 74 79 22 20 70 61 69 72 0d 0a 20 20 20 20 20 20  ty" pair..      
21e0: 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 20        //        
21f0: 20 20 6f 62 6a 65 63 74 2e 0d 0a 20 20 20 20 20    object...     
2200: 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
2210: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 41 6e         public An
2220: 79 50 61 69 72 28 29 0d 0a 20 20 20 20 20 20 20  yPair()..       
2230: 20 20 20 20 20 20 20 20 20 3a 20 62 61 73 65 28           : base(
2240: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
2250: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2260: 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e    // do nothing.
2270: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
2280: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
2290: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22d0: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
22e0: 20 20 70 75 62 6c 69 63 20 41 6e 79 50 61 69 72    public AnyPair
22f0: 28 54 31 20 78 29 0d 0a 20 20 20 20 20 20 20 20  (T1 x)..        
2300: 20 20 20 20 20 20 20 20 3a 20 74 68 69 73 28 29          : this()
2310: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
2320: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2330: 20 74 68 69 73 2e 78 20 3d 20 78 3b 0d 0a 20 20   this.x = x;..  
2340: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
2350: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
2360: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2370: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2380: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2390: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
23a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
23b0: 62 6c 69 63 20 41 6e 79 50 61 69 72 28 54 31 20  blic AnyPair(T1 
23c0: 78 2c 20 54 32 20 79 29 0d 0a 20 20 20 20 20 20  x, T2 y)..      
23d0: 20 20 20 20 20 20 20 20 20 20 3a 20 74 68 69 73            : this
23e0: 28 78 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  (x)..           
23f0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
2400: 20 20 20 20 74 68 69 73 2e 79 20 3d 20 79 3b 0d      this.y = y;.
2410: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
2420: 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e 64              #end
2430: 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20  region....      
2440: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
2450: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2460: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2470: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2480: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
2490: 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e           #region
24a0: 20 50 75 62 6c 69 63 20 50 72 6f 70 65 72 74 69   Public Properti
24b0: 65 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  es..            
24c0: 70 72 69 76 61 74 65 20 54 31 20 78 3b 0d 0a 20  private T1 x;.. 
24d0: 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
24e0: 63 20 54 31 20 58 0d 0a 20 20 20 20 20 20 20 20  c T1 X..        
24f0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
2500: 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74         get { ret
2510: 75 72 6e 20 78 3b 20 7d 0d 0a 20 20 20 20 20 20  urn x; }..      
2520: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
2530: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
2540: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2550: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2560: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2570: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
2580: 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
2590: 65 20 54 32 20 79 3b 0d 0a 20 20 20 20 20 20 20  e T2 y;..       
25a0: 20 20 20 20 20 70 75 62 6c 69 63 20 54 32 20 59       public T2 Y
25b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
25c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
25d0: 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 79 3b   get { return y;
25e0: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
25f0: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  }..            #
2600: 65 6e 64 72 65 67 69 6f 6e 0d 0a 20 20 20 20 20  endregion..     
2610: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65     }..        #e
2620: 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20  ndregion....    
2630: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
2640: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2650: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2660: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2670: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
2680: 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 54         #region T
2690: 72 61 63 65 4f 70 73 20 43 6c 61 73 73 0d 0a 20  raceOps Class.. 
26a0: 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
26b0: 74 61 74 69 63 20 63 6c 61 73 73 20 54 72 61 63  tatic class Trac
26c0: 65 4f 70 73 0d 0a 20 20 20 20 20 20 20 20 7b 0d  eOps..        {.
26d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 72 65  .            #re
26e0: 67 69 6f 6e 20 50 72 69 76 61 74 65 20 43 6f 6e  gion Private Con
26f0: 73 74 61 6e 74 73 0d 0a 20 20 20 20 20 20 20 20  stants..        
2700: 20 20 20 20 70 72 69 76 61 74 65 20 63 6f 6e 73      private cons
2710: 74 20 73 74 72 69 6e 67 20 44 65 66 61 75 6c 74  t string Default
2720: 44 65 62 75 67 46 6f 72 6d 61 74 20 3d 20 22 23  DebugFormat = "#
2730: 7b 30 3a 30 30 30 7d 20 40 20 7b 31 7d 3a 20 7b  {0:000} @ {1}: {
2740: 32 7d 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  2}";..          
2750: 20 20 70 72 69 76 61 74 65 20 63 6f 6e 73 74 20    private const 
2760: 73 74 72 69 6e 67 20 44 65 66 61 75 6c 74 54 72  string DefaultTr
2770: 61 63 65 46 6f 72 6d 61 74 20 3d 20 22 23 7b 30  aceFormat = "#{0
2780: 3a 30 30 30 7d 20 40 20 7b 31 7d 3a 20 7b 32 7d  :000} @ {1}: {2}
2790: 22 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  ";....          
27a0: 20 20 70 72 69 76 61 74 65 20 63 6f 6e 73 74 20    private const 
27b0: 73 74 72 69 6e 67 20 49 73 6f 38 36 30 31 44 61  string Iso8601Da
27c0: 74 65 54 69 6d 65 4f 75 74 70 75 74 46 6f 72 6d  teTimeOutputForm
27d0: 61 74 20 3d 0d 0a 20 20 20 20 20 20 20 20 20 20  at =..          
27e0: 20 20 20 20 20 20 22 79 79 79 79 2e 4d 4d 2e 64        "yyyy.MM.d
27f0: 64 54 48 48 3a 6d 6d 3a 73 73 2e 66 66 66 66 66  dTHH:mm:ss.fffff
2800: 66 66 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ff";..          
2810: 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a    #endregion....
2820: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
2830: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2840: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2850: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2860: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
2870: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  ...            #
2880: 72 65 67 69 6f 6e 20 50 72 69 76 61 74 65 20 53  region Private S
2890: 74 61 74 69 63 20 44 61 74 61 0d 0a 20 20 20 20  tatic Data..    
28a0: 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
28b0: 73 74 61 74 69 63 20 6f 62 6a 65 63 74 20 73 79  static object sy
28c0: 6e 63 52 6f 6f 74 20 3d 20 6e 65 77 20 6f 62 6a  ncRoot = new obj
28d0: 65 63 74 28 29 3b 0d 0a 20 20 20 20 20 20 20 20  ect();..        
28e0: 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74      private stat
28f0: 69 63 20 6c 6f 6e 67 20 6e 65 78 74 44 65 62 75  ic long nextDebu
2900: 67 49 64 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  gId;..          
2910: 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63    private static
2920: 20 6c 6f 6e 67 20 6e 65 78 74 54 72 61 63 65 49   long nextTraceI
2930: 64 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  d;..            
2940: 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 49  private static I
2950: 4c 69 73 74 3c 54 72 61 63 65 4c 69 73 74 65 6e  List<TraceListen
2960: 65 72 3e 20 64 65 62 75 67 4c 69 73 74 65 6e 65  er> debugListene
2970: 72 73 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  rs;..           
2980: 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20   private static 
2990: 54 72 61 63 65 50 72 69 6f 72 69 74 79 20 64 65  TracePriority de
29a0: 62 75 67 50 72 69 6f 72 69 74 79 20 3d 20 54 72  bugPriority = Tr
29b0: 61 63 65 50 72 69 6f 72 69 74 79 2e 44 65 66 61  acePriority.Defa
29c0: 75 6c 74 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ult;..          
29d0: 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63    private static
29e0: 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 20 74   TracePriority t
29f0: 72 61 63 65 50 72 69 6f 72 69 74 79 20 3d 20 54  racePriority = T
2a00: 72 61 63 65 50 72 69 6f 72 69 74 79 2e 44 65 66  racePriority.Def
2a10: 61 75 6c 74 3b 0d 0a 20 20 20 20 20 20 20 20 20  ault;..         
2a20: 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69     private stati
2a30: 63 20 73 74 72 69 6e 67 20 64 65 62 75 67 46 6f  c string debugFo
2a40: 72 6d 61 74 20 3d 20 44 65 66 61 75 6c 74 44 65  rmat = DefaultDe
2a50: 62 75 67 46 6f 72 6d 61 74 3b 0d 0a 20 20 20 20  bugFormat;..    
2a60: 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
2a70: 73 74 61 74 69 63 20 73 74 72 69 6e 67 20 74 72  static string tr
2a80: 61 63 65 46 6f 72 6d 61 74 20 3d 20 44 65 66 61  aceFormat = Defa
2a90: 75 6c 74 54 72 61 63 65 46 6f 72 6d 61 74 3b 0d  ultTraceFormat;.
2aa0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e  .            #en
2ab0: 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20  dregion....     
2ac0: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
2ad0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ae0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2af0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
2b10: 20 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f            #regio
2b20: 6e 20 50 75 62 6c 69 63 20 53 74 61 74 69 63 20  n Public Static 
2b30: 50 72 6f 70 65 72 74 69 65 73 0d 0a 20 20 20 20  Properties..    
2b40: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73          public s
2b50: 74 61 74 69 63 20 54 72 61 63 65 50 72 69 6f 72  tatic TracePrior
2b60: 69 74 79 20 44 65 62 75 67 50 72 69 6f 72 69 74  ity DebugPriorit
2b70: 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  y..            {
2b80: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2b90: 20 20 67 65 74 20 7b 20 6c 6f 63 6b 20 28 73 79    get { lock (sy
2ba0: 6e 63 52 6f 6f 74 29 20 7b 20 72 65 74 75 72 6e  ncRoot) { return
2bb0: 20 64 65 62 75 67 50 72 69 6f 72 69 74 79 3b 20   debugPriority; 
2bc0: 7d 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  } }..           
2bd0: 20 20 20 20 20 73 65 74 20 7b 20 6c 6f 63 6b 20       set { lock 
2be0: 28 73 79 6e 63 52 6f 6f 74 29 20 7b 20 64 65 62  (syncRoot) { deb
2bf0: 75 67 50 72 69 6f 72 69 74 79 20 3d 20 76 61 6c  ugPriority = val
2c00: 75 65 3b 20 7d 20 7d 0d 0a 20 20 20 20 20 20 20  ue; } }..       
2c10: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
2c20: 20 20 20 20 20 20 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 0d 0a 0d 0a 20 20 20  /////////....   
2c70: 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
2c80: 73 74 61 74 69 63 20 54 72 61 63 65 50 72 69 6f  static TracePrio
2c90: 72 69 74 79 20 54 72 61 63 65 50 72 69 6f 72 69  rity TracePriori
2ca0: 74 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ty..            
2cb0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
2cc0: 20 20 20 67 65 74 20 7b 20 6c 6f 63 6b 20 28 73     get { lock (s
2cd0: 79 6e 63 52 6f 6f 74 29 20 7b 20 72 65 74 75 72  yncRoot) { retur
2ce0: 6e 20 74 72 61 63 65 50 72 69 6f 72 69 74 79 3b  n tracePriority;
2cf0: 20 7d 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20   } }..          
2d00: 20 20 20 20 20 20 73 65 74 20 7b 20 6c 6f 63 6b        set { lock
2d10: 20 28 73 79 6e 63 52 6f 6f 74 29 20 7b 20 74 72   (syncRoot) { tr
2d20: 61 63 65 50 72 69 6f 72 69 74 79 20 3d 20 76 61  acePriority = va
2d30: 6c 75 65 3b 20 7d 20 7d 0d 0a 20 20 20 20 20 20  lue; } }..      
2d40: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
2d50: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
2d60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
2da0: 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
2db0: 20 73 74 61 74 69 63 20 73 74 72 69 6e 67 20 44   static string D
2dc0: 65 62 75 67 46 6f 72 6d 61 74 0d 0a 20 20 20 20  ebugFormat..    
2dd0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
2de0: 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b             get {
2df0: 20 6c 6f 63 6b 20 28 73 79 6e 63 52 6f 6f 74 29   lock (syncRoot)
2e00: 20 7b 20 72 65 74 75 72 6e 20 64 65 62 75 67 46   { return debugF
2e10: 6f 72 6d 61 74 3b 20 7d 20 7d 0d 0a 20 20 20 20  ormat; } }..    
2e20: 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20              set 
2e30: 7b 20 6c 6f 63 6b 20 28 73 79 6e 63 52 6f 6f 74  { lock (syncRoot
2e40: 29 20 7b 20 64 65 62 75 67 46 6f 72 6d 61 74 20  ) { debugFormat 
2e50: 3d 20 76 61 6c 75 65 3b 20 7d 20 7d 0d 0a 20 20  = value; } }..  
2e60: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
2e70: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
2e80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ea0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2eb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
2ec0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
2ed0: 62 6c 69 63 20 73 74 61 74 69 63 20 73 74 72 69  blic static stri
2ee0: 6e 67 20 54 72 61 63 65 46 6f 72 6d 61 74 0d 0a  ng TraceFormat..
2ef0: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
2f00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67                 g
2f10: 65 74 20 7b 20 6c 6f 63 6b 20 28 73 79 6e 63 52  et { lock (syncR
2f20: 6f 6f 74 29 20 7b 20 72 65 74 75 72 6e 20 74 72  oot) { return tr
2f30: 61 63 65 46 6f 72 6d 61 74 3b 20 7d 20 7d 0d 0a  aceFormat; } }..
2f40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f50: 73 65 74 20 7b 20 6c 6f 63 6b 20 28 73 79 6e 63  set { lock (sync
2f60: 52 6f 6f 74 29 20 7b 20 74 72 61 63 65 46 6f 72  Root) { traceFor
2f70: 6d 61 74 20 3d 20 76 61 6c 75 65 3b 20 7d 20 7d  mat = value; } }
2f80: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
2f90: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e  .            #en
2fa0: 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20  dregion....     
2fb0: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
2fc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2fd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2fe0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ff0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
3000: 20 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f            #regio
3010: 6e 20 49 6e 74 65 72 61 63 74 69 76 65 20 53 75  n Interactive Su
3020: 70 70 6f 72 74 20 4d 65 74 68 6f 64 73 0d 0a 20  pport Methods.. 
3030: 20 20 20 20 20 20 20 20 20 20 20 5b 4d 65 74 68             [Meth
3040: 6f 64 49 6d 70 6c 28 4d 65 74 68 6f 64 49 6d 70  odImpl(MethodImp
3050: 6c 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e  lOptions.NoInlin
3060: 69 6e 67 29 5d 0d 0a 20 20 20 20 20 20 20 20 20  ing)]..         
3070: 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63     public static
3080: 20 44 69 61 6c 6f 67 52 65 73 75 6c 74 20 53 68   DialogResult Sh
3090: 6f 77 4d 65 73 73 61 67 65 28 0d 0a 20 20 20 20  owMessage(..    
30a0: 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
30b0: 65 50 72 69 6f 72 69 74 79 20 74 72 61 63 65 50  ePriority traceP
30c0: 72 69 6f 72 69 74 79 2c 0d 0a 20 20 20 20 20 20  riority,..      
30d0: 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 43            TraceC
30e0: 61 6c 6c 62 61 63 6b 20 64 65 62 75 67 43 61 6c  allback debugCal
30f0: 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20  lback,..        
3100: 20 20 20 20 20 20 20 20 54 72 61 63 65 43 61 6c          TraceCal
3110: 6c 62 61 63 6b 20 74 72 61 63 65 43 61 6c 6c 62  lback traceCallb
3120: 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ack,..          
3130: 20 20 20 20 20 20 41 73 73 65 6d 62 6c 79 20 61        Assembly a
3140: 73 73 65 6d 62 6c 79 2c 0d 0a 20 20 20 20 20 20  ssembly,..      
3150: 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
3160: 20 6d 65 73 73 61 67 65 2c 0d 0a 20 20 20 20 20   message,..     
3170: 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
3180: 67 20 63 61 74 65 67 6f 72 79 2c 0d 0a 20 20 20  g category,..   
3190: 20 20 20 20 20 20 20 20 20 20 20 20 20 4d 65 73               Mes
31a0: 73 61 67 65 42 6f 78 42 75 74 74 6f 6e 73 20 62  sageBoxButtons b
31b0: 75 74 74 6f 6e 73 2c 0d 0a 20 20 20 20 20 20 20  uttons,..       
31c0: 20 20 20 20 20 20 20 20 20 4d 65 73 73 61 67 65           Message
31d0: 42 6f 78 49 63 6f 6e 20 69 63 6f 6e 0d 0a 20 20  BoxIcon icon..  
31e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d                ).
31f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
3200: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3210: 44 69 61 6c 6f 67 52 65 73 75 6c 74 20 72 65 73  DialogResult res
3220: 75 6c 74 20 3d 20 44 69 61 6c 6f 67 52 65 73 75  ult = DialogResu
3230: 6c 74 2e 4f 4b 3b 0d 0a 0d 0a 20 20 20 20 20 20  lt.OK;....      
3240: 20 20 20 20 20 20 20 20 20 20 44 65 62 75 67 41            DebugA
3250: 6e 64 54 72 61 63 65 28 74 72 61 63 65 50 72 69  ndTrace(tracePri
3260: 6f 72 69 74 79 2c 0d 0a 20 20 20 20 20 20 20 20  ority,..        
3270: 20 20 20 20 20 20 20 20 20 20 20 20 64 65 62 75              debu
3280: 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65  gCallback, trace
3290: 43 61 6c 6c 62 61 63 6b 2c 20 6d 65 73 73 61 67  Callback, messag
32a0: 65 2c 20 63 61 74 65 67 6f 72 79 29 3b 0d 0a 0d  e, category);...
32b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
32c0: 20 69 66 20 28 53 79 73 74 65 6d 49 6e 66 6f 72   if (SystemInfor
32d0: 6d 61 74 69 6f 6e 2e 55 73 65 72 49 6e 74 65 72  mation.UserInter
32e0: 61 63 74 69 76 65 29 0d 0a 20 20 20 20 20 20 20  active)..       
32f0: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
3300: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3310: 73 74 72 69 6e 67 20 74 69 74 6c 65 20 3d 20 47  string title = G
3320: 65 74 41 73 73 65 6d 62 6c 79 54 69 74 6c 65 28  etAssemblyTitle(
3330: 61 73 73 65 6d 62 6c 79 29 3b 0d 0a 0d 0a 20 20  assembly);....  
3340: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3350: 20 20 69 66 20 28 74 69 74 6c 65 20 3d 3d 20 6e    if (title == n
3360: 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
3370: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 69                ti
3380: 74 6c 65 20 3d 20 41 70 70 6c 69 63 61 74 69 6f  tle = Applicatio
3390: 6e 2e 50 72 6f 64 75 63 74 4e 61 6d 65 3b 0d 0a  n.ProductName;..
33a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
33b0: 20 20 20 20 20 20 72 65 73 75 6c 74 20 3d 20 4d        result = M
33c0: 65 73 73 61 67 65 42 6f 78 2e 53 68 6f 77 28 6d  essageBox.Show(m
33d0: 65 73 73 61 67 65 2c 20 74 69 74 6c 65 2c 20 62  essage, title, b
33e0: 75 74 74 6f 6e 73 2c 20 69 63 6f 6e 29 3b 0d 0a  uttons, icon);..
33f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
3400: 20 20 20 20 20 20 44 65 62 75 67 41 6e 64 54 72        DebugAndTr
3410: 61 63 65 28 74 72 61 63 65 50 72 69 6f 72 69 74  ace(tracePriorit
3420: 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y,..            
3430: 20 20 20 20 20 20 20 20 20 20 20 20 64 65 62 75              debu
3440: 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65  gCallback, trace
3450: 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67  Callback, String
3460: 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  .Format(..      
3470: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3480: 20 20 22 55 73 65 72 20 63 68 6f 69 63 65 20 6f    "User choice o
3490: 66 20 7b 30 7d 2e 22 2c 20 46 6f 72 44 69 73 70  f {0}.", ForDisp
34a0: 6c 61 79 28 72 65 73 75 6c 74 29 29 2c 0d 0a 20  lay(result)),.. 
34b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34c0: 20 20 20 20 20 20 20 63 61 74 65 67 6f 72 79 29         category)
34d0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
34e0: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
34f0: 72 65 73 75 6c 74 3b 0d 0a 20 20 20 20 20 20 20  result;..       
3500: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
3510: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 44 65                De
3520: 62 75 67 41 6e 64 54 72 61 63 65 28 74 72 61 63  bugAndTrace(trac
3530: 65 50 72 69 6f 72 69 74 79 2c 0d 0a 20 20 20 20  ePriority,..    
3540: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3550: 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74  debugCallback, t
3560: 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74  raceCallback, St
3570: 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
3580: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3590: 20 20 22 44 65 66 61 75 6c 74 20 63 68 6f 69 63    "Default choic
35a0: 65 20 6f 66 20 7b 30 7d 2e 22 2c 20 46 6f 72 44  e of {0}.", ForD
35b0: 69 73 70 6c 61 79 28 72 65 73 75 6c 74 29 29 2c  isplay(result)),
35c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
35d0: 20 20 20 20 20 20 63 61 74 65 67 6f 72 79 29 3b        category);
35e0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
35f0: 20 20 20 20 72 65 74 75 72 6e 20 72 65 73 75 6c      return resul
3600: 74 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t;..            
3610: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  }..            #
3620: 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20  endregion....   
3630: 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
3640: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3650: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3660: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3670: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
3680: 20 20 20 20 20 20 20 20 20 20 20 20 23 72 65 67              #reg
3690: 69 6f 6e 20 54 72 61 63 69 6e 67 20 53 75 70 70  ion Tracing Supp
36a0: 6f 72 74 20 4d 65 74 68 6f 64 73 0d 0a 20 20 20  ort Methods..   
36b0: 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
36c0: 73 74 61 74 69 63 20 76 6f 69 64 20 53 65 74 75  static void Setu
36d0: 70 44 65 62 75 67 4c 69 73 74 65 6e 65 72 73 28  pDebugListeners(
36e0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
36f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
3700: 20 20 69 66 20 28 64 65 62 75 67 4c 69 73 74 65    if (debugListe
3710: 6e 65 72 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  ners == null).. 
3720: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3730: 20 20 20 64 65 62 75 67 4c 69 73 74 65 6e 65 72     debugListener
3740: 73 20 3d 20 6e 65 77 20 4c 69 73 74 3c 54 72 61  s = new List<Tra
3750: 63 65 4c 69 73 74 65 6e 65 72 3e 28 29 3b 0d 0a  ceListener>();..
3760: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
3770: 20 20 64 65 62 75 67 4c 69 73 74 65 6e 65 72 73    debugListeners
3780: 2e 41 64 64 28 6e 65 77 20 43 6f 6e 73 6f 6c 65  .Add(new Console
3790: 54 72 61 63 65 4c 69 73 74 65 6e 65 72 28 29 29  TraceListener())
37a0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
37b0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
37c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3800: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
3810: 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63     public static
3820: 20 6c 6f 6e 67 20 4e 65 78 74 44 65 62 75 67 49   long NextDebugI
3830: 64 28 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  d()..           
3840: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
3850: 20 20 20 20 72 65 74 75 72 6e 20 49 6e 74 65 72      return Inter
3860: 6c 6f 63 6b 65 64 2e 49 6e 63 72 65 6d 65 6e 74  locked.Increment
3870: 28 72 65 66 20 6e 65 78 74 44 65 62 75 67 49 64  (ref nextDebugId
3880: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
3890: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
38a0: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
38b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
38c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
38d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
38e0: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
38f0: 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69      public stati
3900: 63 20 6c 6f 6e 67 20 4e 65 78 74 54 72 61 63 65  c long NextTrace
3910: 49 64 28 29 0d 0a 20 20 20 20 20 20 20 20 20 20  Id()..          
3920: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
3930: 20 20 20 20 20 72 65 74 75 72 6e 20 49 6e 74 65       return Inte
3940: 72 6c 6f 63 6b 65 64 2e 49 6e 63 72 65 6d 65 6e  rlocked.Incremen
3950: 74 28 72 65 66 20 6e 65 78 74 54 72 61 63 65 49  t(ref nextTraceI
3960: 64 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  d);..           
3970: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
3980: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
3990: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
39a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
39b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
39c0: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
39d0: 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74       public stat
39e0: 69 63 20 73 74 72 69 6e 67 20 54 69 6d 65 53 74  ic string TimeSt
39f0: 61 6d 70 28 44 61 74 65 54 69 6d 65 20 64 61 74  amp(DateTime dat
3a00: 65 54 69 6d 65 29 0d 0a 20 20 20 20 20 20 20 20  eTime)..        
3a10: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
3a20: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 64 61         return da
3a30: 74 65 54 69 6d 65 2e 54 6f 53 74 72 69 6e 67 28  teTime.ToString(
3a40: 49 73 6f 38 36 30 31 44 61 74 65 54 69 6d 65 4f  Iso8601DateTimeO
3a50: 75 74 70 75 74 46 6f 72 6d 61 74 29 3b 0d 0a 20  utputFormat);.. 
3a60: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
3a70: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
3a80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3a90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3aa0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3ab0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
3ac0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b  ...            [
3ad0: 4d 65 74 68 6f 64 49 6d 70 6c 28 4d 65 74 68 6f  MethodImpl(Metho
3ae0: 64 49 6d 70 6c 4f 70 74 69 6f 6e 73 2e 4e 6f 49  dImplOptions.NoI
3af0: 6e 6c 69 6e 69 6e 67 29 5d 0d 0a 20 20 20 20 20  nlining)]..     
3b00: 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
3b10: 74 61 74 69 63 20 73 74 72 69 6e 67 20 47 65 74  tatic string Get
3b20: 4d 65 74 68 6f 64 4e 61 6d 65 28 0d 0a 20 20 20  MethodName(..   
3b30: 20 20 20 20 20 20 20 20 20 20 20 20 20 53 74 61               Sta
3b40: 63 6b 54 72 61 63 65 20 73 74 61 63 6b 54 72 61  ckTrace stackTra
3b50: 63 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ce,..           
3b60: 20 20 20 20 20 69 6e 74 20 6c 65 76 65 6c 0d 0a       int level..
3b70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3b80: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
3b90: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
3ba0: 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20    try..         
3bb0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
3bc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
3bd0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
3be0: 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 49        // NOTE: I
3bf0: 66 20 61 20 76 61 6c 69 64 20 73 74 61 63 6b 20  f a valid stack 
3c00: 74 72 61 63 65 20 77 61 73 20 6e 6f 74 20 73 75  trace was not su
3c10: 70 70 6c 69 65 64 20 62 79 20 74 68 65 0d 0a 20  pplied by the.. 
3c20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3c30: 20 20 20 2f 2f 20 20 20 20 20 20 20 63 61 6c 6c     //       call
3c40: 65 72 2c 20 63 72 65 61 74 65 20 6f 6e 65 20 6e  er, create one n
3c50: 6f 77 20 62 61 73 65 64 20 6f 6e 20 74 68 65 20  ow based on the 
3c60: 63 75 72 72 65 6e 74 0d 0a 20 20 20 20 20 20 20  current..       
3c70: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
3c80: 20 20 20 20 20 20 65 78 65 63 75 74 69 6f 6e 20        execution 
3c90: 73 74 61 63 6b 2e 0d 0a 20 20 20 20 20 20 20 20  stack...        
3ca0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
3cb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3cc0: 20 20 20 20 69 66 20 28 73 74 61 63 6b 54 72 61      if (stackTra
3cd0: 63 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ce == null)..   
3ce0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3cf0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
3d00: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
3d10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3d20: 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a          // NOTE:
3d30: 20 47 72 61 62 20 74 68 65 20 63 75 72 72 65 6e   Grab the curren
3d40: 74 20 65 78 65 63 75 74 69 6f 6e 20 73 74 61 63  t execution stac
3d50: 6b 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  k...            
3d60: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
3d70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3d80: 20 20 20 20 20 20 20 20 73 74 61 63 6b 54 72 61          stackTra
3d90: 63 65 20 3d 20 6e 65 77 20 53 74 61 63 6b 54 72  ce = new StackTr
3da0: 61 63 65 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  ace();....      
3db0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3dc0: 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
3dd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
3de0: 20 4e 4f 54 45 3a 20 41 6c 77 61 79 73 20 73 6b   NOTE: Always sk
3df0: 69 70 20 74 68 69 73 20 63 61 6c 6c 20 66 72 61  ip this call fra
3e00: 6d 65 20 77 68 65 6e 20 77 65 20 63 61 70 74 75  me when we captu
3e10: 72 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  re..            
3e20: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
3e30: 20 20 20 20 20 74 68 65 20 73 74 61 63 6b 20 74       the stack t
3e40: 72 61 63 65 2e 0d 0a 20 20 20 20 20 20 20 20 20  race...         
3e50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
3e60: 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
3e70: 20 20 20 20 20 20 20 20 20 20 20 6c 65 76 65 6c             level
3e80: 2b 2b 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ++;..           
3e90: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
3ea0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3eb0: 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
3ec0: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54            // NOT
3ed0: 45 3a 20 47 65 74 20 74 68 65 20 73 70 65 63 69  E: Get the speci
3ee0: 66 69 65 64 20 73 74 61 63 6b 20 66 72 61 6d 65  fied stack frame
3ef0: 20 28 61 6c 77 61 79 73 20 61 64 64 20 6f 6e 65   (always add one
3f00: 20 74 6f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   to..           
3f10: 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
3f20: 20 20 73 6b 69 70 20 74 68 69 73 20 6d 65 74 68    skip this meth
3f30: 6f 64 29 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  od)...          
3f40: 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
3f50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3f60: 20 20 53 74 61 63 6b 46 72 61 6d 65 20 73 74 61    StackFrame sta
3f70: 63 6b 46 72 61 6d 65 20 3d 20 73 74 61 63 6b 54  ckFrame = stackT
3f80: 72 61 63 65 2e 47 65 74 46 72 61 6d 65 28 6c 65  race.GetFrame(le
3f90: 76 65 6c 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  vel);....       
3fa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
3fb0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
3fc0: 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 47 65       // NOTE: Ge
3fd0: 74 20 74 68 65 20 6d 65 74 68 6f 64 20 66 6f 72  t the method for
3fe0: 20 74 68 65 20 73 74 61 63 6b 20 66 72 61 6d 65   the stack frame
3ff0: 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
4000: 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
4010: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4d                 M
4020: 65 74 68 6f 64 42 61 73 65 20 6d 65 74 68 6f 64  ethodBase method
4030: 42 61 73 65 20 3d 20 73 74 61 63 6b 46 72 61 6d  Base = stackFram
4040: 65 2e 47 65 74 4d 65 74 68 6f 64 28 29 3b 0d 0a  e.GetMethod();..
4050: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
4060: 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
4070: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
4080: 20 4e 4f 54 45 3a 20 47 65 74 20 74 68 65 20 74   NOTE: Get the t
4090: 79 70 65 20 66 6f 72 20 74 68 65 20 6d 65 74 68  ype for the meth
40a0: 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  od...           
40b0: 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
40c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
40d0: 20 54 79 70 65 20 74 79 70 65 20 3d 20 6d 65 74   Type type = met
40e0: 68 6f 64 42 61 73 65 2e 44 65 63 6c 61 72 69 6e  hodBase.Declarin
40f0: 67 54 79 70 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  gType;....      
4100: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
4110: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
4120: 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 47        // NOTE: G
4130: 65 74 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74  et the name of t
4140: 68 65 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20  he method...    
4150: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4160: 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
4170: 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6e          string n
4180: 61 6d 65 20 3d 20 6d 65 74 68 6f 64 42 61 73 65  ame = methodBase
4190: 2e 4e 61 6d 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  .Name;....      
41a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
41b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
41c0: 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 52        // NOTE: R
41d0: 65 74 75 72 6e 20 74 68 65 20 70 72 6f 70 65 72  eturn the proper
41e0: 6c 79 20 66 6f 72 6d 61 74 74 65 64 20 72 65 73  ly formatted res
41f0: 75 6c 74 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  ult...          
4200: 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
4210: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4220: 20 20 72 65 74 75 72 6e 20 53 74 72 69 6e 67 2e    return String.
4230: 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
4240: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4250: 20 22 7b 30 7d 7b 31 7d 7b 32 7d 22 2c 20 74 79   "{0}{1}{2}", ty
4260: 70 65 2e 4e 61 6d 65 2c 20 54 79 70 65 2e 44 65  pe.Name, Type.De
4270: 6c 69 6d 69 74 65 72 2c 20 6e 61 6d 65 29 3b 0d  limiter, name);.
4280: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
4290: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
42a0: 20 20 20 20 63 61 74 63 68 0d 0a 20 20 20 20 20      catch..     
42b0: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
42c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
42d0: 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e    // do nothing.
42e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
42f0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
4300: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 75         return nu
4310: 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll;..           
4320: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
4330: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
4340: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4350: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4360: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4370: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
4380: 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74       public stat
4390: 69 63 20 76 6f 69 64 20 44 65 62 75 67 43 6f 72  ic void DebugCor
43a0: 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
43b0: 20 20 20 20 73 74 72 69 6e 67 20 6d 65 73 73 61      string messa
43c0: 67 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ge,..           
43d0: 20 20 20 20 20 73 74 72 69 6e 67 20 63 61 74 65       string cate
43e0: 67 6f 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20  gory..          
43f0: 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
4400: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
4410: 20 20 20 20 20 20 20 20 6c 6f 63 6b 20 28 73 79          lock (sy
4420: 6e 63 52 6f 6f 74 29 0d 0a 20 20 20 20 20 20 20  ncRoot)..       
4430: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
4440: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4450: 69 66 20 28 64 65 62 75 67 4c 69 73 74 65 6e 65  if (debugListene
4460: 72 73 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  rs != null)..   
4470: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4480: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
4490: 20 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 65              fore
44a0: 61 63 68 20 28 54 72 61 63 65 4c 69 73 74 65 6e  ach (TraceListen
44b0: 65 72 20 6c 69 73 74 65 6e 65 72 20 69 6e 20 64  er listener in d
44c0: 65 62 75 67 4c 69 73 74 65 6e 65 72 73 29 0d 0a  ebugListeners)..
44d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
44e0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
44f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4500: 20 20 20 20 20 20 20 6c 69 73 74 65 6e 65 72 2e         listener.
4510: 57 72 69 74 65 4c 69 6e 65 28 6d 65 73 73 61 67  WriteLine(messag
4520: 65 2c 20 63 61 74 65 67 6f 72 79 29 3b 0d 0a 20  e, category);.. 
4530: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4540: 20 20 20 20 20 20 20 20 20 20 20 6c 69 73 74 65             liste
4550: 6e 65 72 2e 46 6c 75 73 68 28 29 3b 0d 0a 20 20  ner.Flush();..  
4560: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4570: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
4580: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
4590: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
45a0: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
45b0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
45c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
45d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
45e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
45f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4600: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
4610: 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63     public static
4620: 20 76 6f 69 64 20 54 72 61 63 65 43 6f 72 65 28   void TraceCore(
4630: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
4640: 20 20 73 74 72 69 6e 67 20 6d 65 73 73 61 67 65    string message
4650: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
4660: 20 20 20 73 74 72 69 6e 67 20 63 61 74 65 67 6f     string catego
4670: 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ry..            
4680: 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20      )..         
4690: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
46a0: 20 20 20 20 20 20 6c 6f 63 6b 20 28 73 79 6e 63        lock (sync
46b0: 52 6f 6f 74 29 0d 0a 20 20 20 20 20 20 20 20 20  Root)..         
46c0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
46d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
46e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
46f0: 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 57        // NOTE: W
4700: 72 69 74 65 20 74 68 65 20 6d 65 73 73 61 67 65  rite the message
4710: 20 74 6f 20 61 6c 6c 20 74 68 65 20 61 63 74 69   to all the acti
4720: 76 65 20 74 72 61 63 65 0d 0a 20 20 20 20 20 20  ve trace..      
4730: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
4740: 20 20 20 20 20 20 20 6c 69 73 74 65 6e 65 72 73         listeners
4750: 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
4760: 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
4770: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
4780: 72 61 63 65 2e 57 72 69 74 65 4c 69 6e 65 28 6d  race.WriteLine(m
4790: 65 73 73 61 67 65 2c 20 63 61 74 65 67 6f 72 79  essage, category
47a0: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
47b0: 20 20 20 20 20 20 20 20 54 72 61 63 65 2e 46 6c          Trace.Fl
47c0: 75 73 68 28 29 3b 0d 0a 20 20 20 20 20 20 20 20  ush();..        
47d0: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
47e0: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
47f0: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
4800: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4810: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4820: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4830: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
4840: 20 20 20 20 20 20 20 20 20 20 20 5b 4d 65 74 68             [Meth
4850: 6f 64 49 6d 70 6c 28 4d 65 74 68 6f 64 49 6d 70  odImpl(MethodImp
4860: 6c 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e  lOptions.NoInlin
4870: 69 6e 67 29 5d 0d 0a 20 20 20 20 20 20 20 20 20  ing)]..         
4880: 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63     public static
4890: 20 73 74 72 69 6e 67 20 44 65 62 75 67 41 6e 64   string DebugAnd
48a0: 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20  Trace(..        
48b0: 20 20 20 20 20 20 20 20 54 72 61 63 65 50 72 69          TracePri
48c0: 6f 72 69 74 79 20 74 72 61 63 65 50 72 69 6f 72  ority tracePrior
48d0: 69 74 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ity,..          
48e0: 20 20 20 20 20 20 54 72 61 63 65 43 61 6c 6c 62        TraceCallb
48f0: 61 63 6b 20 64 65 62 75 67 43 61 6c 6c 62 61 63  ack debugCallbac
4900: 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  k,..            
4910: 20 20 20 20 54 72 61 63 65 43 61 6c 6c 62 61 63      TraceCallbac
4920: 6b 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c  k traceCallback,
4930: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
4940: 20 20 45 78 63 65 70 74 69 6f 6e 20 65 78 63 65    Exception exce
4950: 70 74 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20  ption,..        
4960: 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 63          string c
4970: 61 74 65 67 6f 72 79 0d 0a 20 20 20 20 20 20 20  ategory..       
4980: 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
4990: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
49a0: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 65             if (e
49b0: 78 63 65 70 74 69 6f 6e 20 21 3d 20 6e 75 6c 6c  xception != null
49c0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
49d0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 44 65         return De
49e0: 62 75 67 41 6e 64 54 72 61 63 65 28 74 72 61 63  bugAndTrace(trac
49f0: 65 50 72 69 6f 72 69 74 79 2c 20 64 65 62 75 67  ePriority, debug
4a00: 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20  Callback,..     
4a10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4a20: 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b     traceCallback
4a30: 2c 20 6e 65 77 20 53 74 61 63 6b 54 72 61 63 65  , new StackTrace
4a40: 28 65 78 63 65 70 74 69 6f 6e 2c 20 74 72 75 65  (exception, true
4a50: 29 2c 20 30 2c 0d 0a 20 20 20 20 20 20 20 20 20  ), 0,..         
4a60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
4a70: 78 63 65 70 74 69 6f 6e 2e 54 6f 53 74 72 69 6e  xception.ToStrin
4a80: 67 28 29 2c 20 63 61 74 65 67 6f 72 79 29 3b 0d  g(), category);.
4a90: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
4aa0: 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d     return null;.
4ab0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
4ac0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
4ad0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4ae0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4af0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4b00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4b10: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
4b20: 20 5b 4d 65 74 68 6f 64 49 6d 70 6c 28 4d 65 74   [MethodImpl(Met
4b30: 68 6f 64 49 6d 70 6c 4f 70 74 69 6f 6e 73 2e 4e  hodImplOptions.N
4b40: 6f 49 6e 6c 69 6e 69 6e 67 29 5d 0d 0a 20 20 20  oInlining)]..   
4b50: 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
4b60: 73 74 61 74 69 63 20 73 74 72 69 6e 67 20 44 65  static string De
4b70: 62 75 67 41 6e 64 54 72 61 63 65 28 0d 0a 20 20  bugAndTrace(..  
4b80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
4b90: 61 63 65 50 72 69 6f 72 69 74 79 20 74 72 61 63  acePriority trac
4ba0: 65 50 72 69 6f 72 69 74 79 2c 0d 0a 20 20 20 20  ePriority,..    
4bb0: 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
4bc0: 65 43 61 6c 6c 62 61 63 6b 20 64 65 62 75 67 43  eCallback debugC
4bd0: 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20  allback,..      
4be0: 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 43            TraceC
4bf0: 61 6c 6c 62 61 63 6b 20 74 72 61 63 65 43 61 6c  allback traceCal
4c00: 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20  lback,..        
4c10: 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6d          string m
4c20: 65 73 73 61 67 65 2c 0d 0a 20 20 20 20 20 20 20  essage,..       
4c30: 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
4c40: 63 61 74 65 67 6f 72 79 0d 0a 20 20 20 20 20 20  category..      
4c50: 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
4c60: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
4c70: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
4c80: 72 6e 20 44 65 62 75 67 41 6e 64 54 72 61 63 65  rn DebugAndTrace
4c90: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
4ca0: 20 20 20 20 20 20 20 74 72 61 63 65 50 72 69 6f         tracePrio
4cb0: 72 69 74 79 2c 20 64 65 62 75 67 43 61 6c 6c 62  rity, debugCallb
4cc0: 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61  ack, traceCallba
4cd0: 63 6b 2c 20 6e 75 6c 6c 2c 20 31 2c 0d 0a 20 20  ck, null, 1,..  
4ce0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4cf0: 20 20 6d 65 73 73 61 67 65 2c 20 63 61 74 65 67    message, categ
4d00: 6f 72 79 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ory);..         
4d10: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
4d20: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
4d30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4d40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4d50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4d60: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
4d70: 20 20 20 20 20 20 20 5b 4d 65 74 68 6f 64 49 6d         [MethodIm
4d80: 70 6c 28 4d 65 74 68 6f 64 49 6d 70 6c 4f 70 74  pl(MethodImplOpt
4d90: 69 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e 69 6e 67 29  ions.NoInlining)
4da0: 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ]..            p
4db0: 72 69 76 61 74 65 20 73 74 61 74 69 63 20 73 74  rivate static st
4dc0: 72 69 6e 67 20 44 65 62 75 67 41 6e 64 54 72 61  ring DebugAndTra
4dd0: 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ce(..           
4de0: 20 20 20 20 20 54 72 61 63 65 50 72 69 6f 72 69       TracePriori
4df0: 74 79 20 74 72 61 63 65 50 72 69 6f 72 69 74 79  ty tracePriority
4e00: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
4e10: 20 20 20 54 72 61 63 65 43 61 6c 6c 62 61 63 6b     TraceCallback
4e20: 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d   debugCallback,.
4e30: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
4e40: 20 54 72 61 63 65 43 61 6c 6c 62 61 63 6b 20 74   TraceCallback t
4e50: 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20  raceCallback,.. 
4e60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53                 S
4e70: 74 61 63 6b 54 72 61 63 65 20 73 74 61 63 6b 54  tackTrace stackT
4e80: 72 61 63 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  race,..         
4e90: 20 20 20 20 20 20 20 69 6e 74 20 6c 65 76 65 6c         int level
4ea0: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
4eb0: 20 20 20 73 74 72 69 6e 67 20 6d 65 73 73 61 67     string messag
4ec0: 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
4ed0: 20 20 20 20 73 74 72 69 6e 67 20 63 61 74 65 67      string categ
4ee0: 6f 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ory..           
4ef0: 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
4f00: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
4f10: 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
4f20: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f             // NO
4f30: 54 45 3a 20 41 6c 77 61 79 73 20 73 6b 69 70 20  TE: Always skip 
4f40: 74 68 69 73 20 63 61 6c 6c 20 66 72 61 6d 65 20  this call frame 
4f50: 69 66 20 74 68 65 20 73 74 61 63 6b 20 74 72 61  if the stack tra
4f60: 63 65 20 69 73 0d 0a 20 20 20 20 20 20 20 20 20  ce is..         
4f70: 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
4f80: 67 6f 69 6e 67 20 74 6f 20 62 65 20 63 61 70 74  going to be capt
4f90: 75 72 65 64 20 62 79 20 47 65 74 4d 65 74 68 6f  ured by GetMetho
4fa0: 64 4e 61 6d 65 2e 0d 0a 20 20 20 20 20 20 20 20  dName...        
4fb0: 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
4fc0: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
4fd0: 73 74 61 63 6b 54 72 61 63 65 20 3d 3d 20 6e 75  stackTrace == nu
4fe0: 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
4ff0: 20 20 20 20 20 20 20 20 20 6c 65 76 65 6c 2b 2b           level++
5000: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
5010: 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
5020: 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45           // NOTE
5030: 3a 20 46 6f 72 6d 61 74 20 74 68 65 20 6d 65 73  : Format the mes
5040: 73 61 67 65 20 66 6f 72 20 64 69 73 70 6c 61 79  sage for display
5050: 20 28 6f 6e 63 65 29 2e 0d 0a 20 20 20 20 20 20   (once)...      
5060: 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
5070: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
5080: 72 69 6e 67 20 66 6f 72 6d 61 74 74 65 64 20 3d  ring formatted =
5090: 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 22   String.Format("
50a0: 7b 30 7d 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20  {0}: {1}",..    
50b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
50c0: 47 65 74 4d 65 74 68 6f 64 4e 61 6d 65 28 73 74  GetMethodName(st
50d0: 61 63 6b 54 72 61 63 65 2c 20 6c 65 76 65 6c 29  ackTrace, level)
50e0: 2c 20 6d 65 73 73 61 67 65 29 3b 0d 0a 0d 0a 20  , message);.... 
50f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
5100: 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
5110: 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 49 66 20 74     // NOTE: If t
5120: 68 65 20 64 65 62 75 67 20 63 61 6c 6c 62 61 63  he debug callbac
5130: 6b 20 69 73 20 69 6e 76 61 6c 69 64 20 6f 72 20  k is invalid or 
5140: 74 68 65 20 74 72 61 63 65 20 70 72 69 6f 72 69  the trace priori
5150: 74 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ty..            
5160: 20 20 20 20 2f 2f 20 20 20 20 20 20 20 6f 66 20      //       of 
5170: 74 68 69 73 20 6d 65 73 73 61 67 65 20 69 73 20  this message is 
5180: 6c 65 73 73 20 74 68 61 6e 20 77 68 61 74 20 77  less than what w
5190: 65 20 63 75 72 72 65 6e 74 6c 79 20 77 61 6e 74  e currently want
51a0: 20 74 6f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   to..           
51b0: 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 64 65       //       de
51c0: 62 75 67 2c 20 73 6b 69 70 20 69 74 2e 0d 0a 20  bug, skip it... 
51d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
51e0: 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
51f0: 20 20 20 69 66 20 28 28 64 65 62 75 67 43 61 6c     if ((debugCal
5200: 6c 62 61 63 6b 20 21 3d 20 6e 75 6c 6c 29 20 26  lback != null) &
5210: 26 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  &..             
5220: 20 20 20 20 20 20 20 28 74 72 61 63 65 50 72 69         (tracePri
5230: 6f 72 69 74 79 20 3e 3d 20 44 65 62 75 67 50 72  ority >= DebugPr
5240: 69 6f 72 69 74 79 29 29 0d 0a 20 20 20 20 20 20  iority))..      
5250: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
5260: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5270: 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
5280: 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45           // NOTE
5290: 3a 20 49 6e 76 6f 6b 65 20 74 68 65 20 64 65 62  : Invoke the deb
52a0: 75 67 20 63 61 6c 6c 62 61 63 6b 20 77 69 74 68  ug callback with
52b0: 20 74 68 65 20 66 6f 72 6d 61 74 74 65 64 0d 0a   the formatted..
52c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
52d0: 20 20 20 20 2f 2f 20 20 20 20 20 20 20 6d 65 73      //       mes
52e0: 73 61 67 65 20 61 6e 64 20 74 68 65 20 63 61 74  sage and the cat
52f0: 65 67 6f 72 79 20 73 70 65 63 69 66 69 65 64 20  egory specified 
5300: 62 79 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20  by the..        
5310: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
5320: 20 20 20 20 20 63 61 6c 6c 65 72 2e 0d 0a 20 20       caller...  
5330: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5340: 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
5350: 20 20 20 20 20 20 20 20 20 20 64 65 62 75 67 43            debugC
5360: 61 6c 6c 62 61 63 6b 28 66 6f 72 6d 61 74 74 65  allback(formatte
5370: 64 2c 20 63 61 74 65 67 6f 72 79 29 3b 0d 0a 20  d, category);.. 
5380: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
5390: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
53a0: 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
53b0: 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a          // NOTE:
53c0: 20 49 66 20 74 68 65 20 74 72 61 63 65 20 63 61   If the trace ca
53d0: 6c 6c 62 61 63 6b 20 69 73 20 69 6e 76 61 6c 69  llback is invali
53e0: 64 20 6f 72 20 74 68 65 20 74 72 61 63 65 20 70  d or the trace p
53f0: 72 69 6f 72 69 74 79 0d 0a 20 20 20 20 20 20 20  riority..       
5400: 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
5410: 20 20 6f 66 20 74 68 69 73 20 6d 65 73 73 61 67    of this messag
5420: 65 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20 77  e is less than w
5430: 68 61 74 20 77 65 20 63 75 72 72 65 6e 74 6c 79  hat we currently
5440: 20 77 61 6e 74 20 74 6f 0d 0a 20 20 20 20 20 20   want to..      
5450: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
5460: 20 20 20 74 72 61 63 65 2c 20 73 6b 69 70 20 69     trace, skip i
5470: 74 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t...            
5480: 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
5490: 20 20 20 20 20 20 20 20 69 66 20 28 28 74 72 61          if ((tra
54a0: 63 65 43 61 6c 6c 62 61 63 6b 20 21 3d 20 6e 75  ceCallback != nu
54b0: 6c 6c 29 20 26 26 0d 0a 20 20 20 20 20 20 20 20  ll) &&..        
54c0: 20 20 20 20 20 20 20 20 20 20 20 20 28 74 72 61              (tra
54d0: 63 65 50 72 69 6f 72 69 74 79 20 3e 3d 20 54 72  cePriority >= Tr
54e0: 61 63 65 50 72 69 6f 72 69 74 79 29 29 0d 0a 20  acePriority)).. 
54f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
5500: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
5510: 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
5520: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
5530: 20 4e 4f 54 45 3a 20 49 6e 76 6f 6b 65 20 74 68   NOTE: Invoke th
5540: 65 20 74 72 61 63 65 20 63 61 6c 6c 62 61 63 6b  e trace callback
5550: 20 77 69 74 68 20 74 68 65 20 66 6f 72 6d 61 74   with the format
5560: 74 65 64 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ted..           
5570: 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
5580: 20 20 6d 65 73 73 61 67 65 20 61 6e 64 20 74 68    message and th
5590: 65 20 63 61 74 65 67 6f 72 79 20 73 70 65 63 69  e category speci
55a0: 66 69 65 64 20 62 79 20 74 68 65 0d 0a 20 20 20  fied by the..   
55b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
55c0: 20 2f 2f 20 20 20 20 20 20 20 63 61 6c 6c 65 72   //       caller
55d0: 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
55e0: 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
55f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
5600: 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 66 6f 72  raceCallback(for
5610: 6d 61 74 74 65 64 2c 20 63 61 74 65 67 6f 72 79  matted, category
5620: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
5630: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
5640: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
5650: 6d 65 73 73 61 67 65 3b 0d 0a 20 20 20 20 20 20  message;..      
5660: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
5670: 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d       #endregion.
5680: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..    
5690: 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
56a0: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
56b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
56c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
56d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
56e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
56f0: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65  /....        #re
5700: 67 69 6f 6e 20 4d 6f 63 6b 52 65 67 69 73 74 72  gion MockRegistr
5710: 79 20 43 6c 61 73 73 0d 0a 20 20 20 20 20 20 20  y Class..       
5720: 20 70 72 69 76 61 74 65 20 73 65 61 6c 65 64 20   private sealed 
5730: 63 6c 61 73 73 20 4d 6f 63 6b 52 65 67 69 73 74  class MockRegist
5740: 72 79 20 3a 20 49 44 69 73 70 6f 73 61 62 6c 65  ry : IDisposable
5750: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
5760: 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e           #region
5770: 20 50 75 62 6c 69 63 20 43 6f 6e 73 74 72 75 63   Public Construc
5780: 74 6f 72 73 0d 0a 20 20 20 20 20 20 20 20 20 20  tors..          
5790: 20 20 70 75 62 6c 69 63 20 4d 6f 63 6b 52 65 67    public MockReg
57a0: 69 73 74 72 79 28 29 0d 0a 20 20 20 20 20 20 20  istry()..       
57b0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
57c0: 20 20 20 20 20 20 20 20 77 68 61 74 49 66 20 3d          whatIf =
57d0: 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20   true;..        
57e0: 20 20 20 20 20 20 20 20 72 65 61 64 4f 6e 6c 79          readOnly
57f0: 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20   = true;..      
5800: 20 20 20 20 20 20 20 20 20 20 73 61 66 65 20 3d            safe =
5810: 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20   true;..        
5820: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
5830: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
5840: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5850: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5860: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5870: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
5880: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 4d          public M
5890: 6f 63 6b 52 65 67 69 73 74 72 79 28 0d 0a 20 20  ockRegistry(..  
58a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f                bo
58b0: 6f 6c 20 77 68 61 74 49 66 0d 0a 20 20 20 20 20  ol whatIf..     
58c0: 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
58d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3a 20                : 
58e0: 74 68 69 73 28 29 0d 0a 20 20 20 20 20 20 20 20  this()..        
58f0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
5900: 20 20 20 20 20 20 20 74 68 69 73 2e 77 68 61 74         this.what
5910: 49 66 20 3d 20 77 68 61 74 49 66 3b 0d 0a 20 20  If = whatIf;..  
5920: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
5930: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
5940: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5950: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5960: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5970: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
5980: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
5990: 62 6c 69 63 20 4d 6f 63 6b 52 65 67 69 73 74 72  blic MockRegistr
59a0: 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y(..            
59b0: 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c      bool whatIf,
59c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
59d0: 20 20 62 6f 6f 6c 20 72 65 61 64 4f 6e 6c 79 0d    bool readOnly.
59e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
59f0: 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   )..            
5a00: 20 20 20 20 3a 20 74 68 69 73 28 77 68 61 74 49      : this(whatI
5a10: 66 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  f)..            
5a20: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
5a30: 20 20 20 74 68 69 73 2e 72 65 61 64 4f 6e 6c 79     this.readOnly
5a40: 20 3d 20 72 65 61 64 4f 6e 6c 79 3b 0d 0a 20 20   = readOnly;..  
5a50: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
5a60: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
5a70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5a80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5a90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5aa0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
5ab0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
5ac0: 62 6c 69 63 20 4d 6f 63 6b 52 65 67 69 73 74 72  blic MockRegistr
5ad0: 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y(..            
5ae0: 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c      bool whatIf,
5af0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
5b00: 20 20 62 6f 6f 6c 20 72 65 61 64 4f 6e 6c 79 2c    bool readOnly,
5b10: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
5b20: 20 20 62 6f 6f 6c 20 73 61 66 65 0d 0a 20 20 20    bool safe..   
5b30: 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a               )..
5b40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5b50: 3a 20 74 68 69 73 28 77 68 61 74 49 66 2c 20 72  : this(whatIf, r
5b60: 65 61 64 4f 6e 6c 79 29 0d 0a 20 20 20 20 20 20  eadOnly)..      
5b70: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
5b80: 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 73 61           this.sa
5b90: 66 65 20 3d 20 73 61 66 65 3b 0d 0a 20 20 20 20  fe = safe;..    
5ba0: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
5bb0: 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f         #endregio
5bc0: 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n....           
5bd0: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
5be0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5bf0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5c00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5c10: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
5c20: 20 20 20 20 23 72 65 67 69 6f 6e 20 50 75 62 6c      #region Publ
5c30: 69 63 20 50 72 6f 70 65 72 74 69 65 73 0d 0a 20  ic Properties.. 
5c40: 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
5c50: 74 65 20 62 6f 6f 6c 20 77 68 61 74 49 66 3b 0d  te bool whatIf;.
5c60: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
5c70: 6c 69 63 20 62 6f 6f 6c 20 57 68 61 74 49 66 0d  lic bool WhatIf.
5c80: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
5c90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5ca0: 67 65 74 20 7b 20 43 68 65 63 6b 44 69 73 70 6f  get { CheckDispo
5cb0: 73 65 64 28 29 3b 20 72 65 74 75 72 6e 20 77 68  sed(); return wh
5cc0: 61 74 49 66 3b 20 7d 0d 0a 20 20 20 20 20 20 20  atIf; }..       
5cd0: 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 43           set { C
5ce0: 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 20  heckDisposed(); 
5cf0: 77 68 61 74 49 66 20 3d 20 76 61 6c 75 65 3b 20  whatIf = value; 
5d00: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
5d10: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
5d20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5d30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5d40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5d50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5d60: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
5d70: 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20     private bool 
5d80: 72 65 61 64 4f 6e 6c 79 3b 0d 0a 20 20 20 20 20  readOnly;..     
5d90: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f         public bo
5da0: 6f 6c 20 52 65 61 64 4f 6e 6c 79 0d 0a 20 20 20  ol ReadOnly..   
5db0: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
5dc0: 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20              get 
5dd0: 7b 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28  { CheckDisposed(
5de0: 29 3b 20 72 65 74 75 72 6e 20 72 65 61 64 4f 6e  ); return readOn
5df0: 6c 79 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  ly; }..         
5e00: 20 20 20 20 20 20 20 73 65 74 20 7b 20 43 68 65         set { Che
5e10: 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 20 72 65  ckDisposed(); re
5e20: 61 64 4f 6e 6c 79 20 3d 20 76 61 6c 75 65 3b 20  adOnly = value; 
5e30: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
5e40: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
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 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5e70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5e80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5e90: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
5ea0: 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20     private bool 
5eb0: 73 61 66 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  safe;..         
5ec0: 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 53     public bool S
5ed0: 61 66 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  afe..           
5ee0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
5ef0: 20 20 20 20 67 65 74 20 7b 20 43 68 65 63 6b 44      get { CheckD
5f00: 69 73 70 6f 73 65 64 28 29 3b 20 72 65 74 75 72  isposed(); retur
5f10: 6e 20 73 61 66 65 3b 20 7d 0d 0a 20 20 20 20 20  n safe; }..     
5f20: 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b             set {
5f30: 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29   CheckDisposed()
5f40: 3b 20 73 61 66 65 20 3d 20 76 61 6c 75 65 3b 20  ; safe = value; 
5f50: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
5f60: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
5f70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5f80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5f90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5fa0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5fb0: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
5fc0: 20 20 20 70 72 69 76 61 74 65 20 4d 6f 63 6b 52     private MockR
5fd0: 65 67 69 73 74 72 79 4b 65 79 20 63 6c 61 73 73  egistryKey class
5fe0: 65 73 52 6f 6f 74 3b 0d 0a 20 20 20 20 20 20 20  esRoot;..       
5ff0: 20 20 20 20 20 70 75 62 6c 69 63 20 4d 6f 63 6b       public Mock
6000: 52 65 67 69 73 74 72 79 4b 65 79 20 43 6c 61 73  RegistryKey Clas
6010: 73 65 73 52 6f 6f 74 0d 0a 20 20 20 20 20 20 20  sesRoot..       
6020: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
6030: 20 20 20 20 20 20 20 20 67 65 74 0d 0a 20 20 20          get..   
6040: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
6050: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6060: 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65      CheckDispose
6070: 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  d();....        
6080: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
6090: 63 6c 61 73 73 65 73 52 6f 6f 74 20 3d 3d 20 6e  classesRoot == n
60a0: 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
60b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6c                cl
60c0: 61 73 73 65 73 52 6f 6f 74 20 3d 20 6e 65 77 20  assesRoot = new 
60d0: 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 28  MockRegistryKey(
60e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
60f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65                Re
6100: 67 69 73 74 72 79 2e 43 6c 61 73 73 65 73 52 6f  gistry.ClassesRo
6110: 6f 74 2c 20 77 68 61 74 49 66 2c 20 72 65 61 64  ot, whatIf, read
6120: 4f 6e 6c 79 2c 20 73 61 66 65 29 3b 0d 0a 0d 0a  Only, safe);....
6130: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6140: 20 20 20 20 72 65 74 75 72 6e 20 63 6c 61 73 73      return class
6150: 65 73 52 6f 6f 74 3b 0d 0a 20 20 20 20 20 20 20  esRoot;..       
6160: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
6170: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
6180: 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
6190: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
61a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
61b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
61c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
61d0: 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76              priv
61e0: 61 74 65 20 4d 6f 63 6b 52 65 67 69 73 74 72 79  ate MockRegistry
61f0: 4b 65 79 20 63 75 72 72 65 6e 74 43 6f 6e 66 69  Key currentConfi
6200: 67 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  g;..            
6210: 70 75 62 6c 69 63 20 4d 6f 63 6b 52 65 67 69 73  public MockRegis
6220: 74 72 79 4b 65 79 20 43 75 72 72 65 6e 74 43 6f  tryKey CurrentCo
6230: 6e 66 69 67 0d 0a 20 20 20 20 20 20 20 20 20 20  nfig..          
6240: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
6250: 20 20 20 20 20 67 65 74 0d 0a 20 20 20 20 20 20       get..      
6260: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
6270: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6280: 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29   CheckDisposed()
6290: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
62a0: 20 20 20 20 20 20 20 20 20 69 66 20 28 63 75 72           if (cur
62b0: 72 65 6e 74 43 6f 6e 66 69 67 20 3d 3d 20 6e 75  rentConfig == nu
62c0: 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
62d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 63 75 72               cur
62e0: 72 65 6e 74 43 6f 6e 66 69 67 20 3d 20 6e 65 77  rentConfig = new
62f0: 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79   MockRegistryKey
6300: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
6310: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52                 R
6320: 65 67 69 73 74 72 79 2e 43 75 72 72 65 6e 74 43  egistry.CurrentC
6330: 6f 6e 66 69 67 2c 20 77 68 61 74 49 66 2c 20 72  onfig, whatIf, r
6340: 65 61 64 4f 6e 6c 79 2c 20 73 61 66 65 29 3b 0d  eadOnly, safe);.
6350: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
6360: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 63 75         return cu
6370: 72 72 65 6e 74 43 6f 6e 66 69 67 3b 0d 0a 20 20  rrentConfig;..  
6380: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
6390: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
63a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
63b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
63c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
63d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
63e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
63f0: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
6400: 20 70 72 69 76 61 74 65 20 4d 6f 63 6b 52 65 67   private MockReg
6410: 69 73 74 72 79 4b 65 79 20 63 75 72 72 65 6e 74  istryKey current
6420: 55 73 65 72 3b 0d 0a 20 20 20 20 20 20 20 20 20  User;..         
6430: 20 20 20 70 75 62 6c 69 63 20 4d 6f 63 6b 52 65     public MockRe
6440: 67 69 73 74 72 79 4b 65 79 20 43 75 72 72 65 6e  gistryKey Curren
6450: 74 55 73 65 72 0d 0a 20 20 20 20 20 20 20 20 20  tUser..         
6460: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
6470: 20 20 20 20 20 20 67 65 74 0d 0a 20 20 20 20 20        get..     
6480: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
6490: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
64a0: 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28    CheckDisposed(
64b0: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
64c0: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 63 75            if (cu
64d0: 72 72 65 6e 74 55 73 65 72 20 3d 3d 20 6e 75 6c  rrentUser == nul
64e0: 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
64f0: 20 20 20 20 20 20 20 20 20 20 20 20 63 75 72 72              curr
6500: 65 6e 74 55 73 65 72 20 3d 20 6e 65 77 20 4d 6f  entUser = new Mo
6510: 63 6b 52 65 67 69 73 74 72 79 4b 65 79 28 0d 0a  ckRegistryKey(..
6520: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6530: 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69              Regi
6540: 73 74 72 79 2e 43 75 72 72 65 6e 74 55 73 65 72  stry.CurrentUser
6550: 2c 20 77 68 61 74 49 66 2c 20 72 65 61 64 4f 6e  , whatIf, readOn
6560: 6c 79 2c 20 73 61 66 65 29 3b 0d 0a 0d 0a 20 20  ly, safe);....  
6570: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6580: 20 20 72 65 74 75 72 6e 20 63 75 72 72 65 6e 74    return current
6590: 55 73 65 72 3b 0d 0a 20 20 20 20 20 20 20 20 20  User;..         
65a0: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
65b0: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
65c0: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
65d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
65e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
65f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6600: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
6610: 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
6620: 65 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65  e MockRegistryKe
6630: 79 20 64 79 6e 44 61 74 61 3b 0d 0a 20 20 20 20  y dynData;..    
6640: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 4d          public M
6650: 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 44  ockRegistryKey D
6660: 79 6e 44 61 74 61 0d 0a 20 20 20 20 20 20 20 20  ynData..        
6670: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
6680: 20 20 20 20 20 20 20 67 65 74 0d 0a 20 20 20 20         get..    
6690: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
66a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
66b0: 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64     CheckDisposed
66c0: 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ();....         
66d0: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 64             if (d
66e0: 79 6e 44 61 74 61 20 3d 3d 20 6e 75 6c 6c 29 0d  ynData == null).
66f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
6700: 20 20 20 20 20 20 20 20 20 64 79 6e 44 61 74 61           dynData
6710: 20 3d 20 6e 65 77 20 4d 6f 63 6b 52 65 67 69 73   = new MockRegis
6720: 74 72 79 4b 65 79 28 0d 0a 20 20 20 20 20 20 20  tryKey(..       
6730: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6740: 20 20 20 20 20 52 65 67 69 73 74 72 79 2e 44 79       Registry.Dy
6750: 6e 44 61 74 61 2c 20 77 68 61 74 49 66 2c 20 72  nData, whatIf, r
6760: 65 61 64 4f 6e 6c 79 2c 20 73 61 66 65 29 3b 0d  eadOnly, safe);.
6770: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
6780: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 64 79         return dy
6790: 6e 44 61 74 61 3b 0d 0a 20 20 20 20 20 20 20 20  nData;..        
67a0: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
67b0: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
67c0: 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f  ////////////////
67f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6800: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
6810: 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
6820: 74 65 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b  te MockRegistryK
6830: 65 79 20 6c 6f 63 61 6c 4d 61 63 68 69 6e 65 3b  ey localMachine;
6840: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
6850: 62 6c 69 63 20 4d 6f 63 6b 52 65 67 69 73 74 72  blic MockRegistr
6860: 79 4b 65 79 20 4c 6f 63 61 6c 4d 61 63 68 69 6e  yKey LocalMachin
6870: 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  e..            {
6880: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
6890: 20 20 67 65 74 0d 0a 20 20 20 20 20 20 20 20 20    get..         
68a0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
68b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43 68                Ch
68c0: 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a  eckDisposed();..
68d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
68e0: 20 20 20 20 20 20 69 66 20 28 6c 6f 63 61 6c 4d        if (localM
68f0: 61 63 68 69 6e 65 20 3d 3d 20 6e 75 6c 6c 29 0d  achine == null).
6900: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
6910: 20 20 20 20 20 20 20 20 20 6c 6f 63 61 6c 4d 61           localMa
6920: 63 68 69 6e 65 20 3d 20 6e 65 77 20 4d 6f 63 6b  chine = new Mock
6930: 52 65 67 69 73 74 72 79 4b 65 79 28 0d 0a 20 20  RegistryKey(..  
6940: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6950: 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74            Regist
6960: 72 79 2e 4c 6f 63 61 6c 4d 61 63 68 69 6e 65 2c  ry.LocalMachine,
6970: 20 77 68 61 74 49 66 2c 20 72 65 61 64 4f 6e 6c   whatIf, readOnl
6980: 79 2c 20 73 61 66 65 29 3b 0d 0a 0d 0a 20 20 20  y, safe);....   
6990: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
69a0: 20 72 65 74 75 72 6e 20 6c 6f 63 61 6c 4d 61 63   return localMac
69b0: 68 69 6e 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  hine;..         
69c0: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
69d0: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
69e0: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
69f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20  //////////....  
6a30: 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
6a40: 65 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65  e MockRegistryKe
6a50: 79 20 70 65 72 66 6f 72 6d 61 6e 63 65 44 61 74  y performanceDat
6a60: 61 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  a;..            
6a70: 70 75 62 6c 69 63 20 4d 6f 63 6b 52 65 67 69 73  public MockRegis
6a80: 74 72 79 4b 65 79 20 50 65 72 66 6f 72 6d 61 6e  tryKey Performan
6a90: 63 65 44 61 74 61 0d 0a 20 20 20 20 20 20 20 20  ceData..        
6aa0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
6ab0: 20 20 20 20 20 20 20 67 65 74 0d 0a 20 20 20 20         get..    
6ac0: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
6ad0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6ae0: 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64     CheckDisposed
6af0: 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ();....         
6b00: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 70             if (p
6b10: 65 72 66 6f 72 6d 61 6e 63 65 44 61 74 61 20 3d  erformanceData =
6b20: 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
6b30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6b40: 20 70 65 72 66 6f 72 6d 61 6e 63 65 44 61 74 61   performanceData
6b50: 20 3d 20 6e 65 77 20 4d 6f 63 6b 52 65 67 69 73   = new MockRegis
6b60: 74 72 79 4b 65 79 28 0d 0a 20 20 20 20 20 20 20  tryKey(..       
6b70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6b80: 20 20 20 20 20 52 65 67 69 73 74 72 79 2e 50 65       Registry.Pe
6b90: 72 66 6f 72 6d 61 6e 63 65 44 61 74 61 2c 20 77  rformanceData, w
6ba0: 68 61 74 49 66 2c 20 72 65 61 64 4f 6e 6c 79 2c  hatIf, readOnly,
6bb0: 20 73 61 66 65 29 3b 0d 0a 0d 0a 20 20 20 20 20   safe);....     
6bc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
6bd0: 65 74 75 72 6e 20 70 65 72 66 6f 72 6d 61 6e 63  eturn performanc
6be0: 65 44 61 74 61 3b 0d 0a 20 20 20 20 20 20 20 20  eData;..        
6bf0: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
6c00: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
6c10: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
6c20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6c30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
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 0d 0a 0d 0a 20  ///////////.... 
6c60: 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
6c70: 74 65 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b  te MockRegistryK
6c80: 65 79 20 75 73 65 72 73 3b 0d 0a 20 20 20 20 20  ey users;..     
6c90: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 4d 6f         public Mo
6ca0: 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 55 73  ckRegistryKey Us
6cb0: 65 72 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ers..           
6cc0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
6cd0: 20 20 20 20 67 65 74 0d 0a 20 20 20 20 20 20 20      get..       
6ce0: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
6cf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6d00: 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b  CheckDisposed();
6d10: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
6d20: 20 20 20 20 20 20 20 20 69 66 20 28 75 73 65 72          if (user
6d30: 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  s == null)..    
6d40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6d50: 20 20 20 20 75 73 65 72 73 20 3d 20 6e 65 77 20      users = new 
6d60: 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 28  MockRegistryKey(
6d70: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
6d80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65                Re
6d90: 67 69 73 74 72 79 2e 55 73 65 72 73 2c 20 77 68  gistry.Users, wh
6da0: 61 74 49 66 2c 20 72 65 61 64 4f 6e 6c 79 2c 20  atIf, readOnly, 
6db0: 73 61 66 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  safe);....      
6dc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
6dd0: 74 75 72 6e 20 75 73 65 72 73 3b 0d 0a 20 20 20  turn users;..   
6de0: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
6df0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
6e00: 20 20 20 20 20 20 20 20 20 20 20 23 65 6e 64 72             #endr
6e10: 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20  egion....       
6e20: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
6e30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6e40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6e50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6e60: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
6e70: 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20          #region 
6e80: 50 75 62 6c 69 63 20 22 52 65 67 69 73 74 72 79  Public "Registry
6e90: 22 20 4d 65 74 68 6f 64 73 0d 0a 20 20 20 20 20  " Methods..     
6ea0: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 6f 62         public ob
6eb0: 6a 65 63 74 20 47 65 74 56 61 6c 75 65 28 0d 0a  ject GetValue(..
6ec0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6ed0: 73 74 72 69 6e 67 20 6b 65 79 4e 61 6d 65 2c 0d  string keyName,.
6ee0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
6ef0: 20 73 74 72 69 6e 67 20 76 61 6c 75 65 4e 61 6d   string valueNam
6f00: 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
6f10: 20 20 20 20 6f 62 6a 65 63 74 20 64 65 66 61 75      object defau
6f20: 6c 74 56 61 6c 75 65 0d 0a 20 20 20 20 20 20 20  ltValue..       
6f30: 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
6f40: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
6f50: 20 20 20 20 20 20 20 20 20 20 20 43 68 65 63 6b             Check
6f60: 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20  Disposed();.... 
6f70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
6f80: 65 74 75 72 6e 20 52 65 67 69 73 74 72 79 2e 47  eturn Registry.G
6f90: 65 74 56 61 6c 75 65 28 6b 65 79 4e 61 6d 65 2c  etValue(keyName,
6fa0: 20 76 61 6c 75 65 4e 61 6d 65 2c 20 64 65 66 61   valueName, defa
6fb0: 75 6c 74 56 61 6c 75 65 29 3b 0d 0a 20 20 20 20  ultValue);..    
6fc0: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
6fd0: 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
6fe0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6ff0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7000: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7010: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
7020: 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
7030: 69 63 20 76 6f 69 64 20 53 65 74 56 61 6c 75 65  ic void SetValue
7040: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
7050: 20 20 20 73 74 72 69 6e 67 20 6b 65 79 4e 61 6d     string keyNam
7060: 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
7070: 20 20 20 20 73 74 72 69 6e 67 20 76 61 6c 75 65      string value
7080: 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  Name,..         
7090: 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 76 61         object va
70a0: 6c 75 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  lue..           
70b0: 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
70c0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
70d0: 20 20 20 20 20 20 20 43 68 65 63 6b 44 69 73 70         CheckDisp
70e0: 6f 73 65 64 28 29 3b 0d 0a 20 20 20 20 20 20 20  osed();..       
70f0: 20 20 20 20 20 20 20 20 20 43 68 65 63 6b 52 65           CheckRe
7100: 61 64 4f 6e 6c 79 28 29 3b 0d 0a 0d 0a 20 20 20  adOnly();....   
7110: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
7120: 28 21 77 68 61 74 49 66 29 0d 0a 20 20 20 20 20  (!whatIf)..     
7130: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52                 R
7140: 65 67 69 73 74 72 79 2e 53 65 74 56 61 6c 75 65  egistry.SetValue
7150: 28 6b 65 79 4e 61 6d 65 2c 20 76 61 6c 75 65 4e  (keyName, valueN
7160: 61 6d 65 2c 20 76 61 6c 75 65 29 3b 0d 0a 20 20  ame, value);..  
7170: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
7180: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
7190: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
71a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
71b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
71c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
71d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
71e0: 62 6c 69 63 20 76 6f 69 64 20 53 65 74 56 61 6c  blic void SetVal
71f0: 75 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue(..           
7200: 20 20 20 20 20 73 74 72 69 6e 67 20 6b 65 79 4e       string keyN
7210: 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ame,..          
7220: 20 20 20 20 20 20 73 74 72 69 6e 67 20 76 61 6c        string val
7230: 75 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20  ueName,..       
7240: 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20           object 
7250: 76 61 6c 75 65 2c 0d 0a 20 20 20 20 20 20 20 20  value,..        
7260: 20 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79          Registry
7270: 56 61 6c 75 65 4b 69 6e 64 20 76 61 6c 75 65 4b  ValueKind valueK
7280: 69 6e 64 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ind..           
7290: 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
72a0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
72b0: 20 20 20 20 20 20 20 43 68 65 63 6b 44 69 73 70         CheckDisp
72c0: 6f 73 65 64 28 29 3b 0d 0a 20 20 20 20 20 20 20  osed();..       
72d0: 20 20 20 20 20 20 20 20 20 43 68 65 63 6b 52 65           CheckRe
72e0: 61 64 4f 6e 6c 79 28 29 3b 0d 0a 0d 0a 20 20 20  adOnly();....   
72f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
7300: 28 21 77 68 61 74 49 66 29 0d 0a 20 20 20 20 20  (!whatIf)..     
7310: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52                 R
7320: 65 67 69 73 74 72 79 2e 53 65 74 56 61 6c 75 65  egistry.SetValue
7330: 28 6b 65 79 4e 61 6d 65 2c 20 76 61 6c 75 65 4e  (keyName, valueN
7340: 61 6d 65 2c 20 76 61 6c 75 65 2c 20 76 61 6c 75  ame, value, valu
7350: 65 4b 69 6e 64 29 3b 0d 0a 20 20 20 20 20 20 20  eKind);..       
7360: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
7370: 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
7380: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
7390: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
73a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
73b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
73c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
73d0: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
73e0: 20 23 72 65 67 69 6f 6e 20 50 72 69 76 61 74 65   #region Private
73f0: 20 4d 65 74 68 6f 64 73 0d 0a 20 20 20 20 20 20   Methods..      
7400: 20 20 20 20 20 20 70 72 69 76 61 74 65 20 76 6f        private vo
7410: 69 64 20 43 68 65 63 6b 52 65 61 64 4f 6e 6c 79  id CheckReadOnly
7420: 28 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ()..            
7430: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
7440: 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
7450: 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20         // NOTE: 
7460: 49 6e 20 22 72 65 61 64 2d 6f 6e 6c 79 22 20 6d  In "read-only" m
7470: 6f 64 65 2c 20 77 65 20 64 69 73 61 6c 6c 6f 77  ode, we disallow
7480: 20 61 6c 6c 20 77 72 69 74 65 20 61 63 63 65 73   all write acces
7490: 73 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  s...            
74a0: 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
74b0: 20 20 20 20 20 20 20 20 69 66 20 28 21 72 65 61          if (!rea
74c0: 64 4f 6e 6c 79 29 0d 0a 20 20 20 20 20 20 20 20  dOnly)..        
74d0: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
74e0: 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  rn;....         
74f0: 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77         throw new
7500: 20 49 6e 76 61 6c 69 64 4f 70 65 72 61 74 69 6f   InvalidOperatio
7510: 6e 45 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 20  nException();.. 
7520: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
7530: 20 20 20 20 20 20 20 20 20 20 23 65 6e 64 72 65            #endre
7540: 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20  gion....        
7550: 20 20 20 20 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20  ///////....     
75a0: 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 49         #region I
75b0: 44 69 73 70 6f 73 61 62 6c 65 20 22 50 61 74 74  Disposable "Patt
75c0: 65 72 6e 22 20 4d 65 6d 62 65 72 73 0d 0a 20 20  ern" Members..  
75d0: 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
75e0: 65 20 62 6f 6f 6c 20 64 69 73 70 6f 73 65 64 3b  e bool disposed;
75f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
7600: 69 76 61 74 65 20 76 6f 69 64 20 43 68 65 63 6b  ivate void Check
7610: 44 69 73 70 6f 73 65 64 28 29 20 2f 2a 20 74 68  Disposed() /* th
7620: 72 6f 77 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20  row */..        
7630: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
7640: 20 20 20 20 20 20 20 69 66 20 28 21 64 69 73 70         if (!disp
7650: 6f 73 65 64 29 0d 0a 20 20 20 20 20 20 20 20 20  osed)..         
7660: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
7670: 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  n;....          
7680: 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20        throw new 
7690: 4f 62 6a 65 63 74 44 69 73 70 6f 73 65 64 45 78  ObjectDisposedEx
76a0: 63 65 70 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20  ception(..      
76b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 79                ty
76c0: 70 65 6f 66 28 4d 6f 63 6b 52 65 67 69 73 74 72  peof(MockRegistr
76d0: 79 29 2e 4e 61 6d 65 29 3b 0d 0a 20 20 20 20 20  y).Name);..     
76e0: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
76f0: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
7700: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7710: 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20  ///////////.... 
7740: 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
7750: 74 65 20 2f 2a 20 70 72 6f 74 65 63 74 65 64 20  te /* protected 
7760: 76 69 72 74 75 61 6c 20 2a 2f 20 76 6f 69 64 20  virtual */ void 
7770: 44 69 73 70 6f 73 65 28 0d 0a 20 20 20 20 20 20  Dispose(..      
7780: 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 64            bool d
7790: 69 73 70 6f 73 69 6e 67 0d 0a 20 20 20 20 20 20  isposing..      
77a0: 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
77b0: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
77c0: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
77d0: 21 64 69 73 70 6f 73 65 64 29 0d 0a 20 20 20 20  !disposed)..    
77e0: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
77f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7800: 20 20 20 69 66 20 28 64 69 73 70 6f 73 69 6e 67     if (disposing
7810: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
7820: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
7830: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7840: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
7850: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7860: 2f 2f 2f 2f 2f 2f 0d 0a 20 20 20 20 20 20 20 20  //////..        
7870: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7880: 2f 2f 20 64 69 73 70 6f 73 65 20 6d 61 6e 61 67  // dispose manag
7890: 65 64 20 72 65 73 6f 75 72 63 65 73 20 68 65 72  ed resources her
78a0: 65 2e 2e 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  e.....          
78b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
78c0: 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
78f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
7900: 20 28 63 6c 61 73 73 65 73 52 6f 6f 74 20 21 3d   (classesRoot !=
7910: 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
7920: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7930: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
7940: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
7950: 6c 61 73 73 65 73 52 6f 6f 74 2e 43 6c 6f 73 65  lassesRoot.Close
7960: 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ();..           
7970: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7980: 20 63 6c 61 73 73 65 73 52 6f 6f 74 20 3d 20 6e   classesRoot = n
7990: 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ull;..          
79a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
79b0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
79c0: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 63             if (c
79d0: 75 72 72 65 6e 74 43 6f 6e 66 69 67 20 21 3d 20  urrentConfig != 
79e0: 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
79f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
7a00: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
7a10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 75                cu
7a20: 72 72 65 6e 74 43 6f 6e 66 69 67 2e 43 6c 6f 73  rrentConfig.Clos
7a30: 65 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  e();..          
7a40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7a50: 20 20 63 75 72 72 65 6e 74 43 6f 6e 66 69 67 20    currentConfig 
7a60: 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20  = null;..       
7a70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7a80: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
7a90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
7aa0: 20 28 63 75 72 72 65 6e 74 55 73 65 72 20 21 3d   (currentUser !=
7ab0: 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
7ac0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7ad0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
7ae0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
7af0: 75 72 72 65 6e 74 55 73 65 72 2e 43 6c 6f 73 65  urrentUser.Close
7b00: 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ();..           
7b10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7b20: 20 63 75 72 72 65 6e 74 55 73 65 72 20 3d 20 6e   currentUser = n
7b30: 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ull;..          
7b40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
7b50: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
7b60: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 64             if (d
7b70: 79 6e 44 61 74 61 20 21 3d 20 6e 75 6c 6c 29 0d  ynData != null).
7b80: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
7b90: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
7ba0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7bb0: 20 20 20 20 20 20 20 20 64 79 6e 44 61 74 61 2e          dynData.
7bc0: 43 6c 6f 73 65 28 29 3b 0d 0a 20 20 20 20 20 20  Close();..      
7bd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7be0: 20 20 20 20 20 20 64 79 6e 44 61 74 61 20 3d 20        dynData = 
7bf0: 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20  null;..         
7c00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
7c10: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
7c20: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
7c30: 6c 6f 63 61 6c 4d 61 63 68 69 6e 65 20 21 3d 20  localMachine != 
7c40: 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
7c50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
7c60: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
7c70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6c 6f                lo
7c80: 63 61 6c 4d 61 63 68 69 6e 65 2e 43 6c 6f 73 65  calMachine.Close
7c90: 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ();..           
7ca0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7cb0: 20 6c 6f 63 61 6c 4d 61 63 68 69 6e 65 20 3d 20   localMachine = 
7cc0: 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20  null;..         
7cd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
7ce0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
7cf0: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
7d00: 70 65 72 66 6f 72 6d 61 6e 63 65 44 61 74 61 20  performanceData 
7d10: 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  != null)..      
7d20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7d30: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
7d40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7d50: 20 70 65 72 66 6f 72 6d 61 6e 63 65 44 61 74 61   performanceData
7d60: 2e 43 6c 6f 73 65 28 29 3b 0d 0a 20 20 20 20 20  .Close();..     
7d70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7d80: 20 20 20 20 20 20 20 70 65 72 66 6f 72 6d 61 6e         performan
7d90: 63 65 44 61 74 61 20 3d 20 6e 75 6c 6c 3b 0d 0a  ceData = null;..
7da0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7db0: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
7dc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7dd0: 20 20 20 20 20 69 66 20 28 75 73 65 72 73 20 21       if (users !
7de0: 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
7df0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7e00: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
7e10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7e20: 75 73 65 72 73 2e 43 6c 6f 73 65 28 29 3b 0d 0a  users.Close();..
7e30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7e40: 20 20 20 20 20 20 20 20 20 20 20 20 75 73 65 72              user
7e50: 73 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20  s = null;..     
7e60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7e70: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
7e80: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
7e90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7ea0: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
7eb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7ec0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 20 20 20 20 20  /////////..     
7ed0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
7ee0: 2f 20 72 65 6c 65 61 73 65 20 75 6e 6d 61 6e 61  / release unmana
7ef0: 67 65 64 20 72 65 73 6f 75 72 63 65 73 20 68 65  ged resources he
7f00: 72 65 2e 2e 2e 0d 0a 20 20 20 20 20 20 20 20 20  re.....         
7f10: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
7f20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7f30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7f40: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
7f50: 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
7f60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7f70: 20 2f 2f 20 4e 4f 54 45 3a 20 54 68 69 73 20 6f   // NOTE: This o
7f80: 62 6a 65 63 74 20 69 73 20 6e 6f 77 20 64 69 73  bject is now dis
7f90: 70 6f 73 65 64 2e 0d 0a 20 20 20 20 20 20 20 20  posed...        
7fa0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
7fb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7fc0: 20 20 20 20 64 69 73 70 6f 73 65 64 20 3d 20 74      disposed = t
7fd0: 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  rue;..          
7fe0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
7ff0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
8000: 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
8010: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
8020: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8030: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8040: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8050: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8060: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
8070: 20 23 72 65 67 69 6f 6e 20 49 44 69 73 70 6f 73   #region IDispos
8080: 61 62 6c 65 20 4d 65 6d 62 65 72 73 0d 0a 20 20  able Members..  
8090: 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
80a0: 20 76 6f 69 64 20 44 69 73 70 6f 73 65 28 29 0d   void Dispose().
80b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
80c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
80d0: 44 69 73 70 6f 73 65 28 74 72 75 65 29 3b 0d 0a  Dispose(true);..
80e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
80f0: 47 43 2e 53 75 70 70 72 65 73 73 46 69 6e 61 6c  GC.SuppressFinal
8100: 69 7a 65 28 74 68 69 73 29 3b 0d 0a 20 20 20 20  ize(this);..    
8110: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
8120: 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f         #endregio
8130: 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n....           
8140: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
8150: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8160: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8170: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8180: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
8190: 20 20 20 20 23 72 65 67 69 6f 6e 20 44 65 73 74      #region Dest
81a0: 72 75 63 74 6f 72 0d 0a 20 20 20 20 20 20 20 20  ructor..        
81b0: 20 20 20 20 7e 4d 6f 63 6b 52 65 67 69 73 74 72      ~MockRegistr
81c0: 79 28 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  y()..           
81d0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
81e0: 20 20 20 20 44 69 73 70 6f 73 65 28 66 61 6c 73      Dispose(fals
81f0: 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e);..           
8200: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
8210: 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 20 20 20 20  #endregion..    
8220: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23      }..        #
8230: 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20  endregion....   
8240: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
8250: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8260: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8270: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8280: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
8290: 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20          #region 
82a0: 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20  MockRegistryKey 
82b0: 43 6c 61 73 73 0d 0a 20 20 20 20 20 20 20 20 69  Class..        i
82c0: 6e 74 65 72 6e 61 6c 20 73 65 61 6c 65 64 20 63  nternal sealed c
82d0: 6c 61 73 73 20 4d 6f 63 6b 52 65 67 69 73 74 72  lass MockRegistr
82e0: 79 4b 65 79 20 3a 20 49 44 69 73 70 6f 73 61 62  yKey : IDisposab
82f0: 6c 65 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  le..        {.. 
8300: 20 20 20 20 20 20 20 20 20 20 20 23 72 65 67 69             #regi
8310: 6f 6e 20 50 72 69 76 61 74 65 20 43 6f 6e 73 74  on Private Const
8320: 72 75 63 74 6f 72 73 0d 0a 20 20 20 20 20 20 20  ructors..       
8330: 20 20 20 20 20 70 72 69 76 61 74 65 20 4d 6f 63       private Moc
8340: 6b 52 65 67 69 73 74 72 79 4b 65 79 28 29 0d 0a  kRegistryKey()..
8350: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
8360: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 77                 w
8370: 68 61 74 49 66 20 3d 20 74 72 75 65 3b 0d 0a 20  hatIf = true;.. 
8380: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
8390: 65 61 64 4f 6e 6c 79 20 3d 20 74 72 75 65 3b 0d  eadOnly = true;.
83a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
83b0: 20 73 61 66 65 20 3d 20 74 72 75 65 3b 0d 0a 20   safe = true;.. 
83c0: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
83d0: 20 20 20 20 20 20 20 20 20 20 23 65 6e 64 72 65            #endre
83e0: 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20  gion....        
83f0: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
8400: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8410: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8420: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8430: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
8440: 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50         #region P
8450: 75 62 6c 69 63 20 43 6f 6e 73 74 72 75 63 74 6f  ublic Constructo
8460: 72 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  rs..            
8470: 70 75 62 6c 69 63 20 4d 6f 63 6b 52 65 67 69 73  public MockRegis
8480: 74 72 79 4b 65 79 28 0d 0a 20 20 20 20 20 20 20  tryKey(..       
8490: 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74 72           Registr
84a0: 79 4b 65 79 20 6b 65 79 0d 0a 20 20 20 20 20 20  yKey key..      
84b0: 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
84c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 3a 20 74               : t
84d0: 68 69 73 28 29 0d 0a 20 20 20 20 20 20 20 20 20  his()..         
84e0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
84f0: 20 20 20 20 20 20 74 68 69 73 2e 6b 65 79 20 3d        this.key =
8500: 20 6b 65 79 3b 0d 0a 20 20 20 20 20 20 20 20 20   key;..         
8510: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
8520: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
8530: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8540: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8550: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8560: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
8570: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 4d 6f         public Mo
8580: 63 6b 52 65 67 69 73 74 72 79 4b 65 79 28 0d 0a  ckRegistryKey(..
8590: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
85a0: 52 65 67 69 73 74 72 79 4b 65 79 20 6b 65 79 2c  RegistryKey key,
85b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
85c0: 20 20 73 74 72 69 6e 67 20 73 75 62 4b 65 79 4e    string subKeyN
85d0: 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ame..           
85e0: 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
85f0: 20 20 20 20 20 20 20 20 3a 20 74 68 69 73 28 6b          : this(k
8600: 65 79 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ey)..           
8610: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
8620: 20 20 20 20 74 68 69 73 2e 73 75 62 4b 65 79 4e      this.subKeyN
8630: 61 6d 65 20 3d 20 73 75 62 4b 65 79 4e 61 6d 65  ame = subKeyName
8640: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
8650: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8690: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
86a0: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
86b0: 20 20 20 70 75 62 6c 69 63 20 4d 6f 63 6b 52 65     public MockRe
86c0: 67 69 73 74 72 79 4b 65 79 28 0d 0a 20 20 20 20  gistryKey(..    
86d0: 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69              Regi
86e0: 73 74 72 79 4b 65 79 20 6b 65 79 2c 0d 0a 20 20  stryKey key,..  
86f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
8700: 72 69 6e 67 20 73 75 62 4b 65 79 4e 61 6d 65 2c  ring subKeyName,
8710: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
8720: 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 0d 0a 20    bool whatIf.. 
8730: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29                 )
8740: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
8750: 20 20 3a 20 74 68 69 73 28 6b 65 79 2c 20 73 75    : this(key, su
8760: 62 4b 65 79 4e 61 6d 65 29 0d 0a 20 20 20 20 20  bKeyName)..     
8770: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
8780: 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 77            this.w
8790: 68 61 74 49 66 20 3d 20 77 68 61 74 49 66 3b 0d  hatIf = whatIf;.
87a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
87b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
87c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
87d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
87e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
87f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8800: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
8810: 20 70 75 62 6c 69 63 20 4d 6f 63 6b 52 65 67 69   public MockRegi
8820: 73 74 72 79 4b 65 79 28 0d 0a 20 20 20 20 20 20  stryKey(..      
8830: 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74            Regist
8840: 72 79 4b 65 79 20 6b 65 79 2c 0d 0a 20 20 20 20  ryKey key,..    
8850: 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
8860: 6e 67 20 73 75 62 4b 65 79 4e 61 6d 65 2c 0d 0a  ng subKeyName,..
8870: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8880: 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20  bool whatIf,..  
8890: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f                bo
88a0: 6f 6c 20 72 65 61 64 4f 6e 6c 79 0d 0a 20 20 20  ol readOnly..   
88b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a               )..
88c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
88d0: 3a 20 74 68 69 73 28 6b 65 79 2c 20 73 75 62 4b  : this(key, subK
88e0: 65 79 4e 61 6d 65 2c 20 77 68 61 74 49 66 29 0d  eyName, whatIf).
88f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
8900: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8910: 74 68 69 73 2e 72 65 61 64 4f 6e 6c 79 20 3d 20  this.readOnly = 
8920: 72 65 61 64 4f 6e 6c 79 3b 0d 0a 20 20 20 20 20  readOnly;..     
8930: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
8940: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
8950: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8960: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8970: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8980: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
8990: 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
89a0: 63 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65  c MockRegistryKe
89b0: 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y(..            
89c0: 20 20 20 20 52 65 67 69 73 74 72 79 4b 65 79 20      RegistryKey 
89d0: 6b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  key,..          
89e0: 20 20 20 20 20 20 73 74 72 69 6e 67 20 73 75 62        string sub
89f0: 4b 65 79 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20  KeyName,..      
8a00: 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77            bool w
8a10: 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20  hatIf,..        
8a20: 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 72 65 61          bool rea
8a30: 64 4f 6e 6c 79 2c 0d 0a 20 20 20 20 20 20 20 20  dOnly,..        
8a40: 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 73 61 66          bool saf
8a50: 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e..             
8a60: 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20     )..          
8a70: 20 20 20 20 20 20 3a 20 74 68 69 73 28 6b 65 79        : this(key
8a80: 2c 20 73 75 62 4b 65 79 4e 61 6d 65 2c 20 77 68  , subKeyName, wh
8a90: 61 74 49 66 2c 20 72 65 61 64 4f 6e 6c 79 29 0d  atIf, readOnly).
8aa0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
8ab0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8ac0: 74 68 69 73 2e 73 61 66 65 20 3d 20 73 61 66 65  this.safe = safe
8ad0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
8ae0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
8af0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8b00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8b10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8b20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8b30: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
8b40: 20 20 20 70 75 62 6c 69 63 20 4d 6f 63 6b 52 65     public MockRe
8b50: 67 69 73 74 72 79 4b 65 79 28 0d 0a 20 20 20 20  gistryKey(..    
8b60: 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69              Regi
8b70: 73 74 72 79 4b 65 79 20 6b 65 79 2c 0d 0a 20 20  stryKey key,..  
8b80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f                bo
8b90: 6f 6c 20 77 68 61 74 49 66 0d 0a 20 20 20 20 20  ol whatIf..     
8ba0: 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
8bb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3a 20                : 
8bc0: 74 68 69 73 28 6b 65 79 2c 20 6e 75 6c 6c 2c 20  this(key, null, 
8bd0: 77 68 61 74 49 66 29 0d 0a 20 20 20 20 20 20 20  whatIf)..       
8be0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
8bf0: 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f          // do no
8c00: 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20  thing...        
8c10: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
8c20: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
8c30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8c40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8c50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8c60: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
8c70: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 4d          public M
8c80: 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 28 0d  ockRegistryKey(.
8c90: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
8ca0: 20 52 65 67 69 73 74 72 79 4b 65 79 20 6b 65 79   RegistryKey key
8cb0: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
8cc0: 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d     bool whatIf,.
8cd0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
8ce0: 20 62 6f 6f 6c 20 72 65 61 64 4f 6e 6c 79 0d 0a   bool readOnly..
8cf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8d00: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
8d10: 20 20 20 3a 20 74 68 69 73 28 6b 65 79 2c 20 6e     : this(key, n
8d20: 75 6c 6c 2c 20 77 68 61 74 49 66 2c 20 72 65 61  ull, whatIf, rea
8d30: 64 4f 6e 6c 79 29 0d 0a 20 20 20 20 20 20 20 20  dOnly)..        
8d40: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
8d50: 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74         // do not
8d60: 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 20  hing...         
8d70: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
8d80: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
8d90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8da0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8db0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8dc0: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
8dd0: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 4d 6f         public Mo
8de0: 63 6b 52 65 67 69 73 74 72 79 4b 65 79 28 0d 0a  ckRegistryKey(..
8df0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8e00: 52 65 67 69 73 74 72 79 4b 65 79 20 6b 65 79 2c  RegistryKey key,
8e10: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
8e20: 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a    bool whatIf,..
8e30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8e40: 62 6f 6f 6c 20 72 65 61 64 4f 6e 6c 79 2c 0d 0a  bool readOnly,..
8e50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8e60: 62 6f 6f 6c 20 73 61 66 65 0d 0a 20 20 20 20 20  bool safe..     
8e70: 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
8e80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3a 20                : 
8e90: 74 68 69 73 28 6b 65 79 2c 20 6e 75 6c 6c 2c 20  this(key, null, 
8ea0: 77 68 61 74 49 66 2c 20 72 65 61 64 4f 6e 6c 79  whatIf, readOnly
8eb0: 2c 20 73 61 66 65 29 0d 0a 20 20 20 20 20 20 20  , safe)..       
8ec0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
8ed0: 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f          // do no
8ee0: 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20  thing...        
8ef0: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
8f00: 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
8f10: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
8f20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8f30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8f40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8f50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8f60: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
8f70: 23 72 65 67 69 6f 6e 20 50 75 62 6c 69 63 20 4d  #region Public M
8f80: 65 74 68 6f 64 73 0d 0a 20 20 20 20 20 20 20 20  ethods..        
8f90: 20 20 20 20 70 75 62 6c 69 63 20 76 6f 69 64 20      public void 
8fa0: 43 6c 6f 73 65 28 29 0d 0a 20 20 20 20 20 20 20  Close()..       
8fb0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
8fc0: 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
8fd0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e              // N
8fe0: 4f 54 45 3a 20 4e 6f 20 64 69 73 70 6f 73 65 64  OTE: No disposed
8ff0: 20 63 68 65 63 6b 20 68 65 72 65 20 62 65 63 61   check here beca
9000: 75 73 65 20 63 61 6c 6c 69 6e 67 20 74 68 69 73  use calling this
9010: 20 6d 65 74 68 6f 64 0d 0a 20 20 20 20 20 20 20   method..       
9020: 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
9030: 20 20 73 68 6f 75 6c 64 20 62 65 20 6a 75 73 74    should be just
9040: 20 6c 69 6b 65 20 63 61 6c 6c 69 6e 67 20 44 69   like calling Di
9050: 73 70 6f 73 65 2e 0d 0a 20 20 20 20 20 20 20 20  spose...        
9060: 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
9070: 20 20 20 20 20 20 20 20 20 20 20 20 44 69 73 70              Disp
9080: 6f 73 65 28 74 72 75 65 29 3b 0d 0a 20 20 20 20  ose(true);..    
9090: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
90a0: 20 20 20 20 20 20 20 20 20 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 2f  ////////////////
90d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
90e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
90f0: 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
9100: 69 63 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b  ic MockRegistryK
9110: 65 79 20 43 72 65 61 74 65 53 75 62 4b 65 79 28  ey CreateSubKey(
9120: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
9130: 20 20 73 74 72 69 6e 67 20 73 75 62 4b 65 79 4e    string subKeyN
9140: 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ame..           
9150: 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
9160: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
9170: 20 20 20 20 20 20 20 43 68 65 63 6b 44 69 73 70         CheckDisp
9180: 6f 73 65 64 28 29 3b 0d 0a 20 20 20 20 20 20 20  osed();..       
9190: 20 20 20 20 20 20 20 20 20 43 68 65 63 6b 52 65           CheckRe
91a0: 61 64 4f 6e 6c 79 28 29 3b 0d 0a 0d 0a 20 20 20  adOnly();....   
91b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
91c0: 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  (key == null).. 
91d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
91e0: 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d     return null;.
91f0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
9200: 20 20 20 69 66 20 28 77 68 61 74 49 66 29 0d 0a     if (whatIf)..
9210: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9220: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
9230: 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
9240: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
9250: 2f 20 48 41 43 4b 3a 20 41 74 74 65 6d 70 74 20  / HACK: Attempt 
9260: 74 6f 20 6f 70 65 6e 20 74 68 65 20 73 70 65 63  to open the spec
9270: 69 66 69 65 64 20 73 75 62 2d 6b 65 79 2e 20 20  ified sub-key.  
9280: 49 66 20 74 68 69 73 0d 0a 20 20 20 20 20 20 20  If this..       
9290: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
92a0: 20 20 20 20 20 20 66 61 69 6c 73 2c 20 77 65 20        fails, we 
92b0: 77 69 6c 6c 20 73 69 6d 70 6c 79 20 72 65 74 75  will simply retu
92c0: 72 6e 20 74 68 65 20 77 72 61 70 70 65 64 20 72  rn the wrapped r
92d0: 6f 6f 74 20 6b 65 79 0d 0a 20 20 20 20 20 20 20  oot key..       
92e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
92f0: 20 20 20 20 20 20 69 74 73 65 6c 66 20 73 69 6e        itself sin
9300: 63 65 20 6e 6f 20 77 72 69 74 65 73 20 61 72 65  ce no writes are
9310: 20 61 6c 6c 6f 77 65 64 20 69 6e 20 22 77 68 61   allowed in "wha
9320: 74 2d 69 66 22 0d 0a 20 20 20 20 20 20 20 20 20  t-if"..         
9330: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
9340: 20 20 20 20 6d 6f 64 65 20 61 6e 79 68 6f 77 2e      mode anyhow.
9350: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
9360: 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
9370: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65                Re
9380: 67 69 73 74 72 79 4b 65 79 20 73 75 62 4b 65 79  gistryKey subKey
9390: 20 3d 20 6b 65 79 2e 4f 70 65 6e 53 75 62 4b 65   = key.OpenSubKe
93a0: 79 28 73 75 62 4b 65 79 4e 61 6d 65 29 3b 0d 0a  y(subKeyName);..
93b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
93c0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 28 73 75        return (su
93d0: 62 4b 65 79 20 21 3d 20 6e 75 6c 6c 29 20 3f 0d  bKey != null) ?.
93e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
93f0: 20 20 20 20 20 20 20 20 20 6e 65 77 20 4d 6f 63           new Moc
9400: 6b 52 65 67 69 73 74 72 79 4b 65 79 28 0d 0a 20  kRegistryKey(.. 
9410: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9420: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
9430: 75 62 4b 65 79 2c 20 77 68 61 74 49 66 2c 20 72  ubKey, whatIf, r
9440: 65 61 64 4f 6e 6c 79 2c 20 73 61 66 65 29 20 3a  eadOnly, safe) :
9450: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
9460: 20 20 20 20 20 20 20 20 20 20 6e 65 77 20 4d 6f            new Mo
9470: 63 6b 52 65 67 69 73 74 72 79 4b 65 79 28 0d 0a  ckRegistryKey(..
9480: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9490: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
94a0: 6b 65 79 2c 20 73 75 62 4b 65 79 4e 61 6d 65 2c  key, subKeyName,
94b0: 20 77 68 61 74 49 66 2c 20 72 65 61 64 4f 6e 6c   whatIf, readOnl
94c0: 79 2c 20 73 61 66 65 29 3b 0d 0a 20 20 20 20 20  y, safe);..     
94d0: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
94e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c                el
94f0: 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  se..            
9500: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
9510: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
9520: 6e 20 6e 65 77 20 4d 6f 63 6b 52 65 67 69 73 74  n new MockRegist
9530: 72 79 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20  ryKey(..        
9540: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9550: 6b 65 79 2e 43 72 65 61 74 65 53 75 62 4b 65 79  key.CreateSubKey
9560: 28 73 75 62 4b 65 79 4e 61 6d 65 29 2c 20 77 68  (subKeyName), wh
9570: 61 74 49 66 2c 20 72 65 61 64 4f 6e 6c 79 2c 20  atIf, readOnly, 
9580: 73 61 66 65 29 3b 0d 0a 20 20 20 20 20 20 20 20  safe);..        
9590: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
95a0: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
95b0: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
95c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
95d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
95e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
95f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
9600: 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
9610: 63 20 76 6f 69 64 20 44 65 6c 65 74 65 53 75 62  c void DeleteSub
9620: 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20  Key(..          
9630: 20 20 20 20 20 20 73 74 72 69 6e 67 20 73 75 62        string sub
9640: 4b 65 79 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20  KeyName,..      
9650: 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 74            bool t
9660: 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 0d 0a 20  hrowOnMissing.. 
9670: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29                 )
9680: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
9690: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
96a0: 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29   CheckDisposed()
96b0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
96c0: 20 20 20 43 68 65 63 6b 52 65 61 64 4f 6e 6c 79     CheckReadOnly
96d0: 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ();....         
96e0: 20 20 20 20 20 20 20 69 66 20 28 6b 65 79 20 3d         if (key =
96f0: 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
9700: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
9710: 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  urn;....        
9720: 20 20 20 20 20 20 20 20 69 66 20 28 21 77 68 61          if (!wha
9730: 74 49 66 29 0d 0a 20 20 20 20 20 20 20 20 20 20  tIf)..          
9740: 20 20 20 20 20 20 20 20 20 20 6b 65 79 2e 44 65            key.De
9750: 6c 65 74 65 53 75 62 4b 65 79 28 73 75 62 4b 65  leteSubKey(subKe
9760: 79 4e 61 6d 65 2c 20 74 68 72 6f 77 4f 6e 4d 69  yName, throwOnMi
9770: 73 73 69 6e 67 29 3b 0d 0a 20 20 20 20 20 20 20  ssing);..       
9780: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
9790: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
97a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
97b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
97c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
97d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
97e0: 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
97f0: 76 6f 69 64 20 44 65 6c 65 74 65 53 75 62 4b 65  void DeleteSubKe
9800: 79 54 72 65 65 28 0d 0a 20 20 20 20 20 20 20 20  yTree(..        
9810: 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 73          string s
9820: 75 62 4b 65 79 4e 61 6d 65 0d 0a 20 20 20 20 20  ubKeyName..     
9830: 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
9840: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
9850: 20 20 20 20 20 20 20 20 20 20 20 20 20 43 68 65               Che
9860: 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 20  ckDisposed();.. 
9870: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43                 C
9880: 68 65 63 6b 52 65 61 64 4f 6e 6c 79 28 29 3b 0d  heckReadOnly();.
9890: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
98a0: 20 20 20 69 66 20 28 6b 65 79 20 3d 3d 20 6e 75     if (key == nu
98b0: 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
98c0: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 3b           return;
98d0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
98e0: 20 20 20 20 69 66 20 28 21 77 68 61 74 49 66 29      if (!whatIf)
98f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
9900: 20 20 20 20 20 20 6b 65 79 2e 44 65 6c 65 74 65        key.Delete
9910: 53 75 62 4b 65 79 54 72 65 65 28 73 75 62 4b 65  SubKeyTree(subKe
9920: 79 4e 61 6d 65 29 3b 0d 0a 20 20 20 20 20 20 20  yName);..       
9930: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
9940: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
9950: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9960: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9970: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9980: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
9990: 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
99a0: 76 6f 69 64 20 44 65 6c 65 74 65 56 61 6c 75 65  void DeleteValue
99b0: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
99c0: 20 20 20 73 74 72 69 6e 67 20 6e 61 6d 65 2c 0d     string name,.
99d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
99e0: 20 62 6f 6f 6c 20 74 68 72 6f 77 4f 6e 4d 69 73   bool throwOnMis
99f0: 73 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 20 20  sing..          
9a00: 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
9a10: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
9a20: 20 20 20 20 20 20 20 20 43 68 65 63 6b 44 69 73          CheckDis
9a30: 70 6f 73 65 64 28 29 3b 0d 0a 20 20 20 20 20 20  posed();..      
9a40: 20 20 20 20 20 20 20 20 20 20 43 68 65 63 6b 52            CheckR
9a50: 65 61 64 4f 6e 6c 79 28 29 3b 0d 0a 0d 0a 20 20  eadOnly();....  
9a60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
9a70: 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a   (key == null)..
9a80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9a90: 20 20 20 20 72 65 74 75 72 6e 3b 0d 0a 0d 0a 20      return;.... 
9aa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
9ab0: 66 20 28 21 77 68 61 74 49 66 29 0d 0a 20 20 20  f (!whatIf)..   
9ac0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9ad0: 20 6b 65 79 2e 44 65 6c 65 74 65 56 61 6c 75 65   key.DeleteValue
9ae0: 28 6e 61 6d 65 2c 20 74 68 72 6f 77 4f 6e 4d 69  (name, throwOnMi
9af0: 73 73 69 6e 67 29 3b 0d 0a 20 20 20 20 20 20 20  ssing);..       
9b00: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
9b10: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
9b20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9b30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9b40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9b50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
9b60: 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
9b70: 73 74 72 69 6e 67 5b 5d 20 47 65 74 53 75 62 4b  string[] GetSubK
9b80: 65 79 4e 61 6d 65 73 28 29 0d 0a 20 20 20 20 20  eyNames()..     
9b90: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
9ba0: 20 20 20 20 20 20 20 20 20 20 43 68 65 63 6b 44            CheckD
9bb0: 69 73 70 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20 20  isposed();....  
9bc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
9bd0: 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a   (key == null)..
9be0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9bf0: 20 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b      return null;
9c00: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
9c10: 20 20 20 20 72 65 74 75 72 6e 20 6b 65 79 2e 47      return key.G
9c20: 65 74 53 75 62 4b 65 79 4e 61 6d 65 73 28 29 3b  etSubKeyNames();
9c30: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
9c40: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
9c50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9c60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9c70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9c80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9c90: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
9ca0: 20 20 70 75 62 6c 69 63 20 6f 62 6a 65 63 74 20    public object 
9cb0: 47 65 74 56 61 6c 75 65 28 0d 0a 20 20 20 20 20  GetValue(..     
9cc0: 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
9cd0: 67 20 6e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20  g name,..       
9ce0: 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20           object 
9cf0: 64 65 66 61 75 6c 74 56 61 6c 75 65 0d 0a 20 20  defaultValue..  
9d00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d                ).
9d10: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
9d20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9d30: 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b  CheckDisposed();
9d40: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
9d50: 20 20 20 20 69 66 20 28 6b 65 79 20 3d 3d 20 6e      if (key == n
9d60: 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
9d70: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
9d80: 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20   null;....      
9d90: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
9da0: 20 6b 65 79 2e 47 65 74 56 61 6c 75 65 28 6e 61   key.GetValue(na
9db0: 6d 65 2c 20 64 65 66 61 75 6c 74 56 61 6c 75 65  me, defaultValue
9dc0: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
9dd0: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
9de0: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
9df0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9e00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9e10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9e20: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
9e30: 20 20 20 20 70 75 62 6c 69 63 20 4d 6f 63 6b 52      public MockR
9e40: 65 67 69 73 74 72 79 4b 65 79 20 4f 70 65 6e 53  egistryKey OpenS
9e50: 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20  ubKey(..        
9e60: 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 73          string s
9e70: 75 62 4b 65 79 4e 61 6d 65 0d 0a 20 20 20 20 20  ubKeyName..     
9e80: 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
9e90: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
9ea0: 20 20 20 20 20 20 20 20 20 20 20 20 20 43 68 65               Che
9eb0: 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 0d  ckDisposed();...
9ec0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
9ed0: 20 72 65 74 75 72 6e 20 4f 70 65 6e 53 75 62 4b   return OpenSubK
9ee0: 65 79 28 73 75 62 4b 65 79 4e 61 6d 65 2c 20 66  ey(subKeyName, f
9ef0: 61 6c 73 65 29 3b 0d 0a 20 20 20 20 20 20 20 20  alse);..        
9f00: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
9f10: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
9f20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9f30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9f40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9f50: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
9f60: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 4d          public M
9f70: 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 4f  ockRegistryKey O
9f80: 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20 20  penSubKey(..    
9f90: 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
9fa0: 6e 67 20 73 75 62 4b 65 79 4e 61 6d 65 2c 0d 0a  ng subKeyName,..
9fb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9fc0: 62 6f 6f 6c 20 77 72 69 74 61 62 6c 65 0d 0a 20  bool writable.. 
9fd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29                 )
9fe0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
9ff0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
a000: 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29   CheckDisposed()
a010: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
a020: 20 20 20 20 20 69 66 20 28 77 72 69 74 61 62 6c       if (writabl
a030: 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e)..            
a040: 20 20 20 20 20 20 20 20 43 68 65 63 6b 52 65 61          CheckRea
a050: 64 4f 6e 6c 79 28 29 3b 0d 0a 0d 0a 20 20 20 20  dOnly();....    
a060: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
a070: 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  key == null)..  
a080: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a090: 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a    return null;..
a0a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
a0b0: 20 20 52 65 67 69 73 74 72 79 4b 65 79 20 73 75    RegistryKey su
a0c0: 62 4b 65 79 20 3d 20 6b 65 79 2e 4f 70 65 6e 53  bKey = key.OpenS
a0d0: 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20  ubKey(..        
a0e0: 20 20 20 20 20 20 20 20 20 20 20 20 73 75 62 4b              subK
a0f0: 65 79 4e 61 6d 65 2c 20 77 68 61 74 49 66 20 3f  eyName, whatIf ?
a100: 20 66 61 6c 73 65 20 3a 20 77 72 69 74 61 62 6c   false : writabl
a110: 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  e);....         
a120: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 28 73         return (s
a130: 75 62 4b 65 79 20 21 3d 20 6e 75 6c 6c 29 20 3f  ubKey != null) ?
a140: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
a150: 20 20 20 20 20 20 6e 65 77 20 4d 6f 63 6b 52 65        new MockRe
a160: 67 69 73 74 72 79 4b 65 79 28 73 75 62 4b 65 79  gistryKey(subKey
a170: 2c 20 77 68 61 74 49 66 2c 20 72 65 61 64 4f 6e  , whatIf, readOn
a180: 6c 79 2c 20 73 61 66 65 29 20 3a 20 6e 75 6c 6c  ly, safe) : null
a190: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
a1a0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
a1b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a1c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a1d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a1e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a1f0: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
a200: 20 20 20 70 75 62 6c 69 63 20 76 6f 69 64 20 53     public void S
a210: 65 74 56 61 6c 75 65 28 0d 0a 20 20 20 20 20 20  etValue(..      
a220: 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
a230: 20 6e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20   name,..        
a240: 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 76          object v
a250: 61 6c 75 65 0d 0a 20 20 20 20 20 20 20 20 20 20  alue..          
a260: 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
a270: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
a280: 20 20 20 20 20 20 20 20 43 68 65 63 6b 44 69 73          CheckDis
a290: 70 6f 73 65 64 28 29 3b 0d 0a 20 20 20 20 20 20  posed();..      
a2a0: 20 20 20 20 20 20 20 20 20 20 43 68 65 63 6b 52            CheckR
a2b0: 65 61 64 4f 6e 6c 79 28 29 3b 0d 0a 0d 0a 20 20  eadOnly();....  
a2c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
a2d0: 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a   (key == null)..
a2e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a2f0: 20 20 20 20 72 65 74 75 72 6e 3b 0d 0a 0d 0a 20      return;.... 
a300: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
a310: 66 20 28 21 77 68 61 74 49 66 29 0d 0a 20 20 20  f (!whatIf)..   
a320: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a330: 20 6b 65 79 2e 53 65 74 56 61 6c 75 65 28 6e 61   key.SetValue(na
a340: 6d 65 2c 20 76 61 6c 75 65 29 3b 0d 0a 20 20 20  me, value);..   
a350: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
a360: 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
a370: 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  on....          
a380: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
a390: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a3a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a3b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a3c0: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
a3d0: 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50 75 62       #region Pub
a3e0: 6c 69 63 20 50 72 6f 70 65 72 74 69 65 73 0d 0a  lic Properties..
a3f0: 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
a400: 69 63 20 73 74 72 69 6e 67 20 4e 61 6d 65 0d 0a  ic string Name..
a410: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
a420: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67                 g
a430: 65 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  et..            
a440: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
a450: 20 20 20 20 20 20 20 20 20 20 20 43 68 65 63 6b             Check
a460: 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20  Disposed();.... 
a470: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a480: 20 20 20 69 66 20 28 6b 65 79 20 3d 3d 20 6e 75     if (key == nu
a490: 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
a4a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
a4b0: 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20  urn null;....   
a4c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a4d0: 20 72 65 74 75 72 6e 20 21 53 74 72 69 6e 67 2e   return !String.
a4e0: 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 73 75  IsNullOrEmpty(su
a4f0: 62 4b 65 79 4e 61 6d 65 29 20 3f 0d 0a 20 20 20  bKeyName) ?..   
a500: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a510: 20 20 20 20 20 53 74 72 69 6e 67 2e 46 6f 72 6d       String.Form
a520: 61 74 28 22 7b 30 7d 5c 5c 7b 31 7d 22 2c 20 6b  at("{0}\\{1}", k
a530: 65 79 2e 4e 61 6d 65 2c 20 73 75 62 4b 65 79 4e  ey.Name, subKeyN
a540: 61 6d 65 29 20 3a 0d 0a 20 20 20 20 20 20 20 20  ame) :..        
a550: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a560: 6b 65 79 2e 4e 61 6d 65 3b 0d 0a 20 20 20 20 20  key.Name;..     
a570: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
a580: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
a590: 20 20 20 20 20 20 20 20 20 20 20 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 2f 0d 0a  //////////////..
a5e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
a5f0: 69 76 61 74 65 20 52 65 67 69 73 74 72 79 4b 65  ivate RegistryKe
a600: 79 20 6b 65 79 3b 0d 0a 20 20 20 20 20 20 20 20  y key;..        
a610: 20 20 20 20 70 75 62 6c 69 63 20 52 65 67 69 73      public Regis
a620: 74 72 79 4b 65 79 20 4b 65 79 0d 0a 20 20 20 20  tryKey Key..    
a630: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
a640: 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b             get {
a650: 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29   CheckDisposed()
a660: 3b 20 43 68 65 63 6b 53 61 66 65 28 29 3b 20 72  ; CheckSafe(); r
a670: 65 74 75 72 6e 20 6b 65 79 3b 20 7d 0d 0a 20 20  eturn key; }..  
a680: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
a690: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
a6a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a6b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a6c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a6d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
a6e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
a6f0: 69 76 61 74 65 20 73 74 72 69 6e 67 20 73 75 62  ivate string sub
a700: 4b 65 79 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20  KeyName;..      
a710: 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 72        public str
a720: 69 6e 67 20 53 75 62 4b 65 79 4e 61 6d 65 0d 0a  ing SubKeyName..
a730: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
a740: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67                 g
a750: 65 74 20 7b 20 43 68 65 63 6b 44 69 73 70 6f 73  et { CheckDispos
a760: 65 64 28 29 3b 20 72 65 74 75 72 6e 20 73 75 62  ed(); return sub
a770: 4b 65 79 4e 61 6d 65 3b 20 7d 0d 0a 20 20 20 20  KeyName; }..    
a780: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
a790: 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
a7a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a7b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a7c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a7d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
a7e0: 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76              priv
a7f0: 61 74 65 20 62 6f 6f 6c 20 77 68 61 74 49 66 3b  ate bool whatIf;
a800: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
a810: 62 6c 69 63 20 62 6f 6f 6c 20 57 68 61 74 49 66  blic bool WhatIf
a820: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
a830: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
a840: 20 67 65 74 20 7b 20 43 68 65 63 6b 44 69 73 70   get { CheckDisp
a850: 6f 73 65 64 28 29 3b 20 72 65 74 75 72 6e 20 77  osed(); return w
a860: 68 61 74 49 66 3b 20 7d 0d 0a 20 20 20 20 20 20  hatIf; }..      
a870: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
a880: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
a890: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a8a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a8b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a8c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
a8d0: 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
a8e0: 65 20 62 6f 6f 6c 20 72 65 61 64 4f 6e 6c 79 3b  e bool readOnly;
a8f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
a900: 62 6c 69 63 20 62 6f 6f 6c 20 52 65 61 64 4f 6e  blic bool ReadOn
a910: 6c 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ly..            
a920: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
a930: 20 20 20 67 65 74 20 7b 20 43 68 65 63 6b 44 69     get { CheckDi
a940: 73 70 6f 73 65 64 28 29 3b 20 72 65 74 75 72 6e  sposed(); return
a950: 20 72 65 61 64 4f 6e 6c 79 3b 20 7d 0d 0a 20 20   readOnly; }..  
a960: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
a970: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
a980: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a990: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a9a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a9b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
a9c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
a9d0: 62 6c 69 63 20 62 6f 6f 6c 20 73 61 66 65 3b 0d  blic bool safe;.
a9e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
a9f0: 6c 69 63 20 62 6f 6f 6c 20 53 61 66 65 0d 0a 20  lic bool Safe.. 
aa00: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
aa10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65                ge
aa20: 74 20 7b 20 43 68 65 63 6b 44 69 73 70 6f 73 65  t { CheckDispose
aa30: 64 28 29 3b 20 72 65 74 75 72 6e 20 73 61 66 65  d(); return safe
aa40: 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
aa50: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
aa60: 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20  #endregion....  
aa70: 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
aa80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
aa90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
aaa0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
aab0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
aac0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 72 65  .            #re
aad0: 67 69 6f 6e 20 50 72 69 76 61 74 65 20 4d 65 74  gion Private Met
aae0: 68 6f 64 73 0d 0a 20 20 20 20 20 20 20 20 20 20  hods..          
aaf0: 20 20 70 72 69 76 61 74 65 20 76 6f 69 64 20 43    private void C
ab00: 68 65 63 6b 52 65 61 64 4f 6e 6c 79 28 29 0d 0a  heckReadOnly()..
ab10: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
ab20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
ab30: 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
ab40: 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 49 6e 20 22     // NOTE: In "
ab50: 72 65 61 64 2d 6f 6e 6c 79 22 20 6d 6f 64 65 2c  read-only" mode,
ab60: 20 77 65 20 64 69 73 61 6c 6c 6f 77 20 61 6c 6c   we disallow all
ab70: 20 77 72 69 74 65 20 61 63 63 65 73 73 2e 0d 0a   write access...
ab80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ab90: 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
aba0: 20 20 20 20 69 66 20 28 21 72 65 61 64 4f 6e 6c      if (!readOnl
abb0: 79 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y)..            
abc0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 3b 0d          return;.
abd0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
abe0: 20 20 20 74 68 72 6f 77 20 6e 65 77 20 49 6e 76     throw new Inv
abf0: 61 6c 69 64 4f 70 65 72 61 74 69 6f 6e 45 78 63  alidOperationExc
ac00: 65 70 74 69 6f 6e 28 29 3b 0d 0a 20 20 20 20 20  eption();..     
ac10: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
ac20: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
ac30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ac40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ac50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ac60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
ac70: 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
ac80: 74 65 20 76 6f 69 64 20 43 68 65 63 6b 53 61 66  te void CheckSaf
ac90: 65 28 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e()..           
aca0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
acb0: 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
acc0: 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a          // NOTE:
acd0: 20 49 6e 20 22 73 61 66 65 22 20 6d 6f 64 65 2c   In "safe" mode,
ace0: 20 77 65 20 64 69 73 61 6c 6c 6f 77 20 61 6c 6c   we disallow all
acf0: 20 64 69 72 65 63 74 20 61 63 63 65 73 73 20 74   direct access t
ad00: 6f 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 20  o the..         
ad10: 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
ad20: 63 6f 6e 74 61 69 6e 65 64 20 72 65 67 69 73 74  contained regist
ad30: 72 79 20 6b 65 79 2e 0d 0a 20 20 20 20 20 20 20  ry key...       
ad40: 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
ad50: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
ad60: 28 21 73 61 66 65 29 0d 0a 20 20 20 20 20 20 20  (!safe)..       
ad70: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
ad80: 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  urn;....        
ad90: 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65          throw ne
ada0: 77 20 49 6e 76 61 6c 69 64 4f 70 65 72 61 74 69  w InvalidOperati
adb0: 6f 6e 45 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a  onException();..
adc0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
add0: 20 20 20 20 20 20 20 20 20 20 20 23 65 6e 64 72             #endr
ade0: 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20  egion....       
adf0: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
ae00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ae10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ae20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ae30: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
ae40: 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20          #region 
ae50: 53 79 73 74 65 6d 2e 4f 62 6a 65 63 74 20 4f 76  System.Object Ov
ae60: 65 72 72 69 64 65 73 0d 0a 20 20 20 20 20 20 20  errides..       
ae70: 20 20 20 20 20 70 75 62 6c 69 63 20 6f 76 65 72       public over
ae80: 72 69 64 65 20 73 74 72 69 6e 67 20 54 6f 53 74  ride string ToSt
ae90: 72 69 6e 67 28 29 0d 0a 20 20 20 20 20 20 20 20  ring()..        
aea0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
aeb0: 20 20 20 20 20 20 20 43 68 65 63 6b 44 69 73 70         CheckDisp
aec0: 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20  osed();....     
aed0: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
aee0: 6e 20 74 68 69 73 2e 4e 61 6d 65 3b 0d 0a 20 20  n this.Name;..  
aef0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
af00: 20 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67           #endreg
af10: 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ion....         
af20: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
af30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
af40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
af50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
af60: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
af70: 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 49 6d        #region Im
af80: 70 6c 69 63 69 74 20 43 6f 6e 76 65 72 73 69 6f  plicit Conversio
af90: 6e 20 4f 70 65 72 61 74 6f 72 73 0d 0a 20 20 20  n Operators..   
afa0: 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
afb0: 20 20 20 20 20 20 20 20 20 2f 2f 20 42 55 47 42           // BUGB
afc0: 55 47 3a 20 52 65 6d 6f 76 65 20 6d 65 3f 20 20  UG: Remove me?  
afd0: 54 68 69 73 20 73 68 6f 75 6c 64 20 62 65 20 73  This should be s
afe0: 61 66 65 20 62 65 63 61 75 73 65 20 69 6e 20 22  afe because in "
aff0: 77 68 61 74 2d 69 66 22 0d 0a 20 20 20 20 20 20  what-if"..      
b000: 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 20        //        
b010: 20 6d 6f 64 65 20 61 6c 6c 20 6b 65 79 73 20 61   mode all keys a
b020: 72 65 20 6f 70 65 6e 65 64 20 72 65 61 64 2d 6f  re opened read-o
b030: 6e 6c 79 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  nly...          
b040: 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
b050: 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20    public static 
b060: 69 6d 70 6c 69 63 69 74 20 6f 70 65 72 61 74 6f  implicit operato
b070: 72 20 52 65 67 69 73 74 72 79 4b 65 79 28 0d 0a  r RegistryKey(..
b080: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b090: 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20  MockRegistryKey 
b0a0: 6b 65 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20  key..           
b0b0: 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
b0c0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
b0d0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 28 6b         return (k
b0e0: 65 79 20 21 3d 20 6e 75 6c 6c 29 20 3f 20 6b 65  ey != null) ? ke
b0f0: 79 2e 4b 65 79 20 3a 20 6e 75 6c 6c 3b 0d 0a 20  y.Key : null;.. 
b100: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
b110: 20 20 20 20 20 20 20 20 20 20 23 65 6e 64 72 65            #endre
b120: 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20  gion....        
b130: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
b140: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b150: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b160: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b170: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
b180: 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 49         #region I
b190: 44 69 73 70 6f 73 61 62 6c 65 20 22 50 61 74 74  Disposable "Patt
b1a0: 65 72 6e 22 20 4d 65 6d 62 65 72 73 0d 0a 20 20  ern" Members..  
b1b0: 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
b1c0: 65 20 62 6f 6f 6c 20 64 69 73 70 6f 73 65 64 3b  e bool disposed;
b1d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
b1e0: 69 76 61 74 65 20 76 6f 69 64 20 43 68 65 63 6b  ivate void Check
b1f0: 44 69 73 70 6f 73 65 64 28 29 20 2f 2a 20 74 68  Disposed() /* th
b200: 72 6f 77 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20  row */..        
b210: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
b220: 20 20 20 20 20 20 20 69 66 20 28 21 64 69 73 70         if (!disp
b230: 6f 73 65 64 29 0d 0a 20 20 20 20 20 20 20 20 20  osed)..         
b240: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
b250: 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  n;....          
b260: 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20        throw new 
b270: 4f 62 6a 65 63 74 44 69 73 70 6f 73 65 64 45 78  ObjectDisposedEx
b280: 63 65 70 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20  ception(..      
b290: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 79                ty
b2a0: 70 65 6f 66 28 4d 6f 63 6b 52 65 67 69 73 74 72  peof(MockRegistr
b2b0: 79 4b 65 79 29 2e 4e 61 6d 65 29 3b 0d 0a 20 20  yKey).Name);..  
b2c0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
b2d0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
b2e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b2f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b300: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b310: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
b320: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
b330: 69 76 61 74 65 20 2f 2a 20 70 72 6f 74 65 63 74  ivate /* protect
b340: 65 64 20 76 69 72 74 75 61 6c 20 2a 2f 20 76 6f  ed virtual */ vo
b350: 69 64 20 44 69 73 70 6f 73 65 28 0d 0a 20 20 20  id Dispose(..   
b360: 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f               boo
b370: 6c 20 64 69 73 70 6f 73 69 6e 67 0d 0a 20 20 20  l disposing..   
b380: 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a               )..
b390: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
b3a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
b3b0: 66 20 28 21 64 69 73 70 6f 73 65 64 29 0d 0a 20  f (!disposed).. 
b3c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
b3d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
b3e0: 20 20 20 20 20 20 69 66 20 28 64 69 73 70 6f 73        if (dispos
b3f0: 69 6e 67 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ing)..          
b400: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
b410: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b420: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
b430: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b440: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 20 20 20 20 20  /////////..     
b450: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b460: 20 20 20 2f 2f 20 64 69 73 70 6f 73 65 20 6d 61     // dispose ma
b470: 6e 61 67 65 64 20 72 65 73 6f 75 72 63 65 73 20  naged resources 
b480: 68 65 72 65 2e 2e 2e 0d 0a 20 20 20 20 20 20 20  here.....       
b490: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b4a0: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
b4b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b4c0: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
b4d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b4e0: 20 69 66 20 28 6b 65 79 20 21 3d 20 6e 75 6c 6c   if (key != null
b4f0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
b500: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
b510: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b520: 20 20 20 20 20 20 20 20 20 20 6b 65 79 2e 43 6c            key.Cl
b530: 6f 73 65 28 29 3b 0d 0a 20 20 20 20 20 20 20 20  ose();..        
b540: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b550: 20 20 20 20 6b 65 79 20 3d 20 6e 75 6c 6c 3b 0d      key = null;.
b560: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
b570: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
b580: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b590: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
b5a0: 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
b5b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b5c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
b5d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
b5e0: 20 20 20 20 20 2f 2f 20 72 65 6c 65 61 73 65 20       // release 
b5f0: 75 6e 6d 61 6e 61 67 65 64 20 72 65 73 6f 75 72  unmanaged resour
b600: 63 65 73 20 68 65 72 65 2e 2e 2e 0d 0a 20 20 20  ces here.....   
b610: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b620: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
b630: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b640: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
b650: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
b660: 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
b670: 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20         // NOTE: 
b680: 54 68 69 73 20 6f 62 6a 65 63 74 20 69 73 20 6e  This object is n
b690: 6f 77 20 64 69 73 70 6f 73 65 64 2e 0d 0a 20 20  ow disposed...  
b6a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b6b0: 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
b6c0: 20 20 20 20 20 20 20 20 20 20 64 69 73 70 6f 73            dispos
b6d0: 65 64 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20  ed = true;..    
b6e0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
b6f0: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
b700: 20 20 20 20 20 20 20 20 20 20 23 65 6e 64 72 65            #endre
b710: 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20  gion....        
b720: 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b750: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b760: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
b770: 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 49         #region I
b780: 44 69 73 70 6f 73 61 62 6c 65 20 4d 65 6d 62 65  Disposable Membe
b790: 72 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  rs..            
b7a0: 70 75 62 6c 69 63 20 76 6f 69 64 20 44 69 73 70  public void Disp
b7b0: 6f 73 65 28 29 0d 0a 20 20 20 20 20 20 20 20 20  ose()..         
b7c0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
b7d0: 20 20 20 20 20 20 44 69 73 70 6f 73 65 28 74 72        Dispose(tr
b7e0: 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ue);..          
b7f0: 20 20 20 20 20 20 47 43 2e 53 75 70 70 72 65 73        GC.Suppres
b800: 73 46 69 6e 61 6c 69 7a 65 28 74 68 69 73 29 3b  sFinalize(this);
b810: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
b820: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e  .            #en
b830: 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20  dregion....     
b840: 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b880: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
b890: 20 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f            #regio
b8a0: 6e 20 44 65 73 74 72 75 63 74 6f 72 0d 0a 20 20  n Destructor..  
b8b0: 20 20 20 20 20 20 20 20 20 20 7e 4d 6f 63 6b 52            ~MockR
b8c0: 65 67 69 73 74 72 79 4b 65 79 28 29 0d 0a 20 20  egistryKey()..  
b8d0: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
b8e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 44 69 73               Dis
b8f0: 70 6f 73 65 28 66 61 6c 73 65 29 3b 0d 0a 20 20  pose(false);..  
b900: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
b910: 20 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67           #endreg
b920: 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  ion..        }..
b930: 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
b940: 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  on....        //
b950: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b960: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b970: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b980: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b990: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
b9a0: 20 23 72 65 67 69 6f 6e 20 52 65 67 69 73 74 72   #region Registr
b9b0: 79 48 65 6c 70 65 72 20 43 6c 61 73 73 0d 0a 20  yHelper Class.. 
b9c0: 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
b9d0: 74 61 74 69 63 20 63 6c 61 73 73 20 52 65 67 69  tatic class Regi
b9e0: 73 74 72 79 48 65 6c 70 65 72 0d 0a 20 20 20 20  stryHelper..    
b9f0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
ba00: 20 20 20 23 72 65 67 69 6f 6e 20 50 75 62 6c 69     #region Publi
ba10: 63 20 53 74 61 74 69 63 20 50 72 6f 70 65 72 74  c Static Propert
ba20: 69 65 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ies..           
ba30: 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20   private static 
ba40: 69 6e 74 20 73 75 62 4b 65 79 73 43 72 65 61 74  int subKeysCreat
ba50: 65 64 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ed;..           
ba60: 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 69   public static i
ba70: 6e 74 20 53 75 62 4b 65 79 73 43 72 65 61 74 65  nt SubKeysCreate
ba80: 64 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  d..            {
ba90: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
baa0: 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 73    get { return s
bab0: 75 62 4b 65 79 73 43 72 65 61 74 65 64 3b 20 7d  ubKeysCreated; }
bac0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
bad0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
bae0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
baf0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bb00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bb10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bb20: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
bb30: 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63    private static
bb40: 20 69 6e 74 20 73 75 62 4b 65 79 73 44 65 6c 65   int subKeysDele
bb50: 74 65 64 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ted;..          
bb60: 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20    public static 
bb70: 69 6e 74 20 53 75 62 4b 65 79 73 44 65 6c 65 74  int SubKeysDelet
bb80: 65 64 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ed..            
bb90: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
bba0: 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20     get { return 
bbb0: 73 75 62 4b 65 79 73 44 65 6c 65 74 65 64 3b 20  subKeysDeleted; 
bbc0: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
bbd0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
bbe0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bbf0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bc00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
bc30: 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69     private stati
bc40: 63 20 69 6e 74 20 6b 65 79 56 61 6c 75 65 73 53  c int keyValuesS
bc50: 65 74 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  et;..           
bc60: 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 69   public static i
bc70: 6e 74 20 4b 65 79 56 61 6c 75 65 73 53 65 74 0d  nt KeyValuesSet.
bc80: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
bc90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bca0: 67 65 74 20 7b 20 72 65 74 75 72 6e 20 6b 65 79  get { return key
bcb0: 56 61 6c 75 65 73 53 65 74 3b 20 7d 0d 0a 20 20  ValuesSet; }..  
bcc0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
bcd0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
bce0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bcf0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bd00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bd10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
bd20: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
bd30: 69 76 61 74 65 20 73 74 61 74 69 63 20 69 6e 74  ivate static int
bd40: 20 6b 65 79 56 61 6c 75 65 73 44 65 6c 65 74 65   keyValuesDelete
bd50: 64 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  d;..            
bd60: 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 69 6e  public static in
bd70: 74 20 4b 65 79 56 61 6c 75 65 73 44 65 6c 65 74  t KeyValuesDelet
bd80: 65 64 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ed..            
bd90: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
bda0: 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20     get { return 
bdb0: 6b 65 79 56 61 6c 75 65 73 44 65 6c 65 74 65 64  keyValuesDeleted
bdc0: 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
bdd0: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
bde0: 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20  #endregion....  
bdf0: 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
be00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
be10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
be20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
be30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
be40: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 72 65  .            #re
be50: 67 69 6f 6e 20 50 75 62 6c 69 63 20 53 74 61 74  gion Public Stat
be60: 69 63 20 4d 65 74 68 6f 64 73 0d 0a 20 20 20 20  ic Methods..    
be70: 20 20 20 20 20 20 20 20 5b 4d 65 74 68 6f 64 49          [MethodI
be80: 6d 70 6c 28 4d 65 74 68 6f 64 49 6d 70 6c 4f 70  mpl(MethodImplOp
be90: 74 69 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e 69 6e 67  tions.NoInlining
bea0: 29 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  )]..            
beb0: 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 4d 6f  public static Mo
bec0: 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 4f 70  ckRegistryKey Op
bed0: 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20  enSubKey(..     
bee0: 20 20 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52             MockR
bef0: 65 67 69 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b  egistryKey rootK
bf00: 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ey,..           
bf10: 20 20 20 20 20 73 74 72 69 6e 67 20 73 75 62 4b       string subK
bf20: 65 79 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20  eyName,..       
bf30: 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 72           bool wr
bf40: 69 74 61 62 6c 65 2c 0d 0a 20 20 20 20 20 20 20  itable,..       
bf50: 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68           bool wh
bf60: 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20  atIf,..         
bf70: 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65 72 62         bool verb
bf80: 6f 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ose..           
bf90: 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
bfa0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
bfb0: 20 20 20 20 20 20 20 69 66 20 28 72 6f 6f 74 4b         if (rootK
bfc0: 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ey == null)..   
bfd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bfe0: 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d   return null;...
bff0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
c000: 20 69 66 20 28 76 65 72 62 6f 73 65 29 0d 0a 20   if (verbose).. 
c010: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c020: 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75     TraceOps.Debu
c030: 67 41 6e 64 54 72 61 63 65 28 77 72 69 74 61 62  gAndTrace(writab
c040: 6c 65 20 3f 0d 0a 20 20 20 20 20 20 20 20 20 20  le ?..          
c050: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
c060: 61 63 65 50 72 69 6f 72 69 74 79 2e 48 69 67 68  acePriority.High
c070: 65 73 74 20 3a 20 54 72 61 63 65 50 72 69 6f 72  est : TracePrior
c080: 69 74 79 2e 48 69 67 68 65 72 2c 0d 0a 20 20 20  ity.Higher,..   
c090: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c0a0: 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61       debugCallba
c0b0: 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63  ck, traceCallbac
c0c0: 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  k, String.Format
c0d0: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
c0e0: 20 20 20 20 20 20 20 20 20 20 20 22 72 6f 6f 74             "root
c0f0: 4b 65 79 20 3d 20 7b 30 7d 2c 20 73 75 62 4b 65  Key = {0}, subKe
c100: 79 4e 61 6d 65 20 3d 20 7b 31 7d 2c 20 77 72 69  yName = {1}, wri
c110: 74 61 62 6c 65 20 3d 20 7b 32 7d 22 2c 0d 0a 20  table = {2}",.. 
c120: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c130: 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61         ForDispla
c140: 79 28 72 6f 6f 74 4b 65 79 29 2c 20 46 6f 72 44  y(rootKey), ForD
c150: 69 73 70 6c 61 79 28 73 75 62 4b 65 79 4e 61 6d  isplay(subKeyNam
c160: 65 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e),..           
c170: 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72               For
c180: 44 69 73 70 6c 61 79 28 77 72 69 74 61 62 6c 65  Display(writable
c190: 29 29 2c 20 74 72 61 63 65 43 61 74 65 67 6f 72  )), traceCategor
c1a0: 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
c1b0: 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
c1c0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 48 41             // HA
c1d0: 43 4b 3a 20 41 6c 77 61 79 73 20 66 6f 72 62 69  CK: Always forbi
c1e0: 64 20 77 72 69 74 61 62 6c 65 20 61 63 63 65 73  d writable acces
c1f0: 73 20 77 68 65 6e 20 6f 70 65 72 61 74 69 6e 67  s when operating
c200: 20 69 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 20   in..           
c210: 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 22 77       //       "w
c220: 68 61 74 2d 69 66 22 20 6d 6f 64 65 2e 0d 0a 20  hat-if" mode... 
c230: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
c240: 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
c250: 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b     MockRegistryK
c260: 65 79 20 6b 65 79 20 3d 20 72 6f 6f 74 4b 65 79  ey key = rootKey
c270: 2e 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20  .OpenSubKey(..  
c280: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c290: 20 20 73 75 62 4b 65 79 4e 61 6d 65 2c 20 77 68    subKeyName, wh
c2a0: 61 74 49 66 20 3f 20 66 61 6c 73 65 20 3a 20 77  atIf ? false : w
c2b0: 72 69 74 61 62 6c 65 29 3b 0d 0a 0d 0a 20 20 20  ritable);....   
c2c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
c2d0: 75 72 6e 20 28 6b 65 79 20 21 3d 20 6e 75 6c 6c  urn (key != null
c2e0: 29 20 3f 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ) ?..           
c2f0: 20 20 20 20 20 20 20 20 20 6e 65 77 20 4d 6f 63           new Moc
c300: 6b 52 65 67 69 73 74 72 79 4b 65 79 28 6b 65 79  kRegistryKey(key
c310: 2c 20 77 68 61 74 49 66 2c 20 66 61 6c 73 65 2c  , whatIf, false,
c320: 20 66 61 6c 73 65 29 20 3a 20 6e 75 6c 6c 3b 0d   false) : null;.
c330: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
c340: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
c350: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c360: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c370: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c380: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c390: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
c3a0: 20 5b 4d 65 74 68 6f 64 49 6d 70 6c 28 4d 65 74   [MethodImpl(Met
c3b0: 68 6f 64 49 6d 70 6c 4f 70 74 69 6f 6e 73 2e 4e  hodImplOptions.N
c3c0: 6f 49 6e 6c 69 6e 69 6e 67 29 5d 0d 0a 20 20 20  oInlining)]..   
c3d0: 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
c3e0: 73 74 61 74 69 63 20 4d 6f 63 6b 52 65 67 69 73  static MockRegis
c3f0: 74 72 79 4b 65 79 20 43 72 65 61 74 65 53 75 62  tryKey CreateSub
c400: 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20  Key(..          
c410: 20 20 20 20 20 20 4d 6f 63 6b 52 65 67 69 73 74        MockRegist
c420: 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a  ryKey rootKey,..
c430: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c440: 73 74 72 69 6e 67 20 73 75 62 4b 65 79 4e 61 6d  string subKeyNam
c450: 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
c460: 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c      bool whatIf,
c470: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
c480: 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 0d 0a    bool verbose..
c490: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c4a0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
c4b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
c4c0: 20 20 69 66 20 28 72 6f 6f 74 4b 65 79 20 3d 3d    if (rootKey ==
c4d0: 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
c4e0: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
c4f0: 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20  rn null;....    
c500: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
c510: 76 65 72 62 6f 73 65 29 0d 0a 20 20 20 20 20 20  verbose)..      
c520: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
c530: 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54  aceOps.DebugAndT
c540: 72 61 63 65 28 54 72 61 63 65 50 72 69 6f 72 69  race(TracePriori
c550: 74 79 2e 48 69 67 68 65 73 74 2c 0d 0a 20 20 20  ty.Highest,..   
c560: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c570: 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61       debugCallba
c580: 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63  ck, traceCallbac
c590: 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  k, String.Format
c5a0: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
c5b0: 20 20 20 20 20 20 20 20 20 20 20 22 72 6f 6f 74             "root
c5c0: 4b 65 79 20 3d 20 7b 30 7d 2c 20 73 75 62 4b 65  Key = {0}, subKe
c5d0: 79 4e 61 6d 65 20 3d 20 7b 31 7d 22 2c 0d 0a 20  yName = {1}",.. 
c5e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c5f0: 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61         ForDispla
c600: 79 28 72 6f 6f 74 4b 65 79 29 2c 20 46 6f 72 44  y(rootKey), ForD
c610: 69 73 70 6c 61 79 28 73 75 62 4b 65 79 4e 61 6d  isplay(subKeyNam
c620: 65 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  e)),..          
c630: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
c640: 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d  aceCategory);...
c650: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
c660: 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20   try..          
c670: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
c680: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
c690: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
c6a0: 20 20 20 20 20 2f 2f 20 48 41 43 4b 3a 20 41 6c       // HACK: Al
c6b0: 77 61 79 73 20 6f 70 65 6e 20 61 20 6b 65 79 2c  ways open a key,
c6c0: 20 72 61 74 68 65 72 20 74 68 61 6e 20 63 72 65   rather than cre
c6d0: 61 74 69 6e 67 20 6f 6e 65 20 77 68 65 6e 0d 0a  ating one when..
c6e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c6f0: 20 20 20 20 2f 2f 20 20 20 20 20 20 20 6f 70 65      //       ope
c700: 72 61 74 69 6e 67 20 69 6e 20 22 77 68 61 74 2d  rating in "what-
c710: 69 66 22 20 6d 6f 64 65 2e 0d 0a 20 20 20 20 20  if" mode...     
c720: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
c730: 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
c740: 20 20 20 20 20 20 20 69 66 20 28 77 68 61 74 49         if (whatI
c750: 66 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  f)..            
c760: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
c770: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c780: 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
c790: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
c7a0: 2f 20 48 41 43 4b 3a 20 41 74 74 65 6d 70 74 20  / HACK: Attempt 
c7b0: 74 6f 20 6f 70 65 6e 20 74 68 65 20 73 70 65 63  to open the spec
c7c0: 69 66 69 65 64 20 73 75 62 2d 6b 65 79 2e 20 20  ified sub-key.  
c7d0: 49 66 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  If..            
c7e0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
c7f0: 20 20 20 20 20 74 68 69 73 20 66 61 69 6c 73 2c       this fails,
c800: 20 77 65 20 77 69 6c 6c 20 73 69 6d 70 6c 79 20   we will simply 
c810: 72 65 74 75 72 6e 20 74 68 65 20 72 6f 6f 74 0d  return the root.
c820: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
c830: 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
c840: 20 20 6b 65 79 20 69 74 73 65 6c 66 20 73 69 6e    key itself sin
c850: 63 65 20 6e 6f 20 77 72 69 74 65 73 20 61 72 65  ce no writes are
c860: 20 61 6c 6c 6f 77 65 64 20 69 6e 0d 0a 20 20 20   allowed in..   
c870: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c880: 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 22 77       //       "w
c890: 68 61 74 2d 69 66 22 20 6d 6f 64 65 20 61 6e 79  hat-if" mode any
c8a0: 68 6f 77 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  how...          
c8b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
c8c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
c8d0: 20 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65            MockRe
c8e0: 67 69 73 74 72 79 4b 65 79 20 6b 65 79 20 3d 20  gistryKey key = 
c8f0: 72 6f 6f 74 4b 65 79 2e 4f 70 65 6e 53 75 62 4b  rootKey.OpenSubK
c900: 65 79 28 73 75 62 4b 65 79 4e 61 6d 65 29 3b 0d  ey(subKeyName);.
c910: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
c920: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
c930: 6e 20 28 6b 65 79 20 21 3d 20 6e 75 6c 6c 29 20  n (key != null) 
c940: 3f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ?..             
c950: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6b                 k
c960: 65 79 20 3a 20 6e 65 77 20 4d 6f 63 6b 52 65 67  ey : new MockReg
c970: 69 73 74 72 79 4b 65 79 28 0d 0a 20 20 20 20 20  istryKey(..     
c980: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c990: 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b             rootK
c9a0: 65 79 2c 20 73 75 62 4b 65 79 4e 61 6d 65 2c 20  ey, subKeyName, 
c9b0: 77 68 61 74 49 66 2c 20 66 61 6c 73 65 2c 20 66  whatIf, false, f
c9c0: 61 6c 73 65 29 3b 0d 0a 20 20 20 20 20 20 20 20  alse);..        
c9d0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
c9e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c9f0: 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20     else..       
ca00: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
ca10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ca20: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e          return n
ca30: 65 77 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b  ew MockRegistryK
ca40: 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ey(..           
ca50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ca60: 20 72 6f 6f 74 4b 65 79 2e 43 72 65 61 74 65 53   rootKey.CreateS
ca70: 75 62 4b 65 79 28 73 75 62 4b 65 79 4e 61 6d 65  ubKey(subKeyName
ca80: 29 2c 20 77 68 61 74 49 66 2c 20 66 61 6c 73 65  ), whatIf, false
ca90: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
caa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66                 f
cab0: 61 6c 73 65 29 3b 0d 0a 20 20 20 20 20 20 20 20  alse);..        
cac0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
cad0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
cae0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
caf0: 20 20 66 69 6e 61 6c 6c 79 0d 0a 20 20 20 20 20    finally..     
cb00: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
cb10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cb20: 20 20 73 75 62 4b 65 79 73 43 72 65 61 74 65 64    subKeysCreated
cb30: 2b 2b 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ++;..           
cb40: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
cb50: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
cb60: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
cb70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cb80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cb90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cba0: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
cbb0: 20 20 20 20 20 20 20 20 5b 4d 65 74 68 6f 64 49          [MethodI
cbc0: 6d 70 6c 28 4d 65 74 68 6f 64 49 6d 70 6c 4f 70  mpl(MethodImplOp
cbd0: 74 69 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e 69 6e 67  tions.NoInlining
cbe0: 29 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  )]..            
cbf0: 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 76 6f  public static vo
cc00: 69 64 20 44 65 6c 65 74 65 53 75 62 4b 65 79 28  id DeleteSubKey(
cc10: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
cc20: 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65    MockRegistryKe
cc30: 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20 20  y rootKey,..    
cc40: 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
cc50: 6e 67 20 73 75 62 4b 65 79 4e 61 6d 65 2c 0d 0a  ng subKeyName,..
cc60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cc70: 62 6f 6f 6c 20 74 68 72 6f 77 4f 6e 4d 69 73 73  bool throwOnMiss
cc80: 69 6e 67 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ing,..          
cc90: 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49        bool whatI
cca0: 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  f,..            
ccb0: 20 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65      bool verbose
ccc0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
ccd0: 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20    )..           
cce0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
ccf0: 20 20 20 20 69 66 20 28 72 6f 6f 74 4b 65 79 20      if (rootKey 
cd00: 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
cd10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
cd20: 74 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  turn;....       
cd30: 20 20 20 20 20 20 20 20 20 69 66 20 28 76 65 72           if (ver
cd40: 62 6f 73 65 29 0d 0a 20 20 20 20 20 20 20 20 20  bose)..         
cd50: 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
cd60: 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63  Ops.DebugAndTrac
cd70: 65 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e  e(TracePriority.
cd80: 48 69 67 68 65 73 74 2c 0d 0a 20 20 20 20 20 20  Highest,..      
cd90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cda0: 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c    debugCallback,
cdb0: 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20   traceCallback, 
cdc0: 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
cdd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cde0: 20 20 20 20 20 20 20 20 22 72 6f 6f 74 4b 65 79          "rootKey
cdf0: 20 3d 20 7b 30 7d 2c 20 73 75 62 4b 65 79 4e 61   = {0}, subKeyNa
ce00: 6d 65 20 3d 20 7b 31 7d 22 2c 0d 0a 20 20 20 20  me = {1}",..    
ce10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ce20: 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 72      ForDisplay(r
ce30: 6f 6f 74 4b 65 79 29 2c 20 46 6f 72 44 69 73 70  ootKey), ForDisp
ce40: 6c 61 79 28 73 75 62 4b 65 79 4e 61 6d 65 29 29  lay(subKeyName))
ce50: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
ce60: 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
ce70: 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  Category);....  
ce80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
ce90: 20 28 21 77 68 61 74 49 66 29 0d 0a 20 20 20 20   (!whatIf)..    
cea0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ceb0: 72 6f 6f 74 4b 65 79 2e 44 65 6c 65 74 65 53 75  rootKey.DeleteSu
cec0: 62 4b 65 79 28 73 75 62 4b 65 79 4e 61 6d 65 2c  bKey(subKeyName,
ced0: 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 29   throwOnMissing)
cee0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
cef0: 20 20 20 20 20 73 75 62 4b 65 79 73 44 65 6c 65       subKeysDele
cf00: 74 65 64 2b 2b 3b 0d 0a 20 20 20 20 20 20 20 20  ted++;..        
cf10: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
cf20: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
cf30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cf40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cf50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cf60: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
cf70: 20 20 20 20 20 20 20 20 5b 4d 65 74 68 6f 64 49          [MethodI
cf80: 6d 70 6c 28 4d 65 74 68 6f 64 49 6d 70 6c 4f 70  mpl(MethodImplOp
cf90: 74 69 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e 69 6e 67  tions.NoInlining
cfa0: 29 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  )]..            
cfb0: 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 76 6f  public static vo
cfc0: 69 64 20 44 65 6c 65 74 65 53 75 62 4b 65 79 54  id DeleteSubKeyT
cfd0: 72 65 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ree(..          
cfe0: 20 20 20 20 20 20 4d 6f 63 6b 52 65 67 69 73 74        MockRegist
cff0: 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a  ryKey rootKey,..
d000: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d010: 73 74 72 69 6e 67 20 73 75 62 4b 65 79 4e 61 6d  string subKeyNam
d020: 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
d030: 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c      bool whatIf,
d040: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
d050: 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 0d 0a    bool verbose..
d060: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d070: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
d080: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
d090: 20 20 69 66 20 28 72 6f 6f 74 4b 65 79 20 3d 3d    if (rootKey ==
d0a0: 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
d0b0: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
d0c0: 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  rn;....         
d0d0: 20 20 20 20 20 20 20 69 66 20 28 76 65 72 62 6f         if (verbo
d0e0: 73 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se)..           
d0f0: 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70           TraceOp
d100: 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28  s.DebugAndTrace(
d110: 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 48 69  TracePriority.Hi
d120: 67 68 65 73 74 2c 0d 0a 20 20 20 20 20 20 20 20  ghest,..        
d130: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d140: 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74  debugCallback, t
d150: 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74  raceCallback, St
d160: 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
d170: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d180: 20 20 20 20 20 20 22 72 6f 6f 74 4b 65 79 20 3d        "rootKey =
d190: 20 7b 30 7d 2c 20 73 75 62 4b 65 79 4e 61 6d 65   {0}, subKeyName
d1a0: 20 3d 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20   = {1}",..      
d1b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d1c0: 20 20 46 6f 72 44 69 73 70 6c 61 79 28 72 6f 6f    ForDisplay(roo
d1d0: 74 4b 65 79 29 2c 20 46 6f 72 44 69 73 70 6c 61  tKey), ForDispla
d1e0: 79 28 73 75 62 4b 65 79 4e 61 6d 65 29 29 2c 0d  y(subKeyName)),.
d1f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
d200: 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
d210: 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
d220: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
d230: 21 77 68 61 74 49 66 29 0d 0a 20 20 20 20 20 20  !whatIf)..      
d240: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f                ro
d250: 6f 74 4b 65 79 2e 44 65 6c 65 74 65 53 75 62 4b  otKey.DeleteSubK
d260: 65 79 54 72 65 65 28 73 75 62 4b 65 79 4e 61 6d  eyTree(subKeyNam
d270: 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  e);....         
d280: 20 20 20 20 20 20 20 73 75 62 4b 65 79 73 44 65         subKeysDe
d290: 6c 65 74 65 64 2b 2b 3b 0d 0a 20 20 20 20 20 20  leted++;..      
d2a0: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
d2b0: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
d2c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d2d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d2e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d2f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
d300: 20 20 20 20 20 20 20 20 20 20 5b 4d 65 74 68 6f            [Metho
d310: 64 49 6d 70 6c 28 4d 65 74 68 6f 64 49 6d 70 6c  dImpl(MethodImpl
d320: 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e 69  Options.NoInlini
d330: 6e 67 29 5d 0d 0a 20 20 20 20 20 20 20 20 20 20  ng)]..          
d340: 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20    public static 
d350: 73 74 72 69 6e 67 5b 5d 20 47 65 74 53 75 62 4b  string[] GetSubK
d360: 65 79 4e 61 6d 65 73 28 0d 0a 20 20 20 20 20 20  eyNames(..      
d370: 20 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65            MockRe
d380: 67 69 73 74 72 79 4b 65 79 20 6b 65 79 2c 0d 0a  gistryKey key,..
d390: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d3a0: 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20  bool whatIf,..  
d3b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f                bo
d3c0: 6f 6c 20 76 65 72 62 6f 73 65 0d 0a 20 20 20 20  ol verbose..    
d3d0: 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
d3e0: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
d3f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
d400: 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a   (key == null)..
d410: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d420: 20 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b      return null;
d430: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
d440: 20 20 20 20 69 66 20 28 76 65 72 62 6f 73 65 29      if (verbose)
d450: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
d460: 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44        TraceOps.D
d470: 65 62 75 67 41 6e 64 54 72 61 63 65 28 54 72 61  ebugAndTrace(Tra
d480: 63 65 50 72 69 6f 72 69 74 79 2e 48 69 67 68 2c  cePriority.High,
d490: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
d4a0: 20 20 20 20 20 20 20 20 20 20 64 65 62 75 67 43            debugC
d4b0: 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61  allback, traceCa
d4c0: 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46  llback, String.F
d4d0: 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
d4e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d4f0: 22 6b 65 79 20 3d 20 7b 30 7d 22 2c 20 46 6f 72  "key = {0}", For
d500: 44 69 73 70 6c 61 79 28 6b 65 79 29 29 2c 20 74  Display(key)), t
d510: 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
d520: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
d530: 20 20 72 65 74 75 72 6e 20 6b 65 79 2e 47 65 74    return key.Get
d540: 53 75 62 4b 65 79 4e 61 6d 65 73 28 29 3b 0d 0a  SubKeyNames();..
d550: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
d560: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
d570: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d580: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d590: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d5a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d5b0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
d5c0: 5b 4d 65 74 68 6f 64 49 6d 70 6c 28 4d 65 74 68  [MethodImpl(Meth
d5d0: 6f 64 49 6d 70 6c 4f 70 74 69 6f 6e 73 2e 4e 6f  odImplOptions.No
d5e0: 49 6e 6c 69 6e 69 6e 67 29 5d 0d 0a 20 20 20 20  Inlining)]..    
d5f0: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73          public s
d600: 74 61 74 69 63 20 6f 62 6a 65 63 74 20 47 65 74  tatic object Get
d610: 56 61 6c 75 65 28 0d 0a 20 20 20 20 20 20 20 20  Value(..        
d620: 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65 67 69          MockRegi
d630: 73 74 72 79 4b 65 79 20 6b 65 79 2c 0d 0a 20 20  stryKey key,..  
d640: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
d650: 72 69 6e 67 20 6e 61 6d 65 2c 0d 0a 20 20 20 20  ring name,..    
d660: 20 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65              obje
d670: 63 74 20 64 65 66 61 75 6c 74 56 61 6c 75 65 2c  ct defaultValue,
d680: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
d690: 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a    bool whatIf,..
d6a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d6b0: 62 6f 6f 6c 20 76 65 72 62 6f 73 65 0d 0a 20 20  bool verbose..  
d6c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d                ).
d6d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
d6e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d6f0: 69 66 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29  if (key == null)
d700: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
d710: 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 75 6c        return nul
d720: 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  l;....          
d730: 20 20 20 20 20 20 69 66 20 28 76 65 72 62 6f 73        if (verbos
d740: 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e)..            
d750: 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73          TraceOps
d760: 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 54  .DebugAndTrace(T
d770: 72 61 63 65 50 72 69 6f 72 69 74 79 2e 48 69 67  racePriority.Hig
d780: 68 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  h,..            
d790: 20 20 20 20 20 20 20 20 20 20 20 20 64 65 62 75              debu
d7a0: 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65  gCallback, trace
d7b0: 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67  Callback, String
d7c0: 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  .Format(..      
d7d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d7e0: 20 20 22 6b 65 79 20 3d 20 7b 30 7d 2c 20 6e 61    "key = {0}, na
d7f0: 6d 65 20 3d 20 7b 31 7d 2c 20 64 65 66 61 75 6c  me = {1}, defaul
d800: 74 56 61 6c 75 65 20 3d 20 7b 32 7d 22 2c 0d 0a  tValue = {2}",..
d810: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d820: 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c          ForDispl
d830: 61 79 28 6b 65 79 29 2c 20 46 6f 72 44 69 73 70  ay(key), ForDisp
d840: 6c 61 79 28 6e 61 6d 65 29 2c 0d 0a 20 20 20 20  lay(name),..    
d850: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d860: 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 64      ForDisplay(d
d870: 65 66 61 75 6c 74 56 61 6c 75 65 29 29 2c 20 74  efaultValue)), t
d880: 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
d890: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
d8a0: 20 20 72 65 74 75 72 6e 20 6b 65 79 2e 47 65 74    return key.Get
d8b0: 56 61 6c 75 65 28 6e 61 6d 65 2c 20 64 65 66 61  Value(name, defa
d8c0: 75 6c 74 56 61 6c 75 65 29 3b 0d 0a 20 20 20 20  ultValue);..    
d8d0: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
d8e0: 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
d8f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d900: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d910: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d920: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
d930: 20 20 20 20 20 20 20 20 20 20 20 20 5b 4d 65 74              [Met
d940: 68 6f 64 49 6d 70 6c 28 4d 65 74 68 6f 64 49 6d  hodImpl(MethodIm
d950: 70 6c 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e 6c 69  plOptions.NoInli
d960: 6e 69 6e 67 29 5d 0d 0a 20 20 20 20 20 20 20 20  ning)]..        
d970: 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69      public stati
d980: 63 20 76 6f 69 64 20 53 65 74 56 61 6c 75 65 28  c void SetValue(
d990: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
d9a0: 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65    MockRegistryKe
d9b0: 79 20 6b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20  y key,..        
d9c0: 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6e          string n
d9d0: 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ame,..          
d9e0: 20 20 20 20 20 20 6f 62 6a 65 63 74 20 76 61 6c        object val
d9f0: 75 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue,..           
da00: 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66       bool whatIf
da10: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
da20: 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 0d     bool verbose.
da30: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
da40: 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   )..            
da50: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
da60: 20 20 20 69 66 20 28 6b 65 79 20 3d 3d 20 6e 75     if (key == nu
da70: 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
da80: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 3b           return;
da90: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
daa0: 20 20 20 20 69 66 20 28 76 65 72 62 6f 73 65 29      if (verbose)
dab0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
dac0: 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44        TraceOps.D
dad0: 65 62 75 67 41 6e 64 54 72 61 63 65 28 54 72 61  ebugAndTrace(Tra
dae0: 63 65 50 72 69 6f 72 69 74 79 2e 48 69 67 68 65  cePriority.Highe
daf0: 73 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  st,..           
db00: 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65 62               deb
db10: 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63  ugCallback, trac
db20: 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e  eCallback, Strin
db30: 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
db40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
db50: 20 20 20 22 6b 65 79 20 3d 20 7b 30 7d 2c 20 6e     "key = {0}, n
db60: 61 6d 65 20 3d 20 7b 31 7d 2c 20 76 61 6c 75 65  ame = {1}, value
db70: 20 3d 20 7b 32 7d 22 2c 0d 0a 20 20 20 20 20 20   = {2}",..      
db80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
db90: 20 20 46 6f 72 44 69 73 70 6c 61 79 28 6b 65 79    ForDisplay(key
dba0: 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 6e 61  ), ForDisplay(na
dbb0: 6d 65 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28  me), ForDisplay(
dbc0: 76 61 6c 75 65 29 29 2c 0d 0a 20 20 20 20 20 20  value)),..      
dbd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dbe0: 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29    traceCategory)
dbf0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
dc00: 20 20 20 20 20 69 66 20 28 21 77 68 61 74 49 66       if (!whatIf
dc10: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
dc20: 20 20 20 20 20 20 20 6b 65 79 2e 53 65 74 56 61         key.SetVa
dc30: 6c 75 65 28 6e 61 6d 65 2c 20 76 61 6c 75 65 29  lue(name, value)
dc40: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
dc50: 20 20 20 20 20 6b 65 79 56 61 6c 75 65 73 53 65       keyValuesSe
dc60: 74 2b 2b 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  t++;..          
dc70: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
dc80: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
dc90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
dca0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
dcb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
dcc0: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
dcd0: 20 20 20 20 20 20 5b 4d 65 74 68 6f 64 49 6d 70        [MethodImp
dce0: 6c 28 4d 65 74 68 6f 64 49 6d 70 6c 4f 70 74 69  l(MethodImplOpti
dcf0: 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e 69 6e 67 29 5d  ons.NoInlining)]
dd00: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
dd10: 62 6c 69 63 20 73 74 61 74 69 63 20 76 6f 69 64  blic static void
dd20: 20 44 65 6c 65 74 65 56 61 6c 75 65 28 0d 0a 20   DeleteValue(.. 
dd30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4d                 M
dd40: 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 6b  ockRegistryKey k
dd50: 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ey,..           
dd60: 20 20 20 20 20 73 74 72 69 6e 67 20 6e 61 6d 65       string name
dd70: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
dd80: 20 20 20 62 6f 6f 6c 20 74 68 72 6f 77 4f 6e 4d     bool throwOnM
dd90: 69 73 73 69 6e 67 2c 0d 0a 20 20 20 20 20 20 20  issing,..       
dda0: 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68           bool wh
ddb0: 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20  atIf,..         
ddc0: 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65 72 62         bool verb
ddd0: 6f 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ose..           
dde0: 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
ddf0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
de00: 20 20 20 20 20 20 20 69 66 20 28 6b 65 79 20 3d         if (key =
de10: 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
de20: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
de30: 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  urn;....        
de40: 20 20 20 20 20 20 20 20 69 66 20 28 76 65 72 62          if (verb
de50: 6f 73 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ose)..          
de60: 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f            TraceO
de70: 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65  ps.DebugAndTrace
de80: 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 48  (TracePriority.H
de90: 69 67 68 65 73 74 2c 0d 0a 20 20 20 20 20 20 20  ighest,..       
dea0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
deb0: 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20   debugCallback, 
dec0: 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53  traceCallback, S
ded0: 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
dee0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
def0: 20 20 20 20 20 20 20 22 6b 65 79 20 3d 20 7b 30         "key = {0
df00: 7d 2c 20 6e 61 6d 65 20 3d 20 7b 31 7d 22 2c 20  }, name = {1}", 
df10: 46 6f 72 44 69 73 70 6c 61 79 28 6b 65 79 29 2c  ForDisplay(key),
df20: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
df30: 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73            ForDis
df40: 70 6c 61 79 28 6e 61 6d 65 29 29 2c 20 74 72 61  play(name)), tra
df50: 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
df60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
df70: 69 66 20 28 21 77 68 61 74 49 66 29 0d 0a 20 20  if (!whatIf)..  
df80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
df90: 20 20 6b 65 79 2e 44 65 6c 65 74 65 56 61 6c 75    key.DeleteValu
dfa0: 65 28 6e 61 6d 65 2c 20 74 68 72 6f 77 4f 6e 4d  e(name, throwOnM
dfb0: 69 73 73 69 6e 67 29 3b 0d 0a 0d 0a 20 20 20 20  issing);....    
dfc0: 20 20 20 20 20 20 20 20 20 20 20 20 6b 65 79 56              keyV
dfd0: 61 6c 75 65 73 44 65 6c 65 74 65 64 2b 2b 3b 0d  aluesDeleted++;.
dfe0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
dff0: 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e 64              #end
e000: 72 65 67 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20  region..        
e010: 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72  }..        #endr
e020: 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20  egion....       
e030: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
e040: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e050: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e060: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e070: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
e080: 20 20 20 20 23 72 65 67 69 6f 6e 20 53 74 72 69      #region Stri
e090: 6e 67 4c 69 73 74 20 43 6c 61 73 73 0d 0a 20 20  ngList Class..  
e0a0: 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 65        private se
e0b0: 61 6c 65 64 20 63 6c 61 73 73 20 53 74 72 69 6e  aled class Strin
e0c0: 67 4c 69 73 74 20 3a 20 4c 69 73 74 3c 73 74 72  gList : List<str
e0d0: 69 6e 67 3e 0d 0a 20 20 20 20 20 20 20 20 7b 0d  ing>..        {.
e0e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
e0f0: 6c 69 63 20 53 74 72 69 6e 67 4c 69 73 74 28 29  lic StringList()
e100: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
e110: 20 20 3a 20 62 61 73 65 28 29 0d 0a 20 20 20 20    : base()..    
e120: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
e130: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f             // do
e140: 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20   nothing...     
e150: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
e160: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
e170: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e180: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e190: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e1a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
e1b0: 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
e1c0: 63 20 53 74 72 69 6e 67 4c 69 73 74 28 49 45 6e  c StringList(IEn
e1d0: 75 6d 65 72 61 62 6c 65 3c 73 74 72 69 6e 67 3e  umerable<string>
e1e0: 20 63 6f 6c 6c 65 63 74 69 6f 6e 29 0d 0a 20 20   collection)..  
e1f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3a 20                : 
e200: 62 61 73 65 28 63 6f 6c 6c 65 63 74 69 6f 6e 29  base(collection)
e210: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
e220: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
e230: 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d   // do nothing..
e240: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
e250: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
e260: 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
e270: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
e280: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e290: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e2a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e2b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e2c0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67  ....        #reg
e2d0: 69 6f 6e 20 53 74 72 69 6e 67 44 69 63 74 69 6f  ion StringDictio
e2e0: 6e 61 72 79 20 43 6c 61 73 73 0d 0a 20 20 20 20  nary Class..    
e2f0: 20 20 20 20 70 72 69 76 61 74 65 20 73 65 61 6c      private seal
e300: 65 64 20 63 6c 61 73 73 20 53 74 72 69 6e 67 44  ed class StringD
e310: 69 63 74 69 6f 6e 61 72 79 20 3a 20 44 69 63 74  ictionary : Dict
e320: 69 6f 6e 61 72 79 3c 73 74 72 69 6e 67 2c 20 73  ionary<string, s
e330: 74 72 69 6e 67 3e 0d 0a 20 20 20 20 20 20 20 20  tring>..        
e340: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  {..            p
e350: 75 62 6c 69 63 20 53 74 72 69 6e 67 44 69 63 74  ublic StringDict
e360: 69 6f 6e 61 72 79 28 29 0d 0a 20 20 20 20 20 20  ionary()..      
e370: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
e380: 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e           // do n
e390: 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20  othing...       
e3a0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
e3b0: 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72  }..        #endr
e3c0: 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20  egion....       
e3d0: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
e3e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e3f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e400: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e410: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
e420: 20 20 20 20 23 72 65 67 69 6f 6e 20 56 65 72 73      #region Vers
e430: 69 6f 6e 4c 69 73 74 20 43 6c 61 73 73 0d 0a 20  ionList Class.. 
e440: 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
e450: 65 61 6c 65 64 20 63 6c 61 73 73 20 56 65 72 73  ealed class Vers
e460: 69 6f 6e 4c 69 73 74 20 3a 20 4c 69 73 74 3c 56  ionList : List<V
e470: 65 72 73 69 6f 6e 3e 0d 0a 20 20 20 20 20 20 20  ersion>..       
e480: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
e490: 70 75 62 6c 69 63 20 56 65 72 73 69 6f 6e 4c 69  public VersionLi
e4a0: 73 74 28 29 0d 0a 20 20 20 20 20 20 20 20 20 20  st()..          
e4b0: 20 20 20 20 20 20 3a 20 62 61 73 65 28 29 0d 0a        : base()..
e4c0: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
e4d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
e4e0: 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20  / do nothing... 
e4f0: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
e500: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
e510: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e520: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e530: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e540: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
e550: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
e560: 75 62 6c 69 63 20 56 65 72 73 69 6f 6e 4c 69 73  ublic VersionLis
e570: 74 28 49 45 6e 75 6d 65 72 61 62 6c 65 3c 56 65  t(IEnumerable<Ve
e580: 72 73 69 6f 6e 3e 20 63 6f 6c 6c 65 63 74 69 6f  rsion> collectio
e590: 6e 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n)..            
e5a0: 20 20 20 20 3a 20 62 61 73 65 28 63 6f 6c 6c 65      : base(colle
e5b0: 63 74 69 6f 6e 29 0d 0a 20 20 20 20 20 20 20 20  ction)..        
e5c0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
e5d0: 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74         // do not
e5e0: 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 20  hing...         
e5f0: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d     }..        }.
e600: 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67  .        #endreg
e610: 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f  ion....        /
e620: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e630: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e640: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e650: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e660: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
e670: 20 20 23 72 65 67 69 6f 6e 20 56 65 72 73 69 6f    #region Versio
e680: 6e 4d 61 70 20 43 6c 61 73 73 0d 0a 20 20 20 20  nMap Class..    
e690: 20 20 20 20 70 72 69 76 61 74 65 20 73 65 61 6c      private seal
e6a0: 65 64 20 63 6c 61 73 73 20 56 65 72 73 69 6f 6e  ed class Version
e6b0: 4d 61 70 20 3a 20 44 69 63 74 69 6f 6e 61 72 79  Map : Dictionary
e6c0: 3c 73 74 72 69 6e 67 2c 20 56 65 72 73 69 6f 6e  <string, Version
e6d0: 4c 69 73 74 3e 0d 0a 20 20 20 20 20 20 20 20 7b  List>..        {
e6e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
e6f0: 62 6c 69 63 20 56 65 72 73 69 6f 6e 4d 61 70 28  blic VersionMap(
e700: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
e710: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
e720: 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e    // do nothing.
e730: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
e740: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..    
e750: 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
e760: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
e770: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e780: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e790: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e7a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e7b0: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65  /....        #re
e7c0: 67 69 6f 6e 20 50 61 63 6b 61 67 65 20 43 6c 61  gion Package Cla
e7d0: 73 73 0d 0a 20 20 20 20 20 20 20 20 69 6e 74 65  ss..        inte
e7e0: 72 6e 61 6c 20 73 65 61 6c 65 64 20 63 6c 61 73  rnal sealed clas
e7f0: 73 20 50 61 63 6b 61 67 65 0d 0a 20 20 20 20 20  s Package..     
e800: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
e810: 20 20 23 72 65 67 69 6f 6e 20 50 75 62 6c 69 63    #region Public
e820: 20 43 6f 6e 73 74 72 75 63 74 6f 72 73 0d 0a 20   Constructors.. 
e830: 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
e840: 63 20 50 61 63 6b 61 67 65 28 29 0d 0a 20 20 20  c Package()..   
e850: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
e860: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64              // d
e870: 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20  o nothing...    
e880: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
e890: 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f         #endregio
e8a0: 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n....           
e8b0: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
e8c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e8d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e8e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e8f0: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
e900: 20 20 20 20 23 72 65 67 69 6f 6e 20 50 75 62 6c      #region Publ
e910: 69 63 20 50 72 6f 70 65 72 74 69 65 73 0d 0a 20  ic Properties.. 
e920: 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
e930: 74 65 20 73 74 72 69 6e 67 20 69 6e 76 61 72 69  te string invari
e940: 61 6e 74 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20  antName;..      
e950: 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 72        public str
e960: 69 6e 67 20 49 6e 76 61 72 69 61 6e 74 4e 61 6d  ing InvariantNam
e970: 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  e..            {
e980: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
e990: 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 69    get { return i
e9a0: 6e 76 61 72 69 61 6e 74 4e 61 6d 65 3b 20 7d 0d  nvariantName; }.
e9b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
e9c0: 20 73 65 74 20 7b 20 69 6e 76 61 72 69 61 6e 74   set { invariant
e9d0: 4e 61 6d 65 20 3d 20 76 61 6c 75 65 3b 20 7d 0d  Name = value; }.
e9e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
e9f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
ea00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ea10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ea20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ea30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ea40: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
ea50: 20 70 72 69 76 61 74 65 20 73 74 72 69 6e 67 20   private string 
ea60: 66 61 63 74 6f 72 79 54 79 70 65 4e 61 6d 65 3b  factoryTypeName;
ea70: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
ea80: 62 6c 69 63 20 73 74 72 69 6e 67 20 46 61 63 74  blic string Fact
ea90: 6f 72 79 54 79 70 65 4e 61 6d 65 0d 0a 20 20 20  oryTypeName..   
eaa0: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
eab0: 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20              get 
eac0: 7b 20 72 65 74 75 72 6e 20 66 61 63 74 6f 72 79  { return factory
ead0: 54 79 70 65 4e 61 6d 65 3b 20 7d 0d 0a 20 20 20  TypeName; }..   
eae0: 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74               set
eaf0: 20 7b 20 66 61 63 74 6f 72 79 54 79 70 65 4e 61   { factoryTypeNa
eb00: 6d 65 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20  me = value; }.. 
eb10: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
eb20: 20 20 20 20 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
eb60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
eb70: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
eb80: 72 69 76 61 74 65 20 41 73 73 65 6d 62 6c 79 4e  rivate AssemblyN
eb90: 61 6d 65 20 70 72 6f 76 69 64 65 72 41 73 73 65  ame providerAsse
eba0: 6d 62 6c 79 4e 61 6d 65 3b 0d 0a 20 20 20 20 20  mblyName;..     
ebb0: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 41 73         public As
ebc0: 73 65 6d 62 6c 79 4e 61 6d 65 20 50 72 6f 76 69  semblyName Provi
ebd0: 64 65 72 41 73 73 65 6d 62 6c 79 4e 61 6d 65 0d  derAssemblyName.
ebe0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
ebf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ec00: 67 65 74 20 7b 20 72 65 74 75 72 6e 20 70 72 6f  get { return pro
ec10: 76 69 64 65 72 41 73 73 65 6d 62 6c 79 4e 61 6d  viderAssemblyNam
ec20: 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  e; }..          
ec30: 20 20 20 20 20 20 73 65 74 20 7b 20 70 72 6f 76        set { prov
ec40: 69 64 65 72 41 73 73 65 6d 62 6c 79 4e 61 6d 65  iderAssemblyName
ec50: 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20   = value; }..   
ec60: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
ec70: 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
ec80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ec90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
eca0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ecb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
ecc0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69  .            pri
ecd0: 76 61 74 65 20 41 73 73 65 6d 62 6c 79 4e 61 6d  vate AssemblyNam
ece0: 65 20 64 65 73 69 67 6e 65 72 41 73 73 65 6d 62  e designerAssemb
ecf0: 6c 79 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20  lyName;..       
ed00: 20 20 20 20 20 70 75 62 6c 69 63 20 41 73 73 65       public Asse
ed10: 6d 62 6c 79 4e 61 6d 65 20 44 65 73 69 67 6e 65  mblyName Designe
ed20: 72 41 73 73 65 6d 62 6c 79 4e 61 6d 65 0d 0a 20  rAssemblyName.. 
ed30: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
ed40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65                ge
ed50: 74 20 7b 20 72 65 74 75 72 6e 20 64 65 73 69 67  t { return desig
ed60: 6e 65 72 41 73 73 65 6d 62 6c 79 4e 61 6d 65 3b  nerAssemblyName;
ed70: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
ed80: 20 20 20 20 73 65 74 20 7b 20 64 65 73 69 67 6e      set { design
ed90: 65 72 41 73 73 65 6d 62 6c 79 4e 61 6d 65 20 3d  erAssemblyName =
eda0: 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20   value; }..     
edb0: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
edc0: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
edd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ede0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
edf0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ee00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
ee10: 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
ee20: 74 65 20 62 6f 6f 6c 20 67 6c 6f 62 61 6c 41 73  te bool globalAs
ee30: 73 65 6d 62 6c 79 43 61 63 68 65 3b 0d 0a 20 20  semblyCache;..  
ee40: 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
ee50: 20 62 6f 6f 6c 20 47 6c 6f 62 61 6c 41 73 73 65   bool GlobalAsse
ee60: 6d 62 6c 79 43 61 63 68 65 0d 0a 20 20 20 20 20  mblyCache..     
ee70: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
ee80: 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20            get { 
ee90: 72 65 74 75 72 6e 20 67 6c 6f 62 61 6c 41 73 73  return globalAss
eea0: 65 6d 62 6c 79 43 61 63 68 65 3b 20 7d 0d 0a 20  emblyCache; }.. 
eeb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
eec0: 65 74 20 7b 20 67 6c 6f 62 61 6c 41 73 73 65 6d  et { globalAssem
eed0: 62 6c 79 43 61 63 68 65 20 3d 20 76 61 6c 75 65  blyCache = value
eee0: 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
eef0: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
ef00: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
ef10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ef20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ef30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ef40: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
ef50: 20 20 20 20 20 70 72 69 76 61 74 65 20 47 75 69       private Gui
ef60: 64 20 70 61 63 6b 61 67 65 49 64 3b 0d 0a 20 20  d packageId;..  
ef70: 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
ef80: 20 47 75 69 64 20 50 61 63 6b 61 67 65 49 64 0d   Guid PackageId.
ef90: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
efa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
efb0: 67 65 74 20 7b 20 72 65 74 75 72 6e 20 70 61 63  get { return pac
efc0: 6b 61 67 65 49 64 3b 20 7d 0d 0a 20 20 20 20 20  kageId; }..     
efd0: 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b             set {
efe0: 20 70 61 63 6b 61 67 65 49 64 20 3d 20 76 61 6c   packageId = val
eff0: 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  ue; }..         
f000: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
f010: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
f020: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f030: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f040: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f050: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
f060: 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 47         private G
f070: 75 69 64 20 73 65 72 76 69 63 65 49 64 3b 0d 0a  uid serviceId;..
f080: 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
f090: 69 63 20 47 75 69 64 20 53 65 72 76 69 63 65 49  ic Guid ServiceI
f0a0: 64 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  d..            {
f0b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
f0c0: 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 73    get { return s
f0d0: 65 72 76 69 63 65 49 64 3b 20 7d 0d 0a 20 20 20  erviceId; }..   
f0e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74               set
f0f0: 20 7b 20 73 65 72 76 69 63 65 49 64 20 3d 20 76   { serviceId = v
f100: 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20  alue; }..       
f110: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
f120: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
f130: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f140: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f150: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f160: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
f170: 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65           private
f180: 20 47 75 69 64 20 64 61 74 61 53 6f 75 72 63 65   Guid dataSource
f190: 49 64 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  Id;..           
f1a0: 20 70 75 62 6c 69 63 20 47 75 69 64 20 44 61 74   public Guid Dat
f1b0: 61 53 6f 75 72 63 65 49 64 0d 0a 20 20 20 20 20  aSourceId..     
f1c0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
f1d0: 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20            get { 
f1e0: 72 65 74 75 72 6e 20 64 61 74 61 53 6f 75 72 63  return dataSourc
f1f0: 65 49 64 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  eId; }..        
f200: 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 64 61          set { da
f210: 74 61 53 6f 75 72 63 65 49 64 20 3d 20 76 61 6c  taSourceId = val
f220: 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  ue; }..         
f230: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
f240: 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f270: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f280: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
f290: 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 47         private G
f2a0: 75 69 64 20 64 61 74 61 50 72 6f 76 69 64 65 72  uid dataProvider
f2b0: 49 64 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  Id;..           
f2c0: 20 70 75 62 6c 69 63 20 47 75 69 64 20 44 61 74   public Guid Dat
f2d0: 61 50 72 6f 76 69 64 65 72 49 64 0d 0a 20 20 20  aProviderId..   
f2e0: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
f2f0: 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20              get 
f300: 7b 20 72 65 74 75 72 6e 20 64 61 74 61 50 72 6f  { return dataPro
f310: 76 69 64 65 72 49 64 3b 20 7d 0d 0a 20 20 20 20  viderId; }..    
f320: 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20              set 
f330: 7b 20 64 61 74 61 50 72 6f 76 69 64 65 72 49 64  { dataProviderId
f340: 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20   = value; }..   
f350: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
f360: 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
f370: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f380: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f390: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f3a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
f3b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69  .            pri
f3c0: 76 61 74 65 20 47 75 69 64 20 61 64 6f 4e 65 74  vate Guid adoNet
f3d0: 54 65 63 68 6e 6f 6c 6f 67 79 49 64 3b 0d 0a 20  TechnologyId;.. 
f3e0: 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
f3f0: 63 20 47 75 69 64 20 41 64 6f 4e 65 74 54 65 63  c Guid AdoNetTec
f400: 68 6e 6f 6c 6f 67 79 49 64 0d 0a 20 20 20 20 20  hnologyId..     
f410: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
f420: 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20            get { 
f430: 72 65 74 75 72 6e 20 61 64 6f 4e 65 74 54 65 63  return adoNetTec
f440: 68 6e 6f 6c 6f 67 79 49 64 3b 20 7d 0d 0a 20 20  hnologyId; }..  
f450: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65                se
f460: 74 20 7b 20 61 64 6f 4e 65 74 54 65 63 68 6e 6f  t { adoNetTechno
f470: 6c 6f 67 79 49 64 20 3d 20 76 61 6c 75 65 3b 20  logyId = value; 
f480: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
f490: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 65  ..            #e
f4a0: 6e 64 72 65 67 69 6f 6e 0d 0a 20 20 20 20 20 20  ndregion..      
f4b0: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e    }..        #en
f4c0: 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20  dregion....     
f4d0: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
f4e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f4f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f500: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f510: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
f520: 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 43 6f        #region Co
f530: 6e 66 69 67 75 72 61 74 69 6f 6e 20 43 6c 61 73  nfiguration Clas
f540: 73 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61  s..        priva
f550: 74 65 20 73 65 61 6c 65 64 20 63 6c 61 73 73 20  te sealed class 
f560: 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 0d 0a 20  Configuration.. 
f570: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
f580: 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50 72        #region Pr
f590: 69 76 61 74 65 20 43 6f 6e 73 74 61 6e 74 73 0d  ivate Constants.
f5a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69  .            pri
f5b0: 76 61 74 65 20 63 6f 6e 73 74 20 63 68 61 72 20  vate const char 
f5c0: 53 77 69 74 63 68 20 3d 20 27 2d 27 3b 0d 0a 20  Switch = '-';.. 
f5d0: 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
f5e0: 74 65 20 63 6f 6e 73 74 20 63 68 61 72 20 41 6c  te const char Al
f5f0: 74 53 77 69 74 63 68 20 3d 20 27 2f 27 3b 0d 0a  tSwitch = '/';..
f600: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
f610: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f620: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f630: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f640: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f650: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
f660: 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20   private static 
f670: 72 65 61 64 6f 6e 6c 79 20 63 68 61 72 5b 5d 20  readonly char[] 
f680: 53 77 69 74 63 68 43 68 61 72 73 20 3d 20 7b 0d  SwitchChars = {.
f690: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
f6a0: 20 53 77 69 74 63 68 2c 20 41 6c 74 53 77 69 74   Switch, AltSwit
f6b0: 63 68 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ch..            
f6c0: 7d 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  };....          
f6d0: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
f6e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f6f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f700: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f710: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
f720: 20 20 20 20 20 70 72 69 76 61 74 65 20 63 6f 6e       private con
f730: 73 74 20 73 74 72 69 6e 67 20 49 6e 76 61 72 69  st string Invari
f740: 61 6e 74 4e 61 6d 65 20 3d 20 22 53 79 73 74 65  antName = "Syste
f750: 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 22 3b 0d  m.Data.SQLite";.
f760: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69  .            pri
f770: 76 61 74 65 20 63 6f 6e 73 74 20 73 74 72 69 6e  vate const strin
f780: 67 20 45 66 36 49 6e 76 61 72 69 61 6e 74 4e 61  g Ef6InvariantNa
f790: 6d 65 20 3d 20 22 53 79 73 74 65 6d 2e 44 61 74  me = "System.Dat
f7a0: 61 2e 53 51 4c 69 74 65 2e 45 46 36 22 3b 0d 0a  a.SQLite.EF6";..
f7b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
f7c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f7d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f7e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f7f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f800: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
f810: 20 70 72 69 76 61 74 65 20 63 6f 6e 73 74 20 73   private const s
f820: 74 72 69 6e 67 20 46 61 63 74 6f 72 79 54 79 70  tring FactoryTyp
f830: 65 4e 61 6d 65 20 3d 0d 0a 20 20 20 20 20 20 20  eName =..       
f840: 20 20 20 20 20 20 20 20 20 22 53 79 73 74 65 6d           "System
f850: 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 53 51 4c  .Data.SQLite.SQL
f860: 69 74 65 46 61 63 74 6f 72 79 22 3b 0d 0a 0d 0a  iteFactory";....
f870: 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76              priv
f880: 61 74 65 20 63 6f 6e 73 74 20 73 74 72 69 6e 67  ate const string
f890: 20 45 66 36 46 61 63 74 6f 72 79 54 79 70 65 4e   Ef6FactoryTypeN
f8a0: 61 6d 65 20 3d 0d 0a 20 20 20 20 20 20 20 20 20  ame =..         
f8b0: 20 20 20 20 20 20 20 22 53 79 73 74 65 6d 2e 44         "System.D
f8c0: 61 74 61 2e 53 51 4c 69 74 65 2e 45 46 36 2e 53  ata.SQLite.EF6.S
f8d0: 51 4c 69 74 65 50 72 6f 76 69 64 65 72 46 61 63  QLiteProviderFac
f8e0: 74 6f 72 79 22 3b 0d 0a 20 20 20 20 20 20 20 20  tory";..        
f8f0: 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
f900: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
f910: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f920: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f930: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f940: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f950: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
f960: 20 23 72 65 67 69 6f 6e 20 50 72 69 76 61 74 65   #region Private
f970: 20 53 74 61 74 69 63 20 44 61 74 61 0d 0a 20 20   Static Data..  
f980: 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
f990: 65 20 73 74 61 74 69 63 20 72 65 61 64 6f 6e 6c  e static readonl
f9a0: 79 20 50 72 6f 63 65 73 73 20 43 75 72 72 65 6e  y Process Curren
f9b0: 74 50 72 6f 63 65 73 73 20 3d 0d 0a 20 20 20 20  tProcess =..    
f9c0: 20 20 20 20 20 20 20 20 20 20 20 20 53 79 73 74              Syst
f9d0: 65 6d 2e 44 69 61 67 6e 6f 73 74 69 63 73 2e 50  em.Diagnostics.P
f9e0: 72 6f 63 65 73 73 2e 47 65 74 43 75 72 72 65 6e  rocess.GetCurren
f9f0: 74 50 72 6f 63 65 73 73 28 29 3b 0d 0a 0d 0a 20  tProcess();.... 
fa00: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
fa10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fa20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fa30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fa40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
fa50: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
fa60: 69 76 61 74 65 20 73 74 61 74 69 63 20 41 73 73  ivate static Ass
fa70: 65 6d 62 6c 79 20 73 79 73 74 65 6d 45 66 36 41  embly systemEf6A
fa80: 73 73 65 6d 62 6c 79 3b 0d 0a 20 20 20 20 20 20  ssembly;..      
fa90: 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
faa0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
fab0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fac0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fad0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fae0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
faf0: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
fb00: 20 20 20 23 72 65 67 69 6f 6e 20 50 72 69 76 61     #region Priva
fb10: 74 65 20 44 61 74 61 0d 0a 20 20 20 20 20 20 20  te Data..       
fb20: 20 20 20 20 20 70 72 69 76 61 74 65 20 41 73 73       private Ass
fb30: 65 6d 62 6c 79 4e 61 6d 65 20 63 6f 72 65 41 73  emblyName coreAs
fb40: 73 65 6d 62 6c 79 4e 61 6d 65 3b 0d 0a 20 20 20  semblyName;..   
fb50: 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65           private
fb60: 20 41 73 73 65 6d 62 6c 79 4e 61 6d 65 20 6c 69   AssemblyName li
fb70: 6e 71 41 73 73 65 6d 62 6c 79 4e 61 6d 65 3b 0d  nqAssemblyName;.
fb80: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69  .            pri
fb90: 76 61 74 65 20 41 73 73 65 6d 62 6c 79 4e 61 6d  vate AssemblyNam
fba0: 65 20 65 66 36 41 73 73 65 6d 62 6c 79 4e 61 6d  e ef6AssemblyNam
fbb0: 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
fbc0: 70 72 69 76 61 74 65 20 41 73 73 65 6d 62 6c 79  private Assembly
fbd0: 4e 61 6d 65 20 64 65 73 69 67 6e 65 72 41 73 73  Name designerAss
fbe0: 65 6d 62 6c 79 4e 61 6d 65 3b 0d 0a 20 20 20 20  emblyName;..    
fbf0: 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
fc00: 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  on....          
fc10: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
fc20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fc30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fc40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fc50: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
fc60: 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50 72 69       #region Pri
fc70: 76 61 74 65 20 43 6f 6e 73 74 72 75 63 74 6f 72  vate Constructor
fc80: 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  s..            p
fc90: 72 69 76 61 74 65 20 43 6f 6e 66 69 67 75 72 61  rivate Configura
fca0: 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20  tion(..         
fcb0: 20 20 20 20 20 20 20 41 73 73 65 6d 62 6c 79 20         Assembly 
fcc0: 61 73 73 65 6d 62 6c 79 2c 0d 0a 20 20 20 20 20  assembly,..     
fcd0: 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
fce0: 67 20 6c 6f 67 46 69 6c 65 4e 61 6d 65 2c 0d 0a  g logFileName,..
fcf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fd00: 73 74 72 69 6e 67 20 64 69 72 65 63 74 6f 72 79  string directory
fd10: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
fd20: 20 20 20 73 74 72 69 6e 67 20 63 6f 72 65 46 69     string coreFi
fd30: 6c 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20  leName,..       
fd40: 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
fd50: 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 2c 0d 0a 20  linqFileName,.. 
fd60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
fd70: 74 72 69 6e 67 20 65 66 36 46 69 6c 65 4e 61 6d  tring ef6FileNam
fd80: 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
fd90: 20 20 20 20 73 74 72 69 6e 67 20 64 65 73 69 67      string desig
fda0: 6e 65 72 46 69 6c 65 4e 61 6d 65 2c 0d 0a 20 20  nerFileName,..  
fdb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
fdc0: 72 69 6e 67 20 72 65 67 69 73 74 72 79 56 65 72  ring registryVer
fdd0: 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20  sion,..         
fde0: 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 63 6f         string co
fdf0: 6e 66 69 67 56 65 72 73 69 6f 6e 2c 0d 0a 20 20  nfigVersion,..  
fe00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
fe10: 72 69 6e 67 20 76 73 56 65 72 73 69 6f 6e 53 75  ring vsVersionSu
fe20: 66 66 69 78 2c 0d 0a 20 20 20 20 20 20 20 20 20  ffix,..         
fe30: 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 64 65         string de
fe40: 62 75 67 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20  bugFormat,..    
fe50: 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
fe60: 6e 67 20 74 72 61 63 65 46 6f 72 6d 61 74 2c 0d  ng traceFormat,.
fe70: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
fe80: 20 49 6e 73 74 61 6c 6c 46 6c 61 67 73 20 69 6e   InstallFlags in
fe90: 73 74 61 6c 6c 46 6c 61 67 73 2c 0d 0a 20 20 20  stallFlags,..   
fea0: 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61               Tra
feb0: 63 65 50 72 69 6f 72 69 74 79 20 64 65 62 75 67  cePriority debug
fec0: 50 72 69 6f 72 69 74 79 2c 0d 0a 20 20 20 20 20  Priority,..     
fed0: 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
fee0: 50 72 69 6f 72 69 74 79 20 74 72 61 63 65 50 72  Priority tracePr
fef0: 69 6f 72 69 74 79 2c 0d 0a 20 20 20 20 20 20 20  iority,..       
ff00: 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 70 65           bool pe
ff10: 72 55 73 65 72 2c 0d 0a 20 20 20 20 20 20 20 20  rUser,..        
ff20: 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 69 6e 73          bool ins
ff30: 74 61 6c 6c 2c 0d 0a 20 20 20 20 20 20 20 20 20  tall,..         
ff40: 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36         bool wow6
ff50: 34 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  4,..            
ff60: 20 20 20 20 62 6f 6f 6c 20 6e 6f 52 75 6e 74 69      bool noRunti
ff70: 6d 65 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20  meVersion,..    
ff80: 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
ff90: 20 6e 6f 44 65 73 6b 74 6f 70 2c 0d 0a 20 20 20   noDesktop,..   
ffa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f               boo
ffb0: 6c 20 6e 6f 43 6f 6d 70 61 63 74 2c 0d 0a 20 20  l noCompact,..  
ffc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f                bo
ffd0: 6f 6c 20 6e 6f 4e 65 74 46 78 32 30 2c 0d 0a 20  ol noNetFx20,.. 
ffe0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62                 b
fff0: 6f 6f 6c 20 6e 6f 4e 65 74 46 78 33 35 2c 0d 0a  ool noNetFx35,..
10000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10010 62 6f 6f 6c 20 6e 6f 4e 65 74 46 78 34 30 2c 0d  bool noNetFx40,.
10020 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
10030 20 62 6f 6f 6c 20 6e 6f 4e 65 74 46 78 34 35 2c   bool noNetFx45,
10040 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
10050 20 20 62 6f 6f 6c 20 6e 6f 4e 65 74 46 78 34 35    bool noNetFx45
10060 31 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  1,..            
10070 20 20 20 20 62 6f 6f 6c 20 6e 6f 56 73 32 30 30      bool noVs200
10080 35 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  5,..            
10090 20 20 20 20 62 6f 6f 6c 20 6e 6f 56 73 32 30 30      bool noVs200
100a0 38 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  8,..            
100b0 20 20 20 20 62 6f 6f 6c 20 6e 6f 56 73 32 30 31      bool noVs201
100c0 30 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  0,..            
100d0 20 20 20 20 62 6f 6f 6c 20 6e 6f 56 73 32 30 31      bool noVs201
100e0 32 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  2,..            
100f0 20 20 20 20 62 6f 6f 6c 20 6e 6f 56 73 32 30 31      bool noVs201
10100 33 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  3,..            
10110 20 20 20 20 62 6f 6f 6c 20 6e 6f 54 72 61 63 65      bool noTrace
10120 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
10130 20 20 20 62 6f 6f 6c 20 6e 6f 43 6f 6e 73 6f 6c     bool noConsol
10140 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
10150 20 20 20 20 62 6f 6f 6c 20 6e 6f 4c 6f 67 2c 0d      bool noLog,.
10160 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
10170 20 62 6f 6f 6c 20 74 68 72 6f 77 4f 6e 4d 69 73   bool throwOnMis
10180 73 69 6e 67 2c 0d 0a 20 20 20 20 20 20 20 20 20  sing,..         
10190 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74         bool what
101a0 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  If,..           
101b0 20 20 20 20 20 62 6f 6f 6c 20 64 65 62 75 67 2c       bool debug,
101c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
101d0 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c 0d    bool verbose,.
101e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
101f0 20 62 6f 6f 6c 20 63 6f 6e 66 69 72 6d 0d 0a 20   bool confirm.. 
10200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29                 )
10210 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
10220 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
10230 20 74 68 69 73 2e 61 73 73 65 6d 62 6c 79 20 3d   this.assembly =
10240 20 61 73 73 65 6d 62 6c 79 3b 0d 0a 20 20 20 20   assembly;..    
10250 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73              this
10260 2e 6c 6f 67 46 69 6c 65 4e 61 6d 65 20 3d 20 6c  .logFileName = l
10270 6f 67 46 69 6c 65 4e 61 6d 65 3b 0d 0a 20 20 20  ogFileName;..   
10280 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69               thi
10290 73 2e 64 69 72 65 63 74 6f 72 79 20 3d 20 64 69  s.directory = di
102a0 72 65 63 74 6f 72 79 3b 0d 0a 20 20 20 20 20 20  rectory;..      
102b0 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 63            this.c
102c0 6f 72 65 46 69 6c 65 4e 61 6d 65 20 3d 20 63 6f  oreFileName = co
102d0 72 65 46 69 6c 65 4e 61 6d 65 3b 0d 0a 20 20 20  reFileName;..   
102e0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69               thi
102f0 73 2e 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 20 3d  s.linqFileName =
10300 20 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 3b 0d 0a   linqFileName;..
10310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10320 74 68 69 73 2e 65 66 36 46 69 6c 65 4e 61 6d 65  this.ef6FileName
10330 20 3d 20 65 66 36 46 69 6c 65 4e 61 6d 65 3b 0d   = ef6FileName;.
10340 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
10350 20 74 68 69 73 2e 64 65 73 69 67 6e 65 72 46 69   this.designerFi
10360 6c 65 4e 61 6d 65 20 3d 20 64 65 73 69 67 6e 65  leName = designe
10370 72 46 69 6c 65 4e 61 6d 65 3b 0d 0a 20 20 20 20  rFileName;..    
10380 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73              this
10390 2e 72 65 67 69 73 74 72 79 56 65 72 73 69 6f 6e  .registryVersion
103a0 20 3d 20 72 65 67 69 73 74 72 79 56 65 72 73 69   = registryVersi
103b0 6f 6e 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  on;..           
103c0 20 20 20 20 20 74 68 69 73 2e 63 6f 6e 66 69 67       this.config
103d0 56 65 72 73 69 6f 6e 20 3d 20 63 6f 6e 66 69 67  Version = config
103e0 56 65 72 73 69 6f 6e 3b 0d 0a 20 20 20 20 20 20  Version;..      
103f0 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 76            this.v
10400 73 56 65 72 73 69 6f 6e 53 75 66 66 69 78 20 3d  sVersionSuffix =
10410 20 76 73 56 65 72 73 69 6f 6e 53 75 66 66 69 78   vsVersionSuffix
10420 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
10430 20 20 20 74 68 69 73 2e 64 65 62 75 67 46 6f 72     this.debugFor
10440 6d 61 74 20 3d 20 64 65 62 75 67 46 6f 72 6d 61  mat = debugForma
10450 74 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t;..            
10460 20 20 20 20 74 68 69 73 2e 74 72 61 63 65 46 6f      this.traceFo
10470 72 6d 61 74 20 3d 20 74 72 61 63 65 46 6f 72 6d  rmat = traceForm
10480 61 74 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at;..           
10490 20 20 20 20 20 74 68 69 73 2e 69 6e 73 74 61 6c       this.instal
104a0 6c 46 6c 61 67 73 20 3d 20 69 6e 73 74 61 6c 6c  lFlags = install
104b0 46 6c 61 67 73 3b 0d 0a 20 20 20 20 20 20 20 20  Flags;..        
104c0 20 20 20 20 20 20 20 20 74 68 69 73 2e 64 65 62          this.deb
104d0 75 67 50 72 69 6f 72 69 74 79 20 3d 20 64 65 62  ugPriority = deb
104e0 75 67 50 72 69 6f 72 69 74 79 3b 0d 0a 20 20 20  ugPriority;..   
104f0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69               thi
10500 73 2e 74 72 61 63 65 50 72 69 6f 72 69 74 79 20  s.tracePriority 
10510 3d 20 74 72 61 63 65 50 72 69 6f 72 69 74 79 3b  = tracePriority;
10520 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
10530 20 20 74 68 69 73 2e 70 65 72 55 73 65 72 20 3d    this.perUser =
10540 20 70 65 72 55 73 65 72 3b 0d 0a 20 20 20 20 20   perUser;..     
10550 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e             this.
10560 69 6e 73 74 61 6c 6c 20 3d 20 69 6e 73 74 61 6c  install = instal
10570 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l;..            
10580 20 20 20 20 74 68 69 73 2e 77 6f 77 36 34 20 3d      this.wow64 =
10590 20 77 6f 77 36 34 3b 0d 0a 20 20 20 20 20 20 20   wow64;..       
105a0 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 6e 6f           this.no
105b0 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 20 3d  RuntimeVersion =
105c0 20 6e 6f 52 75 6e 74 69 6d 65 56 65 72 73 69 6f   noRuntimeVersio
105d0 6e 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n;..            
105e0 20 20 20 20 74 68 69 73 2e 6e 6f 44 65 73 6b 74      this.noDeskt
105f0 6f 70 20 3d 20 6e 6f 44 65 73 6b 74 6f 70 3b 0d  op = noDesktop;.
10600 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
10610 20 74 68 69 73 2e 6e 6f 43 6f 6d 70 61 63 74 20   this.noCompact 
10620 3d 20 6e 6f 43 6f 6d 70 61 63 74 3b 0d 0a 20 20  = noCompact;..  
10630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
10640 69 73 2e 6e 6f 4e 65 74 46 78 32 30 20 3d 20 6e  is.noNetFx20 = n
10650 6f 4e 65 74 46 78 32 30 3b 0d 0a 20 20 20 20 20  oNetFx20;..     
10660 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e             this.
10670 6e 6f 4e 65 74 46 78 33 35 20 3d 20 6e 6f 4e 65  noNetFx35 = noNe
10680 74 46 78 33 35 3b 0d 0a 20 20 20 20 20 20 20 20  tFx35;..        
10690 20 20 20 20 20 20 20 20 74 68 69 73 2e 6e 6f 4e          this.noN
106a0 65 74 46 78 34 30 20 3d 20 6e 6f 4e 65 74 46 78  etFx40 = noNetFx
106b0 34 30 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  40;..           
106c0 20 20 20 20 20 74 68 69 73 2e 6e 6f 4e 65 74 46       this.noNetF
106d0 78 34 35 20 3d 20 6e 6f 4e 65 74 46 78 34 35 3b  x45 = noNetFx45;
106e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
106f0 20 20 74 68 69 73 2e 6e 6f 4e 65 74 46 78 34 35    this.noNetFx45
10700 31 20 3d 20 6e 6f 4e 65 74 46 78 34 35 31 3b 0d  1 = noNetFx451;.
10710 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
10720 20 74 68 69 73 2e 6e 6f 56 73 32 30 30 35 20 3d   this.noVs2005 =
10730 20 6e 6f 56 73 32 30 30 35 3b 0d 0a 20 20 20 20   noVs2005;..    
10740 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73              this
10750 2e 6e 6f 56 73 32 30 30 38 20 3d 20 6e 6f 56 73  .noVs2008 = noVs
10760 32 30 30 38 3b 0d 0a 20 20 20 20 20 20 20 20 20  2008;..         
10770 20 20 20 20 20 20 20 74 68 69 73 2e 6e 6f 56 73         this.noVs
10780 32 30 31 30 20 3d 20 6e 6f 56 73 32 30 31 30 3b  2010 = noVs2010;
10790 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
107a0 20 20 74 68 69 73 2e 6e 6f 56 73 32 30 31 32 20    this.noVs2012 
107b0 3d 20 6e 6f 56 73 32 30 31 32 3b 0d 0a 20 20 20  = noVs2012;..   
107c0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69               thi
107d0 73 2e 6e 6f 56 73 32 30 31 33 20 3d 20 6e 6f 56  s.noVs2013 = noV
107e0 73 32 30 31 33 3b 0d 0a 20 20 20 20 20 20 20 20  s2013;..        
107f0 20 20 20 20 20 20 20 20 74 68 69 73 2e 6e 6f 54          this.noT
10800 72 61 63 65 20 3d 20 6e 6f 54 72 61 63 65 3b 0d  race = noTrace;.
10810 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
10820 20 74 68 69 73 2e 6e 6f 43 6f 6e 73 6f 6c 65 20   this.noConsole 
10830 3d 20 6e 6f 43 6f 6e 73 6f 6c 65 3b 0d 0a 20 20  = noConsole;..  
10840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
10850 69 73 2e 6e 6f 4c 6f 67 20 3d 20 6e 6f 4c 6f 67  is.noLog = noLog
10860 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
10870 20 20 20 74 68 69 73 2e 74 68 72 6f 77 4f 6e 4d     this.throwOnM
10880 69 73 73 69 6e 67 20 3d 20 74 68 72 6f 77 4f 6e  issing = throwOn
10890 4d 69 73 73 69 6e 67 3b 0d 0a 20 20 20 20 20 20  Missing;..      
108a0 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 77            this.w
108b0 68 61 74 49 66 20 3d 20 77 68 61 74 49 66 3b 0d  hatIf = whatIf;.
108c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
108d0 20 74 68 69 73 2e 64 65 62 75 67 20 3d 20 64 65   this.debug = de
108e0 62 75 67 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  bug;..          
108f0 20 20 20 20 20 20 74 68 69 73 2e 76 65 72 62 6f        this.verbo
10900 73 65 20 3d 20 76 65 72 62 6f 73 65 3b 0d 0a 20  se = verbose;.. 
10910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
10920 68 69 73 2e 63 6f 6e 66 69 72 6d 20 3d 20 63 6f  his.confirm = co
10930 6e 66 69 72 6d 3b 0d 0a 20 20 20 20 20 20 20 20  nfirm;..        
10940 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
10950 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
10960 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
10970 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10980 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10990 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
109a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
109b0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
109c0 23 72 65 67 69 6f 6e 20 50 72 69 76 61 74 65 20  #region Private 
109d0 53 74 61 74 69 63 20 4d 65 74 68 6f 64 73 0d 0a  Static Methods..
109e0 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76              priv
109f0 61 74 65 20 73 74 61 74 69 63 20 76 6f 69 64 20  ate static void 
10a00 47 65 74 44 65 66 61 75 6c 74 46 69 6c 65 4e 61  GetDefaultFileNa
10a10 6d 65 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mes(..          
10a20 20 20 20 20 20 20 72 65 66 20 73 74 72 69 6e 67        ref string
10a30 20 64 69 72 65 63 74 6f 72 79 2c 0d 0a 20 20 20   directory,..   
10a40 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66               ref
10a50 20 73 74 72 69 6e 67 20 63 6f 72 65 46 69 6c 65   string coreFile
10a60 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  Name,..         
10a70 20 20 20 20 20 20 20 72 65 66 20 73 74 72 69 6e         ref strin
10a80 67 20 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 2c 0d  g linqFileName,.
10a90 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
10aa0 20 72 65 66 20 73 74 72 69 6e 67 20 65 66 36 46   ref string ef6F
10ab0 69 6c 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20  ileName,..      
10ac0 20 20 20 20 20 20 20 20 20 20 72 65 66 20 73 74            ref st
10ad0 72 69 6e 67 20 64 65 73 69 67 6e 65 72 46 69 6c  ring designerFil
10ae0 65 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 20  eName..         
10af0 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
10b00 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
10b10 20 20 20 20 20 20 20 20 20 69 66 20 28 74 68 69           if (thi
10b20 73 41 73 73 65 6d 62 6c 79 20 3d 3d 20 6e 75 6c  sAssembly == nul
10b30 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
10b40 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 3b 0d          return;.
10b50 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
10b60 20 20 20 64 69 72 65 63 74 6f 72 79 20 3d 20 50     directory = P
10b70 61 74 68 2e 47 65 74 44 69 72 65 63 74 6f 72 79  ath.GetDirectory
10b80 4e 61 6d 65 28 74 68 69 73 41 73 73 65 6d 62 6c  Name(thisAssembl
10b90 79 2e 4c 6f 63 61 74 69 6f 6e 29 3b 0d 0a 0d 0a  y.Location);....
10ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10bb0 69 66 20 28 53 74 72 69 6e 67 2e 49 73 4e 75 6c  if (String.IsNul
10bc0 6c 4f 72 45 6d 70 74 79 28 64 69 72 65 63 74 6f  lOrEmpty(directo
10bd0 72 79 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ry))..          
10be0 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
10bf0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
10c00 20 20 20 20 20 63 6f 72 65 46 69 6c 65 4e 61 6d       coreFileNam
10c10 65 20 3d 20 50 61 74 68 2e 43 6f 6d 62 69 6e 65  e = Path.Combine
10c20 28 64 69 72 65 63 74 6f 72 79 2c 0d 0a 20 20 20  (directory,..   
10c30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10c40 20 49 6e 73 74 61 6c 6c 65 72 2e 43 6f 72 65 46   Installer.CoreF
10c50 69 6c 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20  ileName);....   
10c60 20 20 20 20 20 20 20 20 20 20 20 20 20 6c 69 6e               lin
10c70 71 46 69 6c 65 4e 61 6d 65 20 3d 20 50 61 74 68  qFileName = Path
10c80 2e 43 6f 6d 62 69 6e 65 28 64 69 72 65 63 74 6f  .Combine(directo
10c90 72 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ry,..           
10ca0 20 20 20 20 20 20 20 20 20 49 6e 73 74 61 6c 6c           Install
10cb0 65 72 2e 4c 69 6e 71 46 69 6c 65 4e 61 6d 65 29  er.LinqFileName)
10cc0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
10cd0 20 20 20 20 20 65 66 36 46 69 6c 65 4e 61 6d 65       ef6FileName
10ce0 20 3d 20 50 61 74 68 2e 43 6f 6d 62 69 6e 65 28   = Path.Combine(
10cf0 64 69 72 65 63 74 6f 72 79 2c 0d 0a 20 20 20 20  directory,..    
10d00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10d10 49 6e 73 74 61 6c 6c 65 72 2e 45 66 36 46 69 6c  Installer.Ef6Fil
10d20 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20  eName);....     
10d30 20 20 20 20 20 20 20 20 20 20 20 64 65 73 69 67             desig
10d40 6e 65 72 46 69 6c 65 4e 61 6d 65 20 3d 20 50 61  nerFileName = Pa
10d50 74 68 2e 43 6f 6d 62 69 6e 65 28 64 69 72 65 63  th.Combine(direc
10d60 74 6f 72 79 2c 0d 0a 20 20 20 20 20 20 20 20 20  tory,..         
10d70 20 20 20 20 20 20 20 20 20 20 20 49 6e 73 74 61             Insta
10d80 6c 6c 65 72 2e 44 65 73 69 67 6e 65 72 46 69 6c  ller.DesignerFil
10d90 65 4e 61 6d 65 29 3b 0d 0a 20 20 20 20 20 20 20  eName);..       
10da0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
10db0 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
10dc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10dd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10de0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10df0 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
10e00 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65           private
10e10 20 73 74 61 74 69 63 20 62 6f 6f 6c 20 43 68 65   static bool Che
10e20 63 6b 4f 70 74 69 6f 6e 28 0d 0a 20 20 20 20 20  ckOption(..     
10e30 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20 73             ref s
10e40 74 72 69 6e 67 20 61 72 67 0d 0a 20 20 20 20 20  tring arg..     
10e50 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
10e60 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
10e70 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72               str
10e80 69 6e 67 20 72 65 73 75 6c 74 20 3d 20 61 72 67  ing result = arg
10e90 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
10ea0 20 20 20 20 20 69 66 20 28 21 53 74 72 69 6e 67       if (!String
10eb0 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 72  .IsNullOrEmpty(r
10ec0 65 73 75 6c 74 29 29 0d 0a 20 20 20 20 20 20 20  esult))..       
10ed0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
10ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10ef0 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
10f00 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a          // NOTE:
10f10 20 52 65 6d 6f 76 65 20 61 6c 6c 20 6c 65 61 64   Remove all lead
10f20 69 6e 67 20 73 77 69 74 63 68 20 63 68 61 72 73  ing switch chars
10f30 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
10f40 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
10f50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
10f60 65 73 75 6c 74 20 3d 20 72 65 73 75 6c 74 2e 54  esult = result.T
10f70 72 69 6d 53 74 61 72 74 28 53 77 69 74 63 68 43  rimStart(SwitchC
10f80 68 61 72 73 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  hars);....      
10f90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
10fa0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
10fb0 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 48        // NOTE: H
10fc0 6f 77 20 6d 61 6e 79 20 63 68 61 72 73 20 77 65  ow many chars we
10fd0 72 65 20 72 65 6d 6f 76 65 64 3f 0d 0a 20 20 20  re removed?..   
10fe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10ff0 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
11000 20 20 20 20 20 20 20 20 20 69 6e 74 20 63 6f 75           int cou
11010 6e 74 20 3d 20 61 72 67 2e 4c 65 6e 67 74 68 20  nt = arg.Length 
11020 2d 20 72 65 73 75 6c 74 2e 4c 65 6e 67 74 68 3b  - result.Length;
11030 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
11040 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
11050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11060 2f 2f 20 4e 4f 54 45 3a 20 57 61 73 20 74 68 65  // NOTE: Was the
11070 72 65 20 61 74 20 6c 65 61 73 74 20 6f 6e 65 3f  re at least one?
11080 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
11090 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
110a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
110b0 20 28 63 6f 75 6e 74 20 3e 20 30 29 0d 0a 20 20   (count > 0)..  
110c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
110d0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
110e0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
110f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
11100 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45           // NOTE
11110 3a 20 4f 6b 2c 20 72 65 70 6c 61 63 65 20 74 68  : Ok, replace th
11120 65 69 72 20 6f 72 69 67 69 6e 61 6c 0d 0a 20 20  eir original..  
11130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11140 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 61        //       a
11150 72 67 75 6d 65 6e 74 2e 0d 0a 20 20 20 20 20 20  rgument...      
11160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11170 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
11180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61 72                ar
11190 67 20 3d 20 72 65 73 75 6c 74 3b 0d 0a 0d 0a 20  g = result;.... 
111a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
111b0 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
111c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
111d0 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 59 65 73 2c     // NOTE: Yes,
111e0 20 74 68 69 73 20 69 73 20 61 20 73 77 69 74 63   this is a switc
111f0 68 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  h...            
11200 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
11210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11220 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74          return t
11230 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  rue;..          
11240 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
11250 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
11260 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
11270 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
11280 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
11290 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
112a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
112f0 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20   private static 
11300 62 6f 6f 6c 20 4d 61 74 63 68 4f 70 74 69 6f 6e  bool MatchOption
11310 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
11320 20 20 20 73 74 72 69 6e 67 20 61 72 67 2c 0d 0a     string arg,..
11330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11340 73 74 72 69 6e 67 20 6f 70 74 69 6f 6e 0d 0a 20  string option.. 
11350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29                 )
11360 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
11370 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
11380 20 69 66 20 28 28 61 72 67 20 3d 3d 20 6e 75 6c   if ((arg == nul
11390 6c 29 20 7c 7c 20 28 6f 70 74 69 6f 6e 20 3d 3d  l) || (option ==
113a0 20 6e 75 6c 6c 29 29 0d 0a 20 20 20 20 20 20 20   null))..       
113b0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
113c0 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20  urn false;....  
113d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
113e0 74 75 72 6e 20 53 74 72 69 6e 67 2e 43 6f 6d 70  turn String.Comp
113f0 61 72 65 28 61 72 67 2c 20 30 2c 20 6f 70 74 69  are(arg, 0, opti
11400 6f 6e 2c 20 30 2c 0d 0a 20 20 20 20 20 20 20 20  on, 0,..        
11410 20 20 20 20 20 20 20 20 20 20 20 20 61 72 67 2e              arg.
11420 4c 65 6e 67 74 68 2c 20 53 74 72 69 6e 67 43 6f  Length, StringCo
11430 6d 70 61 72 69 73 6f 6e 2e 4f 72 64 69 6e 61 6c  mparison.Ordinal
11440 49 67 6e 6f 72 65 43 61 73 65 29 20 3d 3d 20 30  IgnoreCase) == 0
11450 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
11460 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
11470 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11480 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11490 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
114a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
114b0 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
114c0 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69     private stati
114d0 63 20 62 6f 6f 6c 3f 20 50 61 72 73 65 42 6f 6f  c bool? ParseBoo
114e0 6c 65 61 6e 28 0d 0a 20 20 20 20 20 20 20 20 20  lean(..         
114f0 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 74 65         string te
11500 78 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  xt..            
11510 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20      )..         
11520 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
11530 20 20 20 20 20 20 69 66 20 28 21 53 74 72 69 6e        if (!Strin
11540 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28  g.IsNullOrEmpty(
11550 74 65 78 74 29 29 0d 0a 20 20 20 20 20 20 20 20  text))..        
11560 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
11570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62                 b
11580 6f 6f 6c 20 76 61 6c 75 65 3b 0d 0a 0d 0a 20 20  ool value;....  
11590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
115a0 20 20 69 66 20 28 62 6f 6f 6c 2e 54 72 79 50 61    if (bool.TryPa
115b0 72 73 65 28 74 65 78 74 2c 20 6f 75 74 20 76 61  rse(text, out va
115c0 6c 75 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20  lue))..         
115d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
115e0 65 74 75 72 6e 20 76 61 6c 75 65 3b 0d 0a 20 20  eturn value;..  
115f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
11600 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
11610 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d     return null;.
11620 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
11630 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
11640 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
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 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
11690 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20   private static 
116a0 6f 62 6a 65 63 74 20 50 61 72 73 65 45 6e 75 6d  object ParseEnum
116b0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
116c0 20 20 20 54 79 70 65 20 65 6e 75 6d 54 79 70 65     Type enumType
116d0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
116e0 20 20 20 73 74 72 69 6e 67 20 74 65 78 74 2c 0d     string text,.
116f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
11700 20 62 6f 6f 6c 20 6e 6f 43 61 73 65 0d 0a 20 20   bool noCase..  
11710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d                ).
11720 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
11730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11740 69 66 20 28 28 65 6e 75 6d 54 79 70 65 20 3d 3d  if ((enumType ==
11750 20 6e 75 6c 6c 29 20 7c 7c 20 21 65 6e 75 6d 54   null) || !enumT
11760 79 70 65 2e 49 73 45 6e 75 6d 29 0d 0a 20 20 20  ype.IsEnum)..   
11770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11780 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d   return null;...
11790 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
117a0 20 69 66 20 28 21 53 74 72 69 6e 67 2e 49 73 4e   if (!String.IsN
117b0 75 6c 6c 4f 72 45 6d 70 74 79 28 74 65 78 74 29  ullOrEmpty(text)
117c0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
117d0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
117e0 20 20 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20            try.. 
117f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11800 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
11810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
11820 74 75 72 6e 20 45 6e 75 6d 2e 50 61 72 73 65 28  turn Enum.Parse(
11830 65 6e 75 6d 54 79 70 65 2c 20 74 65 78 74 2c 20  enumType, text, 
11840 6e 6f 43 61 73 65 29 3b 0d 0a 20 20 20 20 20 20  noCase);..      
11850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
11860 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
11870 20 20 20 20 20 63 61 74 63 68 0d 0a 20 20 20 20       catch..    
11880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11890 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
118a0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f             // do
118b0 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20   nothing...     
118c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
118d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
118e0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
118f0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 75         return nu
11900 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll;..           
11910 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
11920 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
11930 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11940 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11950 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11960 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
11970 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61       private sta
11980 74 69 63 20 62 6f 6f 6c 20 49 73 53 79 73 74 65  tic bool IsSyste
11990 6d 45 66 36 41 73 73 65 6d 62 6c 79 41 76 61 69  mEf6AssemblyAvai
119a0 6c 61 62 6c 65 28 29 0d 0a 20 20 20 20 20 20 20  lable()..       
119b0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
119c0 20 20 20 20 20 20 20 20 69 66 20 28 73 79 73 74          if (syst
119d0 65 6d 45 66 36 41 73 73 65 6d 62 6c 79 20 21 3d  emEf6Assembly !=
119e0 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
119f0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
11a00 72 6e 20 74 72 75 65 3b 0d 0a 0d 0a 20 20 20 20  rn true;....    
11a10 20 20 20 20 20 20 20 20 20 20 20 20 74 72 79 0d              try.
11a20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
11a30 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
11a40 20 20 20 20 20 20 20 20 73 79 73 74 65 6d 45 66          systemEf
11a50 36 41 73 73 65 6d 62 6c 79 20 3d 20 41 73 73 65  6Assembly = Asse
11a60 6d 62 6c 79 2e 52 65 66 6c 65 63 74 69 6f 6e 4f  mbly.ReflectionO
11a70 6e 6c 79 4c 6f 61 64 28 0d 0a 20 20 20 20 20 20  nlyLoad(..      
11a80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11a90 20 20 53 79 73 74 65 6d 45 66 36 41 73 73 65 6d    SystemEf6Assem
11aa0 62 6c 79 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20  blyName);....   
11ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11ac0 20 69 66 20 28 73 79 73 74 65 6d 45 66 36 41 73   if (systemEf6As
11ad0 73 65 6d 62 6c 79 20 21 3d 20 6e 75 6c 6c 29 0d  sembly != null).
11ae0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
11af0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
11b00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11b10 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e  TraceOps.DebugAn
11b20 64 54 72 61 63 65 28 54 72 61 63 65 50 72 69 6f  dTrace(TracePrio
11b30 72 69 74 79 2e 48 69 67 68 65 73 74 2c 0d 0a 20  rity.Highest,.. 
11b40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11b50 20 20 20 20 20 20 20 20 20 20 20 64 65 62 75 67             debug
11b60 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43  Callback, traceC
11b70 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e  allback, String.
11b80 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
11b90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11ba0 20 20 20 20 20 22 45 6e 74 69 74 79 20 46 72 61       "Entity Fra
11bb0 6d 65 77 6f 72 6b 20 36 20 61 73 73 65 6d 62 6c  mework 6 assembl
11bc0 79 20 77 61 73 20 72 65 73 6f 6c 76 65 64 20 74  y was resolved t
11bd0 6f 20 7b 30 7d 2e 22 2c 0d 0a 20 20 20 20 20 20  o {0}.",..      
11be0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11bf0 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79        ForDisplay
11c00 28 73 79 73 74 65 6d 45 66 36 41 73 73 65 6d 62  (systemEf6Assemb
11c10 6c 79 2e 4c 6f 63 61 74 69 6f 6e 29 29 2c 0d 0a  ly.Location)),..
11c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11c30 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
11c40 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20  eCategory);.... 
11c50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11c60 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72         return tr
11c70 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
11c80 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
11c90 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
11ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
11cb0 61 74 63 68 0d 0a 20 20 20 20 20 20 20 20 20 20  atch..          
11cc0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
11cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
11ce0 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20  do nothing...   
11cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
11d00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
11d10 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67    TraceOps.Debug
11d20 41 6e 64 54 72 61 63 65 28 54 72 61 63 65 50 72  AndTrace(TracePr
11d30 69 6f 72 69 74 79 2e 48 69 67 68 65 73 74 2c 0d  iority.Highest,.
11d40 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
11d50 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61       debugCallba
11d60 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63  ck, traceCallbac
11d70 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  k,..            
11d80 20 20 20 20 20 20 20 20 22 45 6e 74 69 74 79 20          "Entity 
11d90 46 72 61 6d 65 77 6f 72 6b 20 36 20 61 73 73 65  Framework 6 asse
11da0 6d 62 6c 79 20 77 61 73 20 6e 6f 74 20 72 65 73  mbly was not res
11db0 6f 6c 76 65 64 2e 22 2c 0d 0a 20 20 20 20 20 20  olved.",..      
11dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
11dd0 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d  aceCategory);...
11de0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
11df0 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
11e00 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
11e10 20 20 20 20 20 20 20 20 20 20 20 23 65 6e 64 72             #endr
11e20 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20  egion....       
11e30 20 20 20 20 20 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 2f 2f 2f 2f 2f  ////////////////
11e60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11e70 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
11e80 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20          #region 
11e90 50 75 62 6c 69 63 20 53 74 61 74 69 63 20 4d 65  Public Static Me
11ea0 74 68 6f 64 73 0d 0a 20 20 20 20 20 20 20 20 20  thods..         
11eb0 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63     public static
11ec0 20 76 6f 69 64 20 42 72 65 61 6b 49 6e 74 6f 44   void BreakIntoD
11ed0 65 62 75 67 67 65 72 28 29 0d 0a 20 20 20 20 20  ebugger()..     
11ee0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
11ef0 20 20 20 20 20 20 20 20 20 20 43 6f 6e 73 6f 6c            Consol
11f00 65 2e 57 72 69 74 65 4c 69 6e 65 28 0d 0a 20 20  e.WriteLine(..  
11f10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11f20 20 20 22 41 74 74 61 63 68 20 61 20 64 65 62 75    "Attach a debu
11f30 67 67 65 72 20 74 6f 20 70 72 6f 63 65 73 73 20  gger to process 
11f40 7b 30 7d 20 61 6e 64 20 70 72 65 73 73 20 61 6e  {0} and press an
11f50 79 20 6b 65 79 20 74 6f 20 22 20 2b 0d 0a 20 20  y key to " +..  
11f60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11f70 20 20 22 63 6f 6e 74 69 6e 75 65 2e 22 2c 20 28    "continue.", (
11f80 43 75 72 72 65 6e 74 50 72 6f 63 65 73 73 20 21  CurrentProcess !
11f90 3d 20 6e 75 6c 6c 29 20 3f 0d 0a 20 20 20 20 20  = null) ?..     
11fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43                 C
11fb0 75 72 72 65 6e 74 50 72 6f 63 65 73 73 2e 49 64  urrentProcess.Id
11fc0 2e 54 6f 53 74 72 69 6e 67 28 29 20 3a 20 22 3c  .ToString() : "<
11fd0 75 6e 6b 6e 6f 77 6e 3e 22 29 3b 0d 0a 0d 0a 20  unknown>");.... 
11fe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
11ff0 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ry..            
12000 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
12010 20 20 20 20 20 20 20 20 20 20 20 43 6f 6e 73 6f             Conso
12020 6c 65 2e 52 65 61 64 4b 65 79 28 74 72 75 65 29  le.ReadKey(true)
12030 3b 20 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a 20  ; /* throw */.. 
12040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
12050 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
12060 20 20 63 61 74 63 68 20 28 49 6e 76 61 6c 69 64    catch (Invalid
12070 4f 70 65 72 61 74 69 6f 6e 45 78 63 65 70 74 69  OperationExcepti
12080 6f 6e 29 20 2f 2f 20 43 6f 6e 73 6f 6c 65 2e 52  on) // Console.R
12090 65 61 64 4b 65 79 0d 0a 20 20 20 20 20 20 20 20  eadKey..        
120a0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
120b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
120c0 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20  / do nothing... 
120d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
120e0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
120f0 20 20 20 20 44 65 62 75 67 67 65 72 2e 42 72 65      Debugger.Bre
12100 61 6b 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ak();..         
12110 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
12120 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
12130 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12140 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12150 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12160 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
12170 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74         public st
12180 61 74 69 63 20 43 6f 6e 66 69 67 75 72 61 74 69  atic Configurati
12190 6f 6e 20 43 72 65 61 74 65 44 65 66 61 75 6c 74  on CreateDefault
121a0 28 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ()..            
121b0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
121c0 20 20 20 73 74 72 69 6e 67 20 64 69 72 65 63 74     string direct
121d0 6f 72 79 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20  ory = null;..   
121e0 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72               str
121f0 69 6e 67 20 63 6f 72 65 46 69 6c 65 4e 61 6d 65  ing coreFileName
12200 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20   = null;..      
12210 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
12220 20 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 20 3d 20   linqFileName = 
12230 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20  null;..         
12240 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 65 66         string ef
12250 36 46 69 6c 65 4e 61 6d 65 20 3d 20 6e 75 6c 6c  6FileName = null
12260 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
12270 20 20 20 73 74 72 69 6e 67 20 64 65 73 69 67 6e     string design
12280 65 72 46 69 6c 65 4e 61 6d 65 20 3d 20 6e 75 6c  erFileName = nul
12290 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  l;....          
122a0 20 20 20 20 20 20 47 65 74 44 65 66 61 75 6c 74        GetDefault
122b0 46 69 6c 65 4e 61 6d 65 73 28 0d 0a 20 20 20 20  FileNames(..    
122c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
122d0 72 65 66 20 64 69 72 65 63 74 6f 72 79 2c 20 72  ref directory, r
122e0 65 66 20 63 6f 72 65 46 69 6c 65 4e 61 6d 65 2c  ef coreFileName,
122f0 20 72 65 66 20 6c 69 6e 71 46 69 6c 65 4e 61 6d   ref linqFileNam
12300 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
12310 20 20 20 20 20 20 20 20 72 65 66 20 65 66 36 46          ref ef6F
12320 69 6c 65 4e 61 6d 65 2c 20 72 65 66 20 64 65 73  ileName, ref des
12330 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65 29 3b 0d  ignerFileName);.
12340 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
12350 20 20 20 72 65 74 75 72 6e 20 6e 65 77 20 43 6f     return new Co
12360 6e 66 69 67 75 72 61 74 69 6f 6e 28 0d 0a 20 20  nfiguration(..  
12370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12380 20 20 74 68 69 73 41 73 73 65 6d 62 6c 79 2c 20    thisAssembly, 
12390 6e 75 6c 6c 2c 20 64 69 72 65 63 74 6f 72 79 2c  null, directory,
123a0 20 63 6f 72 65 46 69 6c 65 4e 61 6d 65 2c 20 6c   coreFileName, l
123b0 69 6e 71 46 69 6c 65 4e 61 6d 65 2c 0d 0a 20 20  inqFileName,..  
123c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
123d0 20 20 65 66 36 46 69 6c 65 4e 61 6d 65 2c 20 64    ef6FileName, d
123e0 65 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65 2c  esignerFileName,
123f0 20 6e 75 6c 6c 2c 20 6e 75 6c 6c 2c 20 6e 75 6c   null, null, nul
12400 6c 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l,..            
12410 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73          TraceOps
12420 2e 44 65 62 75 67 46 6f 72 6d 61 74 2c 20 54 72  .DebugFormat, Tr
12430 61 63 65 4f 70 73 2e 54 72 61 63 65 46 6f 72 6d  aceOps.TraceForm
12440 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at,..           
12450 20 20 20 20 20 20 20 20 20 49 6e 73 74 61 6c 6c           Install
12460 46 6c 61 67 73 2e 44 65 66 61 75 6c 74 2c 20 54  Flags.Default, T
12470 72 61 63 65 50 72 69 6f 72 69 74 79 2e 44 65 66  racePriority.Def
12480 61 75 6c 74 2c 0d 0a 20 20 20 20 20 20 20 20 20  ault,..         
12490 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
124a0 50 72 69 6f 72 69 74 79 2e 44 65 66 61 75 6c 74  Priority.Default
124b0 2c 20 66 61 6c 73 65 2c 20 74 72 75 65 2c 20 66  , false, true, f
124c0 61 6c 73 65 2c 20 66 61 6c 73 65 2c 20 66 61 6c  alse, false, fal
124d0 73 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se,..           
124e0 20 20 20 20 20 20 20 20 20 66 61 6c 73 65 2c 20           false, 
124f0 66 61 6c 73 65 2c 20 66 61 6c 73 65 2c 20 66 61  false, false, fa
12500 6c 73 65 2c 20 66 61 6c 73 65 2c 20 66 61 6c 73  lse, false, fals
12510 65 2c 20 66 61 6c 73 65 2c 20 66 61 6c 73 65 2c  e, false, false,
12520 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
12530 20 20 20 20 20 20 66 61 6c 73 65 2c 20 66 61 6c        false, fal
12540 73 65 2c 20 66 61 6c 73 65 2c 20 66 61 6c 73 65  se, false, false
12550 2c 20 66 61 6c 73 65 2c 20 66 61 6c 73 65 2c 20  , false, false, 
12560 74 72 75 65 2c 20 74 72 75 65 2c 0d 0a 20 20 20  true, true,..   
12570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12580 20 66 61 6c 73 65 2c 20 66 61 6c 73 65 2c 20 66   false, false, f
12590 61 6c 73 65 29 3b 0d 0a 20 20 20 20 20 20 20 20  alse);..        
125a0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
125b0 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
125c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
125d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
125e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
125f0 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
12600 20 20 20 20 20 20 20 20 5b 4d 65 74 68 6f 64 49          [MethodI
12610 6d 70 6c 28 4d 65 74 68 6f 64 49 6d 70 6c 4f 70  mpl(MethodImplOp
12620 74 69 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e 69 6e 67  tions.NoInlining
12630 29 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  )]..            
12640 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 62 6f  public static bo
12650 6f 6c 20 46 72 6f 6d 41 72 67 73 28 0d 0a 20 20  ol FromArgs(..  
12660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
12670 72 69 6e 67 5b 5d 20 61 72 67 73 2c 0d 0a 20 20  ring[] args,..  
12680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f                bo
12690 6f 6c 20 73 74 72 69 63 74 2c 0d 0a 20 20 20 20  ol strict,..    
126a0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20              ref 
126b0 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 63 6f  Configuration co
126c0 6e 66 69 67 75 72 61 74 69 6f 6e 2c 0d 0a 20 20  nfiguration,..  
126d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
126e0 66 20 73 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a  f string error..
126f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12700 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
12710 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
12720 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20    try..         
12730 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
12740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
12750 20 28 61 72 67 73 20 3d 3d 20 6e 75 6c 6c 29 0d   (args == null).
12760 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
12770 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
12780 74 72 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  true;....       
12790 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
127a0 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 3d  (configuration =
127b0 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
127c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
127d0 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 3d   configuration =
127e0 20 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 43   Configuration.C
127f0 72 65 61 74 65 44 65 66 61 75 6c 74 28 29 3b 0d  reateDefault();.
12800 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
12810 20 20 20 20 20 20 20 69 6e 74 20 6c 65 6e 67 74         int lengt
12820 68 20 3d 20 61 72 67 73 2e 4c 65 6e 67 74 68 3b  h = args.Length;
12830 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
12840 20 20 20 20 20 20 20 20 66 6f 72 20 28 69 6e 74          for (int
12850 20 69 6e 64 65 78 20 3d 20 30 3b 20 69 6e 64 65   index = 0; inde
12860 78 20 3c 20 6c 65 6e 67 74 68 3b 20 69 6e 64 65  x < length; inde
12870 78 2b 2b 29 0d 0a 20 20 20 20 20 20 20 20 20 20  x++)..          
12880 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
12890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
128a0 20 20 20 20 20 73 74 72 69 6e 67 20 61 72 67 20       string arg 
128b0 3d 20 61 72 67 73 5b 69 6e 64 65 78 5d 3b 0d 0a  = args[index];..
128c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
128d0 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
128e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
128f0 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 53        // NOTE: S
12900 6b 69 70 20 61 6e 79 20 61 72 67 75 6d 65 6e 74  kip any argument
12910 20 74 68 61 74 20 69 73 20 6e 75 6c 6c 20 28 3f   that is null (?
12920 29 20 6f 72 20 61 6e 20 65 6d 70 74 79 0d 0a 20  ) or an empty.. 
12930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12940 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
12950 73 74 72 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20  string...       
12960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12970 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
12980 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
12990 28 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72  (String.IsNullOr
129a0 45 6d 70 74 79 28 61 72 67 29 29 0d 0a 20 20 20  Empty(arg))..   
129b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
129c0 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75           continu
129d0 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e;....          
129e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
129f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
12a00 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54            // NOT
12a10 45 3a 20 57 65 20 61 72 65 20 67 6f 69 6e 67 20  E: We are going 
12a20 74 6f 20 6d 6f 64 69 66 79 20 74 68 65 20 6f 72  to modify the or
12a30 69 67 69 6e 61 6c 20 61 72 67 75 6d 65 6e 74 0d  iginal argument.
12a40 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
12a50 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
12a60 20 20 62 79 20 72 65 6d 6f 76 69 6e 67 20 61 6e    by removing an
12a70 79 20 6c 65 61 64 69 6e 67 20 6f 70 74 69 6f 6e  y leading option
12a80 20 63 68 61 72 61 63 74 65 72 73 3b 0d 0a 20 20   characters;..  
12a90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12aa0 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 74        //       t
12ab0 68 65 72 65 66 6f 72 65 2c 20 77 65 20 75 73 65  herefore, we use
12ac0 20 61 20 6e 65 77 20 73 74 72 69 6e 67 20 74 6f   a new string to
12ad0 20 68 6f 6c 64 20 74 68 65 0d 0a 20 20 20 20 20   hold the..     
12ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12af0 20 20 20 2f 2f 20 20 20 20 20 20 20 6d 6f 64 69     //       modi
12b00 66 69 65 64 20 61 72 67 75 6d 65 6e 74 2e 0d 0a  fied argument...
12b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12b20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
12b30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12b40 20 20 20 20 73 74 72 69 6e 67 20 6e 65 77 41 72      string newAr
12b50 67 20 3d 20 61 72 67 3b 0d 0a 0d 0a 20 20 20 20  g = arg;....    
12b60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12b70 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
12b80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12b90 2f 2f 20 4e 4f 54 45 3a 20 41 6c 6c 20 74 68 65  // NOTE: All the
12ba0 20 73 75 70 70 6f 72 74 65 64 20 63 6f 6d 6d 61   supported comma
12bb0 6e 64 20 6c 69 6e 65 20 6f 70 74 69 6f 6e 73 20  nd line options 
12bc0 6d 75 73 74 0d 0a 20 20 20 20 20 20 20 20 20 20  must..          
12bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
12be0 20 20 20 20 20 20 20 62 65 67 69 6e 20 77 69 74         begin wit
12bf0 68 20 61 6e 20 6f 70 74 69 6f 6e 20 63 68 61 72  h an option char
12c00 61 63 74 65 72 20 28 65 2e 67 2e 20 61 20 6d 69  acter (e.g. a mi
12c10 6e 75 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20  nus..           
12c20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
12c30 20 20 20 20 20 20 6f 72 20 66 6f 72 77 61 72 64        or forward
12c40 20 73 6c 61 73 68 29 3b 20 61 74 74 65 6d 70 74   slash); attempt
12c50 20 74 6f 20 76 61 6c 69 64 61 74 65 20 74 68 61   to validate tha
12c60 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  t..             
12c70 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
12c80 20 20 20 20 6e 6f 77 2e 20 20 49 66 20 77 65 20      now.  If we 
12c90 66 61 69 6c 20 69 6e 20 73 74 72 69 63 74 20 6d  fail in strict m
12ca0 6f 64 65 2c 20 77 65 20 61 72 65 20 64 6f 6e 65  ode, we are done
12cb0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
12cc0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
12cd0 20 20 20 20 6f 74 68 65 72 77 69 73 65 2c 20 6a      otherwise, j
12ce0 75 73 74 20 73 6b 69 70 20 74 68 69 73 20 61 72  ust skip this ar
12cf0 67 75 6d 65 6e 74 20 61 6e 64 20 61 64 76 61 6e  gument and advan
12d00 63 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ce..            
12d10 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
12d20 20 20 20 20 20 74 6f 20 74 68 65 20 6e 65 78 74       to the next
12d30 20 6f 6e 65 2e 0d 0a 20 20 20 20 20 20 20 20 20   one...         
12d40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
12d50 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
12d60 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21             if (!
12d70 43 68 65 63 6b 4f 70 74 69 6f 6e 28 72 65 66 20  CheckOption(ref 
12d80 6e 65 77 41 72 67 29 29 0d 0a 20 20 20 20 20 20  newArg))..      
12d90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12da0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
12db0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12dc0 20 65 72 72 6f 72 20 3d 20 54 72 61 63 65 4f 70   error = TraceOp
12dd0 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28  s.DebugAndTrace(
12de0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
12df0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12e00 20 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e    TracePriority.
12e10 4c 6f 77 65 73 74 2c 20 64 65 62 75 67 43 61 6c  Lowest, debugCal
12e20 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20  lback,..        
12e30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12e40 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c          traceCal
12e50 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f  lback, String.Fo
12e60 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
12e70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12e80 20 20 20 20 20 20 20 22 55 6e 73 75 70 70 6f 72         "Unsuppor
12e90 74 65 64 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65  ted command line
12ea0 20 61 72 67 75 6d 65 6e 74 3a 20 7b 30 7d 22 2c   argument: {0}",
12eb0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
12ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12ed0 20 20 46 6f 72 44 69 73 70 6c 61 79 28 61 72 67    ForDisplay(arg
12ee0 29 29 2c 20 74 72 61 63 65 43 61 74 65 67 6f 72  )), traceCategor
12ef0 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
12f00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12f10 20 20 20 69 66 20 28 73 74 72 69 63 74 29 0d 0a     if (strict)..
12f20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12f40 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d  return false;...
12f50 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
12f60 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
12f70 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20  tinue;..        
12f80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12f90 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
12fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
12fb0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
12fc0 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45           // NOTE
12fd0 3a 20 41 6c 6c 20 74 68 65 20 73 75 70 70 6f 72  : All the suppor
12fe0 74 65 64 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65  ted command line
12ff0 20 6f 70 74 69 6f 6e 73 20 6d 75 73 74 0d 0a 20   options must.. 
13000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13010 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
13020 68 61 76 65 20 61 20 76 61 6c 75 65 3b 20 74 68  have a value; th
13030 65 72 65 66 6f 72 65 2c 20 61 74 74 65 6d 70 74  erefore, attempt
13040 20 74 6f 20 61 64 76 61 6e 63 65 0d 0a 20 20 20   to advance..   
13050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13060 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 74 6f       //       to
13070 20 69 74 20 6e 6f 77 2e 20 20 49 66 20 77 65 20   it now.  If we 
13080 66 61 69 6c 2c 20 77 65 20 61 72 65 20 64 6f 6e  fail, we are don
13090 65 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e...            
130a0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
130b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
130c0 20 20 20 20 20 20 20 20 69 6e 64 65 78 2b 2b 3b          index++;
130d0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
130e0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
130f0 69 6e 64 65 78 20 3e 3d 20 6c 65 6e 67 74 68 29  index >= length)
13100 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
13110 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
13120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13130 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d           error =
13140 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41   TraceOps.DebugA
13150 6e 64 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20  ndTrace(..      
13160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13170 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 50            TraceP
13180 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20  riority.Lowest, 
13190 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a  debugCallback,..
131a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
131b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
131c0 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53  traceCallback, S
131d0 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
131e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
131f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
13200 4d 69 73 73 69 6e 67 20 76 61 6c 75 65 20 66 6f  Missing value fo
13210 72 20 6f 70 74 69 6f 6e 3a 20 7b 30 7d 22 2c 0d  r option: {0}",.
13220 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
13230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13240 20 46 6f 72 44 69 73 70 6c 61 79 28 61 72 67 29   ForDisplay(arg)
13250 29 2c 20 74 72 61 63 65 43 61 74 65 67 6f 72 79  ), traceCategory
13260 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
13270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13280 20 20 69 66 20 28 73 74 72 69 63 74 29 0d 0a 20    if (strict).. 
13290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
132a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
132b0 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a  eturn false;....
132c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
132d0 20 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61              brea
132e0 6b 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  k;..            
132f0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
13300 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
13310 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
13320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13330 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 47 72       // NOTE: Gr
13340 61 62 20 74 68 65 20 74 65 78 74 75 61 6c 20 76  ab the textual v
13350 61 6c 75 65 20 6f 66 20 74 68 69 73 20 63 6f 6d  alue of this com
13360 6d 61 6e 64 20 6c 69 6e 65 0d 0a 20 20 20 20 20  mand line..     
13370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13380 20 20 20 2f 2f 20 20 20 20 20 20 20 6f 70 74 69     //       opti
13390 6f 6e 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  on...           
133a0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
133b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
133c0 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
133d0 74 65 78 74 20 3d 20 61 72 67 73 5b 69 6e 64 65  text = args[inde
133e0 78 5d 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  x];....         
133f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
13400 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
13410 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f             // NO
13420 54 45 3a 20 46 69 67 75 72 65 20 6f 75 74 20 77  TE: Figure out w
13430 68 69 63 68 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e  hich command lin
13440 65 20 6f 70 74 69 6f 6e 20 74 68 69 73 20 69 73  e option this is
13450 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
13460 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
13470 20 20 20 28 62 61 73 65 64 20 6f 6e 20 61 20 70     (based on a p
13480 61 72 74 69 61 6c 20 6e 61 6d 65 20 6d 61 74 63  artial name matc
13490 68 29 20 61 6e 64 20 74 68 65 6e 20 74 72 79 0d  h) and then try.
134a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
134b0 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
134c0 20 20 74 6f 20 69 6e 74 65 72 70 72 65 74 20 74    to interpret t
134d0 68 65 20 74 65 78 74 75 61 6c 20 76 61 6c 75 65  he textual value
134e0 20 61 73 20 74 68 65 20 63 6f 72 72 65 63 74 0d   as the correct.
134f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
13500 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
13510 20 20 74 79 70 65 2e 0d 0a 20 20 20 20 20 20 20    type...       
13520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13530 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
13540 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
13550 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77  (MatchOption(new
13560 41 72 67 2c 20 22 62 72 65 61 6b 22 29 29 0d 0a  Arg, "break"))..
13570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13580 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
13590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
135a0 20 20 20 20 20 20 20 62 6f 6f 6c 3f 20 76 61 6c         bool? val
135b0 75 65 20 3d 20 50 61 72 73 65 42 6f 6f 6c 65 61  ue = ParseBoolea
135c0 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a 20 20 20 20  n(text);....    
135d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
135e0 20 20 20 20 20 20 20 20 69 66 20 28 76 61 6c 75          if (valu
135f0 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  e == null)..    
13600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13610 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
13620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13630 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72             error
13640 20 3d 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75   = TraceOps.Debu
13650 67 41 6e 64 54 72 61 63 65 28 0d 0a 20 20 20 20  gAndTrace(..    
13660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13680 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f  TracePriority.Lo
13690 77 65 73 74 2c 20 64 65 62 75 67 43 61 6c 6c 62  west, debugCallb
136a0 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ack,..          
136b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
136c0 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
136d0 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e  allback, String.
136e0 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
136f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13700 20 20 20 20 20 20 20 20 20 20 20 20 20 22 49 6e               "In
13710 76 61 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c 65 61  valid {0} boolea
13720 6e 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a  n value: {1}",..
13730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13750 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 61      ForDisplay(a
13760 72 67 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28  rg), ForDisplay(
13770 74 65 78 74 29 29 2c 0d 0a 20 20 20 20 20 20 20  text)),..       
13780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13790 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
137a0 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
137b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
137c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
137d0 69 66 20 28 73 74 72 69 63 74 29 0d 0a 20 20 20  if (strict)..   
137e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
137f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13800 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
13810 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
13820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13830 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20    continue;..   
13840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13850 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
13860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13870 20 20 20 20 20 20 20 20 20 20 69 66 20 28 28 62            if ((b
13880 6f 6f 6c 29 76 61 6c 75 65 29 0d 0a 20 20 20 20  ool)value)..    
13890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
138a0 20 20 20 20 20 20 20 20 20 20 20 20 42 72 65 61              Brea
138b0 6b 49 6e 74 6f 44 65 62 75 67 67 65 72 28 29 3b  kIntoDebugger();
138c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
138d0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
138e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
138f0 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61       else if (Ma
13900 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67  tchOption(newArg
13910 2c 20 22 63 6f 6e 66 69 67 56 65 72 73 69 6f 6e  , "configVersion
13920 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  "))..           
13930 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
13940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13950 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66              conf
13960 69 67 75 72 61 74 69 6f 6e 2e 63 6f 6e 66 69 67  iguration.config
13970 56 65 72 73 69 6f 6e 20 3d 20 74 65 78 74 3b 0d  Version = text;.
13980 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
13990 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
139a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
139b0 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61 74      else if (Mat
139c0 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c  chOption(newArg,
139d0 20 22 63 6f 6e 66 69 72 6d 22 29 29 0d 0a 20 20   "confirm"))..  
139e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
139f0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
13a00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13a10 20 20 20 20 20 62 6f 6f 6c 3f 20 76 61 6c 75 65       bool? value
13a20 20 3d 20 50 61 72 73 65 42 6f 6f 6c 65 61 6e 28   = ParseBoolean(
13a30 74 65 78 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  text);....      
13a40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13a50 20 20 20 20 20 20 69 66 20 28 76 61 6c 75 65 20        if (value 
13a60 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
13a70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13a80 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
13a90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13aa0 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d           error =
13ab0 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41   TraceOps.DebugA
13ac0 6e 64 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20  ndTrace(..      
13ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
13af0 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65  acePriority.Lowe
13b00 73 74 2c 20 64 65 62 75 67 43 61 6c 6c 62 61 63  st, debugCallbac
13b10 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  k,..            
13b20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13b30 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c          traceCal
13b40 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f  lback, String.Fo
13b50 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
13b60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13b70 20 20 20 20 20 20 20 20 20 20 20 22 49 6e 76 61             "Inva
13b80 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20  lid {0} boolean 
13b90 76 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20  value: {1}",..  
13ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13bc0 20 20 46 6f 72 44 69 73 70 6c 61 79 28 61 72 67    ForDisplay(arg
13bd0 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 74 65  ), ForDisplay(te
13be0 78 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  xt)),..         
13bf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13c00 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
13c10 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  Category);....  
13c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13c30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
13c40 20 28 73 74 72 69 63 74 29 0d 0a 20 20 20 20 20   (strict)..     
13c50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13c60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
13c70 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a  eturn false;....
13c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13c90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13ca0 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20  continue;..     
13cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13cc0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
13cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13ce0 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72          configur
13cf0 61 74 69 6f 6e 2e 63 6f 6e 66 69 72 6d 20 3d 20  ation.confirm = 
13d00 28 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20 20  (bool)value;..  
13d10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13d20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
13d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13d40 20 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f   else if (MatchO
13d50 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 63  ption(newArg, "c
13d60 6f 72 65 46 69 6c 65 4e 61 6d 65 22 29 29 0d 0a  oreFileName"))..
13d70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13d80 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
13d90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13da0 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61         configura
13db0 74 69 6f 6e 2e 63 6f 72 65 46 69 6c 65 4e 61 6d  tion.coreFileNam
13dc0 65 20 3d 20 74 65 78 74 3b 0d 0a 20 20 20 20 20  e = text;..     
13dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13de0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
13df0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c                el
13e00 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69  se if (MatchOpti
13e10 6f 6e 28 6e 65 77 41 72 67 2c 20 22 64 65 62 75  on(newArg, "debu
13e20 67 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  g"))..          
13e30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
13e40 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
13e50 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f               boo
13e60 6c 3f 20 76 61 6c 75 65 20 3d 20 50 61 72 73 65  l? value = Parse
13e70 42 6f 6f 6c 65 61 6e 28 74 65 78 74 29 3b 0d 0a  Boolean(text);..
13e80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
13e90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
13ea0 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29   (value == null)
13eb0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
13ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
13ed0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
13ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13ef0 20 65 72 72 6f 72 20 3d 20 54 72 61 63 65 4f 70   error = TraceOp
13f00 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28  s.DebugAndTrace(
13f10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
13f20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13f30 20 20 20 20 20 20 54 72 61 63 65 50 72 69 6f 72        TracePrior
13f40 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75  ity.Lowest, debu
13f50 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20  gCallback,..    
13f60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13f80 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53  traceCallback, S
13f90 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
13fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13fc0 20 20 20 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20     "Invalid {0} 
13fd0 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 3a 20 7b  boolean value: {
13fe0 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  1}",..          
13ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14000 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73            ForDis
14010 70 6c 61 79 28 61 72 67 29 2c 20 46 6f 72 44 69  play(arg), ForDi
14020 73 70 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a 20  splay(text)),.. 
14030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14050 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
14060 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
14070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14080 20 20 20 20 20 20 69 66 20 28 73 74 72 69 63 74        if (strict
14090 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
140a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
140b0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
140c0 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  lse;....        
140d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
140e0 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65          continue
140f0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
14100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
14110 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
14120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14130 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 64 65  configuration.de
14140 62 75 67 20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75  bug = (bool)valu
14150 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
14160 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
14170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14180 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28         else if (
14190 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41  MatchOption(newA
141a0 72 67 2c 20 22 64 65 62 75 67 46 6f 72 6d 61 74  rg, "debugFormat
141b0 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  "))..           
141c0 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
141d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
141e0 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66              conf
141f0 69 67 75 72 61 74 69 6f 6e 2e 64 65 62 75 67 46  iguration.debugF
14200 6f 72 6d 61 74 20 3d 20 74 65 78 74 3b 0d 0a 20  ormat = text;.. 
14210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14220 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
14230 4f 70 73 2e 44 65 62 75 67 46 6f 72 6d 61 74 20  Ops.DebugFormat 
14240 3d 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e  = configuration.
14250 64 65 62 75 67 46 6f 72 6d 61 74 3b 0d 0a 20 20  debugFormat;..  
14260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14270 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
14280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14290 20 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f   else if (MatchO
142a0 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 64  ption(newArg, "d
142b0 65 62 75 67 50 72 69 6f 72 69 74 79 22 29 29 0d  ebugPriority")).
142c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
142d0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
142e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
142f0 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 76          object v
14300 61 6c 75 65 20 3d 20 50 61 72 73 65 45 6e 75 6d  alue = ParseEnum
14310 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
14320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14330 20 20 20 74 79 70 65 6f 66 28 54 72 61 63 65 50     typeof(TraceP
14340 72 69 6f 72 69 74 79 29 2c 20 74 65 78 74 2c 20  riority), text, 
14350 74 72 75 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  true);....      
14360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14370 20 20 20 20 20 20 69 66 20 28 76 61 6c 75 65 20        if (value 
14380 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
14390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
143a0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
143b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
143c0 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d           error =
143d0 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41   TraceOps.DebugA
143e0 6e 64 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20  ndTrace(..      
143f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
14410 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65  acePriority.Lowe
14420 73 74 2c 20 64 65 62 75 67 43 61 6c 6c 62 61 63  st, debugCallbac
14430 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  k,..            
14440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14450 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c          traceCal
14460 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f  lback, String.Fo
14470 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
14480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14490 20 20 20 20 20 20 20 20 20 20 20 22 49 6e 76 61             "Inva
144a0 6c 69 64 20 7b 30 7d 20 76 61 6c 75 65 3a 20 7b  lid {0} value: {
144b0 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  1}",..          
144c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
144d0 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73            ForDis
144e0 70 6c 61 79 28 61 72 67 29 2c 20 46 6f 72 44 69  play(arg), ForDi
144f0 73 70 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a 20  splay(text)),.. 
14500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14520 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
14530 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
14540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14550 20 20 20 20 20 20 69 66 20 28 73 74 72 69 63 74        if (strict
14560 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
14570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14580 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
14590 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  lse;....        
145a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
145b0 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65          continue
145c0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
145d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
145e0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
145f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14600 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 64 65  configuration.de
14610 62 75 67 50 72 69 6f 72 69 74 79 20 3d 20 28 54  bugPriority = (T
14620 72 61 63 65 50 72 69 6f 72 69 74 79 29 76 61 6c  racePriority)val
14630 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
14640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14650 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 50   TraceOps.DebugP
14660 72 69 6f 72 69 74 79 20 3d 20 63 6f 6e 66 69 67  riority = config
14670 75 72 61 74 69 6f 6e 2e 64 65 62 75 67 50 72 69  uration.debugPri
14680 6f 72 69 74 79 3b 0d 0a 20 20 20 20 20 20 20 20  ority;..        
14690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
146a0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
146b0 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20             else 
146c0 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28  if (MatchOption(
146d0 6e 65 77 41 72 67 2c 20 22 64 65 73 69 67 6e 65  newArg, "designe
146e0 72 46 69 6c 65 4e 61 6d 65 22 29 29 0d 0a 20 20  rFileName"))..  
146f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14700 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
14710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14720 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69       configurati
14730 6f 6e 2e 64 65 73 69 67 6e 65 72 46 69 6c 65 4e  on.designerFileN
14740 61 6d 65 20 3d 20 74 65 78 74 3b 0d 0a 20 20 20  ame = text;..   
14750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14760 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
14770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14780 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70  else if (MatchOp
14790 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 64 69  tion(newArg, "di
147a0 72 65 63 74 6f 72 79 22 29 29 0d 0a 20 20 20 20  rectory"))..    
147b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
147c0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
147d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
147e0 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e     configuration
147f0 2e 64 69 72 65 63 74 6f 72 79 20 3d 20 74 65 78  .directory = tex
14800 74 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  t;....          
14810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14820 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
14830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14840 20 20 2f 2f 20 4e 4f 54 45 3a 20 2a 53 50 45 43    // NOTE: *SPEC
14850 49 41 4c 2a 20 4d 75 73 74 20 72 65 66 72 65 73  IAL* Must refres
14860 68 20 74 68 65 20 66 69 6c 65 20 6e 61 6d 65 73  h the file names
14870 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
14880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
14890 20 20 20 20 20 20 20 68 65 72 65 20 62 65 63 61         here beca
148a0 75 73 65 20 74 68 65 20 75 6e 64 65 72 6c 79 69  use the underlyi
148b0 6e 67 20 64 69 72 65 63 74 6f 72 79 0d 0a 20 20  ng directory..  
148c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
148d0 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
148e0 20 20 20 68 61 73 20 63 68 61 6e 67 65 64 2e 0d     has changed..
148f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
14900 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
14910 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
14920 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72               str
14930 69 6e 67 20 63 6f 72 65 46 69 6c 65 4e 61 6d 65  ing coreFileName
14940 20 3d 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e   = configuration
14950 2e 63 6f 72 65 46 69 6c 65 4e 61 6d 65 3b 0d 0a  .coreFileName;..
14960 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
14970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
14980 20 28 21 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c   (!String.IsNull
14990 4f 72 45 6d 70 74 79 28 63 6f 72 65 46 69 6c 65  OrEmpty(coreFile
149a0 4e 61 6d 65 29 29 0d 0a 20 20 20 20 20 20 20 20  Name))..        
149b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
149c0 20 20 20 20 20 20 20 20 63 6f 72 65 46 69 6c 65          coreFile
149d0 4e 61 6d 65 20 3d 20 50 61 74 68 2e 47 65 74 46  Name = Path.GetF
149e0 69 6c 65 4e 61 6d 65 28 63 6f 72 65 46 69 6c 65  ileName(coreFile
149f0 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  Name);....      
14a00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14a10 20 20 20 20 20 20 69 66 20 28 53 74 72 69 6e 67        if (String
14a20 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 63  .IsNullOrEmpty(c
14a30 6f 72 65 46 69 6c 65 4e 61 6d 65 29 29 0d 0a 20  oreFileName)).. 
14a40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14a50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
14a60 6f 72 65 46 69 6c 65 4e 61 6d 65 20 3d 20 49 6e  oreFileName = In
14a70 73 74 61 6c 6c 65 72 2e 43 6f 72 65 46 69 6c 65  staller.CoreFile
14a80 4e 61 6d 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  Name;....       
14a90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14aa0 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69       configurati
14ab0 6f 6e 2e 63 6f 72 65 46 69 6c 65 4e 61 6d 65 20  on.coreFileName 
14ac0 3d 20 50 61 74 68 2e 43 6f 6d 62 69 6e 65 28 0d  = Path.Combine(.
14ad0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
14ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14af0 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 64   configuration.d
14b00 69 72 65 63 74 6f 72 79 2c 20 63 6f 72 65 46 69  irectory, coreFi
14b10 6c 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20  leName);....    
14b20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14b30 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6c          string l
14b40 69 6e 71 46 69 6c 65 4e 61 6d 65 20 3d 20 63 6f  inqFileName = co
14b50 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6c 69 6e 71  nfiguration.linq
14b60 46 69 6c 65 4e 61 6d 65 3b 0d 0a 0d 0a 20 20 20  FileName;....   
14b70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14b80 20 20 20 20 20 20 20 20 20 69 66 20 28 21 53 74           if (!St
14b90 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70  ring.IsNullOrEmp
14ba0 74 79 28 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 29  ty(linqFileName)
14bb0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
14bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14bd0 20 20 20 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 20     linqFileName 
14be0 3d 20 50 61 74 68 2e 47 65 74 46 69 6c 65 4e 61  = Path.GetFileNa
14bf0 6d 65 28 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 29  me(linqFileName)
14c00 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
14c10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14c20 20 69 66 20 28 53 74 72 69 6e 67 2e 49 73 4e 75   if (String.IsNu
14c30 6c 6c 4f 72 45 6d 70 74 79 28 6c 69 6e 71 46 69  llOrEmpty(linqFi
14c40 6c 65 4e 61 6d 65 29 29 0d 0a 20 20 20 20 20 20  leName))..      
14c50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14c60 20 20 20 20 20 20 20 20 20 20 6c 69 6e 71 46 69            linqFi
14c70 6c 65 4e 61 6d 65 20 3d 20 49 6e 73 74 61 6c 6c  leName = Install
14c80 65 72 2e 4c 69 6e 71 46 69 6c 65 4e 61 6d 65 3b  er.LinqFileName;
14c90 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
14ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14cb0 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6c 69  configuration.li
14cc0 6e 71 46 69 6c 65 4e 61 6d 65 20 3d 20 50 61 74  nqFileName = Pat
14cd0 68 2e 43 6f 6d 62 69 6e 65 28 0d 0a 20 20 20 20  h.Combine(..    
14ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14cf0 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66              conf
14d00 69 67 75 72 61 74 69 6f 6e 2e 64 69 72 65 63 74  iguration.direct
14d10 6f 72 79 2c 20 6c 69 6e 71 46 69 6c 65 4e 61 6d  ory, linqFileNam
14d20 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  e);....         
14d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14d40 20 20 20 73 74 72 69 6e 67 20 65 66 36 46 69 6c     string ef6Fil
14d50 65 4e 61 6d 65 20 3d 20 63 6f 6e 66 69 67 75 72  eName = configur
14d60 61 74 69 6f 6e 2e 65 66 36 46 69 6c 65 4e 61 6d  ation.ef6FileNam
14d70 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e;....          
14d80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14d90 20 20 69 66 20 28 21 53 74 72 69 6e 67 2e 49 73    if (!String.Is
14da0 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 65 66 36 46  NullOrEmpty(ef6F
14db0 69 6c 65 4e 61 6d 65 29 29 0d 0a 20 20 20 20 20  ileName))..     
14dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14dd0 20 20 20 20 20 20 20 20 20 20 20 65 66 36 46 69             ef6Fi
14de0 6c 65 4e 61 6d 65 20 3d 20 50 61 74 68 2e 47 65  leName = Path.Ge
14df0 74 46 69 6c 65 4e 61 6d 65 28 65 66 36 46 69 6c  tFileName(ef6Fil
14e00 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20  eName);....     
14e10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14e20 20 20 20 20 20 20 20 69 66 20 28 53 74 72 69 6e         if (Strin
14e30 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28  g.IsNullOrEmpty(
14e40 65 66 36 46 69 6c 65 4e 61 6d 65 29 29 0d 0a 20  ef6FileName)).. 
14e50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14e60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
14e70 66 36 46 69 6c 65 4e 61 6d 65 20 3d 20 49 6e 73  f6FileName = Ins
14e80 74 61 6c 6c 65 72 2e 45 66 36 46 69 6c 65 4e 61  taller.Ef6FileNa
14e90 6d 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  me;....         
14ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14eb0 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e     configuration
14ec0 2e 65 66 36 46 69 6c 65 4e 61 6d 65 20 3d 20 50  .ef6FileName = P
14ed0 61 74 68 2e 43 6f 6d 62 69 6e 65 28 0d 0a 20 20  ath.Combine(..  
14ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
14f00 6e 66 69 67 75 72 61 74 69 6f 6e 2e 64 69 72 65  nfiguration.dire
14f10 63 74 6f 72 79 2c 20 65 66 36 46 69 6c 65 4e 61  ctory, ef6FileNa
14f20 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  me);....        
14f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14f40 20 20 20 20 73 74 72 69 6e 67 20 64 65 73 69 67      string desig
14f50 6e 65 72 46 69 6c 65 4e 61 6d 65 20 3d 20 63 6f  nerFileName = co
14f60 6e 66 69 67 75 72 61 74 69 6f 6e 2e 64 65 73 69  nfiguration.desi
14f70 67 6e 65 72 46 69 6c 65 4e 61 6d 65 3b 0d 0a 0d  gnerFileName;...
14f80 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
14f90 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
14fa0 28 21 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f  (!String.IsNullO
14fb0 72 45 6d 70 74 79 28 64 65 73 69 67 6e 65 72 46  rEmpty(designerF
14fc0 69 6c 65 4e 61 6d 65 29 29 0d 0a 20 20 20 20 20  ileName))..     
14fd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14fe0 20 20 20 20 20 20 20 20 20 20 20 64 65 73 69 67             desig
14ff0 6e 65 72 46 69 6c 65 4e 61 6d 65 20 3d 20 50 61  nerFileName = Pa
15000 74 68 2e 47 65 74 46 69 6c 65 4e 61 6d 65 28 64  th.GetFileName(d
15010 65 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65 29  esignerFileName)
15020 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
15030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15040 20 69 66 20 28 53 74 72 69 6e 67 2e 49 73 4e 75   if (String.IsNu
15050 6c 6c 4f 72 45 6d 70 74 79 28 64 65 73 69 67 6e  llOrEmpty(design
15060 65 72 46 69 6c 65 4e 61 6d 65 29 29 0d 0a 20 20  erFileName))..  
15070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65                de
15090 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65 20 3d  signerFileName =
150a0 20 49 6e 73 74 61 6c 6c 65 72 2e 44 65 73 69 67   Installer.Desig
150b0 6e 65 72 46 69 6c 65 4e 61 6d 65 3b 0d 0a 0d 0a  nerFileName;....
150c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
150d0 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66              conf
150e0 69 67 75 72 61 74 69 6f 6e 2e 64 65 73 69 67 6e  iguration.design
150f0 65 72 46 69 6c 65 4e 61 6d 65 20 3d 20 50 61 74  erFileName = Pat
15100 68 2e 43 6f 6d 62 69 6e 65 28 0d 0a 20 20 20 20  h.Combine(..    
15110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15120 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66              conf
15130 69 67 75 72 61 74 69 6f 6e 2e 64 69 72 65 63 74  iguration.direct
15140 6f 72 79 2c 20 64 65 73 69 67 6e 65 72 46 69 6c  ory, designerFil
15150 65 4e 61 6d 65 29 3b 0d 0a 20 20 20 20 20 20 20  eName);..       
15160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15170 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
15180 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65              else
15190 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e   if (MatchOption
151a0 28 6e 65 77 41 72 67 2c 20 22 65 66 36 46 69 6c  (newArg, "ef6Fil
151b0 65 4e 61 6d 65 22 29 29 0d 0a 20 20 20 20 20 20  eName"))..      
151c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
151d0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
151e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
151f0 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 65   configuration.e
15200 66 36 46 69 6c 65 4e 61 6d 65 20 3d 20 74 65 78  f6FileName = tex
15210 74 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t;..            
15220 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
15230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15240 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28         else if (
15250 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41  MatchOption(newA
15260 72 67 2c 20 22 69 6e 73 74 61 6c 6c 22 29 29 0d  rg, "install")).
15270 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
15280 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
15290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
152a0 20 20 20 20 20 20 20 20 62 6f 6f 6c 3f 20 76 61          bool? va
152b0 6c 75 65 20 3d 20 50 61 72 73 65 42 6f 6f 6c 65  lue = ParseBoole
152c0 61 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a 20 20 20  an(text);....   
152d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
152e0 20 20 20 20 20 20 20 20 20 69 66 20 28 76 61 6c           if (val
152f0 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ue == null)..   
15300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15310 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
15320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15330 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
15340 72 20 3d 20 54 72 61 63 65 4f 70 73 2e 44 65 62  r = TraceOps.Deb
15350 75 67 41 6e 64 54 72 61 63 65 28 0d 0a 20 20 20  ugAndTrace(..   
15360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15380 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c   TracePriority.L
15390 6f 77 65 73 74 2c 20 64 65 62 75 67 43 61 6c 6c  owest, debugCall
153a0 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20  back,..         
153b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
153c0 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
153d0 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67  Callback, String
153e0 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  .Format(..      
153f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 49                "I
15410 6e 76 61 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c 65  nvalid {0} boole
15420 61 6e 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d  an value: {1}",.
15430 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
15440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15450 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28       ForDisplay(
15460 61 72 67 29 2c 20 46 6f 72 44 69 73 70 6c 61 79  arg), ForDisplay
15470 28 74 65 78 74 29 29 2c 0d 0a 20 20 20 20 20 20  (text)),..      
15480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
154a0 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d  aceCategory);...
154b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
154c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
154d0 20 69 66 20 28 73 74 72 69 63 74 29 0d 0a 20 20   if (strict)..  
154e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
154f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15500 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
15510 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
15520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15530 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20     continue;..  
15540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15550 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
15560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15570 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69             confi
15580 67 75 72 61 74 69 6f 6e 2e 69 6e 73 74 61 6c 6c  guration.install
15590 20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d   = (bool)value;.
155a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
155b0 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
155c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
155d0 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61 74      else if (Mat
155e0 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c  chOption(newArg,
155f0 20 22 69 6e 73 74 61 6c 6c 46 6c 61 67 73 22 29   "installFlags")
15600 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
15610 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
15620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15630 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74            object
15640 20 76 61 6c 75 65 20 3d 20 50 61 72 73 65 45 6e   value = ParseEn
15650 75 6d 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  um(..           
15660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15670 20 20 20 20 20 74 79 70 65 6f 66 28 49 6e 73 74       typeof(Inst
15680 61 6c 6c 46 6c 61 67 73 29 2c 20 74 65 78 74 2c  allFlags), text,
15690 20 74 72 75 65 29 3b 0d 0a 0d 0a 20 20 20 20 20   true);....     
156a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
156b0 20 20 20 20 20 20 20 69 66 20 28 76 61 6c 75 65         if (value
156c0 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
156d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
156e0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
156f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15700 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20            error 
15710 3d 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67  = TraceOps.Debug
15720 41 6e 64 54 72 61 63 65 28 0d 0a 20 20 20 20 20  AndTrace(..     
15730 20 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 20 20 20 20 20 20 54                 T
15750 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77  racePriority.Low
15760 65 73 74 2c 20 64 65 62 75 67 43 61 6c 6c 62 61  est, debugCallba
15770 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ck,..           
15780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15790 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
157a0 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46  llback, String.F
157b0 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
157c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
157d0 20 20 20 20 20 20 20 20 20 20 20 20 22 49 6e 76              "Inv
157e0 61 6c 69 64 20 69 6e 73 74 61 6c 6c 20 66 6c 61  alid install fla
157f0 67 73 20 76 61 6c 75 65 3a 20 7b 30 7d 22 2c 0d  gs value: {0}",.
15800 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
15810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15820 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28       ForDisplay(
15830 74 65 78 74 29 29 2c 20 74 72 61 63 65 43 61 74  text)), traceCat
15840 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20  egory);....     
15850 20 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 69 66 20 28 73             if (s
15870 74 72 69 63 74 29 0d 0a 20 20 20 20 20 20 20 20  trict)..        
15880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15890 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
158a0 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20  rn false;....   
158b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
158c0 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
158d0 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20  tinue;..        
158e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
158f0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
15900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15910 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69       configurati
15920 6f 6e 2e 69 6e 73 74 61 6c 6c 46 6c 61 67 73 20  on.installFlags 
15930 3d 20 28 49 6e 73 74 61 6c 6c 46 6c 61 67 73 29  = (InstallFlags)
15940 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20  value;..        
15950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15960 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
15970 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20             else 
15980 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28  if (MatchOption(
15990 6e 65 77 41 72 67 2c 20 22 6c 69 6e 71 46 69 6c  newArg, "linqFil
159a0 65 4e 61 6d 65 22 29 29 0d 0a 20 20 20 20 20 20  eName"))..      
159b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
159c0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
159d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
159e0 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6c   configuration.l
159f0 69 6e 71 46 69 6c 65 4e 61 6d 65 20 3d 20 74 65  inqFileName = te
15a00 78 74 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  xt;..           
15a10 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
15a20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15a30 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20          else if 
15a40 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77  (MatchOption(new
15a50 41 72 67 2c 20 22 6c 6f 67 46 69 6c 65 4e 61 6d  Arg, "logFileNam
15a60 65 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  e"))..          
15a70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
15a80 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
15a90 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
15aa0 66 69 67 75 72 61 74 69 6f 6e 2e 6c 6f 67 46 69  figuration.logFi
15ab0 6c 65 4e 61 6d 65 20 3d 20 74 65 78 74 3b 0d 0a  leName = text;..
15ac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15ad0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
15ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15af0 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61 74 63     else if (Matc
15b00 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20  hOption(newArg, 
15b10 22 6e 6f 43 6f 6d 70 61 63 74 22 29 29 0d 0a 20  "noCompact")).. 
15b20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15b30 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
15b40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15b50 20 20 20 20 20 20 62 6f 6f 6c 3f 20 76 61 6c 75        bool? valu
15b60 65 20 3d 20 50 61 72 73 65 42 6f 6f 6c 65 61 6e  e = ParseBoolean
15b70 28 74 65 78 74 29 3b 0d 0a 0d 0a 20 20 20 20 20  (text);....     
15b80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15b90 20 20 20 20 20 20 20 69 66 20 28 76 61 6c 75 65         if (value
15ba0 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
15bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15bc0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
15bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15be0 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20            error 
15bf0 3d 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67  = TraceOps.Debug
15c00 41 6e 64 54 72 61 63 65 28 0d 0a 20 20 20 20 20  AndTrace(..     
15c10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
15c30 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77  racePriority.Low
15c40 65 73 74 2c 20 64 65 62 75 67 43 61 6c 6c 62 61  est, debugCallba
15c50 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ck,..           
15c60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15c70 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
15c80 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46  llback, String.F
15c90 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
15ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15cb0 20 20 20 20 20 20 20 20 20 20 20 20 22 49 6e 76              "Inv
15cc0 61 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e  alid {0} boolean
15cd0 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20   value: {1}",.. 
15ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15d00 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 61 72     ForDisplay(ar
15d10 67 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 74  g), ForDisplay(t
15d20 65 78 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20  ext)),..        
15d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15d40 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
15d50 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20  eCategory);.... 
15d60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15d70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
15d80 66 20 28 73 74 72 69 63 74 29 0d 0a 20 20 20 20  f (strict)..    
15d90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15da0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15db0 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d  return false;...
15dc0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
15dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15de0 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20   continue;..    
15df0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15e00 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
15e10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15e20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75           configu
15e30 72 61 74 69 6f 6e 2e 6e 6f 43 6f 6d 70 61 63 74  ration.noCompact
15e40 20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d   = (bool)value;.
15e50 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
15e60 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
15e70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15e80 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61 74      else if (Mat
15e90 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c  chOption(newArg,
15ea0 20 22 6e 6f 43 6f 6e 73 6f 6c 65 22 29 29 0d 0a   "noConsole"))..
15eb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15ec0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
15ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15ee0 20 20 20 20 20 20 20 62 6f 6f 6c 3f 20 76 61 6c         bool? val
15ef0 75 65 20 3d 20 50 61 72 73 65 42 6f 6f 6c 65 61  ue = ParseBoolea
15f00 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a 20 20 20 20  n(text);....    
15f10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15f20 20 20 20 20 20 20 20 20 69 66 20 28 76 61 6c 75          if (valu
15f30 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  e == null)..    
15f40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15f50 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
15f60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15f70 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72             error
15f80 20 3d 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75   = TraceOps.Debu
15f90 67 41 6e 64 54 72 61 63 65 28 0d 0a 20 20 20 20  gAndTrace(..    
15fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15fc0 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f  TracePriority.Lo
15fd0 77 65 73 74 2c 20 64 65 62 75 67 43 61 6c 6c 62  west, debugCallb
15fe0 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ack,..          
15ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16000 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
16010 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e  allback, String.
16020 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
16030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16040 20 20 20 20 20 20 20 20 20 20 20 20 20 22 49 6e               "In
16050 76 61 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c 65 61  valid {0} boolea
16060 6e 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a  n value: {1}",..
16070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16090 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 61      ForDisplay(a
160a0 72 67 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28  rg), ForDisplay(
160b0 74 65 78 74 29 29 2c 0d 0a 20 20 20 20 20 20 20  text)),..       
160c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
160d0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
160e0 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
160f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16110 69 66 20 28 73 74 72 69 63 74 29 0d 0a 20 20 20  if (strict)..   
16120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16140 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
16150 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
16160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16170 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20    continue;..   
16180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16190 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
161a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
161b0 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67            config
161c0 75 72 61 74 69 6f 6e 2e 6e 6f 43 6f 6e 73 6f 6c  uration.noConsol
161d0 65 20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75 65 3b  e = (bool)value;
161e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
161f0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
16200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16210 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61       else if (Ma
16220 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67  tchOption(newArg
16230 2c 20 22 6e 6f 44 65 73 6b 74 6f 70 22 29 29 0d  , "noDesktop")).
16240 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
16250 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
16260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16270 20 20 20 20 20 20 20 20 62 6f 6f 6c 3f 20 76 61          bool? va
16280 6c 75 65 20 3d 20 50 61 72 73 65 42 6f 6f 6c 65  lue = ParseBoole
16290 61 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a 20 20 20  an(text);....   
162a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
162b0 20 20 20 20 20 20 20 20 20 69 66 20 28 76 61 6c           if (val
162c0 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ue == null)..   
162d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
162e0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
162f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16300 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
16310 72 20 3d 20 54 72 61 63 65 4f 70 73 2e 44 65 62  r = TraceOps.Deb
16320 75 67 41 6e 64 54 72 61 63 65 28 0d 0a 20 20 20  ugAndTrace(..   
16330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16350 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c   TracePriority.L
16360 6f 77 65 73 74 2c 20 64 65 62 75 67 43 61 6c 6c  owest, debugCall
16370 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20  back,..         
16380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16390 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
163a0 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67  Callback, String
163b0 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  .Format(..      
163c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
163d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 49                "I
163e0 6e 76 61 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c 65  nvalid {0} boole
163f0 61 6e 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d  an value: {1}",.
16400 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
16410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16420 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28       ForDisplay(
16430 61 72 67 29 2c 20 46 6f 72 44 69 73 70 6c 61 79  arg), ForDisplay
16440 28 74 65 78 74 29 29 2c 0d 0a 20 20 20 20 20 20  (text)),..      
16450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
16470 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d  aceCategory);...
16480 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
16490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
164a0 20 69 66 20 28 73 74 72 69 63 74 29 0d 0a 20 20   if (strict)..  
164b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
164c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
164d0 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
164e0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
164f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16500 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20     continue;..  
16510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16520 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
16530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16540 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69             confi
16550 67 75 72 61 74 69 6f 6e 2e 6e 6f 44 65 73 6b 74  guration.noDeskt
16560 6f 70 20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75 65  op = (bool)value
16570 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
16580 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
16590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
165a0 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d        else if (M
165b0 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72  atchOption(newAr
165c0 67 2c 20 22 6e 6f 4c 6f 67 22 29 29 0d 0a 20 20  g, "noLog"))..  
165d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
165e0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
165f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16600 20 20 20 20 20 62 6f 6f 6c 3f 20 76 61 6c 75 65       bool? value
16610 20 3d 20 50 61 72 73 65 42 6f 6f 6c 65 61 6e 28   = ParseBoolean(
16620 74 65 78 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  text);....      
16630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16640 20 20 20 20 20 20 69 66 20 28 76 61 6c 75 65 20        if (value 
16650 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
16660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16670 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
16680 20 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 65 72 72 6f 72 20 3d           error =
166a0 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41   TraceOps.DebugA
166b0 6e 64 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20  ndTrace(..      
166c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
166d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
166e0 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65  acePriority.Lowe
166f0 73 74 2c 20 64 65 62 75 67 43 61 6c 6c 62 61 63  st, debugCallbac
16700 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  k,..            
16710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16720 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c          traceCal
16730 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f  lback, String.Fo
16740 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
16750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16760 20 20 20 20 20 20 20 20 20 20 20 22 49 6e 76 61             "Inva
16770 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20  lid {0} boolean 
16780 76 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20  value: {1}",..  
16790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
167a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
167b0 20 20 46 6f 72 44 69 73 70 6c 61 79 28 61 72 67    ForDisplay(arg
167c0 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 74 65  ), ForDisplay(te
167d0 78 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  xt)),..         
167e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
167f0 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
16800 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  Category);....  
16810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
16830 20 28 73 74 72 69 63 74 29 0d 0a 20 20 20 20 20   (strict)..     
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 20 20 20 20 20 20 20 72                 r
16860 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a  eturn false;....
16870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16890 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20  continue;..     
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 7d 0d 0a 0d 0a 20 20 20 20         }....    
168c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
168d0 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72          configur
168e0 61 74 69 6f 6e 2e 6e 6f 4c 6f 67 20 3d 20 28 62  ation.noLog = (b
168f0 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20  ool)value;..    
16900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16910 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
16920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
16930 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74  lse if (MatchOpt
16940 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 6e 6f 4e  ion(newArg, "noN
16950 65 74 46 78 32 30 22 29 29 0d 0a 20 20 20 20 20  etFx20"))..     
16960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16970 20 20 20 7b 0d 0a 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 62 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d 20    bool? value = 
169a0 50 61 72 73 65 42 6f 6f 6c 65 61 6e 28 74 65 78  ParseBoolean(tex
169b0 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  t);....         
169c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
169d0 20 20 20 69 66 20 28 76 61 6c 75 65 20 3d 3d 20     if (value == 
169e0 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
169f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16a00 20 20 20 7b 0d 0a 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 20                  
16a20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 54 72        error = Tr
16a30 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54  aceOps.DebugAndT
16a40 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20  race(..         
16a50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16a60 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
16a70 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c  Priority.Lowest,
16a80 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d   debugCallback,.
16a90 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
16aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16ab0 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61       traceCallba
16ac0 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ck, String.Forma
16ad0 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
16ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16af0 20 20 20 20 20 20 20 20 22 49 6e 76 61 6c 69 64          "Invalid
16b00 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 61 6c   {0} boolean val
16b10 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20  ue: {1}",..     
16b20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16b30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46                 F
16b40 6f 72 44 69 73 70 6c 61 79 28 61 72 67 29 2c 20  orDisplay(arg), 
16b50 46 6f 72 44 69 73 70 6c 61 79 28 74 65 78 74 29  ForDisplay(text)
16b60 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
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 74 72 61 63 65 43 61 74          traceCat
16b90 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20  egory);....     
16ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16bb0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 73             if (s
16bc0 74 72 69 63 74 29 0d 0a 20 20 20 20 20 20 20 20  trict)..        
16bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16be0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
16bf0 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20  rn false;....   
16c00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16c10 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
16c20 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20  tinue;..        
16c30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16c40 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
16c50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16c60 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69       configurati
16c70 6f 6e 2e 6e 6f 4e 65 74 46 78 32 30 20 3d 20 28  on.noNetFx20 = (
16c80 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20 20 20  bool)value;..   
16c90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16ca0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
16cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16cc0 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70  else if (MatchOp
16cd0 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 6e 6f  tion(newArg, "no
16ce0 4e 65 74 46 78 33 35 22 29 29 0d 0a 20 20 20 20  NetFx35"))..    
16cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16d00 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
16d10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16d20 20 20 20 62 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d     bool? value =
16d30 20 50 61 72 73 65 42 6f 6f 6c 65 61 6e 28 74 65   ParseBoolean(te
16d40 78 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  xt);....        
16d50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16d60 20 20 20 20 69 66 20 28 76 61 6c 75 65 20 3d 3d      if (value ==
16d70 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
16d80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16d90 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
16da0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16db0 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 54         error = T
16dc0 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64  raceOps.DebugAnd
16dd0 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20  Trace(..        
16de0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16df0 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
16e00 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74  ePriority.Lowest
16e10 2c 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c  , debugCallback,
16e20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
16e30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16e40 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62        traceCallb
16e50 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d  ack, String.Form
16e60 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
16e70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16e80 20 20 20 20 20 20 20 20 20 22 49 6e 76 61 6c 69           "Invali
16e90 64 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 61  d {0} boolean va
16ea0 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20  lue: {1}",..    
16eb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16ed0 46 6f 72 44 69 73 70 6c 61 79 28 61 72 67 29 2c  ForDisplay(arg),
16ee0 20 46 6f 72 44 69 73 70 6c 61 79 28 74 65 78 74   ForDisplay(text
16ef0 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  )),..           
16f00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16f10 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
16f20 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
16f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16f40 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
16f50 73 74 72 69 63 74 29 0d 0a 20 20 20 20 20 20 20  strict)..       
16f60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16f70 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
16f80 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20  urn false;....  
16f90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
16fb0 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20  ntinue;..       
16fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16fd0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
16fe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16ff0 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74        configurat
17000 69 6f 6e 2e 6e 6f 4e 65 74 46 78 33 35 20 3d 20  ion.noNetFx35 = 
17010 28 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20 20  (bool)value;..  
17020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17030 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
17040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17050 20 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f   else if (MatchO
17060 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 6e  ption(newArg, "n
17070 6f 4e 65 74 46 78 34 30 22 29 29 0d 0a 20 20 20  oNetFx40"))..   
17080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17090 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
170a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
170b0 20 20 20 20 62 6f 6f 6c 3f 20 76 61 6c 75 65 20      bool? value 
170c0 3d 20 50 61 72 73 65 42 6f 6f 6c 65 61 6e 28 74  = ParseBoolean(t
170d0 65 78 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ext);....       
170e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
170f0 20 20 20 20 20 69 66 20 28 76 61 6c 75 65 20 3d       if (value =
17100 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
17110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17120 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
17130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17140 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20          error = 
17150 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e  TraceOps.DebugAn
17160 64 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20  dTrace(..       
17170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17180 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61               Tra
17190 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73  cePriority.Lowes
171a0 74 2c 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b  t, debugCallback
171b0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
171c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
171d0 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c         traceCall
171e0 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72  back, String.For
171f0 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
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 22 49 6e 76 61 6c            "Inval
17220 69 64 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76  id {0} boolean v
17230 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20  alue: {1}",..   
17240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17260 20 46 6f 72 44 69 73 70 6c 61 79 28 61 72 67 29   ForDisplay(arg)
17270 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 74 65 78  , ForDisplay(tex
17280 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  t)),..          
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 74 72 61 63 65 43            traceC
172b0 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20  ategory);....   
172c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
172d0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
172e0 28 73 74 72 69 63 74 29 0d 0a 20 20 20 20 20 20  (strict)..      
172f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
17310 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20  turn false;.... 
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 63                 c
17340 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20  ontinue;..      
17350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17360 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
17370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17380 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61         configura
17390 74 69 6f 6e 2e 6e 6f 4e 65 74 46 78 34 30 20 3d  tion.noNetFx40 =
173a0 20 28 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20   (bool)value;.. 
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 7d 0d 0a 20 20 20 20 20 20         }..      
173d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
173e0 20 20 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68    else if (Match
173f0 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22  Option(newArg, "
17400 6e 6f 4e 65 74 46 78 34 35 22 29 29 0d 0a 20 20  noNetFx45"))..  
17410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17420 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
17430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17440 20 20 20 20 20 62 6f 6f 6c 3f 20 76 61 6c 75 65       bool? value
17450 20 3d 20 50 61 72 73 65 42 6f 6f 6c 65 61 6e 28   = ParseBoolean(
17460 74 65 78 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  text);....      
17470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17480 20 20 20 20 20 20 69 66 20 28 76 61 6c 75 65 20        if (value 
17490 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
174a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
174b0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
174c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
174d0 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d           error =
174e0 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41   TraceOps.DebugA
174f0 6e 64 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20  ndTrace(..      
17500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
17520 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65  acePriority.Lowe
17530 73 74 2c 20 64 65 62 75 67 43 61 6c 6c 62 61 63  st, debugCallbac
17540 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  k,..            
17550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17560 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c          traceCal
17570 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f  lback, String.Fo
17580 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
17590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
175a0 20 20 20 20 20 20 20 20 20 20 20 22 49 6e 76 61             "Inva
175b0 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20  lid {0} boolean 
175c0 76 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20  value: {1}",..  
175d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
175e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
175f0 20 20 46 6f 72 44 69 73 70 6c 61 79 28 61 72 67    ForDisplay(arg
17600 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 74 65  ), ForDisplay(te
17610 78 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  xt)),..         
17620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17630 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
17640 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  Category);....  
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 20 20 20 20 20 20 69 66                if
17670 20 28 73 74 72 69 63 74 29 0d 0a 20 20 20 20 20   (strict)..     
17680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
176a0 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a  eturn false;....
176b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
176c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
176d0 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20  continue;..     
176e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
176f0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
17700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17710 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72          configur
17720 61 74 69 6f 6e 2e 6e 6f 4e 65 74 46 78 34 35 20  ation.noNetFx45 
17730 3d 20 28 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a  = (bool)value;..
17740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17750 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
17760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17770 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61 74 63     else if (Matc
17780 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20  hOption(newArg, 
17790 22 6e 6f 4e 65 74 46 78 34 35 31 22 29 29 0d 0a  "noNetFx451"))..
177a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
177b0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
177c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
177d0 20 20 20 20 20 20 20 62 6f 6f 6c 3f 20 76 61 6c         bool? val
177e0 75 65 20 3d 20 50 61 72 73 65 42 6f 6f 6c 65 61  ue = ParseBoolea
177f0 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a 20 20 20 20  n(text);....    
17800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17810 20 20 20 20 20 20 20 20 69 66 20 28 76 61 6c 75          if (valu
17820 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  e == null)..    
17830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17840 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
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 65 72 72 6f 72             error
17870 20 3d 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75   = TraceOps.Debu
17880 67 41 6e 64 54 72 61 63 65 28 0d 0a 20 20 20 20  gAndTrace(..    
17890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
178a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
178b0 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f  TracePriority.Lo
178c0 77 65 73 74 2c 20 64 65 62 75 67 43 61 6c 6c 62  west, debugCallb
178d0 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ack,..          
178e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
178f0 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
17900 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e  allback, String.
17910 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
17920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17930 20 20 20 20 20 20 20 20 20 20 20 20 20 22 49 6e               "In
17940 76 61 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c 65 61  valid {0} boolea
17950 6e 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a  n value: {1}",..
17960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17980 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 61      ForDisplay(a
17990 72 67 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28  rg), ForDisplay(
179a0 74 65 78 74 29 29 2c 0d 0a 20 20 20 20 20 20 20  text)),..       
179b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
179c0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
179d0 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
179e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
179f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17a00 69 66 20 28 73 74 72 69 63 74 29 0d 0a 20 20 20  if (strict)..   
17a10 20 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 20 20 20                  
17a30 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
17a40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
17a50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17a60 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20    continue;..   
17a70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17a80 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
17a90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17aa0 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67            config
17ab0 75 72 61 74 69 6f 6e 2e 6e 6f 4e 65 74 46 78 34  uration.noNetFx4
17ac0 35 31 20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75 65  51 = (bool)value
17ad0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
17ae0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
17af0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17b00 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d        else if (M
17b10 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72  atchOption(newAr
17b20 67 2c 20 22 6e 6f 52 75 6e 74 69 6d 65 56 65 72  g, "noRuntimeVer
17b30 73 69 6f 6e 22 29 29 0d 0a 20 20 20 20 20 20 20  sion"))..       
17b40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17b50 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
17b60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17b70 62 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d 20 50 61  bool? value = Pa
17b80 72 73 65 42 6f 6f 6c 65 61 6e 28 74 65 78 74 29  rseBoolean(text)
17b90 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
17ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17bb0 20 69 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75   if (value == nu
17bc0 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
17bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17be0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
17bf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17c00 20 20 20 20 65 72 72 6f 72 20 3d 20 54 72 61 63      error = Trac
17c10 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61  eOps.DebugAndTra
17c20 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ce(..           
17c30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17c40 20 20 20 20 20 20 20 20 20 54 72 61 63 65 50 72           TracePr
17c50 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64  iority.Lowest, d
17c60 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20  ebugCallback,.. 
17c70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17c90 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b     traceCallback
17ca0 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  , String.Format(
17cb0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
17cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17cd0 20 20 20 20 20 20 22 49 6e 76 61 6c 69 64 20 7b        "Invalid {
17ce0 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65  0} boolean value
17cf0 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20  : {1}",..       
17d00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17d10 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72               For
17d20 44 69 73 70 6c 61 79 28 61 72 67 29 2c 20 46 6f  Display(arg), Fo
17d30 72 44 69 73 70 6c 61 79 28 74 65 78 74 29 29 2c  rDisplay(text)),
17d40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
17d50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17d60 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67        traceCateg
17d70 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
17d80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17d90 20 20 20 20 20 20 20 20 20 69 66 20 28 73 74 72           if (str
17da0 69 63 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ict)..          
17db0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17dc0 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
17dd0 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20   false;....     
17de0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17df0 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69             conti
17e00 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  nue;..          
17e10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17e20 20 20 7d 0d 0a 0d 0a 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 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e     configuration
17e50 2e 6e 6f 52 75 6e 74 69 6d 65 56 65 72 73 69 6f  .noRuntimeVersio
17e60 6e 20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75 65 3b  n = (bool)value;
17e70 0d 0a 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 7d 0d 0a 20 20 20            }..   
17e90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17ea0 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61       else if (Ma
17eb0 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67  tchOption(newArg
17ec0 2c 20 22 6e 6f 54 72 61 63 65 22 29 29 0d 0a 20  , "noTrace")).. 
17ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17ee0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
17ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17f00 20 20 20 20 20 20 62 6f 6f 6c 3f 20 76 61 6c 75        bool? valu
17f10 65 20 3d 20 50 61 72 73 65 42 6f 6f 6c 65 61 6e  e = ParseBoolean
17f20 28 74 65 78 74 29 3b 0d 0a 0d 0a 20 20 20 20 20  (text);....     
17f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17f40 20 20 20 20 20 20 20 69 66 20 28 76 61 6c 75 65         if (value
17f50 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
17f60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17f70 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
17f80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17f90 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20            error 
17fa0 3d 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67  = TraceOps.Debug
17fb0 41 6e 64 54 72 61 63 65 28 0d 0a 20 20 20 20 20  AndTrace(..     
17fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17fd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
17fe0 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77  racePriority.Low
17ff0 65 73 74 2c 20 64 65 62 75 67 43 61 6c 6c 62 61  est, debugCallba
18000 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ck,..           
18010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18020 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
18030 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46  llback, String.F
18040 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
18050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18060 20 20 20 20 20 20 20 20 20 20 20 20 22 49 6e 76              "Inv
18070 61 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e  alid {0} boolean
18080 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20   value: {1}",.. 
18090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
180a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
180b0 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 61 72     ForDisplay(ar
180c0 67 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 74  g), ForDisplay(t
180d0 65 78 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20  ext)),..        
180e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
180f0 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
18100 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20  eCategory);.... 
18110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
18130 66 20 28 73 74 72 69 63 74 29 0d 0a 20 20 20 20  f (strict)..    
18140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18160 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d  return false;...
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 20 20 20                  
18190 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20   continue;..    
181a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
181b0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
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 63 6f 6e 66 69 67 75           configu
181e0 72 61 74 69 6f 6e 2e 6e 6f 54 72 61 63 65 20 3d  ration.noTrace =
181f0 20 28 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20   (bool)value;.. 
18200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18210 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
18220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18230 20 20 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68    else if (Match
18240 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22  Option(newArg, "
18250 6e 6f 56 73 32 30 30 35 22 29 29 0d 0a 20 20 20  noVs2005"))..   
18260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18270 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
18280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18290 20 20 20 20 62 6f 6f 6c 3f 20 76 61 6c 75 65 20      bool? value 
182a0 3d 20 50 61 72 73 65 42 6f 6f 6c 65 61 6e 28 74  = ParseBoolean(t
182b0 65 78 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ext);....       
182c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
182d0 20 20 20 20 20 69 66 20 28 76 61 6c 75 65 20 3d       if (value =
182e0 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
182f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18300 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
18310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18320 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20          error = 
18330 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e  TraceOps.DebugAn
18340 64 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20  dTrace(..       
18350 20 20 20 20 20 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 54 72 61               Tra
18370 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73  cePriority.Lowes
18380 74 2c 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b  t, debugCallback
18390 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
183a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
183b0 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c         traceCall
183c0 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72  back, String.For
183d0 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
183e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
183f0 20 20 20 20 20 20 20 20 20 20 22 49 6e 76 61 6c            "Inval
18400 69 64 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76  id {0} boolean v
18410 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20  alue: {1}",..   
18420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18440 20 46 6f 72 44 69 73 70 6c 61 79 28 61 72 67 29   ForDisplay(arg)
18450 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 74 65 78  , ForDisplay(tex
18460 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  t)),..          
18470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18480 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
18490 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20  ategory);....   
184a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
184b0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
184c0 28 73 74 72 69 63 74 29 0d 0a 20 20 20 20 20 20  (strict)..      
184d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
184e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
184f0 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20  turn false;.... 
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 20 20 20 20 20 20 63                 c
18520 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20  ontinue;..      
18530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18540 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
18550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18560 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61         configura
18570 74 69 6f 6e 2e 6e 6f 56 73 32 30 30 35 20 3d 20  tion.noVs2005 = 
18580 28 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20 20  (bool)value;..  
18590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
185a0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
185b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
185c0 20 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f   else if (MatchO
185d0 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 6e  ption(newArg, "n
185e0 6f 56 73 32 30 30 38 22 29 29 0d 0a 20 20 20 20  oVs2008"))..    
185f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18600 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
18610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18620 20 20 20 62 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d     bool? value =
18630 20 50 61 72 73 65 42 6f 6f 6c 65 61 6e 28 74 65   ParseBoolean(te
18640 78 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  xt);....        
18650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18660 20 20 20 20 69 66 20 28 76 61 6c 75 65 20 3d 3d      if (value ==
18670 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
18680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18690 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
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 65 72 72 6f 72 20 3d 20 54         error = T
186c0 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64  raceOps.DebugAnd
186d0 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20  Trace(..        
186e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
186f0 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
18700 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74  ePriority.Lowest
18710 2c 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c  , debugCallback,
18720 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
18730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18740 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62        traceCallb
18750 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d  ack, String.Form
18760 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
18770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18780 20 20 20 20 20 20 20 20 20 22 49 6e 76 61 6c 69           "Invali
18790 64 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 61  d {0} boolean va
187a0 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20  lue: {1}",..    
187b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
187c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
187d0 46 6f 72 44 69 73 70 6c 61 79 28 61 72 67 29 2c  ForDisplay(arg),
187e0 20 46 6f 72 44 69 73 70 6c 61 79 28 74 65 78 74   ForDisplay(text
187f0 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  )),..           
18800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18810 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
18820 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
18830 20 20 20 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 20 69 66 20 28              if (
18850 73 74 72 69 63 74 29 0d 0a 20 20 20 20 20 20 20  strict)..       
18860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18870 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
18880 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20  urn false;....  
18890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
188a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
188b0 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20  ntinue;..       
188c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
188d0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
188e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
188f0 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74        configurat
18900 69 6f 6e 2e 6e 6f 56 73 32 30 30 38 20 3d 20 28  ion.noVs2008 = (
18910 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20 20 20  bool)value;..   
18920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18930 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
18940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18950 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70  else if (MatchOp
18960 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 6e 6f  tion(newArg, "no
18970 56 73 32 30 31 30 22 29 29 0d 0a 20 20 20 20 20  Vs2010"))..     
18980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18990 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
189a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
189b0 20 20 62 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d 20    bool? value = 
189c0 50 61 72 73 65 42 6f 6f 6c 65 61 6e 28 74 65 78  ParseBoolean(tex
189d0 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  t);....         
189e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
189f0 20 20 20 69 66 20 28 76 61 6c 75 65 20 3d 3d 20     if (value == 
18a00 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
18a10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18a20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
18a30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18a40 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 54 72        error = Tr
18a50 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54  aceOps.DebugAndT
18a60 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20  race(..         
18a70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18a80 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
18a90 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c  Priority.Lowest,
18aa0 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d   debugCallback,.
18ab0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
18ac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18ad0 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61       traceCallba
18ae0 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ck, String.Forma
18af0 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
18b00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18b10 20 20 20 20 20 20 20 20 22 49 6e 76 61 6c 69 64          "Invalid
18b20 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 61 6c   {0} boolean val
18b30 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20  ue: {1}",..     
18b40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18b50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46                 F
18b60 6f 72 44 69 73 70 6c 61 79 28 61 72 67 29 2c 20  orDisplay(arg), 
18b70 46 6f 72 44 69 73 70 6c 61 79 28 74 65 78 74 29  ForDisplay(text)
18b80 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
18b90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18ba0 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74          traceCat
18bb0 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20  egory);....     
18bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18bd0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 73             if (s
18be0 74 72 69 63 74 29 0d 0a 20 20 20 20 20 20 20 20  trict)..        
18bf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18c00 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
18c10 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20  rn false;....   
18c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18c30 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
18c40 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20  tinue;..        
18c50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18c60 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
18c70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18c80 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69       configurati
18c90 6f 6e 2e 6e 6f 56 73 32 30 31 30 20 3d 20 28 62  on.noVs2010 = (b
18ca0 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20  ool)value;..    
18cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18cc0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
18cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
18ce0 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74  lse if (MatchOpt
18cf0 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 6e 6f 56  ion(newArg, "noV
18d00 73 32 30 31 32 22 29 29 0d 0a 20 20 20 20 20 20  s2012"))..      
18d10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18d20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
18d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18d40 20 62 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d 20 50   bool? value = P
18d50 61 72 73 65 42 6f 6f 6c 65 61 6e 28 74 65 78 74  arseBoolean(text
18d60 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
18d70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18d80 20 20 69 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e    if (value == n
18d90 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
18da0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18db0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
18dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18dd0 20 20 20 20 20 65 72 72 6f 72 20 3d 20 54 72 61       error = Tra
18de0 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72  ceOps.DebugAndTr
18df0 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ace(..          
18e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18e10 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 50            TraceP
18e20 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20  riority.Lowest, 
18e30 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a  debugCallback,..
18e40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18e50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18e60 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63      traceCallbac
18e70 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  k, String.Format
18e80 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
18e90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18ea0 20 20 20 20 20 20 20 22 49 6e 76 61 6c 69 64 20         "Invalid 
18eb0 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75  {0} boolean valu
18ec0 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20  e: {1}",..      
18ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f                Fo
18ef0 72 44 69 73 70 6c 61 79 28 61 72 67 29 2c 20 46  rDisplay(arg), F
18f00 6f 72 44 69 73 70 6c 61 79 28 74 65 78 74 29 29  orDisplay(text))
18f10 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
18f20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18f30 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65         traceCate
18f40 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
18f50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18f60 20 20 20 20 20 20 20 20 20 20 69 66 20 28 73 74            if (st
18f70 72 69 63 74 29 0d 0a 20 20 20 20 20 20 20 20 20  rict)..         
18f80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18f90 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
18fa0 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20  n false;....    
18fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18fc0 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74              cont
18fd0 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  inue;..         
18fe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18ff0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
19000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19010 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f      configuratio
19020 6e 2e 6e 6f 56 73 32 30 31 32 20 3d 20 28 62 6f  n.noVs2012 = (bo
19030 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20  ol)value;..     
19040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19050 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
19060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c                el
19070 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69  se if (MatchOpti
19080 6f 6e 28 6e 65 77 41 72 67 2c 20 22 6e 6f 56 73  on(newArg, "noVs
19090 32 30 31 33 22 29 29 0d 0a 20 20 20 20 20 20 20  2013"))..       
190a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
190b0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
190c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
190d0 62 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d 20 50 61  bool? value = Pa
190e0 72 73 65 42 6f 6f 6c 65 61 6e 28 74 65 78 74 29  rseBoolean(text)
190f0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
19100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19110 20 69 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75   if (value == nu
19120 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
19130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19140 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
19150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19160 20 20 20 20 65 72 72 6f 72 20 3d 20 54 72 61 63      error = Trac
19170 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61  eOps.DebugAndTra
19180 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ce(..           
19190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
191a0 20 20 20 20 20 20 20 20 20 54 72 61 63 65 50 72           TracePr
191b0 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64  iority.Lowest, d
191c0 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20  ebugCallback,.. 
191d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
191e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
191f0 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b     traceCallback
19200 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  , String.Format(
19210 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
19220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19230 20 20 20 20 20 20 22 49 6e 76 61 6c 69 64 20 7b        "Invalid {
19240 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65  0} boolean value
19250 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20  : {1}",..       
19260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19270 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72               For
19280 44 69 73 70 6c 61 79 28 61 72 67 29 2c 20 46 6f  Display(arg), Fo
19290 72 44 69 73 70 6c 61 79 28 74 65 78 74 29 29 2c  rDisplay(text)),
192a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
192b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
192c0 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67        traceCateg
192d0 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
192e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
192f0 20 20 20 20 20 20 20 20 20 69 66 20 28 73 74 72           if (str
19300 69 63 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ict)..          
19310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19320 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
19330 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20   false;....     
19340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19350 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69             conti
19360 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  nue;..          
19370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19380 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
19390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
193a0 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e     configuration
193b0 2e 6e 6f 56 73 32 30 31 33 20 3d 20 28 62 6f 6f  .noVs2013 = (boo
193c0 6c 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20  l)value;..      
193d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
193e0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
193f0 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73               els
19400 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f  e if (MatchOptio
19410 6e 28 6e 65 77 41 72 67 2c 20 22 70 65 72 55 73  n(newArg, "perUs
19420 65 72 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20  er"))..         
19430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
19440 0d 0a 20 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 20 20 20 62 6f                bo
19460 6f 6c 3f 20 76 61 6c 75 65 20 3d 20 50 61 72 73  ol? value = Pars
19470 65 42 6f 6f 6c 65 61 6e 28 74 65 78 74 29 3b 0d  eBoolean(text);.
19480 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
19490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
194a0 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c  f (value == null
194b0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
194c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
194d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
194e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
194f0 20 20 65 72 72 6f 72 20 3d 20 54 72 61 63 65 4f    error = TraceO
19500 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65  ps.DebugAndTrace
19510 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
19520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19530 20 20 20 20 20 20 20 54 72 61 63 65 50 72 69 6f         TracePrio
19540 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62  rity.Lowest, deb
19550 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20  ugCallback,..   
19560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19580 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20   traceCallback, 
19590 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
195a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
195b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
195c0 20 20 20 20 22 49 6e 76 61 6c 69 64 20 7b 30 7d      "Invalid {0}
195d0 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 3a 20   boolean value: 
195e0 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  {1}",..         
195f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19600 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69             ForDi
19610 73 70 6c 61 79 28 61 72 67 29 2c 20 46 6f 72 44  splay(arg), ForD
19620 69 73 70 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a  isplay(text)),..
19630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19650 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72      traceCategor
19660 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
19670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19680 20 20 20 20 20 20 20 69 66 20 28 73 74 72 69 63         if (stric
19690 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t)..            
196a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
196b0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
196c0 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  alse;....       
196d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
196e0 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75           continu
196f0 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
19700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19710 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
19720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19730 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 70   configuration.p
19740 65 72 55 73 65 72 20 3d 20 28 62 6f 6f 6c 29 76  erUser = (bool)v
19750 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alue;..         
19760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
19770 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
19780 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69            else i
19790 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e  f (MatchOption(n
197a0 65 77 41 72 67 2c 20 22 72 65 67 69 73 74 72 79  ewArg, "registry
197b0 56 65 72 73 69 6f 6e 22 29 29 0d 0a 20 20 20 20  Version"))..    
197c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
197d0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
197e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
197f0 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e     configuration
19800 2e 72 65 67 69 73 74 72 79 56 65 72 73 69 6f 6e  .registryVersion
19810 20 3d 20 74 65 78 74 3b 0d 0a 20 20 20 20 20 20   = text;..      
19820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19830 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
19840 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73               els
19850 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f  e if (MatchOptio
19860 6e 28 6e 65 77 41 72 67 2c 20 22 73 74 72 69 63  n(newArg, "stric
19870 74 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  t"))..          
19880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
19890 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
198a0 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f               boo
198b0 6c 3f 20 76 61 6c 75 65 20 3d 20 50 61 72 73 65  l? value = Parse
198c0 42 6f 6f 6c 65 61 6e 28 74 65 78 74 29 3b 0d 0a  Boolean(text);..
198d0 0d 0a 20 20 20 20 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 69 66                if
198f0 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29   (value == null)
19900 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
19910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
19920 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
19930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19940 20 65 72 72 6f 72 20 3d 20 54 72 61 63 65 4f 70   error = TraceOp
19950 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28  s.DebugAndTrace(
19960 0d 0a 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 20 54 72 61 63 65 50 72 69 6f 72        TracePrior
19990 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75  ity.Lowest, debu
199a0 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20  gCallback,..    
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 20 20 20 20 20 20 20 20                  
199d0 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53  traceCallback, S
199e0 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
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 20                  
19a10 20 20 20 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20     "Invalid {0} 
19a20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 3a 20 7b  boolean value: {
19a30 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  1}",..          
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 20 20 46 6f 72 44 69 73            ForDis
19a60 70 6c 61 79 28 61 72 67 29 2c 20 46 6f 72 44 69  play(arg), ForDi
19a70 73 70 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a 20  splay(text)),.. 
19a80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19a90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19aa0 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
19ab0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
19ac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19ad0 20 20 20 20 20 20 69 66 20 28 73 74 72 69 63 74        if (strict
19ae0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
19af0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19b00 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
19b10 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  lse;....        
19b20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19b30 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65          continue
19b40 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
19b50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
19b60 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
19b70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19b80 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
19b90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19ba0 2f 2f 20 4e 4f 54 45 3a 20 41 6c 6c 6f 77 20 74  // NOTE: Allow t
19bb0 68 65 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 20  he command line 
19bc0 61 72 67 75 6d 65 6e 74 73 20 74 6f 0d 0a 20 20  arguments to..  
19bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19be0 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
19bf0 20 20 20 6f 76 65 72 72 69 64 65 20 74 68 65 20     override the 
19c00 22 73 74 72 69 63 74 6e 65 73 73 22 20 73 65 74  "strictness" set
19c10 74 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 20 20  ting..          
19c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19c30 20 20 2f 2f 20 20 20 20 20 20 20 70 72 6f 76 69    //       provi
19c40 64 65 64 20 62 79 20 6f 75 72 20 63 61 6c 6c 65  ded by our calle
19c50 72 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  r...            
19c60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19c70 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
19c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19c90 73 74 72 69 63 74 20 3d 20 28 62 6f 6f 6c 29 76  strict = (bool)v
19ca0 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alue;..         
19cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
19cc0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
19cd0 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69            else i
19ce0 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e  f (MatchOption(n
19cf0 65 77 41 72 67 2c 20 22 74 68 72 6f 77 4f 6e 4d  ewArg, "throwOnM
19d00 69 73 73 69 6e 67 22 29 29 0d 0a 20 20 20 20 20  issing"))..     
19d10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19d20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
19d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19d40 20 20 62 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d 20    bool? value = 
19d50 50 61 72 73 65 42 6f 6f 6c 65 61 6e 28 74 65 78  ParseBoolean(tex
19d60 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  t);....         
19d70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19d80 20 20 20 69 66 20 28 76 61 6c 75 65 20 3d 3d 20     if (value == 
19d90 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
19da0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19db0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
19dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19dd0 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 54 72        error = Tr
19de0 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54  aceOps.DebugAndT
19df0 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20  race(..         
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 54 72 61 63 65             Trace
19e20 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c  Priority.Lowest,
19e30 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d   debugCallback,.
19e40 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
19e50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19e60 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61       traceCallba
19e70 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ck, String.Forma
19e80 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
19e90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19ea0 20 20 20 20 20 20 20 20 22 49 6e 76 61 6c 69 64          "Invalid
19eb0 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 61 6c   {0} boolean val
19ec0 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20  ue: {1}",..     
19ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46                 F
19ef0 6f 72 44 69 73 70 6c 61 79 28 61 72 67 29 2c 20  orDisplay(arg), 
19f00 46 6f 72 44 69 73 70 6c 61 79 28 74 65 78 74 29  ForDisplay(text)
19f10 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
19f20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19f30 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74          traceCat
19f40 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20  egory);....     
19f50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19f60 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 73             if (s
19f70 74 72 69 63 74 29 0d 0a 20 20 20 20 20 20 20 20  trict)..        
19f80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19f90 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
19fa0 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20  rn false;....   
19fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
19fd0 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20  tinue;..        
19fe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19ff0 20 20 20 20 7d 0d 0a 0d 0a 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 63 6f 6e 66 69 67 75 72 61 74 69       configurati
1a020 6f 6e 2e 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e  on.throwOnMissin
1a030 67 20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75 65 3b  g = (bool)value;
1a040 0d 0a 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 7d 0d 0a 20 20 20            }..   
1a060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a070 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61       else if (Ma
1a080 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67  tchOption(newArg
1a090 2c 20 22 74 72 61 63 65 46 6f 72 6d 61 74 22 29  , "traceFormat")
1a0a0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
1a0b0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
1a0c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a0d0 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67            config
1a0e0 75 72 61 74 69 6f 6e 2e 74 72 61 63 65 46 6f 72  uration.traceFor
1a0f0 6d 61 74 20 3d 20 74 65 78 74 3b 0d 0a 20 20 20  mat = text;..   
1a100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a110 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70           TraceOp
1a120 73 2e 54 72 61 63 65 46 6f 72 6d 61 74 20 3d 20  s.TraceFormat = 
1a130 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 74 72  configuration.tr
1a140 61 63 65 46 6f 72 6d 61 74 3b 0d 0a 20 20 20 20  aceFormat;..    
1a150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a160 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
1a170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
1a180 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74  lse if (MatchOpt
1a190 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 74 72 61  ion(newArg, "tra
1a1a0 63 65 50 72 69 6f 72 69 74 79 22 29 29 0d 0a 20  cePriority")).. 
1a1b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a1c0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
1a1d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a1e0 20 20 20 20 20 20 6f 62 6a 65 63 74 20 76 61 6c        object val
1a1f0 75 65 20 3d 20 50 61 72 73 65 45 6e 75 6d 28 0d  ue = ParseEnum(.
1a200 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1a210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a220 20 74 79 70 65 6f 66 28 54 72 61 63 65 50 72 69   typeof(TracePri
1a230 6f 72 69 74 79 29 2c 20 74 65 78 74 2c 20 74 72  ority), text, tr
1a240 75 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ue);....        
1a250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a260 20 20 20 20 69 66 20 28 76 61 6c 75 65 20 3d 3d      if (value ==
1a270 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
1a280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a290 20 20 20 20 7b 0d 0a 20 20 20 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 20 20 20 20 20 65 72 72 6f 72 20 3d 20 54         error = T
1a2c0 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64  raceOps.DebugAnd
1a2d0 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20  Trace(..        
1a2e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a2f0 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
1a300 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74  ePriority.Lowest
1a310 2c 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c  , debugCallback,
1a320 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1a330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a340 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62        traceCallb
1a350 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d  ack, String.Form
1a360 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
1a370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a380 20 20 20 20 20 20 20 20 20 22 49 6e 76 61 6c 69           "Invali
1a390 64 20 7b 30 7d 20 76 61 6c 75 65 3a 20 7b 31 7d  d {0} value: {1}
1a3a0 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
1a3b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a3c0 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c          ForDispl
1a3d0 61 79 28 61 72 67 29 2c 20 46 6f 72 44 69 73 70  ay(arg), ForDisp
1a3e0 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a 20 20 20  lay(text)),..   
1a3f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a410 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
1a420 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1a430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a440 20 20 20 20 69 66 20 28 73 74 72 69 63 74 29 0d      if (strict).
1a450 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1a460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a470 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
1a480 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e;....          
1a490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a4a0 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d        continue;.
1a4b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1a4c0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
1a4d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1a4e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
1a4f0 6e 66 69 67 75 72 61 74 69 6f 6e 2e 74 72 61 63  nfiguration.trac
1a500 65 50 72 69 6f 72 69 74 79 20 3d 20 28 54 72 61  ePriority = (Tra
1a510 63 65 50 72 69 6f 72 69 74 79 29 76 61 6c 75 65  cePriority)value
1a520 3b 0d 0a 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 20 54                 T
1a540 72 61 63 65 4f 70 73 2e 54 72 61 63 65 50 72 69  raceOps.TracePri
1a550 6f 72 69 74 79 20 3d 20 63 6f 6e 66 69 67 75 72  ority = configur
1a560 61 74 69 6f 6e 2e 74 72 61 63 65 50 72 69 6f 72  ation.tracePrior
1a570 69 74 79 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ity;..          
1a580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
1a590 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1a5a0 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66           else if
1a5b0 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65   (MatchOption(ne
1a5c0 77 41 72 67 2c 20 22 76 65 72 62 6f 73 65 22 29  wArg, "verbose")
1a5d0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
1a5e0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
1a5f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a600 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 3f 20            bool? 
1a610 76 61 6c 75 65 20 3d 20 50 61 72 73 65 42 6f 6f  value = ParseBoo
1a620 6c 65 61 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a 20  lean(text);.... 
1a630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a640 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76             if (v
1a650 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  alue == null).. 
1a660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a670 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
1a680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72                er
1a6a0 72 6f 72 20 3d 20 54 72 61 63 65 4f 70 73 2e 44  ror = TraceOps.D
1a6b0 65 62 75 67 41 6e 64 54 72 61 63 65 28 0d 0a 20  ebugAndTrace(.. 
1a6c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a6d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a6e0 20 20 20 54 72 61 63 65 50 72 69 6f 72 69 74 79     TracePriority
1a6f0 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75 67 43 61  .Lowest, debugCa
1a700 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20  llback,..       
1a710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a720 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
1a730 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69  ceCallback, Stri
1a740 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20  ng.Format(..    
1a750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a770 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20 62 6f 6f  "Invalid {0} boo
1a780 6c 65 61 6e 20 76 61 6c 75 65 3a 20 7b 31 7d 22  lean value: {1}"
1a790 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
1a7a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a7b0 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61         ForDispla
1a7c0 79 28 61 72 67 29 2c 20 46 6f 72 44 69 73 70 6c  y(arg), ForDispl
1a7d0 61 79 28 74 65 78 74 29 29 2c 0d 0a 20 20 20 20  ay(text)),..    
1a7e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a7f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a800 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
1a810 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
1a820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a830 20 20 20 69 66 20 28 73 74 72 69 63 74 29 0d 0a     if (strict)..
1a840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a860 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
1a870 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
1a880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a890 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a       continue;..
1a8a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a8b0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
1a8c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1a8d0 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
1a8e0 66 69 67 75 72 61 74 69 6f 6e 2e 76 65 72 62 6f  figuration.verbo
1a8f0 73 65 20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75 65  se = (bool)value
1a900 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
1a910 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
1a920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a930 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d        else if (M
1a940 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72  atchOption(newAr
1a950 67 2c 20 22 76 73 56 65 72 73 69 6f 6e 53 75 66  g, "vsVersionSuf
1a960 66 69 78 22 29 29 0d 0a 20 20 20 20 20 20 20 20  fix"))..        
1a970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a980 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
1a990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
1a9a0 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 76 73 56  onfiguration.vsV
1a9b0 65 72 73 69 6f 6e 53 75 66 66 69 78 20 3d 20 74  ersionSuffix = t
1a9c0 65 78 74 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ext;..          
1a9d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
1a9e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1a9f0 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66           else if
1aa00 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65   (MatchOption(ne
1aa10 77 41 72 67 2c 20 22 77 68 61 74 49 66 22 29 29  wArg, "whatIf"))
1aa20 0d 0a 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 7b 0d 0a 20 20 20            {..   
1aa40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1aa50 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 3f 20 76           bool? v
1aa60 61 6c 75 65 20 3d 20 50 61 72 73 65 42 6f 6f 6c  alue = ParseBool
1aa70 65 61 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a 20 20  ean(text);....  
1aa80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1aa90 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76 61            if (va
1aaa0 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  lue == null)..  
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 7b 0d 0a 20 20 20            {..   
1aad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1aae0 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
1aaf0 6f 72 20 3d 20 54 72 61 63 65 4f 70 73 2e 44 65  or = TraceOps.De
1ab00 62 75 67 41 6e 64 54 72 61 63 65 28 0d 0a 20 20  bugAndTrace(..  
1ab10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ab20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ab30 20 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e    TracePriority.
1ab40 4c 6f 77 65 73 74 2c 20 64 65 62 75 67 43 61 6c  Lowest, debugCal
1ab50 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20  lback,..        
1ab60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ab70 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
1ab80 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e  eCallback, Strin
1ab90 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
1aba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1abb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
1abc0 49 6e 76 61 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c  Invalid {0} bool
1abd0 65 61 6e 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c  ean value: {1}",
1abe0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1abf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ac00 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79        ForDisplay
1ac10 28 61 72 67 29 2c 20 46 6f 72 44 69 73 70 6c 61  (arg), ForDispla
1ac20 79 28 74 65 78 74 29 29 2c 0d 0a 20 20 20 20 20  y(text)),..     
1ac30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ac40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
1ac50 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
1ac60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1ac70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ac80 20 20 69 66 20 28 73 74 72 69 63 74 29 0d 0a 20    if (strict).. 
1ac90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1aca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1acb0 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
1acc0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1acd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ace0 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20      continue;.. 
1acf0 20 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 7d 0d 0a 0d 0a             }....
1ad10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ad20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66              conf
1ad30 69 67 75 72 61 74 69 6f 6e 2e 77 68 61 74 49 66  iguration.whatIf
1ad40 20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d   = (bool)value;.
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 7d 0d 0a 20 20 20 20           }..    
1ad70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ad80 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61 74      else if (Mat
1ad90 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c  chOption(newArg,
1ada0 20 22 77 6f 77 36 34 22 29 29 0d 0a 20 20 20 20   "wow64"))..    
1adb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1adc0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
1add0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ade0 20 20 20 62 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d     bool? value =
1adf0 20 50 61 72 73 65 42 6f 6f 6c 65 61 6e 28 74 65   ParseBoolean(te
1ae00 78 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  xt);....        
1ae10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ae20 20 20 20 20 69 66 20 28 76 61 6c 75 65 20 3d 3d      if (value ==
1ae30 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
1ae40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ae50 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
1ae60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ae70 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 54         error = T
1ae80 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64  raceOps.DebugAnd
1ae90 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20  Trace(..        
1aea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1aeb0 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
1aec0 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74  ePriority.Lowest
1aed0 2c 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c  , debugCallback,
1aee0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1aef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1af00 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62        traceCallb
1af10 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d  ack, String.Form
1af20 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
1af30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1af40 20 20 20 20 20 20 20 20 20 22 49 6e 76 61 6c 69           "Invali
1af50 64 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 61  d {0} boolean va
1af60 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20  lue: {1}",..    
1af70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1af80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1af90 46 6f 72 44 69 73 70 6c 61 79 28 61 72 67 29 2c  ForDisplay(arg),
1afa0 20 46 6f 72 44 69 73 70 6c 61 79 28 74 65 78 74   ForDisplay(text
1afb0 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  )),..           
1afc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1afd0 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
1afe0 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
1aff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b000 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
1b010 73 74 72 69 63 74 29 0d 0a 20 20 20 20 20 20 20  strict)..       
1b020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b030 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
1b040 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20  urn false;....  
1b050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
1b070 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20  ntinue;..       
1b080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b090 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
1b0a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b0b0 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74        configurat
1b0c0 69 6f 6e 2e 77 6f 77 36 34 20 3d 20 28 62 6f 6f  ion.wow64 = (boo
1b0d0 6c 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20  l)value;..      
1b0e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b0f0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
1b100 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73               els
1b110 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e..             
1b120 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
1b130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b140 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20            error 
1b150 3d 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67  = TraceOps.Debug
1b160 41 6e 64 54 72 61 63 65 28 0d 0a 20 20 20 20 20  AndTrace(..     
1b170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b180 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
1b190 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c  Priority.Lowest,
1b1a0 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d   debugCallback,.
1b1b0 0a 20 20 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 20                  
1b1d0 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20   traceCallback, 
1b1e0 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
1b1f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b210 22 55 6e 73 75 70 70 6f 72 74 65 64 20 63 6f 6d  "Unsupported com
1b220 6d 61 6e 64 20 6c 69 6e 65 20 6f 70 74 69 6f 6e  mand line option
1b230 3a 20 7b 30 7d 22 2c 0d 0a 20 20 20 20 20 20 20  : {0}",..       
1b240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b250 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70           ForDisp
1b260 6c 61 79 28 61 72 67 29 29 2c 20 74 72 61 63 65  lay(arg)), trace
1b270 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  Category);....  
1b280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b290 20 20 20 20 20 20 20 20 20 20 69 66 20 28 73 74            if (st
1b2a0 72 69 63 74 29 0d 0a 20 20 20 20 20 20 20 20 20  rict)..         
1b2b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b2c0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
1b2d0 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lse;..          
1b2e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
1b2f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1b300 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
1b310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
1b320 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20  turn true;..    
1b330 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
1b340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
1b350 61 74 63 68 20 28 45 78 63 65 70 74 69 6f 6e 20  atch (Exception 
1b360 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e)..            
1b370 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
1b380 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
1b390 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63  Ops.DebugAndTrac
1b3a0 65 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e  e(TracePriority.
1b3b0 48 69 67 68 65 73 74 2c 0d 0a 20 20 20 20 20 20  Highest,..      
1b3c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b3d0 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c    debugCallback,
1b3e0 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20   traceCallback, 
1b3f0 65 2c 20 74 72 61 63 65 43 61 74 65 67 6f 72 79  e, traceCategory
1b400 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
1b410 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20            error 
1b420 3d 20 22 46 61 69 6c 65 64 20 74 6f 20 6d 6f 64  = "Failed to mod
1b430 69 66 79 20 63 6f 6e 66 69 67 75 72 61 74 69 6f  ify configuratio
1b440 6e 2e 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  n.";..          
1b450 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
1b460 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
1b470 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  n false;..      
1b480 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
1b490 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
1b4a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b4b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b4c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b4d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
1b4e0 20 20 20 20 20 20 20 20 20 20 5b 4d 65 74 68 6f            [Metho
1b4f0 64 49 6d 70 6c 28 4d 65 74 68 6f 64 49 6d 70 6c  dImpl(MethodImpl
1b500 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e 69  Options.NoInlini
1b510 6e 67 29 5d 0d 0a 20 20 20 20 20 20 20 20 20 20  ng)]..          
1b520 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20    public static 
1b530 62 6f 6f 6c 20 50 72 6f 63 65 73 73 28 0d 0a 20  bool Process(.. 
1b540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
1b550 74 72 69 6e 67 5b 5d 20 61 72 67 73 2c 0d 0a 20  tring[] args,.. 
1b560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43                 C
1b570 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 63 6f 6e  onfiguration con
1b580 66 69 67 75 72 61 74 69 6f 6e 2c 0d 0a 20 20 20  figuration,..   
1b590 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f               boo
1b5a0 6c 20 73 74 72 69 63 74 2c 0d 0a 20 20 20 20 20  l strict,..     
1b5b0 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20 73             ref s
1b5c0 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20  tring error..   
1b5d0 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a               )..
1b5e0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
1b5f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
1b600 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ry..            
1b610 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
1b620 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 63             if (c
1b630 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 3d 3d 20  onfiguration == 
1b640 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
1b650 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
1b660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b670 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 49        error = "I
1b680 6e 76 61 6c 69 64 20 63 6f 6e 66 69 67 75 72 61  nvalid configura
1b690 74 69 6f 6e 2e 22 3b 0d 0a 20 20 20 20 20 20 20  tion.";..       
1b6a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b6b0 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
1b6c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b6d0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
1b6e0 20 20 20 20 20 20 20 20 20 20 20 20 20 41 73 73               Ass
1b6f0 65 6d 62 6c 79 20 61 73 73 65 6d 62 6c 79 20 3d  embly assembly =
1b700 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 61   configuration.a
1b710 73 73 65 6d 62 6c 79 3b 0d 0a 0d 0a 20 20 20 20  ssembly;....    
1b720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b730 69 66 20 28 61 73 73 65 6d 62 6c 79 20 3d 3d 20  if (assembly == 
1b740 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
1b750 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
1b760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b770 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 49        error = "I
1b780 6e 76 61 6c 69 64 20 61 73 73 65 6d 62 6c 79 2e  nvalid assembly.
1b790 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ";..            
1b7a0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
1b7b0 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20  rn false;..     
1b7c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
1b7d0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1b7e0 20 20 20 20 20 20 20 20 69 66 20 28 21 63 6f 6e          if (!con
1b7f0 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 54 72 61  figuration.noTra
1b800 63 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ce)..           
1b810 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
1b820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b830 20 20 20 20 69 66 20 28 21 63 6f 6e 66 69 67 75      if (!configu
1b840 72 61 74 69 6f 6e 2e 6e 6f 4c 6f 67 20 26 26 0d  ration.noLog &&.
1b850 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1b860 20 20 20 20 20 20 20 20 20 20 20 20 20 53 74 72               Str
1b870 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74  ing.IsNullOrEmpt
1b880 79 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e  y(configuration.
1b890 6c 6f 67 46 69 6c 65 4e 61 6d 65 29 29 0d 0a 20  logFileName)).. 
1b8a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b8b0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
1b8c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b8d0 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
1b8e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b8f0 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 55        // NOTE: U
1b900 73 65 20 74 68 65 20 64 65 66 61 75 6c 74 20 6c  se the default l
1b910 6f 67 20 66 69 6c 65 20 6e 61 6d 65 2e 0d 0a 20  og file name... 
1b920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b930 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
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 63 6f 6e 66 69             confi
1b960 67 75 72 61 74 69 6f 6e 2e 6c 6f 67 46 69 6c 65  guration.logFile
1b970 4e 61 6d 65 20 3d 20 47 65 74 4c 6f 67 46 69 6c  Name = GetLogFil
1b980 65 4e 61 6d 65 28 0d 0a 20 20 20 20 20 20 20 20  eName(..        
1b990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b9a0 20 20 20 20 20 20 20 20 22 74 72 61 63 65 22 29          "trace")
1b9b0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
1b9c0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
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 2f 2f 2f 2f 2f 2f 2f 2f          ////////
1b9f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ba00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ba10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
1ba20 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
1ba30 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21             if (!
1ba40 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f  configuration.no
1ba50 43 6f 6e 73 6f 6c 65 29 0d 0a 20 20 20 20 20 20  Console)..      
1ba60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ba70 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
1ba80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ba90 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
1baa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bab0 20 2f 2f 20 4e 4f 54 45 3a 20 49 6e 20 76 65 72   // NOTE: In ver
1bac0 62 6f 73 65 20 6d 6f 64 65 2c 20 64 65 62 75 67  bose mode, debug
1bad0 20 6f 75 74 70 75 74 20 28 74 68 61 74 20 6d 65   output (that me
1bae0 65 74 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ets..           
1baf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bb00 20 2f 2f 20 20 20 20 20 20 20 74 68 65 20 63 6f   //       the co
1bb10 6e 66 69 67 75 72 65 64 20 70 72 69 6f 72 69 74  nfigured priorit
1bb20 79 20 63 72 69 74 65 72 69 61 29 20 77 69 6c 6c  y criteria) will
1bb30 20 62 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20   be..           
1bb40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bb50 20 2f 2f 20 20 20 20 20 20 20 64 69 73 70 6c 61   //       displa
1bb60 79 65 64 20 74 6f 20 74 68 65 20 63 6f 6e 73 6f  yed to the conso
1bb70 6c 65 3b 20 6f 74 68 65 72 77 69 73 65 2c 20 74  le; otherwise, t
1bb80 72 61 63 65 0d 0a 20 20 20 20 20 20 20 20 20 20  race..          
1bb90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bba0 20 20 2f 2f 20 20 20 20 20 20 20 6f 75 74 70 75    //       outpu
1bbb0 74 20 28 74 68 61 74 20 6d 65 65 74 73 20 74 68  t (that meets th
1bbc0 65 20 63 6f 6e 66 69 67 75 72 65 64 20 70 72 69  e configured pri
1bbd0 6f 72 69 74 79 0d 0a 20 20 20 20 20 20 20 20 20  ority..         
1bbe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bbf0 20 20 20 2f 2f 20 20 20 20 20 20 20 63 72 69 74     //       crit
1bc00 65 72 69 61 29 20 77 69 6c 6c 20 62 65 20 64 69  eria) will be di
1bc10 73 70 6c 61 79 65 64 20 74 6f 20 74 68 65 20 63  splayed to the c
1bc20 6f 6e 73 6f 6c 65 2e 0d 0a 20 20 20 20 20 20 20  onsole...       
1bc30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bc40 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
1bc50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bc60 20 20 20 20 20 69 66 20 28 63 6f 6e 66 69 67 75       if (configu
1bc70 72 61 74 69 6f 6e 2e 64 65 62 75 67 29 0d 0a 20  ration.debug).. 
1bc80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bc90 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
1bca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bcb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
1bcc0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1bcd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bce0 20 20 2f 2f 20 4e 4f 54 45 3a 20 41 64 64 20 74    // NOTE: Add t
1bcf0 68 65 20 63 6f 6e 73 6f 6c 65 20 74 72 61 63 65  he console trace
1bd00 20 6c 69 73 74 65 6e 65 72 20 74 6f 20 74 68 65   listener to the
1bd10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1bd20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bd30 20 20 2f 2f 20 20 20 20 20 20 20 6c 69 73 74 20    //       list 
1bd40 6f 66 20 74 72 61 63 65 20 6c 69 73 74 65 6e 65  of trace listene
1bd50 72 73 20 6d 61 69 6e 74 61 69 6e 65 64 20 62 79  rs maintained by
1bd60 0d 0a 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 20 2f 2f 20 20 20 20 20 20 20 74 68 65 20 54    //       the T
1bd90 72 61 63 65 4f 70 73 20 63 6c 61 73 73 20 28 69  raceOps class (i
1bda0 2e 65 2e 20 6f 6e 6c 79 20 6d 65 73 73 61 67 65  .e. only message
1bdb0 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  s..             
1bdc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bdd0 20 20 20 2f 2f 20 20 20 20 20 20 20 74 68 61 74     //       that
1bde0 20 6d 65 65 74 20 74 68 65 20 64 65 62 75 67 20   meet the debug 
1bdf0 70 72 69 6f 72 69 74 79 20 77 69 6c 6c 20 62 65  priority will be
1be00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1be10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1be20 20 20 2f 2f 20 20 20 20 20 20 20 73 65 65 6e 20    //       seen 
1be30 6f 6e 20 74 68 65 20 63 6f 6e 73 6f 6c 65 29 2e  on the console).
1be40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1be50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1be60 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
1be70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1be80 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 53        TraceOps.S
1be90 65 74 75 70 44 65 62 75 67 4c 69 73 74 65 6e 65  etupDebugListene
1bea0 72 73 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  rs();..         
1beb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bec0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
1bed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bee0 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20    else..        
1bef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bf00 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
1bf10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bf20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
1bf30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bf40 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f             // NO
1bf50 54 45 3a 20 41 64 64 20 74 68 65 20 63 6f 6e 73  TE: Add the cons
1bf60 6f 6c 65 20 74 72 61 63 65 20 6c 69 73 74 65 6e  ole trace listen
1bf70 65 72 20 74 6f 20 74 68 65 0d 0a 20 20 20 20 20  er to the..     
1bf80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bf90 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
1bfa0 20 20 20 20 6c 69 73 74 20 6f 66 20 62 75 69 6c      list of buil
1bfb0 74 2d 69 6e 20 74 72 61 63 65 20 6c 69 73 74 65  t-in trace liste
1bfc0 6e 65 72 73 20 28 69 2e 65 2e 0d 0a 20 20 20 20  ners (i.e...    
1bfd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bfe0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
1bff0 20 20 20 20 20 6f 6e 6c 79 20 6d 65 73 73 61 67       only messag
1c000 65 73 20 74 68 61 74 20 6d 65 65 74 20 74 68 65  es that meet the
1c010 20 74 72 61 63 65 0d 0a 20 20 20 20 20 20 20 20   trace..        
1c020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c030 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
1c040 20 70 72 69 6f 72 69 74 79 20 77 69 6c 6c 20 62   priority will b
1c050 65 20 73 65 65 6e 20 6f 6e 20 74 68 65 20 63 6f  e seen on the co
1c060 6e 73 6f 6c 65 29 2e 0d 0a 20 20 20 20 20 20 20  nsole)...       
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 2f 2f 0d 0a 20 20 20           //..   
1c090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c0a0 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61               Tra
1c0b0 63 65 2e 4c 69 73 74 65 6e 65 72 73 2e 41 64 64  ce.Listeners.Add
1c0c0 28 6e 65 77 20 43 6f 6e 73 6f 6c 65 54 72 61 63  (new ConsoleTrac
1c0d0 65 4c 69 73 74 65 6e 65 72 28 29 29 3b 0d 0a 20  eListener());.. 
1c0e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c0f0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 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 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
1c120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c130 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
1c140 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c150 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c160 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
1c170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c180 20 20 20 20 20 20 69 66 20 28 21 63 6f 6e 66 69        if (!confi
1c190 67 75 72 61 74 69 6f 6e 2e 6e 6f 4c 6f 67 20 26  guration.noLog &
1c1a0 26 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  &..             
1c1b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 21                 !
1c1c0 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45  String.IsNullOrE
1c1d0 6d 70 74 79 28 63 6f 6e 66 69 67 75 72 61 74 69  mpty(configurati
1c1e0 6f 6e 2e 6c 6f 67 46 69 6c 65 4e 61 6d 65 29 29  on.logFileName))
1c1f0 0d 0a 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 7b 0d 0a 20 20 20            {..   
1c210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c220 20 20 20 20 20 20 20 20 20 54 72 61 63 65 2e 4c           Trace.L
1c230 69 73 74 65 6e 65 72 73 2e 41 64 64 28 6e 65 77  isteners.Add(new
1c240 20 54 65 78 74 57 72 69 74 65 72 54 72 61 63 65   TextWriterTrace
1c250 4c 69 73 74 65 6e 65 72 28 0d 0a 20 20 20 20 20  Listener(..     
1c260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c270 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69             confi
1c280 67 75 72 61 74 69 6f 6e 2e 6c 6f 67 46 69 6c 65  guration.logFile
1c290 4e 61 6d 65 29 29 3b 0d 0a 0d 0a 20 20 20 20 20  Name));....     
1c2a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c2b0 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
1c2c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c2d0 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20         // NOTE: 
1c2e0 54 65 63 68 6e 69 63 61 6c 6c 79 2c 20 77 65 20  Technically, we 
1c2f0 63 72 65 61 74 65 64 20 74 68 65 20 6c 6f 67 20  created the log 
1c300 66 69 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 20  file...         
1c310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c320 20 20 20 2f 2f 0d 0a 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 20                  
1c340 20 20 20 66 69 6c 65 73 43 72 65 61 74 65 64 2b     filesCreated+
1c350 2b 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  +;..            
1c360 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
1c370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c380 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
1c390 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
1c3a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c3b0 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 44 75 6d      // NOTE: Dum
1c3c0 70 20 74 68 65 20 63 6f 6e 66 69 67 75 72 61 74  p the configurat
1c3d0 69 6f 6e 20 6e 6f 77 20 69 6e 20 63 61 73 65 20  ion now in case 
1c3e0 77 65 20 6e 65 65 64 20 74 6f 0d 0a 20 20 20 20  we need to..    
1c3f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c400 2f 2f 20 20 20 20 20 20 20 74 72 6f 75 62 6c 65  //       trouble
1c410 73 68 6f 6f 74 20 61 6e 79 20 69 73 73 75 65 73  shoot any issues
1c420 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
1c430 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
1c440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
1c450 66 20 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  f (configuration
1c460 2e 64 65 62 75 67 50 72 69 6f 72 69 74 79 20 3c  .debugPriority <
1c470 3d 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e  = TracePriority.
1c480 4d 65 64 69 75 6d 29 0d 0a 20 20 20 20 20 20 20  Medium)..       
1c490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c4a0 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 44   configuration.D
1c4b0 75 6d 70 28 64 65 62 75 67 43 61 6c 6c 62 61 63  ump(debugCallbac
1c4c0 6b 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  k);....         
1c4d0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 63             if (c
1c4e0 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 74 72 61  onfiguration.tra
1c4f0 63 65 50 72 69 6f 72 69 74 79 20 3c 3d 20 54 72  cePriority <= Tr
1c500 61 63 65 50 72 69 6f 72 69 74 79 2e 4d 65 64 69  acePriority.Medi
1c510 75 6d 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  um)..           
1c520 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
1c530 66 69 67 75 72 61 74 69 6f 6e 2e 44 75 6d 70 28  figuration.Dump(
1c540 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 29 3b 0d  traceCallback);.
1c550 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
1c560 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
1c570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1c580 2f 20 4e 4f 54 45 3a 20 53 68 6f 77 20 77 68 65  / NOTE: Show whe
1c590 72 65 20 77 65 20 61 72 65 20 72 75 6e 6e 69 6e  re we are runnin
1c5a0 67 20 66 72 6f 6d 20 61 6e 64 20 68 6f 77 20 77  g from and how w
1c5b0 65 20 77 65 72 65 0d 0a 20 20 20 20 20 20 20 20  e were..        
1c5c0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
1c5d0 20 20 20 20 20 69 6e 76 6f 6b 65 64 2e 0d 0a 20       invoked... 
1c5e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c5f0 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
1c600 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
1c610 67 20 6c 6f 63 61 74 69 6f 6e 20 3d 20 61 73 73  g location = ass
1c620 65 6d 62 6c 79 2e 4c 6f 63 61 74 69 6f 6e 3b 0d  embly.Location;.
1c630 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
1c640 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e         TraceOps.
1c650 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 54 72  DebugAndTrace(Tr
1c660 61 63 65 50 72 69 6f 72 69 74 79 2e 4d 65 64 69  acePriority.Medi
1c670 75 6d 4c 6f 77 2c 0d 0a 20 20 20 20 20 20 20 20  umLow,..        
1c680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c690 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74  debugCallback, t
1c6a0 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74  raceCallback, St
1c6b0 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
1c6c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c6d0 20 20 20 20 20 20 22 52 75 6e 6e 69 6e 67 20 65        "Running e
1c6e0 78 65 63 75 74 61 62 6c 65 20 69 73 3a 20 7b 30  xecutable is: {0
1c6f0 7d 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 6c  }", ForDisplay(l
1c700 6f 63 61 74 69 6f 6e 29 29 2c 0d 0a 20 20 20 20  ocation)),..    
1c710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c720 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72      traceCategor
1c730 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
1c740 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
1c750 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63  Ops.DebugAndTrac
1c760 65 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e  e(TracePriority.
1c770 4d 65 64 69 75 6d 4c 6f 77 2c 0d 0a 20 20 20 20  MediumLow,..    
1c780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c790 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63      debugCallbac
1c7a0 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b  k, traceCallback
1c7b0 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  , String.Format(
1c7c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1c7d0 20 20 20 20 20 20 20 20 20 20 22 4f 72 69 67 69            "Origi
1c7e0 6e 61 6c 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65  nal command line
1c7f0 20 69 73 3a 20 7b 30 7d 22 2c 0d 0a 20 20 20 20   is: {0}",..    
1c800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c810 20 20 20 20 45 6e 76 69 72 6f 6e 6d 65 6e 74 2e      Environment.
1c820 43 6f 6d 6d 61 6e 64 4c 69 6e 65 29 2c 20 74 72  CommandLine), tr
1c830 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d  aceCategory);...
1c840 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1c850 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65       TraceOps.De
1c860 62 75 67 41 6e 64 54 72 61 63 65 28 54 72 61 63  bugAndTrace(Trac
1c870 65 50 72 69 6f 72 69 74 79 2e 4d 65 64 69 75 6d  ePriority.Medium
1c880 4c 6f 77 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  Low,..          
1c890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65                de
1c8a0 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61  bugCallback, tra
1c8b0 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69  ceCallback, Stri
1c8c0 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20  ng.Format(..    
1c8d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c8e0 20 20 20 20 22 52 75 6e 6e 69 6e 67 20 70 72 6f      "Running pro
1c8f0 63 65 73 73 20 69 73 20 7b 30 7d 2e 22 2c 20 49  cess is {0}.", I
1c900 73 36 34 42 69 74 50 72 6f 63 65 73 73 28 29 20  s64BitProcess() 
1c910 3f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ?..             
1c920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
1c930 36 34 2d 62 69 74 22 20 3a 20 22 33 32 2d 62 69  64-bit" : "32-bi
1c940 74 22 29 2c 20 74 72 61 63 65 43 61 74 65 67 6f  t"), traceCatego
1c950 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
1c960 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
1c970 21 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 77  !configuration.w
1c980 68 61 74 49 66 29 0d 0a 20 20 20 20 20 20 20 20  hatIf)..        
1c990 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
1c9a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c9b0 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
1c9c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c9d0 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 49 66 20 74     // NOTE: If t
1c9e0 68 65 20 64 65 62 75 67 67 65 72 20 69 73 20 61  he debugger is a
1c9f0 74 74 61 63 68 65 64 20 61 6e 64 20 22 77 68 61  ttached and "wha
1ca00 74 2d 69 66 22 0d 0a 20 20 20 20 20 20 20 20 20  t-if"..         
1ca10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1ca20 2f 20 20 20 20 20 20 20 6d 6f 64 65 20 69 73 20  /       mode is 
1ca30 5b 6e 6f 77 5d 20 64 69 73 61 62 6c 65 64 2c 20  [now] disabled, 
1ca40 69 73 73 75 65 20 61 20 77 61 72 6e 69 6e 67 2e  issue a warning.
1ca50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1ca60 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
1ca70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ca80 20 20 20 20 20 20 69 66 20 28 44 65 62 75 67 67        if (Debugg
1ca90 65 72 2e 49 73 41 74 74 61 63 68 65 64 29 0d 0a  er.IsAttached)..
1caa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cab0 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
1cac0 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61  eOps.DebugAndTra
1cad0 63 65 28 54 72 61 63 65 50 72 69 6f 72 69 74 79  ce(TracePriority
1cae0 2e 4d 65 64 69 75 6d 48 69 67 68 2c 0d 0a 20 20  .MediumHigh,..  
1caf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cb00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65                de
1cb10 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61  bugCallback, tra
1cb20 63 65 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20  ceCallback,..   
1cb30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cb40 20 20 20 20 20 20 20 20 20 20 20 20 20 22 46 6f               "Fo
1cb50 72 63 65 64 20 74 6f 20 64 69 73 61 62 6c 65 20  rced to disable 
1cb60 5c 22 77 68 61 74 2d 69 66 5c 22 20 6d 6f 64 65  \"what-if\" mode
1cb70 20 77 69 74 68 20 22 20 2b 0d 0a 20 20 20 20 20   with " +..     
1cb80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cb90 20 20 20 20 20 20 20 20 20 20 20 22 64 65 62 75             "debu
1cba0 67 67 65 72 20 61 74 74 61 63 68 65 64 2e 22 2c  gger attached.",
1cbb0 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
1cbc0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1cbd0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
1cbe0 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73               els
1cbf0 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e..             
1cc00 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
1cc10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cc20 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67    TraceOps.Debug
1cc30 41 6e 64 54 72 61 63 65 28 54 72 61 63 65 50 72  AndTrace(TracePr
1cc40 69 6f 72 69 74 79 2e 4d 65 64 69 75 6d 48 69 67  iority.MediumHig
1cc50 68 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  h,..            
1cc60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cc70 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74  debugCallback, t
1cc80 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20  raceCallback,.. 
1cc90 20 20 20 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 22 4e 6f 20 61             "No a
1ccb0 63 74 75 61 6c 20 63 68 61 6e 67 65 73 20 77 69  ctual changes wi
1ccc0 6c 6c 20 62 65 20 6d 61 64 65 20 74 6f 20 74 68  ll be made to th
1ccd0 69 73 20 22 20 2b 0d 0a 20 20 20 20 20 20 20 20  is " +..        
1cce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ccf0 20 20 20 20 22 73 79 73 74 65 6d 20 62 65 63 61      "system beca
1cd00 75 73 65 20 5c 22 77 68 61 74 2d 69 66 5c 22 20  use \"what-if\" 
1cd10 6d 6f 64 65 20 69 73 20 65 6e 61 62 6c 65 64 2e  mode is enabled.
1cd20 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
1cd30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cd40 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
1cd50 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1cd60 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
1cd70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
1cd80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1cd90 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 49        // NOTE: I
1cda0 66 20 74 68 65 20 63 6f 6d 6d 61 6e 64 20 6c 69  f the command li
1cdb0 6e 65 20 68 61 73 20 6e 6f 74 20 62 65 65 6e 20  ne has not been 
1cdc0 6d 61 6e 75 61 6c 6c 79 0d 0a 20 20 20 20 20 20  manually..      
1cdd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
1cde0 20 20 20 20 20 20 20 63 6f 6e 66 69 72 6d 65 64         confirmed
1cdf0 20 28 69 2e 65 2e 20 76 69 61 20 74 68 65 20 65   (i.e. via the e
1ce00 78 70 6c 69 63 69 74 20 63 6f 6d 6d 61 6e 64 20  xplicit command 
1ce10 6c 69 6e 65 0d 0a 20 20 20 20 20 20 20 20 20 20  line..          
1ce20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
1ce30 20 20 20 6f 70 74 69 6f 6e 29 2c 20 74 68 65 6e     option), then
1ce40 20 73 74 6f 70 20 70 72 6f 63 65 73 73 69 6e 67   stop processing
1ce50 20 6e 6f 77 2e 20 20 57 65 20 65 6e 66 6f 72 63   now.  We enforc
1ce60 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e..             
1ce70 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
1ce80 74 68 69 73 20 72 75 6c 65 20 73 6f 20 74 68 61  this rule so tha
1ce90 74 20 73 69 6d 70 6c 79 20 64 6f 75 62 6c 65 2d  t simply double-
1cea0 63 6c 69 63 6b 69 6e 67 20 74 68 65 0d 0a 20 20  clicking the..  
1ceb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cec0 20 20 2f 2f 20 20 20 20 20 20 20 65 78 65 63 75    //       execu
1ced0 74 61 62 6c 65 20 77 69 6c 6c 20 6e 6f 74 20 72  table will not r
1cee0 65 73 75 6c 74 20 69 6e 20 61 6e 79 20 63 68 61  esult in any cha
1cef0 6e 67 65 73 20 62 65 69 6e 67 0d 0a 20 20 20 20  nges being..    
1cf00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cf10 2f 2f 20 20 20 20 20 20 20 6d 61 64 65 20 74 6f  //       made to
1cf20 20 74 68 65 20 73 79 73 74 65 6d 2e 0d 0a 20 20   the system...  
1cf30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cf40 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
1cf50 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21 63            if (!c
1cf60 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 63 6f 6e  onfiguration.con
1cf70 66 69 72 6d 29 0d 0a 20 20 20 20 20 20 20 20 20  firm)..         
1cf80 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
1cf90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cfa0 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 43        error = "C
1cfb0 61 6e 6e 6f 74 20 63 6f 6e 74 69 6e 75 65 2c 20  annot continue, 
1cfc0 74 68 65 20 5c 22 63 6f 6e 66 69 72 6d 5c 22 20  the \"confirm\" 
1cfd0 6f 70 74 69 6f 6e 20 69 73 20 22 20 2b 0d 0a 20  option is " +.. 
1cfe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cff0 20 20 20 20 20 20 20 20 20 20 20 22 6e 6f 74 20             "not 
1d000 65 6e 61 62 6c 65 64 2e 22 3b 0d 0a 0d 0a 20 20  enabled.";....  
1d010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d020 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
1d030 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se;..           
1d040 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
1d050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d060 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a    return true;..
1d070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d080 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
1d090 20 20 20 63 61 74 63 68 20 28 45 78 63 65 70 74     catch (Except
1d0a0 69 6f 6e 20 65 29 0d 0a 20 20 20 20 20 20 20 20  ion e)..        
1d0b0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
1d0c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
1d0d0 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64  raceOps.DebugAnd
1d0e0 54 72 61 63 65 28 54 72 61 63 65 50 72 69 6f 72  Trace(TracePrior
1d0f0 69 74 79 2e 48 69 67 68 65 73 74 2c 0d 0a 20 20  ity.Highest,..  
1d100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d110 20 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62        debugCallb
1d120 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61  ack, traceCallba
1d130 63 6b 2c 20 65 2c 20 74 72 61 63 65 43 61 74 65  ck, e, traceCate
1d140 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
1d150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72                er
1d160 72 6f 72 20 3d 20 22 46 61 69 6c 65 64 20 74 6f  ror = "Failed to
1d170 20 70 72 6f 63 65 73 73 20 63 6f 6e 66 69 67 75   process configu
1d180 72 61 74 69 6f 6e 2e 22 3b 0d 0a 20 20 20 20 20  ration.";..     
1d190 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
1d1a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d1b0 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20  return false;.. 
1d1c0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
1d1d0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
1d1e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d1f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d200 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d210 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
1d220 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b  ...            [
1d230 4d 65 74 68 6f 64 49 6d 70 6c 28 4d 65 74 68 6f  MethodImpl(Metho
1d240 64 49 6d 70 6c 4f 70 74 69 6f 6e 73 2e 4e 6f 49  dImplOptions.NoI
1d250 6e 6c 69 6e 69 6e 67 29 5d 0d 0a 20 20 20 20 20  nlining)]..     
1d260 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74         public st
1d270 61 74 69 63 20 62 6f 6f 6c 20 43 68 65 63 6b 52  atic bool CheckR
1d280 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 28 0d 0a  untimeVersion(..
1d290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d2a0 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 63 6f  Configuration co
1d2b0 6e 66 69 67 75 72 61 74 69 6f 6e 2c 0d 0a 20 20  nfiguration,..  
1d2c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f                bo
1d2d0 6f 6c 20 73 74 72 69 63 74 2c 0d 0a 20 20 20 20  ol strict,..    
1d2e0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20              ref 
1d2f0 73 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20  string error..  
1d300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d                ).
1d310 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
1d320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d330 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20  try..           
1d340 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
1d350 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
1d360 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 3d 3d  configuration ==
1d370 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
1d380 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
1d390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d3a0 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22         error = "
1d3b0 49 6e 76 61 6c 69 64 20 63 6f 6e 66 69 67 75 72  Invalid configur
1d3c0 61 74 69 6f 6e 2e 22 3b 0d 0a 20 20 20 20 20 20  ation.";..      
1d3d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d3e0 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
1d3f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1d400 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
1d410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
1d420 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1d430 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 57        // NOTE: W
1d440 68 61 74 20 76 65 72 73 69 6f 6e 20 6f 66 20 74  hat version of t
1d450 68 65 20 72 75 6e 74 69 6d 65 20 77 61 73 20 74  he runtime was t
1d460 68 65 20 63 6f 72 65 20 28 70 72 69 6d 61 72 79  he core (primary
1d470 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
1d480 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
1d490 61 73 73 65 6d 62 6c 79 20 63 6f 6d 70 69 6c 65  assembly compile
1d4a0 64 20 61 67 61 69 6e 73 74 20 28 65 2e 67 2e 20  d against (e.g. 
1d4b0 22 76 32 2e 30 2e 35 30 37 32 37 22 20 6f 72 0d  "v2.0.50727" or.
1d4c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1d4d0 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 22 76       //       "v
1d4e0 34 2e 30 2e 33 30 33 31 39 22 29 2e 0d 0a 20 20  4.0.30319")...  
1d4f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d500 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
1d510 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
1d520 20 63 6f 72 65 49 6d 61 67 65 52 75 6e 74 69 6d   coreImageRuntim
1d530 65 56 65 72 73 69 6f 6e 20 3d 20 47 65 74 49 6d  eVersion = GetIm
1d540 61 67 65 52 75 6e 74 69 6d 65 56 65 72 73 69 6f  ageRuntimeVersio
1d550 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n(..            
1d560 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66              conf
1d570 69 67 75 72 61 74 69 6f 6e 2e 63 6f 72 65 46 69  iguration.coreFi
1d580 6c 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20  leName);....    
1d590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d5a0 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
1d5b0 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a          // NOTE:
1d5c0 20 57 65 20 61 6c 6c 6f 77 20 74 68 65 20 61 63   We allow the ac
1d5d0 74 75 61 6c 20 69 6d 61 67 65 20 72 75 6e 74 69  tual image runti
1d5e0 6d 65 20 63 68 65 63 6b 69 6e 67 20 74 6f 20 62  me checking to b
1d5f0 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e..             
1d600 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
1d610 62 79 70 61 73 73 65 64 20 76 69 61 20 74 68 65  bypassed via the
1d620 20 22 2d 6e 6f 52 75 6e 74 69 6d 65 56 65 72 73   "-noRuntimeVers
1d630 69 6f 6e 22 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e  ion" command lin
1d640 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e..             
1d650 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
1d660 6f 70 74 69 6f 6e 2e 20 20 54 68 65 20 63 6f 6d  option.  The com
1d670 6d 61 6e 64 20 6c 69 6e 65 20 6f 70 74 69 6f 6e  mand line option
1d680 20 69 73 20 69 6e 74 65 6e 64 65 64 20 66 6f 72   is intended for
1d690 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1d6a0 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 65        //       e
1d6b0 78 70 65 72 74 20 75 73 65 20 6f 6e 6c 79 2e 0d  xpert use only..
1d6c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1d6d0 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
1d6e0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
1d6f0 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e  (configuration.n
1d700 6f 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 29  oRuntimeVersion)
1d710 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1d720 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
1d730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d740 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41   TraceOps.DebugA
1d750 6e 64 54 72 61 63 65 28 54 72 61 63 65 50 72 69  ndTrace(TracePri
1d760 6f 72 69 74 79 2e 4d 65 64 69 75 6d 2c 0d 0a 20  ority.Medium,.. 
1d770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d780 20 20 20 20 20 20 20 20 20 20 20 64 65 62 75 67             debug
1d790 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43  Callback, traceC
1d7a0 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e  allback, String.
1d7b0 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
1d7c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d7d0 20 20 20 20 20 22 41 73 73 65 6d 62 6c 79 20 69       "Assembly i
1d7e0 73 20 63 6f 6d 70 69 6c 65 64 20 66 6f 72 20 74  s compiled for t
1d7f0 68 65 20 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72  he .NET Framewor
1d800 6b 20 7b 30 7d 3b 20 22 20 2b 0d 0a 20 20 20 20  k {0}; " +..    
1d810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d820 20 20 20 20 20 20 20 20 22 68 6f 77 65 76 65 72          "however
1d830 2c 20 69 6e 73 74 61 6c 6c 61 74 69 6f 6e 20 72  , installation r
1d840 65 73 74 72 69 63 74 69 6f 6e 73 20 62 61 73 65  estrictions base
1d850 64 20 6f 6e 20 74 68 69 73 20 22 20 2b 0d 0a 20  d on this " +.. 
1d860 20 20 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 20 22 66 61 63 74             "fact
1d880 20 68 61 76 65 20 62 65 65 6e 20 64 69 73 61 62   have been disab
1d890 6c 65 64 20 76 69 61 20 74 68 65 20 63 6f 6d 6d  led via the comm
1d8a0 61 6e 64 20 6c 69 6e 65 2e 22 2c 0d 0a 20 20 20  and line.",..   
1d8b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d8c0 20 20 20 20 20 20 20 20 20 63 6f 72 65 49 6d 61           coreIma
1d8d0 67 65 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e  geRuntimeVersion
1d8e0 29 2c 20 74 72 61 63 65 43 61 74 65 67 6f 72 79  ), traceCategory
1d8f0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
1d900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
1d910 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20  turn true;..    
1d920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d930 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
1d940 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
1d950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d960 20 2f 2f 20 54 4f 44 4f 3a 20 52 65 73 74 72 69   // TODO: Restri
1d970 63 74 20 74 68 65 20 63 6f 6e 66 69 67 75 72 61  ct the configura
1d980 74 69 6f 6e 20 62 61 73 65 64 20 6f 6e 20 77 68  tion based on wh
1d990 69 63 68 20 69 6d 61 67 65 0d 0a 20 20 20 20 20  ich image..     
1d9a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1d9b0 2f 20 20 20 20 20 20 20 72 75 6e 74 69 6d 65 20  /       runtime 
1d9c0 76 65 72 73 69 6f 6e 73 20 28 77 68 69 63 68 20  versions (which 
1d9d0 6d 6f 72 65 2d 6f 72 2d 6c 65 73 73 20 63 6f 72  more-or-less cor
1d9e0 72 65 73 70 6f 6e 64 0d 0a 20 20 20 20 20 20 20  respond..       
1d9f0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
1da00 20 20 20 20 20 20 74 6f 20 2e 4e 45 54 20 46 72        to .NET Fr
1da10 61 6d 65 77 6f 72 6b 20 76 65 72 73 69 6f 6e 73  amework versions
1da20 29 20 61 72 65 20 73 75 70 70 6f 72 74 65 64 20  ) are supported 
1da30 62 79 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20  by the..        
1da40 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
1da50 20 20 20 20 20 76 65 72 73 69 6f 6e 73 20 6f 66       versions of
1da60 20 56 69 73 75 61 6c 20 53 74 75 64 69 6f 20 74   Visual Studio t
1da70 68 61 74 20 61 72 65 20 69 6e 73 74 61 6c 6c 65  hat are installe
1da80 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  d...            
1da90 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
1daa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dab0 69 66 20 28 53 74 72 69 6e 67 2e 49 73 4e 75 6c  if (String.IsNul
1dac0 6c 4f 72 45 6d 70 74 79 28 63 6f 72 65 49 6d 61  lOrEmpty(coreIma
1dad0 67 65 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e  geRuntimeVersion
1dae0 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
1daf0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
1db00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1db10 20 20 20 65 72 72 6f 72 20 3d 20 22 69 6e 76 61     error = "inva
1db20 6c 69 64 20 63 6f 72 65 20 66 69 6c 65 20 69 6d  lid core file im
1db30 61 67 65 20 72 75 6e 74 69 6d 65 20 76 65 72 73  age runtime vers
1db40 69 6f 6e 22 3b 0d 0a 20 20 20 20 20 20 20 20 20  ion";..         
1db50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
1db60 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20  eturn false;..  
1db70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1db80 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
1db90 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66           else if
1dba0 20 28 53 74 72 69 6e 67 2e 45 71 75 61 6c 73 28   (String.Equals(
1dbb0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1dbc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
1dbd0 72 65 49 6d 61 67 65 52 75 6e 74 69 6d 65 56 65  reImageRuntimeVe
1dbe0 72 73 69 6f 6e 2c 20 43 4c 52 76 32 49 6d 61 67  rsion, CLRv2Imag
1dbf0 65 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 2c  eRuntimeVersion,
1dc00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1dc10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 74                St
1dc20 72 69 6e 67 43 6f 6d 70 61 72 69 73 6f 6e 2e 4f  ringComparison.O
1dc30 72 64 69 6e 61 6c 29 29 0d 0a 20 20 20 20 20 20  rdinal))..      
1dc40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
1dc50 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1dc60 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
1dc70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dc80 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 46 6f       // NOTE: Fo
1dc90 72 20 74 68 65 20 43 4c 52 20 76 32 2e 30 20 72  r the CLR v2.0 r
1dca0 75 6e 74 69 6d 65 2c 20 6d 61 6b 65 20 73 75 72  untime, make sur
1dcb0 65 20 77 65 20 64 69 73 61 62 6c 65 0d 0a 20 20  e we disable..  
1dcc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dcd0 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 61        //       a
1dce0 6e 79 20 61 74 74 65 6d 70 74 20 74 6f 20 75 73  ny attempt to us
1dcf0 65 20 69 74 20 66 6f 72 20 74 68 69 6e 67 73 20  e it for things 
1dd00 74 68 61 74 20 72 65 71 75 69 72 65 0d 0a 20 20  that require..  
1dd10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dd20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 61        //       a
1dd30 6e 20 61 73 73 65 6d 62 6c 79 20 63 6f 6d 70 69  n assembly compi
1dd40 6c 65 64 20 66 6f 72 20 74 68 65 20 43 4c 52 20  led for the CLR 
1dd50 76 34 2e 30 2e 20 20 49 74 20 69 73 0d 0a 20 20  v4.0.  It is..  
1dd60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dd70 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 75        //       u
1dd80 6e 63 65 72 74 61 69 6e 20 69 66 20 74 68 69 73  ncertain if this
1dd90 20 69 73 20 61 63 74 75 61 6c 6c 79 20 61 20 70   is actually a p
1dda0 72 6f 62 6c 65 6d 20 69 6e 0d 0a 20 20 20 20 20  roblem in..     
1ddb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ddc0 20 20 20 2f 2f 20 20 20 20 20 20 20 70 72 61 63     //       prac
1ddd0 74 69 63 65 20 61 73 20 74 68 65 20 43 4c 52 20  tice as the CLR 
1dde0 76 34 2e 30 20 63 61 6e 20 6c 6f 61 64 20 61 6e  v4.0 can load an
1ddf0 64 20 75 73 65 20 61 6e 0d 0a 20 20 20 20 20 20  d use an..      
1de00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1de10 20 20 2f 2f 20 20 20 20 20 20 20 61 73 73 65 6d    //       assem
1de20 62 6c 79 20 63 6f 6d 70 69 6c 65 64 20 77 69 74  bly compiled wit
1de30 68 20 74 68 65 20 43 4c 52 20 76 32 2e 30 3b 20  h the CLR v2.0; 
1de40 68 6f 77 65 76 65 72 2c 0d 0a 20 20 20 20 20 20  however,..      
1de50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1de60 20 20 2f 2f 20 20 20 20 20 20 20 73 69 6e 63 65    //       since
1de70 20 74 68 69 73 20 70 72 6f 6a 65 63 74 20 6f 66   this project of
1de80 66 65 72 73 20 62 6f 74 68 20 63 6f 6e 66 69 67  fers both config
1de90 75 72 61 74 69 6f 6e 73 2c 0d 0a 20 20 20 20 20  urations,..     
1dea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1deb0 20 20 20 2f 2f 20 20 20 20 20 20 20 77 65 20 63     //       we c
1dec0 75 72 72 65 6e 74 6c 79 20 64 69 73 61 6c 6c 6f  urrently disallo
1ded0 77 20 74 68 69 73 20 6d 69 73 6d 61 74 63 68 2e  w this mismatch.
1dee0 0d 0a 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 2f 2f 0d 0a 20 20            //..  
1df00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1df10 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74        configurat
1df20 69 6f 6e 2e 6e 6f 4e 65 74 46 78 34 30 20 3d 20  ion.noNetFx40 = 
1df30 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  true;..         
1df40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
1df50 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 4e  onfiguration.noN
1df60 65 74 46 78 34 35 20 3d 20 74 72 75 65 3b 0d 0a  etFx45 = true;..
1df70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1df80 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72          configur
1df90 61 74 69 6f 6e 2e 6e 6f 4e 65 74 46 78 34 35 31  ation.noNetFx451
1dfa0 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20   = true;..      
1dfb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dfc0 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e    configuration.
1dfd0 6e 6f 56 73 32 30 31 30 20 3d 20 74 72 75 65 3b  noVs2010 = true;
1dfe0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1dff0 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67            config
1e000 75 72 61 74 69 6f 6e 2e 6e 6f 56 73 32 30 31 32  uration.noVs2012
1e010 20 3d 20 74 72 75 65 3b 0d 0a 20 20 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 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e    configuration.
1e040 6e 6f 56 73 32 30 31 33 20 3d 20 74 72 75 65 3b  noVs2013 = true;
1e050 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1e060 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
1e070 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61  eOps.DebugAndTra
1e080 63 65 28 54 72 61 63 65 50 72 69 6f 72 69 74 79  ce(TracePriority
1e090 2e 4d 65 64 69 75 6d 2c 0d 0a 20 20 20 20 20 20  .Medium,..      
1e0a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e0b0 20 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62        debugCallb
1e0c0 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61  ack, traceCallba
1e0d0 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ck, String.Forma
1e0e0 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
1e0f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e100 22 41 73 73 65 6d 62 6c 79 20 69 73 20 63 6f 6d  "Assembly is com
1e110 70 69 6c 65 64 20 66 6f 72 20 74 68 65 20 2e 4e  piled for the .N
1e120 45 54 20 46 72 61 6d 65 77 6f 72 6b 20 7b 30 7d  ET Framework {0}
1e130 2c 20 22 20 2b 0d 0a 20 20 20 20 20 20 20 20 20  , " +..         
1e140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e150 20 20 20 22 73 75 70 70 6f 72 74 20 66 6f 72 20     "support for 
1e160 74 68 65 20 2e 4e 45 54 20 46 72 61 6d 65 77 6f  the .NET Framewo
1e170 72 6b 20 7b 31 7d 20 69 73 20 6e 6f 77 20 64 69  rk {1} is now di
1e180 73 61 62 6c 65 64 2e 22 2c 0d 0a 20 20 20 20 20  sabled.",..     
1e190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e1a0 20 20 20 20 20 20 20 43 4c 52 76 32 49 6d 61 67         CLRv2Imag
1e1b0 65 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 2c  eRuntimeVersion,
1e1c0 20 43 4c 52 76 34 49 6d 61 67 65 52 75 6e 74 69   CLRv4ImageRunti
1e1d0 6d 65 56 65 72 73 69 6f 6e 29 2c 0d 0a 20 20 20  meVersion),..   
1e1e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e1f0 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
1e200 74 65 67 6f 72 79 29 3b 0d 0a 20 20 20 20 20 20  tegory);..      
1e210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
1e220 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1e230 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 53 74       else if (St
1e240 72 69 6e 67 2e 45 71 75 61 6c 73 28 0d 0a 20 20  ring.Equals(..  
1e250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e260 20 20 20 20 20 20 20 20 20 20 63 6f 72 65 49 6d            coreIm
1e270 61 67 65 52 75 6e 74 69 6d 65 56 65 72 73 69 6f  ageRuntimeVersio
1e280 6e 2c 20 43 4c 52 76 34 49 6d 61 67 65 52 75 6e  n, CLRv4ImageRun
1e290 74 69 6d 65 56 65 72 73 69 6f 6e 2c 0d 0a 20 20  timeVersion,..  
1e2a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e2b0 20 20 20 20 20 20 20 20 20 20 53 74 72 69 6e 67            String
1e2c0 43 6f 6d 70 61 72 69 73 6f 6e 2e 4f 72 64 69 6e  Comparison.Ordin
1e2d0 61 6c 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  al))..          
1e2e0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
1e2f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e300 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
1e310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e320 20 2f 2f 20 4e 4f 54 45 3a 20 46 6f 72 20 74 68   // NOTE: For th
1e330 65 20 43 4c 52 20 76 34 2e 30 20 72 75 6e 74 69  e CLR v4.0 runti
1e340 6d 65 2c 20 6d 61 6b 65 20 73 75 72 65 20 77 65  me, make sure we
1e350 20 64 69 73 61 62 6c 65 0d 0a 20 20 20 20 20 20   disable..      
1e360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e370 20 20 2f 2f 20 20 20 20 20 20 20 61 6e 79 20 61    //       any a
1e380 74 74 65 6d 70 74 20 74 6f 20 75 73 65 20 69 74  ttempt to use it
1e390 20 66 6f 72 20 74 68 69 6e 67 73 20 74 68 61 74   for things that
1e3a0 20 72 65 71 75 69 72 65 0d 0a 20 20 20 20 20 20   require..      
1e3b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e3c0 20 20 2f 2f 20 20 20 20 20 20 20 61 6e 20 61 73    //       an as
1e3d0 73 65 6d 62 6c 79 20 63 6f 6d 70 69 6c 65 64 20  sembly compiled 
1e3e0 66 6f 72 20 74 68 65 20 43 4c 52 20 76 32 2e 30  for the CLR v2.0
1e3f0 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
1e400 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
1e410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e420 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61         configura
1e430 74 69 6f 6e 2e 6e 6f 4e 65 74 46 78 32 30 20 3d  tion.noNetFx20 =
1e440 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20   true;..        
1e450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e460 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f  configuration.no
1e470 4e 65 74 46 78 33 35 20 3d 20 74 72 75 65 3b 0d  NetFx35 = true;.
1e480 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1e490 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75           configu
1e4a0 72 61 74 69 6f 6e 2e 6e 6f 56 73 32 30 30 35 20  ration.noVs2005 
1e4b0 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20  = true;..       
1e4c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e4d0 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e   configuration.n
1e4e0 6f 56 73 32 30 30 38 20 3d 20 74 72 75 65 3b 0d  oVs2008 = true;.
1e4f0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
1e500 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
1e510 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63  Ops.DebugAndTrac
1e520 65 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e  e(TracePriority.
1e530 4d 65 64 69 75 6d 2c 0d 0a 20 20 20 20 20 20 20  Medium,..       
1e540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e550 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61       debugCallba
1e560 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63  ck, traceCallbac
1e570 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  k, String.Format
1e580 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
1e590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
1e5a0 41 73 73 65 6d 62 6c 79 20 69 73 20 63 6f 6d 70  Assembly is comp
1e5b0 69 6c 65 64 20 66 6f 72 20 74 68 65 20 2e 4e 45  iled for the .NE
1e5c0 54 20 46 72 61 6d 65 77 6f 72 6b 20 7b 30 7d 2c  T Framework {0},
1e5d0 20 22 20 2b 0d 0a 20 20 20 20 20 20 20 20 20 20   " +..          
1e5e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e5f0 20 20 22 73 75 70 70 6f 72 74 20 66 6f 72 20 74    "support for t
1e600 68 65 20 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72  he .NET Framewor
1e610 6b 20 7b 31 7d 20 69 73 20 6e 6f 77 20 64 69 73  k {1} is now dis
1e620 61 62 6c 65 64 2e 22 2c 0d 0a 20 20 20 20 20 20  abled.",..      
1e630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e640 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79        ForDisplay
1e650 28 43 4c 52 76 34 49 6d 61 67 65 52 75 6e 74 69  (CLRv4ImageRunti
1e660 6d 65 56 65 72 73 69 6f 6e 29 2c 0d 0a 20 20 20  meVersion),..   
1e670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e680 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70           ForDisp
1e690 6c 61 79 28 43 4c 52 76 32 49 6d 61 67 65 52 75  lay(CLRv2ImageRu
1e6a0 6e 74 69 6d 65 56 65 72 73 69 6f 6e 29 29 2c 0d  ntimeVersion)),.
1e6b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1e6c0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
1e6d0 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 20 20  ceCategory);..  
1e6e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e6f0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
1e700 20 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20           else.. 
1e710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e720 20 20 20 7b 0d 0a 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 65 72                er
1e740 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72  ror = String.For
1e750 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
1e760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e770 20 20 22 75 6e 73 75 70 70 6f 72 74 65 64 20 63    "unsupported c
1e780 6f 72 65 20 66 69 6c 65 20 69 6d 61 67 65 20 72  ore file image r
1e790 75 6e 74 69 6d 65 20 76 65 72 73 69 6f 6e 20 22  untime version "
1e7a0 20 2b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   +..            
1e7b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e7c0 22 7b 30 7d 2c 20 6d 75 73 74 20 62 65 20 7b 31  "{0}, must be {1
1e7d0 7d 20 6f 72 20 7b 32 7d 22 2c 0d 0a 20 20 20 20  } or {2}",..    
1e7e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e7f0 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c          ForDispl
1e800 61 79 28 63 6f 72 65 49 6d 61 67 65 52 75 6e 74  ay(coreImageRunt
1e810 69 6d 65 56 65 72 73 69 6f 6e 29 2c 0d 0a 20 20  imeVersion),..  
1e820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e830 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73            ForDis
1e840 70 6c 61 79 28 43 4c 52 76 32 49 6d 61 67 65 52  play(CLRv2ImageR
1e850 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 29 2c 0d  untimeVersion),.
1e860 0a 20 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 20 20 20 46 6f 72               For
1e880 44 69 73 70 6c 61 79 28 43 4c 52 76 34 49 6d 61  Display(CLRv4Ima
1e890 67 65 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e  geRuntimeVersion
1e8a0 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ));....         
1e8b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
1e8c0 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20  eturn false;..  
1e8d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e8e0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
1e8f0 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
1e900 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20  n true;..       
1e910 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
1e920 20 20 20 20 20 20 20 20 20 20 20 20 63 61 74 63              catc
1e930 68 20 28 45 78 63 65 70 74 69 6f 6e 20 65 29 0d  h (Exception e).
1e940 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1e950 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
1e960 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73          TraceOps
1e970 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 54  .DebugAndTrace(T
1e980 72 61 63 65 50 72 69 6f 72 69 74 79 2e 48 69 67  racePriority.Hig
1e990 68 65 73 74 2c 0d 0a 20 20 20 20 20 20 20 20 20  hest,..         
1e9a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64                 d
1e9b0 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72  ebugCallback, tr
1e9c0 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 65 2c 20  aceCallback, e, 
1e9d0 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
1e9e0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
1e9f0 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22         error = "
1ea00 46 61 69 6c 65 64 20 74 6f 20 63 68 65 63 6b 20  Failed to check 
1ea10 69 6d 61 67 65 20 72 75 6e 74 69 6d 65 20 76 65  image runtime ve
1ea20 72 73 69 6f 6e 2e 22 3b 0d 0a 20 20 20 20 20 20  rsion.";..      
1ea30 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
1ea40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
1ea50 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20  eturn false;..  
1ea60 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
1ea70 20 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67           #endreg
1ea80 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ion....         
1ea90 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
1eaa0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1eab0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1eac0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ead0 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
1eae0 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50 75        #region Pu
1eaf0 62 6c 69 63 20 4d 65 74 68 6f 64 73 0d 0a 20 20  blic Methods..  
1eb00 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
1eb10 20 62 6f 6f 6c 20 48 61 73 46 6c 61 67 73 28 0d   bool HasFlags(.
1eb20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1eb30 20 49 6e 73 74 61 6c 6c 46 6c 61 67 73 20 68 61   InstallFlags ha
1eb40 73 46 6c 61 67 73 2c 0d 0a 20 20 20 20 20 20 20  sFlags,..       
1eb50 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 61 6c           bool al
1eb60 6c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  l..             
1eb70 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20     )..          
1eb80 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
1eb90 20 20 20 20 20 69 66 20 28 61 6c 6c 29 0d 0a 20       if (all).. 
1eba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ebb0 20 20 20 72 65 74 75 72 6e 20 28 28 69 6e 73 74     return ((inst
1ebc0 61 6c 6c 46 6c 61 67 73 20 26 20 68 61 73 46 6c  allFlags & hasFl
1ebd0 61 67 73 29 20 3d 3d 20 68 61 73 46 6c 61 67 73  ags) == hasFlags
1ebe0 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
1ebf0 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20      else..      
1ec00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
1ec10 74 75 72 6e 20 28 28 69 6e 73 74 61 6c 6c 46 6c  turn ((installFl
1ec20 61 67 73 20 26 20 68 61 73 46 6c 61 67 73 29 20  ags & hasFlags) 
1ec30 21 3d 20 49 6e 73 74 61 6c 6c 46 6c 61 67 73 2e  != InstallFlags.
1ec40 4e 6f 6e 65 29 3b 0d 0a 20 20 20 20 20 20 20 20  None);..        
1ec50 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
1ec60 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
1ec70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ec80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ec90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1eca0 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
1ecb0 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 62          public b
1ecc0 6f 6f 6c 20 49 73 4c 69 6e 71 53 75 70 70 6f 72  ool IsLinqSuppor
1ecd0 74 65 64 28 29 0d 0a 20 20 20 20 20 20 20 20 20  ted()..         
1ece0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
1ecf0 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
1ed00 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54            // NOT
1ed10 45 3a 20 52 65 74 75 72 6e 20 6e 6f 6e 2d 7a 65  E: Return non-ze
1ed20 72 6f 20 69 66 20 74 68 65 20 53 79 73 74 65 6d  ro if the System
1ed30 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 4c 69 6e  .Data.SQLite.Lin
1ed40 71 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  q..             
1ed50 20 20 20 2f 2f 20 20 20 20 20 20 20 61 73 73 65     //       asse
1ed60 6d 62 6c 79 20 73 68 6f 75 6c 64 20 62 65 20 70  mbly should be p
1ed70 72 6f 63 65 73 73 65 64 20 64 75 72 69 6e 67 20  rocessed during 
1ed80 74 68 65 20 69 6e 73 74 61 6c 6c 2e 0d 0a 20 20  the install...  
1ed90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
1eda0 20 20 20 20 20 20 20 49 66 20 74 68 65 20 74 61         If the ta
1edb0 72 67 65 74 20 69 73 20 56 69 73 75 61 6c 20 53  rget is Visual S
1edc0 74 75 64 69 6f 20 32 30 30 35 2c 20 74 68 69 73  tudio 2005, this
1edd0 20 6d 75 73 74 0d 0a 20 20 20 20 20 20 20 20 20   must..         
1ede0 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
1edf0 72 65 74 75 72 6e 20 7a 65 72 6f 2e 0d 0a 20 20  return zero...  
1ee00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
1ee10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1ee20 20 20 72 65 74 75 72 6e 20 21 6e 6f 4e 65 74 46    return !noNetF
1ee30 78 33 35 20 7c 7c 20 21 6e 6f 4e 65 74 46 78 34  x35 || !noNetFx4
1ee40 30 20 7c 7c 20 21 6e 6f 4e 65 74 46 78 34 35 20  0 || !noNetFx45 
1ee50 7c 7c 20 21 6e 6f 4e 65 74 46 78 34 35 31 3b 0d  || !noNetFx451;.
1ee60 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
1ee70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
1ee80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ee90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1eea0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1eeb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1eec0 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
1eed0 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 49 73 45   public bool IsE
1eee0 66 36 53 75 70 70 6f 72 74 65 64 28 29 0d 0a 20  f6Supported().. 
1eef0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
1ef00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
1ef10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1ef20 20 20 2f 2f 20 4e 4f 54 45 3a 20 52 65 74 75 72    // NOTE: Retur
1ef30 6e 20 6e 6f 6e 2d 7a 65 72 6f 20 69 66 20 74 68  n non-zero if th
1ef40 65 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51  e System.Data.SQ
1ef50 4c 69 74 65 2e 45 46 36 0d 0a 20 20 20 20 20 20  Lite.EF6..      
1ef60 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
1ef70 20 20 20 61 73 73 65 6d 62 6c 79 20 73 68 6f 75     assembly shou
1ef80 6c 64 20 62 65 20 70 72 6f 63 65 73 73 65 64 20  ld be processed 
1ef90 64 75 72 69 6e 67 20 74 68 65 20 69 6e 73 74 61  during the insta
1efa0 6c 6c 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll...           
1efb0 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 49 66       //       If
1efc0 20 74 68 65 20 74 61 72 67 65 74 20 69 73 20 56   the target is V
1efd0 69 73 75 61 6c 20 53 74 75 64 69 6f 20 32 30 30  isual Studio 200
1efe0 35 20 6f 72 20 56 69 73 75 61 6c 0d 0a 20 20 20  5 or Visual..   
1eff0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
1f000 20 20 20 20 20 20 53 74 75 64 69 6f 20 32 30 30        Studio 200
1f010 38 2c 20 74 68 69 73 20 6d 75 73 74 20 72 65 74  8, this must ret
1f020 75 72 6e 20 7a 65 72 6f 2e 20 20 41 6c 73 6f 2c  urn zero.  Also,
1f030 20 69 66 0d 0a 20 20 20 20 20 20 20 20 20 20 20   if..           
1f040 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 74 68       //       th
1f050 65 20 45 46 36 20 63 6f 72 65 20 61 73 73 65 6d  e EF6 core assem
1f060 62 6c 79 20 69 73 20 75 6e 61 76 61 69 6c 61 62  bly is unavailab
1f070 6c 65 2c 20 74 68 69 73 20 6d 75 73 74 0d 0a 20  le, this must.. 
1f080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1f090 2f 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 7a  /       return z
1f0a0 65 72 6f 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  ero...          
1f0b0 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
1f0c0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6e 6f            if (no
1f0d0 4e 65 74 46 78 34 30 20 26 26 20 6e 6f 4e 65 74  NetFx40 && noNet
1f0e0 46 78 34 35 20 26 26 20 6e 6f 4e 65 74 46 78 34  Fx45 && noNetFx4
1f0f0 35 31 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  51)..           
1f100 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
1f110 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  false;....      
1f120 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
1f130 20 49 73 53 79 73 74 65 6d 45 66 36 41 73 73 65   IsSystemEf6Asse
1f140 6d 62 6c 79 41 76 61 69 6c 61 62 6c 65 28 29 3b  mblyAvailable();
1f150 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
1f160 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
1f170 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f180 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f190 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f1a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f1b0 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
1f1c0 20 20 70 75 62 6c 69 63 20 41 73 73 65 6d 62 6c    public Assembl
1f1d0 79 4e 61 6d 65 20 47 65 74 43 6f 72 65 41 73 73  yName GetCoreAss
1f1e0 65 6d 62 6c 79 4e 61 6d 65 28 29 20 2f 2a 20 52  emblyName() /* R
1f1f0 45 51 55 49 52 45 44 20 2a 2f 0d 0a 20 20 20 20  EQUIRED */..    
1f200 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
1f210 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 63             if (c
1f220 6f 72 65 41 73 73 65 6d 62 6c 79 4e 61 6d 65 20  oreAssemblyName 
1f230 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
1f240 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
1f250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f260 20 63 6f 72 65 41 73 73 65 6d 62 6c 79 4e 61 6d   coreAssemblyNam
1f270 65 20 3d 20 41 73 73 65 6d 62 6c 79 4e 61 6d 65  e = AssemblyName
1f280 2e 47 65 74 41 73 73 65 6d 62 6c 79 4e 61 6d 65  .GetAssemblyName
1f290 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
1f2a0 20 20 20 20 20 20 20 20 20 20 20 43 6f 72 65 46             CoreF
1f2b0 69 6c 65 4e 61 6d 65 29 3b 20 2f 2a 20 74 68 72  ileName); /* thr
1f2c0 6f 77 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20  ow */..         
1f2d0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
1f2e0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
1f2f0 72 6e 20 63 6f 72 65 41 73 73 65 6d 62 6c 79 4e  rn coreAssemblyN
1f300 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ame;..          
1f310 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
1f320 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
1f330 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f340 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f350 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f360 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
1f370 20 20 20 20 20 20 70 75 62 6c 69 63 20 41 73 73        public Ass
1f380 65 6d 62 6c 79 4e 61 6d 65 20 47 65 74 4c 69 6e  emblyName GetLin
1f390 71 41 73 73 65 6d 62 6c 79 4e 61 6d 65 28 29 20  qAssemblyName() 
1f3a0 2f 2a 20 4f 50 54 49 4f 4e 41 4c 20 2a 2f 0d 0a  /* OPTIONAL */..
1f3b0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
1f3c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
1f3d0 66 20 28 49 73 4c 69 6e 71 53 75 70 70 6f 72 74  f (IsLinqSupport
1f3e0 65 64 28 29 20 26 26 20 28 6c 69 6e 71 41 73 73  ed() && (linqAss
1f3f0 65 6d 62 6c 79 4e 61 6d 65 20 3d 3d 20 6e 75 6c  emblyName == nul
1f400 6c 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  l))..           
1f410 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
1f420 20 20 20 20 20 20 20 20 20 20 20 20 6c 69 6e 71              linq
1f430 41 73 73 65 6d 62 6c 79 4e 61 6d 65 20 3d 20 41  AssemblyName = A
1f440 73 73 65 6d 62 6c 79 4e 61 6d 65 2e 47 65 74 41  ssemblyName.GetA
1f450 73 73 65 6d 62 6c 79 4e 61 6d 65 28 0d 0a 20 20  ssemblyName(..  
1f460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f470 20 20 20 20 20 20 4c 69 6e 71 46 69 6c 65 4e 61        LinqFileNa
1f480 6d 65 29 3b 20 2f 2a 20 74 68 72 6f 77 20 2a 2f  me); /* throw */
1f490 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1f4a0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
1f4b0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6c 69         return li
1f4c0 6e 71 41 73 73 65 6d 62 6c 79 4e 61 6d 65 3b 0d  nqAssemblyName;.
1f4d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
1f4e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
1f4f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f500 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f510 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f520 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f530 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
1f540 20 70 75 62 6c 69 63 20 41 73 73 65 6d 62 6c 79   public Assembly
1f550 4e 61 6d 65 20 47 65 74 45 66 36 41 73 73 65 6d  Name GetEf6Assem
1f560 62 6c 79 4e 61 6d 65 28 29 20 2f 2a 20 4f 50 54  blyName() /* OPT
1f570 49 4f 4e 41 4c 20 2a 2f 0d 0a 20 20 20 20 20 20  IONAL */..      
1f580 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
1f590 20 20 20 20 20 20 20 20 20 69 66 20 28 49 73 45           if (IsE
1f5a0 66 36 53 75 70 70 6f 72 74 65 64 28 29 20 26 26  f6Supported() &&
1f5b0 20 28 65 66 36 41 73 73 65 6d 62 6c 79 4e 61 6d   (ef6AssemblyNam
1f5c0 65 20 3d 3d 20 6e 75 6c 6c 29 29 0d 0a 20 20 20  e == null))..   
1f5d0 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
1f5e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f5f0 20 20 20 20 65 66 36 41 73 73 65 6d 62 6c 79 4e      ef6AssemblyN
1f600 61 6d 65 20 3d 20 41 73 73 65 6d 62 6c 79 4e 61  ame = AssemblyNa
1f610 6d 65 2e 47 65 74 41 73 73 65 6d 62 6c 79 4e 61  me.GetAssemblyNa
1f620 6d 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me(..           
1f630 20 20 20 20 20 20 20 20 20 20 20 20 20 45 66 36               Ef6
1f640 46 69 6c 65 4e 61 6d 65 29 3b 20 2f 2a 20 74 68  FileName); /* th
1f650 72 6f 77 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20  row */..        
1f660 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
1f670 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
1f680 75 72 6e 20 65 66 36 41 73 73 65 6d 62 6c 79 4e  urn ef6AssemblyN
1f690 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ame;..          
1f6a0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
1f6b0 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
1f6c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f6d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f6e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f6f0 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
1f700 20 20 20 20 20 20 70 75 62 6c 69 63 20 41 73 73        public Ass
1f710 65 6d 62 6c 79 4e 61 6d 65 20 47 65 74 44 65 73  emblyName GetDes
1f720 69 67 6e 65 72 41 73 73 65 6d 62 6c 79 4e 61 6d  ignerAssemblyNam
1f730 65 28 29 20 2f 2a 20 52 45 51 55 49 52 45 44 20  e() /* REQUIRED 
1f740 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  */..            
1f750 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
1f760 20 20 20 69 66 20 28 64 65 73 69 67 6e 65 72 41     if (designerA
1f770 73 73 65 6d 62 6c 79 4e 61 6d 65 20 3d 3d 20 6e  ssemblyName == n
1f780 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
1f790 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
1f7a0 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65 73               des
1f7b0 69 67 6e 65 72 41 73 73 65 6d 62 6c 79 4e 61 6d  ignerAssemblyNam
1f7c0 65 20 3d 20 41 73 73 65 6d 62 6c 79 4e 61 6d 65  e = AssemblyName
1f7d0 2e 47 65 74 41 73 73 65 6d 62 6c 79 4e 61 6d 65  .GetAssemblyName
1f7e0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
1f7f0 20 20 20 20 20 20 20 20 20 20 20 44 65 73 69 67             Desig
1f800 6e 65 72 46 69 6c 65 4e 61 6d 65 29 3b 20 2f 2a  nerFileName); /*
1f810 20 74 68 72 6f 77 20 2a 2f 0d 0a 20 20 20 20 20   throw */..     
1f820 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
1f830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f840 72 65 74 75 72 6e 20 64 65 73 69 67 6e 65 72 41  return designerA
1f850 73 73 65 6d 62 6c 79 4e 61 6d 65 3b 0d 0a 20 20  ssemblyName;..  
1f860 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
1f870 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
1f880 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f890 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f8a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f8b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
1f8c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
1f8d0 62 6c 69 63 20 73 74 72 69 6e 67 20 47 65 74 49  blic string GetI
1f8e0 6e 76 61 72 69 61 6e 74 4e 61 6d 65 28 29 0d 0a  nvariantName()..
1f8f0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
1f900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
1f910 65 74 75 72 6e 20 49 73 45 66 36 53 75 70 70 6f  eturn IsEf6Suppo
1f920 72 74 65 64 28 29 20 3f 20 45 66 36 49 6e 76 61  rted() ? Ef6Inva
1f930 72 69 61 6e 74 4e 61 6d 65 20 3a 20 49 6e 76 61  riantName : Inva
1f940 72 69 61 6e 74 4e 61 6d 65 3b 0d 0a 20 20 20 20  riantName;..    
1f950 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
1f960 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
1f970 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f980 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f990 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f9a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
1f9b0 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
1f9c0 69 63 20 73 74 72 69 6e 67 20 47 65 74 46 61 63  ic string GetFac
1f9d0 74 6f 72 79 54 79 70 65 4e 61 6d 65 28 29 0d 0a  toryTypeName()..
1f9e0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
1f9f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
1fa00 65 74 75 72 6e 20 49 73 45 66 36 53 75 70 70 6f  eturn IsEf6Suppo
1fa10 72 74 65 64 28 29 20 3f 20 45 66 36 46 61 63 74  rted() ? Ef6Fact
1fa20 6f 72 79 54 79 70 65 4e 61 6d 65 20 3a 20 46 61  oryTypeName : Fa
1fa30 63 74 6f 72 79 54 79 70 65 4e 61 6d 65 3b 0d 0a  ctoryTypeName;..
1fa40 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
1fa50 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
1fa60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fa70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fa80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fa90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1faa0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1fab0 70 75 62 6c 69 63 20 41 73 73 65 6d 62 6c 79 4e  public AssemblyN
1fac0 61 6d 65 20 47 65 74 50 72 6f 76 69 64 65 72 41  ame GetProviderA
1fad0 73 73 65 6d 62 6c 79 4e 61 6d 65 28 29 0d 0a 20  ssemblyName().. 
1fae0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
1faf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
1fb00 74 75 72 6e 20 49 73 45 66 36 53 75 70 70 6f 72  turn IsEf6Suppor
1fb10 74 65 64 28 29 20 3f 0d 0a 20 20 20 20 20 20 20  ted() ?..       
1fb20 20 20 20 20 20 20 20 20 20 20 20 20 20 47 65 74               Get
1fb30 45 66 36 41 73 73 65 6d 62 6c 79 4e 61 6d 65 28  Ef6AssemblyName(
1fb40 29 20 3a 20 47 65 74 43 6f 72 65 41 73 73 65 6d  ) : GetCoreAssem
1fb50 62 6c 79 4e 61 6d 65 28 29 3b 20 2f 2a 20 74 68  blyName(); /* th
1fb60 72 6f 77 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20  row */..        
1fb70 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
1fb80 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
1fb90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fba0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fbb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fbc0 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
1fbd0 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 76          public v
1fbe0 6f 69 64 20 44 75 6d 70 28 0d 0a 20 20 20 20 20  oid Dump(..     
1fbf0 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
1fc00 43 61 6c 6c 62 61 63 6b 20 74 72 61 63 65 43 61  Callback traceCa
1fc10 6c 6c 62 61 63 6b 0d 0a 20 20 20 20 20 20 20 20  llback..        
1fc20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
1fc30 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
1fc40 20 20 20 20 20 20 20 20 20 20 69 66 20 28 74 72            if (tr
1fc50 61 63 65 43 61 6c 6c 62 61 63 6b 20 21 3d 20 6e  aceCallback != n
1fc60 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
1fc70 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
1fc80 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
1fc90 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e  ceCallback(Strin
1fca0 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64  g.Format(NameAnd
1fcb0 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20  ValueFormat,..  
1fcc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fcd0 20 20 20 20 20 20 22 41 73 73 65 6d 62 6c 79 22        "Assembly"
1fce0 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 61 73 73  , ForDisplay(ass
1fcf0 65 6d 62 6c 79 29 29 2c 0d 0a 20 20 20 20 20 20  embly)),..      
1fd00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fd10 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29    traceCategory)
1fd20 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
1fd30 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
1fd40 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f  llback(String.Fo
1fd50 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75  rmat(NameAndValu
1fd60 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20  eFormat,..      
1fd70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fd80 20 20 22 4c 6f 67 46 69 6c 65 4e 61 6d 65 22 2c    "LogFileName",
1fd90 20 46 6f 72 44 69 73 70 6c 61 79 28 6c 6f 67 46   ForDisplay(logF
1fda0 69 6c 65 4e 61 6d 65 29 29 2c 0d 0a 20 20 20 20  ileName)),..    
1fdb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fdc0 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72      traceCategor
1fdd0 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
1fde0 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
1fdf0 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e  Callback(String.
1fe00 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61  Format(NameAndVa
1fe10 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20  lueFormat,..    
1fe20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fe30 20 20 20 20 22 44 69 72 65 63 74 6f 72 79 22 2c      "Directory",
1fe40 20 46 6f 72 44 69 73 70 6c 61 79 28 64 69 72 65   ForDisplay(dire
1fe50 63 74 6f 72 79 29 29 2c 0d 0a 20 20 20 20 20 20  ctory)),..      
1fe60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fe70 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29    traceCategory)
1fe80 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
1fe90 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
1fea0 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f  llback(String.Fo
1feb0 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75  rmat(NameAndValu
1fec0 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20  eFormat,..      
1fed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fee0 20 20 22 43 6f 72 65 46 69 6c 65 4e 61 6d 65 22    "CoreFileName"
1fef0 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 63 6f 72  , ForDisplay(cor
1ff00 65 46 69 6c 65 4e 61 6d 65 29 29 2c 0d 0a 20 20  eFileName)),..  
1ff10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ff20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67        traceCateg
1ff30 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
1ff40 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
1ff50 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e  ceCallback(Strin
1ff60 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64  g.Format(NameAnd
1ff70 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20  ValueFormat,..  
1ff80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ff90 20 20 20 20 20 20 22 4c 69 6e 71 46 69 6c 65 4e        "LinqFileN
1ffa0 61 6d 65 22 2c 20 46 6f 72 44 69 73 70 6c 61 79  ame", ForDisplay
1ffb0 28 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 29 29 2c  (linqFileName)),
1ffc0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1ffd0 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
1ffe0 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20  ategory);....   
1fff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20000 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53   traceCallback(S
20010 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d  tring.Format(Nam
20020 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c  eAndValueFormat,
20030 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
20040 20 20 20 20 20 20 20 20 20 20 22 45 66 36 46 69            "Ef6Fi
20050 6c 65 4e 61 6d 65 22 2c 20 46 6f 72 44 69 73 70  leName", ForDisp
20060 6c 61 79 28 65 66 36 46 69 6c 65 4e 61 6d 65 29  lay(ef6FileName)
20070 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
20080 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
20090 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20  eCategory);.... 
200a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
200b0 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b     traceCallback
200c0 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e  (String.Format(N
200d0 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61  ameAndValueForma
200e0 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t,..            
200f0 20 20 20 20 20 20 20 20 20 20 20 20 22 44 65 73              "Des
20100 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65 22 2c 20  ignerFileName", 
20110 46 6f 72 44 69 73 70 6c 61 79 28 64 65 73 69 67  ForDisplay(desig
20120 6e 65 72 46 69 6c 65 4e 61 6d 65 29 29 2c 0d 0a  nerFileName)),..
20130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20140 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74          traceCat
20150 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20  egory);....     
20160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
20170 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72  raceCallback(Str
20180 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41  ing.Format(NameA
20190 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a  ndValueFormat,..
201a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
201b0 20 20 20 20 20 20 20 20 22 52 65 67 69 73 74 72          "Registr
201c0 79 56 65 72 73 69 6f 6e 22 2c 20 46 6f 72 44 69  yVersion", ForDi
201d0 73 70 6c 61 79 28 72 65 67 69 73 74 72 79 56 65  splay(registryVe
201e0 72 73 69 6f 6e 29 29 2c 0d 0a 20 20 20 20 20 20  rsion)),..      
201f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20200 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29    traceCategory)
20210 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
20220 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
20230 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f  llback(String.Fo
20240 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75  rmat(NameAndValu
20250 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20  eFormat,..      
20260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20270 20 20 22 43 6f 6e 66 69 67 56 65 72 73 69 6f 6e    "ConfigVersion
20280 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 63 6f  ", ForDisplay(co
20290 6e 66 69 67 56 65 72 73 69 6f 6e 29 29 2c 0d 0a  nfigVersion)),..
202a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
202b0 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74          traceCat
202c0 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20  egory);....     
202d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
202e0 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72  raceCallback(Str
202f0 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41  ing.Format(NameA
20300 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a  ndValueFormat,..
20310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20320 20 20 20 20 20 20 20 20 22 56 73 56 65 72 73 69          "VsVersi
20330 6f 6e 53 75 66 66 69 78 22 2c 20 46 6f 72 44 69  onSuffix", ForDi
20340 73 70 6c 61 79 28 76 73 56 65 72 73 69 6f 6e 53  splay(vsVersionS
20350 75 66 66 69 78 29 29 2c 0d 0a 20 20 20 20 20 20  uffix)),..      
20360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20370 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29    traceCategory)
20380 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
20390 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
203a0 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f  llback(String.Fo
203b0 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75  rmat(NameAndValu
203c0 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20  eFormat,..      
203d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
203e0 20 20 22 44 65 62 75 67 46 6f 72 6d 61 74 22 2c    "DebugFormat",
203f0 20 46 6f 72 44 69 73 70 6c 61 79 28 64 65 62 75   ForDisplay(debu
20400 67 46 6f 72 6d 61 74 29 29 2c 0d 0a 20 20 20 20  gFormat)),..    
20410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20420 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72      traceCategor
20430 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
20440 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
20450 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e  Callback(String.
20460 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61  Format(NameAndVa
20470 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20  lueFormat,..    
20480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20490 20 20 20 20 22 54 72 61 63 65 46 6f 72 6d 61 74      "TraceFormat
204a0 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 74 72  ", ForDisplay(tr
204b0 61 63 65 46 6f 72 6d 61 74 29 29 2c 0d 0a 20 20  aceFormat)),..  
204c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
204d0 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67        traceCateg
204e0 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
204f0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
20500 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e  ceCallback(Strin
20510 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64  g.Format(NameAnd
20520 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20  ValueFormat,..  
20530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20540 20 20 20 20 20 20 22 49 6e 73 74 61 6c 6c 46 6c        "InstallFl
20550 61 67 73 22 2c 20 46 6f 72 44 69 73 70 6c 61 79  ags", ForDisplay
20560 28 69 6e 73 74 61 6c 6c 46 6c 61 67 73 29 29 2c  (installFlags)),
20570 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
20580 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
20590 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20  ategory);....   
205a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
205b0 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53   traceCallback(S
205c0 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d  tring.Format(Nam
205d0 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c  eAndValueFormat,
205e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
205f0 20 20 20 20 20 20 20 20 20 20 22 44 65 62 75 67            "Debug
20600 50 72 69 6f 72 69 74 79 22 2c 20 46 6f 72 44 69  Priority", ForDi
20610 73 70 6c 61 79 28 64 65 62 75 67 50 72 69 6f 72  splay(debugPrior
20620 69 74 79 29 29 2c 0d 0a 20 20 20 20 20 20 20 20  ity)),..        
20630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20640 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
20650 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
20660 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c         traceCall
20670 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d  back(String.Form
20680 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46  at(NameAndValueF
20690 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20  ormat,..        
206a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
206b0 22 54 72 61 63 65 50 72 69 6f 72 69 74 79 22 2c  "TracePriority",
206c0 20 46 6f 72 44 69 73 70 6c 61 79 28 74 72 61 63   ForDisplay(trac
206d0 65 50 72 69 6f 72 69 74 79 29 29 2c 0d 0a 20 20  ePriority)),..  
206e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
206f0 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67        traceCateg
20700 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
20710 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
20720 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e  ceCallback(Strin
20730 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64  g.Format(NameAnd
20740 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20  ValueFormat,..  
20750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20760 20 20 20 20 20 20 22 50 65 72 55 73 65 72 22 2c        "PerUser",
20770 20 46 6f 72 44 69 73 70 6c 61 79 28 70 65 72 55   ForDisplay(perU
20780 73 65 72 29 29 2c 0d 0a 20 20 20 20 20 20 20 20  ser)),..        
20790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
207a0 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
207b0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
207c0 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c         traceCall
207d0 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d  back(String.Form
207e0 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46  at(NameAndValueF
207f0 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20  ormat,..        
20800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20810 22 49 6e 73 74 61 6c 6c 22 2c 20 46 6f 72 44 69  "Install", ForDi
20820 73 70 6c 61 79 28 69 6e 73 74 61 6c 6c 29 29 2c  splay(install)),
20830 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
20840 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
20850 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20  ategory);....   
20860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20870 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53   traceCallback(S
20880 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d  tring.Format(Nam
20890 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c  eAndValueFormat,
208a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
208b0 20 20 20 20 20 20 20 20 20 20 22 57 6f 77 36 34            "Wow64
208c0 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 77 6f  ", ForDisplay(wo
208d0 77 36 34 29 29 2c 0d 0a 20 20 20 20 20 20 20 20  w64)),..        
208e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
208f0 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
20900 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
20910 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c         traceCall
20920 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d  back(String.Form
20930 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46  at(NameAndValueF
20940 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20  ormat,..        
20950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20960 22 4e 6f 52 75 6e 74 69 6d 65 56 65 72 73 69 6f  "NoRuntimeVersio
20970 6e 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 6e  n", ForDisplay(n
20980 6f 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 29  oRuntimeVersion)
20990 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
209a0 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
209b0 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20  eCategory);.... 
209c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
209d0 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b     traceCallback
209e0 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e  (String.Format(N
209f0 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61  ameAndValueForma
20a00 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t,..            
20a10 20 20 20 20 20 20 20 20 20 20 20 20 22 4e 6f 44              "NoD
20a20 65 73 6b 74 6f 70 22 2c 20 46 6f 72 44 69 73 70  esktop", ForDisp
20a30 6c 61 79 28 6e 6f 44 65 73 6b 74 6f 70 29 29 2c  lay(noDesktop)),
20a40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
20a50 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
20a60 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20  ategory);....   
20a70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20a80 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53   traceCallback(S
20a90 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d  tring.Format(Nam
20aa0 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c  eAndValueFormat,
20ab0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
20ac0 20 20 20 20 20 20 20 20 20 20 22 4e 6f 43 6f 6d            "NoCom
20ad0 70 61 63 74 22 2c 20 46 6f 72 44 69 73 70 6c 61  pact", ForDispla
20ae0 79 28 6e 6f 43 6f 6d 70 61 63 74 29 29 2c 0d 0a  y(noCompact)),..
20af0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20b00 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74          traceCat
20b10 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20  egory);....     
20b20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
20b30 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72  raceCallback(Str
20b40 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41  ing.Format(NameA
20b50 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a  ndValueFormat,..
20b60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20b70 20 20 20 20 20 20 20 20 22 4e 6f 4e 65 74 46 78          "NoNetFx
20b80 32 30 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28  20", ForDisplay(
20b90 6e 6f 4e 65 74 46 78 32 30 29 29 2c 0d 0a 20 20  noNetFx20)),..  
20ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20bb0 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67        traceCateg
20bc0 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
20bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
20be0 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e  ceCallback(Strin
20bf0 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64  g.Format(NameAnd
20c00 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20  ValueFormat,..  
20c10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20c20 20 20 20 20 20 20 22 4e 6f 4e 65 74 46 78 33 35        "NoNetFx35
20c30 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 6e 6f  ", ForDisplay(no
20c40 4e 65 74 46 78 33 35 29 29 2c 0d 0a 20 20 20 20  NetFx35)),..    
20c50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20c60 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72      traceCategor
20c70 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
20c80 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
20c90 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e  Callback(String.
20ca0 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61  Format(NameAndVa
20cb0 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20  lueFormat,..    
20cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20cd0 20 20 20 20 22 4e 6f 4e 65 74 46 78 34 30 22 2c      "NoNetFx40",
20ce0 20 46 6f 72 44 69 73 70 6c 61 79 28 6e 6f 4e 65   ForDisplay(noNe
20cf0 74 46 78 34 30 29 29 2c 0d 0a 20 20 20 20 20 20  tFx40)),..      
20d00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20d10 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29    traceCategory)
20d20 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
20d30 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
20d40 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f  llback(String.Fo
20d50 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75  rmat(NameAndValu
20d60 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20  eFormat,..      
20d70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20d80 20 20 22 4e 6f 4e 65 74 46 78 34 35 22 2c 20 46    "NoNetFx45", F
20d90 6f 72 44 69 73 70 6c 61 79 28 6e 6f 4e 65 74 46  orDisplay(noNetF
20da0 78 34 35 29 29 2c 0d 0a 20 20 20 20 20 20 20 20  x45)),..        
20db0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20dc0 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
20dd0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
20de0 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c         traceCall
20df0 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d  back(String.Form
20e00 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46  at(NameAndValueF
20e10 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20  ormat,..        
20e20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20e30 22 4e 6f 4e 65 74 46 78 34 35 31 22 2c 20 46 6f  "NoNetFx451", Fo
20e40 72 44 69 73 70 6c 61 79 28 6e 6f 4e 65 74 46 78  rDisplay(noNetFx
20e50 34 35 31 29 29 2c 0d 0a 20 20 20 20 20 20 20 20  451)),..        
20e60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20e70 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
20e80 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
20e90 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c         traceCall
20ea0 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d  back(String.Form
20eb0 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46  at(NameAndValueF
20ec0 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20  ormat,..        
20ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20ee0 22 4e 6f 56 73 32 30 30 35 22 2c 20 46 6f 72 44  "NoVs2005", ForD
20ef0 69 73 70 6c 61 79 28 6e 6f 56 73 32 30 30 35 29  isplay(noVs2005)
20f00 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
20f10 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
20f20 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20  eCategory);.... 
20f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20f40 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b     traceCallback
20f50 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e  (String.Format(N
20f60 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61  ameAndValueForma
20f70 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t,..            
20f80 20 20 20 20 20 20 20 20 20 20 20 20 22 4e 6f 56              "NoV
20f90 73 32 30 30 38 22 2c 20 46 6f 72 44 69 73 70 6c  s2008", ForDispl
20fa0 61 79 28 6e 6f 56 73 32 30 30 38 29 29 2c 0d 0a  ay(noVs2008)),..
20fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20fc0 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74          traceCat
20fd0 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20  egory);....     
20fe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
20ff0 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72  raceCallback(Str
21000 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41  ing.Format(NameA
21010 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a  ndValueFormat,..
21020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21030 20 20 20 20 20 20 20 20 22 4e 6f 56 73 32 30 31          "NoVs201
21040 30 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 6e  0", ForDisplay(n
21050 6f 56 73 32 30 31 30 29 29 2c 0d 0a 20 20 20 20  oVs2010)),..    
21060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21070 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72      traceCategor
21080 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
21090 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
210a0 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e  Callback(String.
210b0 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61  Format(NameAndVa
210c0 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20  lueFormat,..    
210d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
210e0 20 20 20 20 22 4e 6f 56 73 32 30 31 32 22 2c 20      "NoVs2012", 
210f0 46 6f 72 44 69 73 70 6c 61 79 28 6e 6f 56 73 32  ForDisplay(noVs2
21100 30 31 32 29 29 2c 0d 0a 20 20 20 20 20 20 20 20  012)),..        
21110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21120 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
21130 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
21140 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c         traceCall
21150 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d  back(String.Form
21160 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46  at(NameAndValueF
21170 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20  ormat,..        
21180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21190 22 4e 6f 56 73 32 30 31 33 22 2c 20 46 6f 72 44  "NoVs2013", ForD
211a0 69 73 70 6c 61 79 28 6e 6f 56 73 32 30 31 33 29  isplay(noVs2013)
211b0 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
211c0 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
211d0 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20  eCategory);.... 
211e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
211f0 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b     traceCallback
21200 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e  (String.Format(N
21210 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61  ameAndValueForma
21220 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t,..            
21230 20 20 20 20 20 20 20 20 20 20 20 20 22 4e 6f 54              "NoT
21240 72 61 63 65 22 2c 20 46 6f 72 44 69 73 70 6c 61  race", ForDispla
21250 79 28 6e 6f 54 72 61 63 65 29 29 2c 0d 0a 20 20  y(noTrace)),..  
21260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21270 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67        traceCateg
21280 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
21290 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
212a0 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e  ceCallback(Strin
212b0 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64  g.Format(NameAnd
212c0 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20  ValueFormat,..  
212d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
212e0 20 20 20 20 20 20 22 4e 6f 43 6f 6e 73 6f 6c 65        "NoConsole
212f0 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 6e 6f  ", ForDisplay(no
21300 43 6f 6e 73 6f 6c 65 29 29 2c 0d 0a 20 20 20 20  Console)),..    
21310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21320 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72      traceCategor
21330 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
21340 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
21350 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e  Callback(String.
21360 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61  Format(NameAndVa
21370 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20  lueFormat,..    
21380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21390 20 20 20 20 22 4e 6f 4c 6f 67 22 2c 20 46 6f 72      "NoLog", For
213a0 44 69 73 70 6c 61 79 28 6e 6f 4c 6f 67 29 29 2c  Display(noLog)),
213b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
213c0 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
213d0 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20  ategory);....   
213e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
213f0 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53   traceCallback(S
21400 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d  tring.Format(Nam
21410 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c  eAndValueFormat,
21420 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
21430 20 20 20 20 20 20 20 20 20 20 22 54 68 72 6f 77            "Throw
21440 4f 6e 4d 69 73 73 69 6e 67 22 2c 20 46 6f 72 44  OnMissing", ForD
21450 69 73 70 6c 61 79 28 74 68 72 6f 77 4f 6e 4d 69  isplay(throwOnMi
21460 73 73 69 6e 67 29 29 2c 0d 0a 20 20 20 20 20 20  ssing)),..      
21470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21480 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29    traceCategory)
21490 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
214a0 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
214b0 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f  llback(String.Fo
214c0 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75  rmat(NameAndValu
214d0 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20  eFormat,..      
214e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
214f0 20 20 22 57 68 61 74 49 66 22 2c 20 46 6f 72 44    "WhatIf", ForD
21500 69 73 70 6c 61 79 28 77 68 61 74 49 66 29 29 2c  isplay(whatIf)),
21510 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
21520 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
21530 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20  ategory);....   
21540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21550 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53   traceCallback(S
21560 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d  tring.Format(Nam
21570 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c  eAndValueFormat,
21580 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
21590 20 20 20 20 20 20 20 20 20 20 22 44 65 62 75 67            "Debug
215a0 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 64 65  ", ForDisplay(de
215b0 62 75 67 29 29 2c 0d 0a 20 20 20 20 20 20 20 20  bug)),..        
215c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
215d0 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
215e0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
215f0 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c         traceCall
21600 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d  back(String.Form
21610 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46  at(NameAndValueF
21620 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20  ormat,..        
21630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21640 22 56 65 72 62 6f 73 65 22 2c 20 46 6f 72 44 69  "Verbose", ForDi
21650 73 70 6c 61 79 28 76 65 72 62 6f 73 65 29 29 2c  splay(verbose)),
21660 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
21670 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
21680 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20  ategory);....   
21690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
216a0 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53   traceCallback(S
216b0 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d  tring.Format(Nam
216c0 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c  eAndValueFormat,
216d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
216e0 20 20 20 20 20 20 20 20 20 20 22 43 6f 6e 66 69            "Confi
216f0 72 6d 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28  rm", ForDisplay(
21700 63 6f 6e 66 69 72 6d 29 29 2c 0d 0a 20 20 20 20  confirm)),..    
21710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21720 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72      traceCategor
21730 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
21740 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
21750 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21760 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21770 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21780 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
21790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
217a0 20 28 61 73 73 65 6d 62 6c 79 20 21 3d 20 6e 75   (assembly != nu
217b0 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
217c0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
217d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
217e0 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63      traceCallbac
217f0 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  k(String.Format(
21800 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d  NameAndValueForm
21810 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at,..           
21820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21830 20 22 41 73 73 65 6d 62 6c 79 54 69 74 6c 65 22   "AssemblyTitle"
21840 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
21850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46                 F
21860 6f 72 44 69 73 70 6c 61 79 28 47 65 74 41 73 73  orDisplay(GetAss
21870 65 6d 62 6c 79 54 69 74 6c 65 28 61 73 73 65 6d  emblyTitle(assem
21880 62 6c 79 29 29 29 2c 0d 0a 20 20 20 20 20 20 20  bly))),..       
21890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
218a0 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f       traceCatego
218b0 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
218c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
218d0 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74  traceCallback(St
218e0 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65  ring.Format(Name
218f0 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d  AndValueFormat,.
21900 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
21910 20 20 20 20 20 20 20 20 20 20 20 20 20 22 41 73               "As
21920 73 65 6d 62 6c 79 43 6f 6e 66 69 67 75 72 61 74  semblyConfigurat
21930 69 6f 6e 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  ion",..         
21940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21950 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 47 65     ForDisplay(Ge
21960 74 41 73 73 65 6d 62 6c 79 43 6f 6e 66 69 67 75  tAssemblyConfigu
21970 72 61 74 69 6f 6e 28 61 73 73 65 6d 62 6c 79 29  ration(assembly)
21980 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  )),..           
21990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
219a0 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
219b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
219c0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
219d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
219e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
219f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21a00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21a10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
21a20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21a30 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28    traceCallback(
21a40 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61  String.Format(Na
21a50 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74  meAndValueFormat
21a60 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
21a70 20 20 20 20 20 20 20 20 20 20 20 22 49 73 4c 69             "IsLi
21a80 6e 71 53 75 70 70 6f 72 74 65 64 22 2c 20 46 6f  nqSupported", Fo
21a90 72 44 69 73 70 6c 61 79 28 49 73 4c 69 6e 71 53  rDisplay(IsLinqS
21aa0 75 70 70 6f 72 74 65 64 28 29 29 29 2c 0d 0a 20  upported())),.. 
21ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21ac0 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65         traceCate
21ad0 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
21ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
21af0 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69  aceCallback(Stri
21b00 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e  ng.Format(NameAn
21b10 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20  dValueFormat,.. 
21b20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21b30 20 20 20 20 20 20 20 22 49 73 45 66 36 53 75 70         "IsEf6Sup
21b40 70 6f 72 74 65 64 22 2c 20 46 6f 72 44 69 73 70  ported", ForDisp
21b50 6c 61 79 28 49 73 45 66 36 53 75 70 70 6f 72 74  lay(IsEf6Support
21b60 65 64 28 29 29 29 2c 0d 0a 20 20 20 20 20 20 20  ed())),..       
21b70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21b80 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
21b90 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
21ba0 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
21bb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21bc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21bd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21be0 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
21bf0 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
21c00 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e  Callback(String.
21c10 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61  Format(NameAndVa
21c20 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20  lueFormat,..    
21c30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21c40 20 20 20 20 22 47 65 74 43 6f 72 65 41 73 73 65      "GetCoreAsse
21c50 6d 62 6c 79 4e 61 6d 65 22 2c 20 46 6f 72 44 69  mblyName", ForDi
21c60 73 70 6c 61 79 28 0d 0a 20 20 20 20 20 20 20 20  splay(..        
21c70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21c80 47 65 74 43 6f 72 65 41 73 73 65 6d 62 6c 79 4e  GetCoreAssemblyN
21c90 61 6d 65 28 29 29 29 2c 20 74 72 61 63 65 43 61  ame())), traceCa
21ca0 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
21cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21cc0 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74  traceCallback(St
21cd0 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65  ring.Format(Name
21ce0 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d  AndValueFormat,.
21cf0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
21d00 20 20 20 20 20 20 20 20 20 22 47 65 74 4c 69 6e           "GetLin
21d10 71 41 73 73 65 6d 62 6c 79 4e 61 6d 65 22 2c 20  qAssemblyName", 
21d20 46 6f 72 44 69 73 70 6c 61 79 28 0d 0a 20 20 20  ForDisplay(..   
21d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21d40 20 20 20 20 20 47 65 74 4c 69 6e 71 41 73 73 65       GetLinqAsse
21d50 6d 62 6c 79 4e 61 6d 65 28 29 29 29 2c 20 74 72  mblyName())), tr
21d60 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d  aceCategory);...
21d70 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
21d80 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61       traceCallba
21d90 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  ck(String.Format
21da0 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72  (NameAndValueFor
21db0 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  mat,..          
21dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 47                "G
21dd0 65 74 45 66 36 41 73 73 65 6d 62 6c 79 4e 61 6d  etEf6AssemblyNam
21de0 65 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 0d  e", ForDisplay(.
21df0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
21e00 20 20 20 20 20 20 20 20 20 47 65 74 45 66 36 41           GetEf6A
21e10 73 73 65 6d 62 6c 79 4e 61 6d 65 28 29 29 29 2c  ssemblyName())),
21e20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
21e30 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
21e40 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c          traceCal
21e50 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72  lback(String.For
21e60 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65  mat(NameAndValue
21e70 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20  Format,..       
21e80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21e90 20 22 47 65 74 44 65 73 69 67 6e 65 72 41 73 73   "GetDesignerAss
21ea0 65 6d 62 6c 79 4e 61 6d 65 22 2c 20 46 6f 72 44  emblyName", ForD
21eb0 69 73 70 6c 61 79 28 0d 0a 20 20 20 20 20 20 20  isplay(..       
21ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21ed0 20 47 65 74 44 65 73 69 67 6e 65 72 41 73 73 65   GetDesignerAsse
21ee0 6d 62 6c 79 4e 61 6d 65 28 29 29 29 2c 20 74 72  mblyName())), tr
21ef0 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d  aceCategory);...
21f00 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
21f10 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
21f20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21f30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21f40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21f50 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
21f60 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c          traceCal
21f70 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72  lback(String.For
21f80 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65  mat(NameAndValue
21f90 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20  Format,..       
21fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21fb0 20 22 47 65 74 49 6e 76 61 72 69 61 6e 74 4e 61   "GetInvariantNa
21fc0 6d 65 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28  me", ForDisplay(
21fd0 47 65 74 49 6e 76 61 72 69 61 6e 74 4e 61 6d 65  GetInvariantName
21fe0 28 29 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  ())),..         
21ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
22000 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
22010 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
22020 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62        traceCallb
22030 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ack(String.Forma
22040 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f  t(NameAndValueFo
22050 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20  rmat,..         
22060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
22070 47 65 74 46 61 63 74 6f 72 79 54 79 70 65 4e 61  GetFactoryTypeNa
22080 6d 65 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28  me", ForDisplay(
22090 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
220a0 20 20 20 20 20 20 20 20 20 20 47 65 74 46 61 63            GetFac
220b0 74 6f 72 79 54 79 70 65 4e 61 6d 65 28 29 29 29  toryTypeName()))
220c0 2c 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29  , traceCategory)
220d0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
220e0 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
220f0 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f  llback(String.Fo
22100 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75  rmat(NameAndValu
22110 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20  eFormat,..      
22120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22130 20 20 22 47 65 74 50 72 6f 76 69 64 65 72 41 73    "GetProviderAs
22140 73 65 6d 62 6c 79 4e 61 6d 65 22 2c 20 46 6f 72  semblyName", For
22150 44 69 73 70 6c 61 79 28 0d 0a 20 20 20 20 20 20  Display(..      
22160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22170 20 20 47 65 74 50 72 6f 76 69 64 65 72 41 73 73    GetProviderAss
22180 65 6d 62 6c 79 4e 61 6d 65 28 29 29 29 2c 20 74  emblyName())), t
22190 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
221a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
221b0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
221c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 65  ..            #e
221d0 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20  ndregion....    
221e0 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
221f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22200 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22210 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22220 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
22230 20 20 20 20 20 20 20 20 20 20 20 23 72 65 67 69             #regi
22240 6f 6e 20 50 75 62 6c 69 63 20 50 72 6f 70 65 72  on Public Proper
22250 74 69 65 73 0d 0a 20 20 20 20 20 20 20 20 20 20  ties..          
22260 20 20 70 72 69 76 61 74 65 20 41 73 73 65 6d 62    private Assemb
22270 6c 79 20 61 73 73 65 6d 62 6c 79 3b 0d 0a 20 20  ly assembly;..  
22280 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
22290 20 41 73 73 65 6d 62 6c 79 20 41 73 73 65 6d 62   Assembly Assemb
222a0 6c 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ly..            
222b0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
222c0 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20     get { return 
222d0 61 73 73 65 6d 62 6c 79 3b 20 7d 0d 0a 20 20 20  assembly; }..   
222e0 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74               set
222f0 20 7b 20 61 73 73 65 6d 62 6c 79 20 3d 20 76 61   { assembly = va
22300 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  lue; }..        
22310 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
22320 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
22330 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22340 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22350 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22360 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
22370 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
22380 73 74 72 69 6e 67 20 6c 6f 67 46 69 6c 65 4e 61  string logFileNa
22390 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me;..           
223a0 20 70 75 62 6c 69 63 20 73 74 72 69 6e 67 20 4c   public string L
223b0 6f 67 46 69 6c 65 4e 61 6d 65 0d 0a 20 20 20 20  ogFileName..    
223c0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
223d0 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b             get {
223e0 20 72 65 74 75 72 6e 20 6c 6f 67 46 69 6c 65 4e   return logFileN
223f0 61 6d 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  ame; }..        
22400 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 6c 6f          set { lo
22410 67 46 69 6c 65 4e 61 6d 65 20 3d 20 76 61 6c 75  gFileName = valu
22420 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  e; }..          
22430 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
22440 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
22450 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22460 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22470 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22480 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
22490 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74        private st
224a0 72 69 6e 67 20 64 69 72 65 63 74 6f 72 79 3b 0d  ring directory;.
224b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
224c0 6c 69 63 20 73 74 72 69 6e 67 20 44 69 72 65 63  lic string Direc
224d0 74 6f 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20  tory..          
224e0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
224f0 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72       get { retur
22500 6e 20 64 69 72 65 63 74 6f 72 79 3b 20 7d 0d 0a  n directory; }..
22510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22520 73 65 74 20 7b 20 64 69 72 65 63 74 6f 72 79 20  set { directory 
22530 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20  = value; }..    
22540 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
22550 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
22560 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22570 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22580 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22590 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
225a0 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76              priv
225b0 61 74 65 20 73 74 72 69 6e 67 20 63 6f 72 65 46  ate string coreF
225c0 69 6c 65 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20  ileName;..      
225d0 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 72        public str
225e0 69 6e 67 20 43 6f 72 65 46 69 6c 65 4e 61 6d 65  ing CoreFileName
225f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
22600 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
22610 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 63 6f   get { return co
22620 72 65 46 69 6c 65 4e 61 6d 65 3b 20 7d 0d 0a 20  reFileName; }.. 
22630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
22640 65 74 20 7b 20 63 6f 72 65 46 69 6c 65 4e 61 6d  et { coreFileNam
22650 65 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20  e = value; }..  
22660 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
22670 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
22680 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22690 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
226a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
226b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
226c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
226d0 69 76 61 74 65 20 73 74 72 69 6e 67 20 6c 69 6e  ivate string lin
226e0 71 46 69 6c 65 4e 61 6d 65 3b 0d 0a 20 20 20 20  qFileName;..    
226f0 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73          public s
22700 74 72 69 6e 67 20 4c 69 6e 71 46 69 6c 65 4e 61  tring LinqFileNa
22710 6d 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  me..            
22720 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
22730 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20     get { return 
22740 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 3b 20 7d 0d  linqFileName; }.
22750 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
22760 20 73 65 74 20 7b 20 6c 69 6e 71 46 69 6c 65 4e   set { linqFileN
22770 61 6d 65 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a  ame = value; }..
22780 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
22790 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
227a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
227b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
227c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
227d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
227e0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
227f0 70 72 69 76 61 74 65 20 73 74 72 69 6e 67 20 65  private string e
22800 66 36 46 69 6c 65 4e 61 6d 65 3b 0d 0a 20 20 20  f6FileName;..   
22810 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
22820 73 74 72 69 6e 67 20 45 66 36 46 69 6c 65 4e 61  string Ef6FileNa
22830 6d 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  me..            
22840 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
22850 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20     get { return 
22860 65 66 36 46 69 6c 65 4e 61 6d 65 3b 20 7d 0d 0a  ef6FileName; }..
22870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22880 73 65 74 20 7b 20 65 66 36 46 69 6c 65 4e 61 6d  set { ef6FileNam
22890 65 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20  e = value; }..  
228a0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
228b0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
228c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
228d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
228e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
228f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
22900 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
22910 69 76 61 74 65 20 73 74 72 69 6e 67 20 64 65 73  ivate string des
22920 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65 3b 0d 0a  ignerFileName;..
22930 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
22940 69 63 20 73 74 72 69 6e 67 20 44 65 73 69 67 6e  ic string Design
22950 65 72 46 69 6c 65 4e 61 6d 65 0d 0a 20 20 20 20  erFileName..    
22960 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
22970 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b             get {
22980 20 72 65 74 75 72 6e 20 64 65 73 69 67 6e 65 72   return designer
22990 46 69 6c 65 4e 61 6d 65 3b 20 7d 0d 0a 20 20 20  FileName; }..   
229a0 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74               set
229b0 20 7b 20 64 65 73 69 67 6e 65 72 46 69 6c 65 4e   { designerFileN
229c0 61 6d 65 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a  ame = value; }..
229d0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
229e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
229f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22a00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22a10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22a20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22a30 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
22a40 70 72 69 76 61 74 65 20 73 74 72 69 6e 67 20 72  private string r
22a50 65 67 69 73 74 72 79 56 65 72 73 69 6f 6e 3b 0d  egistryVersion;.
22a60 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
22a70 6c 69 63 20 73 74 72 69 6e 67 20 52 65 67 69 73  lic string Regis
22a80 74 72 79 56 65 72 73 69 6f 6e 0d 0a 20 20 20 20  tryVersion..    
22a90 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
22aa0 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b             get {
22ab0 20 72 65 74 75 72 6e 20 72 65 67 69 73 74 72 79   return registry
22ac0 56 65 72 73 69 6f 6e 3b 20 7d 0d 0a 20 20 20 20  Version; }..    
22ad0 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20              set 
22ae0 7b 20 72 65 67 69 73 74 72 79 56 65 72 73 69 6f  { registryVersio
22af0 6e 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20  n = value; }..  
22b00 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
22b10 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
22b20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22b30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22b40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22b50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
22b60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
22b70 69 76 61 74 65 20 73 74 72 69 6e 67 20 63 6f 6e  ivate string con
22b80 66 69 67 56 65 72 73 69 6f 6e 3b 0d 0a 20 20 20  figVersion;..   
22b90 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
22ba0 73 74 72 69 6e 67 20 43 6f 6e 66 69 67 56 65 72  string ConfigVer
22bb0 73 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20 20 20  sion..          
22bc0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
22bd0 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72       get { retur
22be0 6e 20 63 6f 6e 66 69 67 56 65 72 73 69 6f 6e 3b  n configVersion;
22bf0 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
22c00 20 20 20 20 73 65 74 20 7b 20 63 6f 6e 66 69 67      set { config
22c10 56 65 72 73 69 6f 6e 20 3d 20 76 61 6c 75 65 3b  Version = value;
22c20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
22c30 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
22c40 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
22c50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22c60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22c70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22c80 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
22c90 20 20 20 20 70 72 69 76 61 74 65 20 73 74 72 69      private stri
22ca0 6e 67 20 76 73 56 65 72 73 69 6f 6e 53 75 66 66  ng vsVersionSuff
22cb0 69 78 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ix;..           
22cc0 20 70 75 62 6c 69 63 20 73 74 72 69 6e 67 20 56   public string V
22cd0 73 56 65 72 73 69 6f 6e 53 75 66 66 69 78 0d 0a  sVersionSuffix..
22ce0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
22cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67                 g
22d00 65 74 20 7b 20 72 65 74 75 72 6e 20 76 73 56 65  et { return vsVe
22d10 72 73 69 6f 6e 53 75 66 66 69 78 3b 20 7d 0d 0a  rsionSuffix; }..
22d20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22d30 73 65 74 20 7b 20 76 73 56 65 72 73 69 6f 6e 53  set { vsVersionS
22d40 75 66 66 69 78 20 3d 20 76 61 6c 75 65 3b 20 7d  uffix = value; }
22d50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
22d60 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
22d70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22d80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22d90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22da0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22db0 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
22dc0 20 20 70 72 69 76 61 74 65 20 73 74 72 69 6e 67    private string
22dd0 20 64 65 62 75 67 46 6f 72 6d 61 74 3b 0d 0a 20   debugFormat;.. 
22de0 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
22df0 63 20 73 74 72 69 6e 67 20 44 65 62 75 67 46 6f  c string DebugFo
22e00 72 6d 61 74 0d 0a 20 20 20 20 20 20 20 20 20 20  rmat..          
22e10 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
22e20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72       get { retur
22e30 6e 20 64 65 62 75 67 46 6f 72 6d 61 74 3b 20 7d  n debugFormat; }
22e40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
22e50 20 20 73 65 74 20 7b 20 64 65 62 75 67 46 6f 72    set { debugFor
22e60 6d 61 74 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a  mat = value; }..
22e70 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
22e80 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
22e90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22ea0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22eb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22ec0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22ed0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
22ee0 70 72 69 76 61 74 65 20 73 74 72 69 6e 67 20 74  private string t
22ef0 72 61 63 65 46 6f 72 6d 61 74 3b 0d 0a 20 20 20  raceFormat;..   
22f00 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
22f10 73 74 72 69 6e 67 20 54 72 61 63 65 46 6f 72 6d  string TraceForm
22f20 61 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  at..            
22f30 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
22f40 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20     get { return 
22f50 74 72 61 63 65 46 6f 72 6d 61 74 3b 20 7d 0d 0a  traceFormat; }..
22f60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22f70 73 65 74 20 7b 20 74 72 61 63 65 46 6f 72 6d 61  set { traceForma
22f80 74 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20  t = value; }..  
22f90 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
22fa0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
22fb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22fc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22fd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22fe0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
22ff0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
23000 69 76 61 74 65 20 49 6e 73 74 61 6c 6c 46 6c 61  ivate InstallFla
23010 67 73 20 69 6e 73 74 61 6c 6c 46 6c 61 67 73 3b  gs installFlags;
23020 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
23030 62 6c 69 63 20 49 6e 73 74 61 6c 6c 46 6c 61 67  blic InstallFlag
23040 73 20 49 6e 73 74 61 6c 6c 46 6c 61 67 73 0d 0a  s InstallFlags..
23050 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
23060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67                 g
23070 65 74 20 7b 20 72 65 74 75 72 6e 20 69 6e 73 74  et { return inst
23080 61 6c 6c 46 6c 61 67 73 3b 20 7d 0d 0a 20 20 20  allFlags; }..   
23090 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74               set
230a0 20 7b 20 69 6e 73 74 61 6c 6c 46 6c 61 67 73 20   { installFlags 
230b0 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20  = value; }..    
230c0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
230d0 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
230e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
230f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23100 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23110 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
23120 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76              priv
23130 61 74 65 20 54 72 61 63 65 50 72 69 6f 72 69 74  ate TracePriorit
23140 79 20 64 65 62 75 67 50 72 69 6f 72 69 74 79 3b  y debugPriority;
23150 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
23160 62 6c 69 63 20 54 72 61 63 65 50 72 69 6f 72 69  blic TracePriori
23170 74 79 20 44 65 62 75 67 50 72 69 6f 72 69 74 79  ty DebugPriority
23180 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
23190 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
231a0 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 64 65   get { return de
231b0 62 75 67 50 72 69 6f 72 69 74 79 3b 20 7d 0d 0a  bugPriority; }..
231c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
231d0 73 65 74 20 7b 20 64 65 62 75 67 50 72 69 6f 72  set { debugPrior
231e0 69 74 79 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a  ity = value; }..
231f0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
23200 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
23210 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23220 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23230 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23240 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23250 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
23260 70 72 69 76 61 74 65 20 54 72 61 63 65 50 72 69  private TracePri
23270 6f 72 69 74 79 20 74 72 61 63 65 50 72 69 6f 72  ority tracePrior
23280 69 74 79 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ity;..          
23290 20 20 70 75 62 6c 69 63 20 54 72 61 63 65 50 72    public TracePr
232a0 69 6f 72 69 74 79 20 54 72 61 63 65 50 72 69 6f  iority TracePrio
232b0 72 69 74 79 0d 0a 20 20 20 20 20 20 20 20 20 20  rity..          
232c0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
232d0 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72       get { retur
232e0 6e 20 74 72 61 63 65 50 72 69 6f 72 69 74 79 3b  n tracePriority;
232f0 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
23300 20 20 20 20 73 65 74 20 7b 20 74 72 61 63 65 50      set { traceP
23310 72 69 6f 72 69 74 79 20 3d 20 76 61 6c 75 65 3b  riority = value;
23320 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
23330 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
23340 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
23350 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23360 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23370 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23380 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
23390 20 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c      private bool
233a0 20 70 65 72 55 73 65 72 3b 0d 0a 20 20 20 20 20   perUser;..     
233b0 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f         public bo
233c0 6f 6c 20 50 65 72 55 73 65 72 0d 0a 20 20 20 20  ol PerUser..    
233d0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
233e0 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b             get {
233f0 20 72 65 74 75 72 6e 20 70 65 72 55 73 65 72 3b   return perUser;
23400 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
23410 20 20 20 20 73 65 74 20 7b 20 70 65 72 55 73 65      set { perUse
23420 72 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20  r = value; }..  
23430 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
23440 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
23450 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23460 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23470 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23480 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
23490 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
234a0 69 76 61 74 65 20 62 6f 6f 6c 20 69 6e 73 74 61  ivate bool insta
234b0 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll;..           
234c0 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 49 6e 73   public bool Ins
234d0 74 61 6c 6c 0d 0a 20 20 20 20 20 20 20 20 20 20  tall..          
234e0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
234f0 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72       get { retur
23500 6e 20 69 6e 73 74 61 6c 6c 3b 20 7d 0d 0a 20 20  n install; }..  
23510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65                se
23520 74 20 7b 20 69 6e 73 74 61 6c 6c 20 3d 20 76 61  t { install = va
23530 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  lue; }..        
23540 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
23550 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
23560 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23570 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23580 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23590 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
235a0 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
235b0 62 6f 6f 6c 20 77 6f 77 36 34 3b 0d 0a 20 20 20  bool wow64;..   
235c0 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
235d0 62 6f 6f 6c 20 57 6f 77 36 34 0d 0a 20 20 20 20  bool Wow64..    
235e0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
235f0 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b             get {
23600 20 72 65 74 75 72 6e 20 77 6f 77 36 34 3b 20 7d   return wow64; }
23610 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
23620 20 20 73 65 74 20 7b 20 77 6f 77 36 34 20 3d 20    set { wow64 = 
23630 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20  value; }..      
23640 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
23650 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
23660 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23670 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23680 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23690 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
236a0 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
236b0 65 20 62 6f 6f 6c 20 6e 6f 52 75 6e 74 69 6d 65  e bool noRuntime
236c0 56 65 72 73 69 6f 6e 3b 0d 0a 20 20 20 20 20 20  Version;..      
236d0 20 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f        public boo
236e0 6c 20 4e 6f 52 75 6e 74 69 6d 65 56 65 72 73 69  l NoRuntimeVersi
236f0 6f 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  on..            
23700 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
23710 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20     get { return 
23720 6e 6f 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e  noRuntimeVersion
23730 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
23740 20 20 20 20 20 73 65 74 20 7b 20 6e 6f 52 75 6e       set { noRun
23750 74 69 6d 65 56 65 72 73 69 6f 6e 20 3d 20 76 61  timeVersion = va
23760 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  lue; }..        
23770 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
23780 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
23790 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
237a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
237b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
237c0 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
237d0 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
237e0 62 6f 6f 6c 20 6e 6f 44 65 73 6b 74 6f 70 3b 0d  bool noDesktop;.
237f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
23800 6c 69 63 20 62 6f 6f 6c 20 4e 6f 44 65 73 6b 74  lic bool NoDeskt
23810 6f 70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  op..            
23820 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
23830 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20     get { return 
23840 6e 6f 44 65 73 6b 74 6f 70 3b 20 7d 0d 0a 20 20  noDesktop; }..  
23850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65                se
23860 74 20 7b 20 6e 6f 44 65 73 6b 74 6f 70 20 3d 20  t { noDesktop = 
23870 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20  value; }..      
23880 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
23890 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
238a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
238b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
238c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
238d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
238e0 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
238f0 65 20 62 6f 6f 6c 20 6e 6f 43 6f 6d 70 61 63 74  e bool noCompact
23900 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ;..            p
23910 75 62 6c 69 63 20 62 6f 6f 6c 20 4e 6f 43 6f 6d  ublic bool NoCom
23920 70 61 63 74 0d 0a 20 20 20 20 20 20 20 20 20 20  pact..          
23930 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
23940 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72       get { retur
23950 6e 20 6e 6f 43 6f 6d 70 61 63 74 3b 20 7d 0d 0a  n noCompact; }..
23960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23970 73 65 74 20 7b 20 6e 6f 43 6f 6d 70 61 63 74 20  set { noCompact 
23980 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20  = value; }..    
23990 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
239a0 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
239b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
239c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
239d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
239e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
239f0 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76              priv
23a00 61 74 65 20 62 6f 6f 6c 20 6e 6f 4e 65 74 46 78  ate bool noNetFx
23a10 32 30 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  20;..           
23a20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 4e 6f 4e   public bool NoN
23a30 65 74 46 78 32 30 0d 0a 20 20 20 20 20 20 20 20  etFx20..        
23a40 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
23a50 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74         get { ret
23a60 75 72 6e 20 6e 6f 4e 65 74 46 78 32 30 3b 20 7d  urn noNetFx20; }
23a70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
23a80 20 20 73 65 74 20 7b 20 6e 6f 4e 65 74 46 78 32    set { noNetFx2
23a90 30 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20  0 = value; }..  
23aa0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
23ab0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
23ac0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23ad0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23ae0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23af0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
23b00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
23b10 69 76 61 74 65 20 62 6f 6f 6c 20 6e 6f 4e 65 74  ivate bool noNet
23b20 46 78 33 35 3b 0d 0a 20 20 20 20 20 20 20 20 20  Fx35;..         
23b30 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 4e     public bool N
23b40 6f 4e 65 74 46 78 33 35 0d 0a 20 20 20 20 20 20  oNetFx35..      
23b50 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
23b60 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72           get { r
23b70 65 74 75 72 6e 20 6e 6f 4e 65 74 46 78 33 35 3b  eturn noNetFx35;
23b80 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
23b90 20 20 20 20 73 65 74 20 7b 20 6e 6f 4e 65 74 46      set { noNetF
23ba0 78 33 35 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a  x35 = value; }..
23bb0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
23bc0 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
23bd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23be0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23bf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23c00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23c10 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
23c20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 6e 6f 4e  private bool noN
23c30 65 74 46 78 34 30 3b 0d 0a 20 20 20 20 20 20 20  etFx40;..       
23c40 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c       public bool
23c50 20 4e 6f 4e 65 74 46 78 34 30 0d 0a 20 20 20 20   NoNetFx40..    
23c60 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
23c70 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b             get {
23c80 20 72 65 74 75 72 6e 20 6e 6f 4e 65 74 46 78 34   return noNetFx4
23c90 30 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  0; }..          
23ca0 20 20 20 20 20 20 73 65 74 20 7b 20 6e 6f 4e 65        set { noNe
23cb0 74 46 78 34 30 20 3d 20 76 61 6c 75 65 3b 20 7d  tFx40 = value; }
23cc0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
23cd0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
23ce0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23cf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23d00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23d10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23d20 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
23d30 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 6e    private bool n
23d40 6f 4e 65 74 46 78 34 35 3b 0d 0a 20 20 20 20 20  oNetFx45;..     
23d50 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f         public bo
23d60 6f 6c 20 4e 6f 4e 65 74 46 78 34 35 0d 0a 20 20  ol NoNetFx45..  
23d70 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
23d80 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74               get
23d90 20 7b 20 72 65 74 75 72 6e 20 6e 6f 4e 65 74 46   { return noNetF
23da0 78 34 35 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  x45; }..        
23db0 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 6e 6f          set { no
23dc0 4e 65 74 46 78 34 35 20 3d 20 76 61 6c 75 65 3b  NetFx45 = value;
23dd0 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
23de0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
23df0 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
23e00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23e10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23e20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23e30 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
23e40 20 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c      private bool
23e50 20 6e 6f 4e 65 74 46 78 34 35 31 3b 0d 0a 20 20   noNetFx451;..  
23e60 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
23e70 20 62 6f 6f 6c 20 4e 6f 4e 65 74 46 78 34 35 31   bool NoNetFx451
23e80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
23e90 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
23ea0 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 6e 6f   get { return no
23eb0 4e 65 74 46 78 34 35 31 3b 20 7d 0d 0a 20 20 20  NetFx451; }..   
23ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74               set
23ed0 20 7b 20 6e 6f 4e 65 74 46 78 34 35 31 20 3d 20   { noNetFx451 = 
23ee0 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20  value; }..      
23ef0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
23f00 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
23f10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23f20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23f30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23f40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
23f50 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
23f60 65 20 62 6f 6f 6c 20 6e 6f 56 73 32 30 30 35 3b  e bool noVs2005;
23f70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
23f80 62 6c 69 63 20 62 6f 6f 6c 20 4e 6f 56 73 32 30  blic bool NoVs20
23f90 30 35 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  05..            
23fa0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
23fb0 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20     get { return 
23fc0 6e 6f 56 73 32 30 30 35 3b 20 7d 0d 0a 20 20 20  noVs2005; }..   
23fd0 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74               set
23fe0 20 7b 20 6e 6f 56 73 32 30 30 35 20 3d 20 76 61   { noVs2005 = va
23ff0 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  lue; }..        
24000 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
24010 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
24020 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24030 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24040 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24050 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
24060 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
24070 62 6f 6f 6c 20 6e 6f 56 73 32 30 30 38 3b 0d 0a  bool noVs2008;..
24080 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
24090 69 63 20 62 6f 6f 6c 20 4e 6f 56 73 32 30 30 38  ic bool NoVs2008
240a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
240b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
240c0 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 6e 6f   get { return no
240d0 56 73 32 30 30 38 3b 20 7d 0d 0a 20 20 20 20 20  Vs2008; }..     
240e0 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b             set {
240f0 20 6e 6f 56 73 32 30 30 38 20 3d 20 76 61 6c 75   noVs2008 = valu
24100 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  e; }..          
24110 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
24120 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
24130 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24140 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24150 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24160 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
24170 20 20 20 20 20 20 70 72 69 76 61 74 65 20 62 6f        private bo
24180 6f 6c 20 6e 6f 56 73 32 30 31 30 3b 0d 0a 20 20  ol noVs2010;..  
24190 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
241a0 20 62 6f 6f 6c 20 4e 6f 56 73 32 30 31 30 0d 0a   bool NoVs2010..
241b0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
241c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67                 g
241d0 65 74 20 7b 20 72 65 74 75 72 6e 20 6e 6f 56 73  et { return noVs
241e0 32 30 31 30 3b 20 7d 0d 0a 20 20 20 20 20 20 20  2010; }..       
241f0 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 6e           set { n
24200 6f 56 73 32 30 31 30 20 3d 20 76 61 6c 75 65 3b  oVs2010 = value;
24210 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
24220 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
24230 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
24240 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24250 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24260 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24270 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
24280 20 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c      private bool
24290 20 6e 6f 56 73 32 30 31 32 3b 0d 0a 20 20 20 20   noVs2012;..    
242a0 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 62          public b
242b0 6f 6f 6c 20 4e 6f 56 73 32 30 31 32 0d 0a 20 20  ool NoVs2012..  
242c0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
242d0 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74               get
242e0 20 7b 20 72 65 74 75 72 6e 20 6e 6f 56 73 32 30   { return noVs20
242f0 31 32 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  12; }..         
24300 20 20 20 20 20 20 20 73 65 74 20 7b 20 6e 6f 56         set { noV
24310 73 32 30 31 32 20 3d 20 76 61 6c 75 65 3b 20 7d  s2012 = value; }
24320 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
24330 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
24340 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24350 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24360 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24370 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24380 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
24390 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 6e    private bool n
243a0 6f 56 73 32 30 31 33 3b 0d 0a 20 20 20 20 20 20  oVs2013;..      
243b0 20 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f        public boo
243c0 6c 20 4e 6f 56 73 32 30 31 33 0d 0a 20 20 20 20  l NoVs2013..    
243d0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
243e0 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b             get {
243f0 20 72 65 74 75 72 6e 20 6e 6f 56 73 32 30 31 33   return noVs2013
24400 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
24410 20 20 20 20 20 73 65 74 20 7b 20 6e 6f 56 73 32       set { noVs2
24420 30 31 33 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a  013 = value; }..
24430 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
24440 0a 20 20 20 20 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f  ////////////////
24490 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
244a0 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 6e 6f 54  private bool noT
244b0 72 61 63 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  race;..         
244c0 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 4e     public bool N
244d0 6f 54 72 61 63 65 0d 0a 20 20 20 20 20 20 20 20  oTrace..        
244e0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
244f0 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74         get { ret
24500 75 72 6e 20 6e 6f 54 72 61 63 65 3b 20 7d 0d 0a  urn noTrace; }..
24510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24520 73 65 74 20 7b 20 6e 6f 54 72 61 63 65 20 3d 20  set { noTrace = 
24530 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20  value; }..      
24540 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
24550 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
24560 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24570 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24580 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24590 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
245a0 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
245b0 65 20 62 6f 6f 6c 20 6e 6f 43 6f 6e 73 6f 6c 65  e bool noConsole
245c0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ;..            p
245d0 75 62 6c 69 63 20 62 6f 6f 6c 20 4e 6f 43 6f 6e  ublic bool NoCon
245e0 73 6f 6c 65 0d 0a 20 20 20 20 20 20 20 20 20 20  sole..          
245f0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
24600 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72       get { retur
24610 6e 20 6e 6f 43 6f 6e 73 6f 6c 65 3b 20 7d 0d 0a  n noConsole; }..
24620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24630 73 65 74 20 7b 20 6e 6f 43 6f 6e 73 6f 6c 65 20  set { noConsole 
24640 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20  = value; }..    
24650 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
24660 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
24670 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24680 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24690 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
246a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
246b0 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76              priv
246c0 61 74 65 20 62 6f 6f 6c 20 6e 6f 4c 6f 67 3b 0d  ate bool noLog;.
246d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
246e0 6c 69 63 20 62 6f 6f 6c 20 4e 6f 4c 6f 67 0d 0a  lic bool NoLog..
246f0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
24700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67                 g
24710 65 74 20 7b 20 72 65 74 75 72 6e 20 6e 6f 4c 6f  et { return noLo
24720 67 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  g; }..          
24730 20 20 20 20 20 20 73 65 74 20 7b 20 6e 6f 4c 6f        set { noLo
24740 67 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20  g = value; }..  
24750 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
24760 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
24770 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24780 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24790 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
247a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
247b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
247c0 69 76 61 74 65 20 62 6f 6f 6c 20 74 68 72 6f 77  ivate bool throw
247d0 4f 6e 4d 69 73 73 69 6e 67 3b 0d 0a 20 20 20 20  OnMissing;..    
247e0 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 62          public b
247f0 6f 6f 6c 20 54 68 72 6f 77 4f 6e 4d 69 73 73 69  ool ThrowOnMissi
24800 6e 67 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ng..            
24810 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
24820 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20     get { return 
24830 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 3b 20  throwOnMissing; 
24840 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
24850 20 20 20 73 65 74 20 7b 20 74 68 72 6f 77 4f 6e     set { throwOn
24860 4d 69 73 73 69 6e 67 20 3d 20 76 61 6c 75 65 3b  Missing = value;
24870 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
24880 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
24890 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
248a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
248b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
248c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
248d0 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
248e0 20 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c      private bool
248f0 20 77 68 61 74 49 66 3b 0d 0a 20 20 20 20 20 20   whatIf;..      
24900 20 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f        public boo
24910 6c 20 57 68 61 74 49 66 0d 0a 20 20 20 20 20 20  l WhatIf..      
24920 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
24930 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72           get { r
24940 65 74 75 72 6e 20 77 68 61 74 49 66 3b 20 7d 0d  eturn whatIf; }.
24950 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
24960 20 73 65 74 20 7b 20 77 68 61 74 49 66 20 3d 20   set { whatIf = 
24970 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20  value; }..      
24980 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
24990 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
249a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
249b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
249c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
249d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
249e0 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
249f0 65 20 62 6f 6f 6c 20 64 65 62 75 67 3b 0d 0a 20  e bool debug;.. 
24a00 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
24a10 63 20 62 6f 6f 6c 20 44 65 62 75 67 0d 0a 20 20  c bool Debug..  
24a20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
24a30 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74               get
24a40 20 7b 20 72 65 74 75 72 6e 20 64 65 62 75 67 3b   { return debug;
24a50 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
24a60 20 20 20 20 73 65 74 20 7b 20 64 65 62 75 67 20      set { debug 
24a70 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20  = value; }..    
24a80 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
24a90 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
24aa0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24ab0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24ac0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24ad0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
24ae0 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76              priv
24af0 61 74 65 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65  ate bool verbose
24b00 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ;..            p
24b10 75 62 6c 69 63 20 62 6f 6f 6c 20 56 65 72 62 6f  ublic bool Verbo
24b20 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  se..            
24b30 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
24b40 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20     get { return 
24b50 76 65 72 62 6f 73 65 3b 20 7d 0d 0a 20 20 20 20  verbose; }..    
24b60 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20              set 
24b70 7b 20 76 65 72 62 6f 73 65 20 3d 20 76 61 6c 75  { verbose = valu
24b80 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  e; }..          
24b90 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
24ba0 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
24bb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24bc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24bd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24be0 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
24bf0 20 20 20 20 20 20 70 72 69 76 61 74 65 20 62 6f        private bo
24c00 6f 6c 20 63 6f 6e 66 69 72 6d 3b 0d 0a 20 20 20  ol confirm;..   
24c10 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
24c20 62 6f 6f 6c 20 43 6f 6e 66 69 72 6d 0d 0a 20 20  bool Confirm..  
24c30 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
24c40 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74               get
24c50 20 7b 20 72 65 74 75 72 6e 20 63 6f 6e 66 69 72   { return confir
24c60 6d 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  m; }..          
24c70 20 20 20 20 20 20 73 65 74 20 7b 20 63 6f 6e 66        set { conf
24c80 69 72 6d 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a  irm = value; }..
24c90 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
24ca0 20 20 20 20 20 20 20 20 20 20 20 23 65 6e 64 72             #endr
24cb0 65 67 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20 7d  egion..        }
24cc0 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65  ..        #endre
24cd0 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20  gion....        
24ce0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24cf0 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20  ///////....     
24d30 20 20 20 23 72 65 67 69 6f 6e 20 46 72 61 6d 65     #region Frame
24d40 77 6f 72 6b 4c 69 73 74 20 43 6c 61 73 73 0d 0a  workList Class..
24d50 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
24d60 73 65 61 6c 65 64 20 63 6c 61 73 73 20 46 72 61  sealed class Fra
24d70 6d 65 77 6f 72 6b 4c 69 73 74 0d 0a 20 20 20 20  meworkList..    
24d80 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
24d90 20 20 20 23 72 65 67 69 6f 6e 20 50 75 62 6c 69     #region Publi
24da0 63 20 43 6f 6e 73 74 72 75 63 74 6f 72 73 0d 0a  c Constructors..
24db0 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
24dc0 69 63 20 46 72 61 6d 65 77 6f 72 6b 4c 69 73 74  ic FrameworkList
24dd0 28 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ()..            
24de0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
24df0 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67     // do nothing
24e00 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ...            }
24e10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 65  ..            #e
24e20 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20  ndregion....    
24e30 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
24e40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24e50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24e60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24e70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
24e80 20 20 20 20 20 20 20 20 20 20 20 23 72 65 67 69             #regi
24e90 6f 6e 20 50 75 62 6c 69 63 20 4d 65 74 68 6f 64  on Public Method
24ea0 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  s..            p
24eb0 72 69 76 61 74 65 20 4d 6f 63 6b 52 65 67 69 73  rivate MockRegis
24ec0 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79 3b 0d  tryKey rootKey;.
24ed0 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
24ee0 6c 69 63 20 4d 6f 63 6b 52 65 67 69 73 74 72 79  lic MockRegistry
24ef0 4b 65 79 20 52 6f 6f 74 4b 65 79 0d 0a 20 20 20  Key RootKey..   
24f00 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
24f10 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20              get 
24f20 7b 20 72 65 74 75 72 6e 20 72 6f 6f 74 4b 65 79  { return rootKey
24f30 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
24f40 20 20 20 20 20 73 65 74 20 7b 20 72 6f 6f 74 4b       set { rootK
24f50 65 79 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20  ey = value; }.. 
24f60 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
24f70 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
24f80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24f90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24fa0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24fb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
24fc0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
24fd0 72 69 76 61 74 65 20 53 74 72 69 6e 67 4c 69 73  rivate StringLis
24fe0 74 20 6e 61 6d 65 73 3b 0d 0a 20 20 20 20 20 20  t names;..      
24ff0 20 20 20 20 20 20 70 75 62 6c 69 63 20 53 74 72        public Str
25000 69 6e 67 4c 69 73 74 20 4e 61 6d 65 73 0d 0a 20  ingList Names.. 
25010 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
25020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65                ge
25030 74 20 7b 20 72 65 74 75 72 6e 20 6e 61 6d 65 73  t { return names
25040 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
25050 20 20 20 20 20 73 65 74 20 7b 20 6e 61 6d 65 73       set { names
25060 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20   = value; }..   
25070 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
25080 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
25090 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
250a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
250b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
250c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
250d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69  .            pri
250e0 76 61 74 65 20 56 65 72 73 69 6f 6e 4d 61 70 20  vate VersionMap 
250f0 76 65 72 73 69 6f 6e 73 3b 0d 0a 20 20 20 20 20  versions;..     
25100 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 56 65         public Ve
25110 72 73 69 6f 6e 4d 61 70 20 56 65 72 73 69 6f 6e  rsionMap Version
25120 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  s..            {
25130 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
25140 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 76    get { return v
25150 65 72 73 69 6f 6e 73 3b 20 7d 0d 0a 20 20 20 20  ersions; }..    
25160 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20              set 
25170 7b 20 76 65 72 73 69 6f 6e 73 20 3d 20 76 61 6c  { versions = val
25180 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  ue; }..         
25190 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
251a0 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
251b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
251c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
251d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
251e0 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
251f0 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 53         private S
25200 74 72 69 6e 67 4c 69 73 74 20 70 6c 61 74 66 6f  tringList platfo
25210 72 6d 4e 61 6d 65 73 3b 0d 0a 20 20 20 20 20 20  rmNames;..      
25220 20 20 20 20 20 20 70 75 62 6c 69 63 20 53 74 72        public Str
25230 69 6e 67 4c 69 73 74 20 50 6c 61 74 66 6f 72 6d  ingList Platform
25240 4e 61 6d 65 73 0d 0a 20 20 20 20 20 20 20 20 20  Names..         
25250 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
25260 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75        get { retu
25270 72 6e 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 73  rn platformNames
25280 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
25290 20 20 20 20 20 73 65 74 20 7b 20 70 6c 61 74 66       set { platf
252a0 6f 72 6d 4e 61 6d 65 73 20 3d 20 76 61 6c 75 65  ormNames = value
252b0 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
252c0 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
252d0 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 20 20 20 20  #endregion..    
252e0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23      }..        #
252f0 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20  endregion....   
25300 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
25310 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25320 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25330 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25340 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
25350 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20          #region 
25360 56 73 4c 69 73 74 20 43 6c 61 73 73 0d 0a 20 20  VsList Class..  
25370 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 65        private se
25380 61 6c 65 64 20 63 6c 61 73 73 20 56 73 4c 69 73  aled class VsLis
25390 74 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  t..        {..  
253a0 20 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f            #regio
253b0 6e 20 50 75 62 6c 69 63 20 43 6f 6e 73 74 72 75  n Public Constru
253c0 63 74 6f 72 73 0d 0a 20 20 20 20 20 20 20 20 20  ctors..         
253d0 20 20 20 70 75 62 6c 69 63 20 56 73 4c 69 73 74     public VsList
253e0 28 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ()..            
253f0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
25400 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67     // do nothing
25410 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ...            }
25420 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 65  ..            #e
25430 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20  ndregion....    
25440 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
25450 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25460 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25470 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25480 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
25490 20 20 20 20 20 20 20 20 20 20 20 23 72 65 67 69             #regi
254a0 6f 6e 20 50 75 62 6c 69 63 20 50 72 6f 70 65 72  on Public Proper
254b0 74 69 65 73 0d 0a 20 20 20 20 20 20 20 20 20 20  ties..          
254c0 20 20 70 72 69 76 61 74 65 20 4d 6f 63 6b 52 65    private MockRe
254d0 67 69 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65  gistryKey rootKe
254e0 79 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y;..            
254f0 70 75 62 6c 69 63 20 4d 6f 63 6b 52 65 67 69 73  public MockRegis
25500 74 72 79 4b 65 79 20 52 6f 6f 74 4b 65 79 0d 0a  tryKey RootKey..
25510 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
25520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67                 g
25530 65 74 20 7b 20 72 65 74 75 72 6e 20 72 6f 6f 74  et { return root
25540 4b 65 79 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  Key; }..        
25550 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 72 6f          set { ro
25560 6f 74 4b 65 79 20 3d 20 76 61 6c 75 65 3b 20 7d  otKey = value; }
25570 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
25580 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
25590 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
255a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
255b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
255c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
255d0 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
255e0 20 20 70 72 69 76 61 74 65 20 56 65 72 73 69 6f    private Versio
255f0 6e 4c 69 73 74 20 76 65 72 73 69 6f 6e 73 3b 0d  nList versions;.
25600 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
25610 6c 69 63 20 56 65 72 73 69 6f 6e 4c 69 73 74 20  lic VersionList 
25620 56 65 72 73 69 6f 6e 73 0d 0a 20 20 20 20 20 20  Versions..      
25630 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
25640 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72           get { r
25650 65 74 75 72 6e 20 76 65 72 73 69 6f 6e 73 3b 20  eturn versions; 
25660 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
25670 20 20 20 73 65 74 20 7b 20 76 65 72 73 69 6f 6e     set { version
25680 73 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20  s = value; }..  
25690 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
256a0 20 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67           #endreg
256b0 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  ion..        }..
256c0 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
256d0 6f 6e 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64  on..        #end
256e0 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20  region....      
256f0 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
25700 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25710 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25720 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25730 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
25740 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50 72 69       #region Pri
25750 76 61 74 65 20 43 6f 6e 73 74 61 6e 74 20 44 61  vate Constant Da
25760 74 61 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76  ta..        priv
25770 61 74 65 20 63 6f 6e 73 74 20 73 74 72 69 6e 67  ate const string
25780 20 43 6f 72 65 46 69 6c 65 4e 61 6d 65 20 3d 20   CoreFileName = 
25790 22 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c  "System.Data.SQL
257a0 69 74 65 2e 64 6c 6c 22 3b 0d 0a 20 20 20 20 20  ite.dll";..     
257b0 20 20 20 70 72 69 76 61 74 65 20 63 6f 6e 73 74     private const
257c0 20 73 74 72 69 6e 67 20 4c 69 6e 71 46 69 6c 65   string LinqFile
257d0 4e 61 6d 65 20 3d 20 22 53 79 73 74 65 6d 2e 44  Name = "System.D
257e0 61 74 61 2e 53 51 4c 69 74 65 2e 4c 69 6e 71 2e  ata.SQLite.Linq.
257f0 64 6c 6c 22 3b 0d 0a 20 20 20 20 20 20 20 20 70  dll";..        p
25800 72 69 76 61 74 65 20 63 6f 6e 73 74 20 73 74 72  rivate const str
25810 69 6e 67 20 45 66 36 46 69 6c 65 4e 61 6d 65 20  ing Ef6FileName 
25820 3d 20 22 53 79 73 74 65 6d 2e 44 61 74 61 2e 53  = "System.Data.S
25830 51 4c 69 74 65 2e 45 46 36 2e 64 6c 6c 22 3b 0d  QLite.EF6.dll";.
25840 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65  .        private
25850 20 63 6f 6e 73 74 20 73 74 72 69 6e 67 20 44 65   const string De
25860 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65 20 3d  signerFileName =
25870 20 22 53 51 4c 69 74 65 2e 44 65 73 69 67 6e 65   "SQLite.Designe
25880 72 2e 64 6c 6c 22 3b 0d 0a 20 20 20 20 20 20 20  r.dll";..       
25890 20 70 72 69 76 61 74 65 20 63 6f 6e 73 74 20 73   private const s
258a0 74 72 69 6e 67 20 50 72 6f 76 69 64 65 72 4e 61  tring ProviderNa
258b0 6d 65 20 3d 20 22 53 51 4c 69 74 65 20 44 61 74  me = "SQLite Dat
258c0 61 20 50 72 6f 76 69 64 65 72 22 3b 0d 0a 20 20  a Provider";..  
258d0 20 20 20 20 20 20 70 72 69 76 61 74 65 20 63 6f        private co
258e0 6e 73 74 20 73 74 72 69 6e 67 20 50 72 6f 6a 65  nst string Proje
258f0 63 74 4e 61 6d 65 20 3d 20 22 53 79 73 74 65 6d  ctName = "System
25900 2e 44 61 74 61 2e 53 51 4c 69 74 65 22 3b 0d 0a  .Data.SQLite";..
25910 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
25920 63 6f 6e 73 74 20 73 74 72 69 6e 67 20 4c 65 67  const string Leg
25930 61 63 79 50 72 6f 6a 65 63 74 4e 61 6d 65 20 3d  acyProjectName =
25940 20 22 53 51 4c 69 74 65 22 3b 0d 0a 0d 0a 20 20   "SQLite";....  
25950 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
25960 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25970 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25980 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25990 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
259a0 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65  .        private
259b0 20 63 6f 6e 73 74 20 73 74 72 69 6e 67 20 44 65   const string De
259c0 73 63 72 69 70 74 69 6f 6e 20 3d 0d 0a 20 20 20  scription =..   
259d0 20 20 20 20 20 20 20 20 20 22 2e 4e 45 54 20 46           ".NET F
259e0 72 61 6d 65 77 6f 72 6b 20 44 61 74 61 20 50 72  ramework Data Pr
259f0 6f 76 69 64 65 72 20 66 6f 72 20 53 51 4c 69 74  ovider for SQLit
25a00 65 22 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f  e";....        /
25a10 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
25a60 20 20 70 72 69 76 61 74 65 20 63 6f 6e 73 74 20    private const 
25a70 73 74 72 69 6e 67 20 43 4c 52 76 32 49 6d 61 67  string CLRv2Imag
25a80 65 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 20  eRuntimeVersion 
25a90 3d 20 22 76 32 2e 30 2e 35 30 37 32 37 22 3b 0d  = "v2.0.50727";.
25aa0 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65  .        private
25ab0 20 63 6f 6e 73 74 20 73 74 72 69 6e 67 20 43 4c   const string CL
25ac0 52 76 34 49 6d 61 67 65 52 75 6e 74 69 6d 65 56  Rv4ImageRuntimeV
25ad0 65 72 73 69 6f 6e 20 3d 20 22 76 34 2e 30 2e 33  ersion = "v4.0.3
25ae0 30 33 31 39 22 3b 0d 0a 0d 0a 20 20 20 20 20 20  0319";....      
25af0 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
25b00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25b10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25b20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25b30 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
25b40 20 20 20 20 20 70 72 69 76 61 74 65 20 63 6f 6e       private con
25b50 73 74 20 73 74 72 69 6e 67 20 53 79 73 74 65 6d  st string System
25b60 45 66 36 41 73 73 65 6d 62 6c 79 4e 61 6d 65 20  Ef6AssemblyName 
25b70 3d 20 22 45 6e 74 69 74 79 46 72 61 6d 65 77 6f  = "EntityFramewo
25b80 72 6b 2c 20 22 20 2b 0d 0a 20 20 20 20 20 20 20  rk, " +..       
25b90 20 20 20 20 20 22 56 65 72 73 69 6f 6e 3d 36 2e       "Version=6.
25ba0 30 2e 30 2e 30 2c 20 43 75 6c 74 75 72 65 3d 6e  0.0.0, Culture=n
25bb0 65 75 74 72 61 6c 2c 20 50 75 62 6c 69 63 4b 65  eutral, PublicKe
25bc0 79 54 6f 6b 65 6e 3d 62 37 37 61 35 63 35 36 31  yToken=b77a5c561
25bd0 39 33 34 65 30 38 39 22 3b 0d 0a 0d 0a 20 20 20  934e089";....   
25be0 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
25bf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25c00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25c10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25c20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
25c30 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
25c40 63 6f 6e 73 74 20 73 74 72 69 6e 67 20 4e 61 6d  const string Nam
25c50 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 20  eAndValueFormat 
25c60 3d 20 22 7b 30 7d 3a 20 7b 31 7d 22 3b 0d 0a 20  = "{0}: {1}";.. 
25c70 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 63         private c
25c80 6f 6e 73 74 20 73 74 72 69 6e 67 20 4c 6f 67 46  onst string LogF
25c90 69 6c 65 53 75 66 66 69 78 20 3d 20 22 2e 6c 6f  ileSuffix = ".lo
25ca0 67 22 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f  g";....        /
25cb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25cc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25cd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25ce0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25cf0 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
25d00 20 20 70 72 69 76 61 74 65 20 63 6f 6e 73 74 20    private const 
25d10 73 74 72 69 6e 67 20 56 73 44 65 76 45 6e 76 53  string VsDevEnvS
25d20 65 74 75 70 46 6f 72 6d 61 74 20 3d 20 22 7b 30  etupFormat = "{0
25d30 7d 3a 20 7b 31 7d 22 3b 0d 0a 0d 0a 20 20 20 20  }: {1}";....    
25d40 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
25d50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25d60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25d70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25d80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
25d90 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 63         private c
25da0 6f 6e 73 74 20 73 74 72 69 6e 67 20 52 6f 6f 74  onst string Root
25db0 4b 65 79 4e 61 6d 65 20 3d 20 22 53 6f 66 74 77  KeyName = "Softw
25dc0 61 72 65 22 3b 0d 0a 20 20 20 20 20 20 20 20 70  are";..        p
25dd0 72 69 76 61 74 65 20 63 6f 6e 73 74 20 73 74 72  rivate const str
25de0 69 6e 67 20 57 6f 77 36 34 53 75 62 4b 65 79 4e  ing Wow64SubKeyN
25df0 61 6d 65 20 3d 20 22 57 6f 77 36 34 33 32 4e 6f  ame = "Wow6432No
25e00 64 65 22 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  de";....        
25e10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25e20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25e30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25e40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25e50 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
25e60 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 2f     //..        /
25e70 2f 20 4e 4f 54 45 3a 20 54 68 65 20 2e 4e 45 54  / NOTE: The .NET
25e80 20 46 72 61 6d 65 77 6f 72 6b 20 68 61 73 20 62   Framework has b
25e90 6f 74 68 20 33 32 2d 62 69 74 20 61 6e 64 20 36  oth 32-bit and 6
25ea0 34 2d 62 69 74 20 65 64 69 74 69 6f 6e 73 2e 0d  4-bit editions..
25eb0 0a 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20  .        //..   
25ec0 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61       private sta
25ed0 74 69 63 20 72 65 61 64 6f 6e 6c 79 20 62 6f 6f  tic readonly boo
25ee0 6c 20 4e 65 74 46 78 49 73 33 32 42 69 74 4f 6e  l NetFxIs32BitOn
25ef0 6c 79 20 3d 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20  ly = false;.... 
25f00 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
25f10 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a  //////////////..
25f50 0d 0a 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20  ..        //..  
25f60 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 46        // NOTE: F
25f70 6f 72 20 6e 6f 77 2c 20 56 69 73 75 61 6c 20 53  or now, Visual S
25f80 74 75 64 69 6f 20 69 73 20 61 6c 77 61 79 73 20  tudio is always 
25f90 61 20 33 32 2d 62 69 74 20 61 70 70 6c 69 63 61  a 32-bit applica
25fa0 74 69 6f 6e 2e 0d 0a 20 20 20 20 20 20 20 20 2f  tion...        /
25fb0 2f 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61  /..        priva
25fc0 74 65 20 73 74 61 74 69 63 20 72 65 61 64 6f 6e  te static readon
25fd0 6c 79 20 62 6f 6f 6c 20 56 73 49 73 33 32 42 69  ly bool VsIs32Bi
25fe0 74 4f 6e 6c 79 20 3d 20 74 72 75 65 3b 0d 0a 0d  tOnly = true;...
25ff0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
26000 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26010 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26020 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26030 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26040 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76  ....        priv
26050 61 74 65 20 73 74 61 74 69 63 20 72 65 61 64 6f  ate static reado
26060 6e 6c 79 20 73 74 72 69 6e 67 20 56 73 49 64 46  nly string VsIdF
26070 6f 72 6d 61 74 20 3d 20 22 42 22 3b 0d 0a 0d 0a  ormat = "B";....
26080 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
26090 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
260a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
260b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
260c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
260d0 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61  ...        priva
260e0 74 65 20 73 74 61 74 69 63 20 72 65 61 64 6f 6e  te static readon
260f0 6c 79 20 73 74 72 69 6e 67 20 58 50 61 74 68 46  ly string XPathF
26100 6f 72 41 64 64 45 6c 65 6d 65 6e 74 20 3d 0d 0a  orAddElement =..
26110 20 20 20 20 20 20 20 20 20 20 20 20 22 63 6f 6e              "con
26120 66 69 67 75 72 61 74 69 6f 6e 2f 73 79 73 74 65  figuration/syste
26130 6d 2e 64 61 74 61 2f 44 62 50 72 6f 76 69 64 65  m.data/DbProvide
26140 72 46 61 63 74 6f 72 69 65 73 2f 61 64 64 5b 40  rFactories/add[@
26150 69 6e 76 61 72 69 61 6e 74 3d 5c 22 7b 30 7d 5c  invariant=\"{0}\
26160 22 5d 22 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  "]";....        
26170 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 72  private static r
26180 65 61 64 6f 6e 6c 79 20 73 74 72 69 6e 67 20 58  eadonly string X
26190 50 61 74 68 46 6f 72 52 65 6d 6f 76 65 45 6c 65  PathForRemoveEle
261a0 6d 65 6e 74 20 3d 0d 0a 20 20 20 20 20 20 20 20  ment =..        
261b0 20 20 20 20 22 63 6f 6e 66 69 67 75 72 61 74 69      "configurati
261c0 6f 6e 2f 73 79 73 74 65 6d 2e 64 61 74 61 2f 44  on/system.data/D
261d0 62 50 72 6f 76 69 64 65 72 46 61 63 74 6f 72 69  bProviderFactori
261e0 65 73 2f 72 65 6d 6f 76 65 5b 40 69 6e 76 61 72  es/remove[@invar
261f0 69 61 6e 74 3d 5c 22 7b 30 7d 5c 22 5d 22 3b 0d  iant=\"{0}\"]";.
26200 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67  .        #endreg
26210 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f  ion....        /
26220 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26230 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26240 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26250 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26260 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
26270 20 20 23 72 65 67 69 6f 6e 20 50 72 69 76 61 74    #region Privat
26280 65 20 53 74 61 74 69 63 20 44 61 74 61 0d 0a 20  e Static Data.. 
26290 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
262a0 74 61 74 69 63 20 41 73 73 65 6d 62 6c 79 20 74  tatic Assembly t
262b0 68 69 73 41 73 73 65 6d 62 6c 79 20 3d 20 41 73  hisAssembly = As
262c0 73 65 6d 62 6c 79 2e 47 65 74 45 78 65 63 75 74  sembly.GetExecut
262d0 69 6e 67 41 73 73 65 6d 62 6c 79 28 29 3b 0d 0a  ingAssembly();..
262e0 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
262f0 65 20 73 74 61 74 69 63 20 73 74 72 69 6e 67 20  e static string 
26300 74 72 61 63 65 43 61 74 65 67 6f 72 79 20 3d 20  traceCategory = 
26310 50 61 74 68 2e 47 65 74 46 69 6c 65 4e 61 6d 65  Path.GetFileName
26320 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74  (..            t
26330 68 69 73 41 73 73 65 6d 62 6c 79 2e 4c 6f 63 61  hisAssembly.Loca
26340 74 69 6f 6e 29 3b 20 2f 2a 20 4e 4f 54 45 3a 20  tion); /* NOTE: 
26350 53 61 6d 65 20 66 6f 72 20 64 65 62 75 67 20 61  Same for debug a
26360 6e 64 20 74 72 61 63 65 2e 20 2a 2f 0d 0a 0d 0a  nd trace. */....
26370 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
26380 73 74 61 74 69 63 20 54 72 61 63 65 43 61 6c 6c  static TraceCall
26390 62 61 63 6b 20 64 65 62 75 67 43 61 6c 6c 62 61  back debugCallba
263a0 63 6b 20 3d 20 41 70 70 44 65 62 75 67 3b 0d 0a  ck = AppDebug;..
263b0 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
263c0 73 74 61 74 69 63 20 54 72 61 63 65 43 61 6c 6c  static TraceCall
263d0 62 61 63 6b 20 74 72 61 63 65 43 61 6c 6c 62 61  back traceCallba
263e0 63 6b 20 3d 20 41 70 70 54 72 61 63 65 3b 0d 0a  ck = AppTrace;..
263f0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
26400 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26410 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26420 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26430 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26440 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69  /....        pri
26450 76 61 74 65 20 73 74 61 74 69 63 20 73 74 72 69  vate static stri
26460 6e 67 20 73 79 73 74 65 6d 44 69 72 65 63 74 6f  ng systemDirecto
26470 72 79 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a 23 69  ry = null;....#i
26480 66 20 57 49 4e 44 4f 57 53 0d 0a 20 20 20 20 20  f WINDOWS..     
26490 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69     private stati
264a0 63 20 73 74 72 69 6e 67 20 73 79 73 74 65 6d 44  c string systemD
264b0 69 72 65 63 74 6f 72 79 57 6f 77 36 34 20 3d 20  irectoryWow64 = 
264c0 6e 75 6c 6c 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d  null;..#endif...
264d0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
264e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
264f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26500 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26510 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26520 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76  ....        priv
26530 61 74 65 20 73 74 61 74 69 63 20 69 6e 74 20 66  ate static int f
26540 69 6c 65 73 43 72 65 61 74 65 64 20 3d 20 30 3b  ilesCreated = 0;
26550 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
26560 65 20 73 74 61 74 69 63 20 69 6e 74 20 66 69 6c  e static int fil
26570 65 73 4d 6f 64 69 66 69 65 64 20 3d 20 30 3b 0d  esModified = 0;.
26580 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65  .        private
26590 20 73 74 61 74 69 63 20 69 6e 74 20 66 69 6c 65   static int file
265a0 73 44 65 6c 65 74 65 64 20 3d 20 30 3b 0d 0a 20  sDeleted = 0;.. 
265b0 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f         #endregio
265c0 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  n....        ///
265d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
265e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
265f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26600 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26610 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
26620 23 72 65 67 69 6f 6e 20 54 72 61 63 65 20 48 61  #region Trace Ha
26630 6e 64 6c 69 6e 67 0d 0a 20 20 20 20 20 20 20 20  ndling..        
26640 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 73  private static s
26650 74 72 69 6e 67 20 47 65 74 4c 6f 67 46 69 6c 65  tring GetLogFile
26660 4e 61 6d 65 28 0d 0a 20 20 20 20 20 20 20 20 20  Name(..         
26670 20 20 20 73 74 72 69 6e 67 20 74 79 70 65 4e 61     string typeNa
26680 6d 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  me..            
26690 29 20 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a 20  ) /* throw */.. 
266a0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
266b0 20 20 20 20 20 20 73 74 72 69 6e 67 20 66 69 6c        string fil
266c0 65 4e 61 6d 65 20 3d 20 50 61 74 68 2e 47 65 74  eName = Path.Get
266d0 54 65 6d 70 46 69 6c 65 4e 61 6d 65 28 29 3b 0d  TempFileName();.
266e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72  .            str
266f0 69 6e 67 20 64 69 72 65 63 74 6f 72 79 20 3d 20  ing directory = 
26700 50 61 74 68 2e 47 65 74 44 69 72 65 63 74 6f 72  Path.GetDirector
26710 79 4e 61 6d 65 28 66 69 6c 65 4e 61 6d 65 29 3b  yName(fileName);
26720 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74  ..            st
26730 72 69 6e 67 20 66 69 6c 65 4e 61 6d 65 4f 6e 6c  ring fileNameOnl
26740 79 20 3d 20 50 61 74 68 2e 47 65 74 46 69 6c 65  y = Path.GetFile
26750 4e 61 6d 65 57 69 74 68 6f 75 74 45 78 74 65 6e  NameWithoutExten
26760 73 69 6f 6e 28 66 69 6c 65 4e 61 6d 65 29 3b 0d  sion(fileName);.
26770 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  ...            s
26780 74 72 69 6e 67 20 6e 65 77 46 69 6c 65 4e 61 6d  tring newFileNam
26790 65 20 3d 20 50 61 74 68 2e 43 6f 6d 62 69 6e 65  e = Path.Combine
267a0 28 64 69 72 65 63 74 6f 72 79 2c 20 53 74 72 69  (directory, Stri
267b0 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20  ng.Format(..    
267c0 20 20 20 20 20 20 20 20 20 20 20 20 22 7b 30 7d              "{0}
267d0 7b 31 7d 7b 32 7d 22 2c 20 74 72 61 63 65 43 61  {1}{2}", traceCa
267e0 74 65 67 6f 72 79 2c 20 21 53 74 72 69 6e 67 2e  tegory, !String.
267f0 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 74 79  IsNullOrEmpty(ty
26800 70 65 4e 61 6d 65 29 20 3f 0d 0a 20 20 20 20 20  peName) ?..     
26810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
26820 2e 22 20 2b 20 74 79 70 65 4e 61 6d 65 20 3a 20  ." + typeName : 
26830 53 74 72 69 6e 67 2e 45 6d 70 74 79 2c 20 22 2e  String.Empty, ".
26840 22 20 2b 20 66 69 6c 65 4e 61 6d 65 4f 6e 6c 79  " + fileNameOnly
26850 20 2b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   +..            
26860 20 20 20 20 20 20 20 20 4c 6f 67 46 69 6c 65 53          LogFileS
26870 75 66 66 69 78 29 29 3b 0d 0a 0d 0a 20 20 20 20  uffix));....    
26880 20 20 20 20 20 20 20 20 46 69 6c 65 2e 4d 6f 76          File.Mov
26890 65 28 66 69 6c 65 4e 61 6d 65 2c 20 6e 65 77 46  e(fileName, newF
268a0 69 6c 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20  ileName);....   
268b0 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
268c0 6e 65 77 46 69 6c 65 4e 61 6d 65 3b 0d 0a 20 20  newFileName;..  
268d0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
268e0 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20  //////////....  
26930 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74        private st
26940 61 74 69 63 20 76 6f 69 64 20 41 70 70 44 65 62  atic void AppDeb
26950 75 67 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ug(..           
26960 20 73 74 72 69 6e 67 20 6d 65 73 73 61 67 65 2c   string message,
26970 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74  ..            st
26980 72 69 6e 67 20 63 61 74 65 67 6f 72 79 0d 0a 20  ring category.. 
26990 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
269a0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
269b0 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65       TraceOps.De
269c0 62 75 67 43 6f 72 65 28 53 74 72 69 6e 67 2e 46  bugCore(String.F
269d0 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
269e0 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73          TraceOps
269f0 2e 44 65 62 75 67 46 6f 72 6d 61 74 2c 20 54 72  .DebugFormat, Tr
26a00 61 63 65 4f 70 73 2e 4e 65 78 74 44 65 62 75 67  aceOps.NextDebug
26a10 49 64 28 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  Id(),..         
26a20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e         TraceOps.
26a30 54 69 6d 65 53 74 61 6d 70 28 44 61 74 65 54 69  TimeStamp(DateTi
26a40 6d 65 2e 55 74 63 4e 6f 77 29 2c 20 6d 65 73 73  me.UtcNow), mess
26a50 61 67 65 29 2c 20 63 61 74 65 67 6f 72 79 29 3b  age), category);
26a60 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }.... 
26a70 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
26a80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26a90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26aa0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26ab0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
26ac0 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
26ad0 65 20 73 74 61 74 69 63 20 76 6f 69 64 20 41 70  e static void Ap
26ae0 70 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20  pTrace(..       
26af0 20 20 20 20 20 73 74 72 69 6e 67 20 6d 65 73 73       string mess
26b00 61 67 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  age,..          
26b10 20 20 73 74 72 69 6e 67 20 63 61 74 65 67 6f 72    string categor
26b20 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29  y..            )
26b30 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
26b40 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70           TraceOp
26b50 73 2e 54 72 61 63 65 43 6f 72 65 28 53 74 72 69  s.TraceCore(Stri
26b60 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20  ng.Format(..    
26b70 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
26b80 65 4f 70 73 2e 54 72 61 63 65 46 6f 72 6d 61 74  eOps.TraceFormat
26b90 2c 20 54 72 61 63 65 4f 70 73 2e 4e 65 78 74 54  , TraceOps.NextT
26ba0 72 61 63 65 49 64 28 29 2c 0d 0a 20 20 20 20 20  raceId(),..     
26bb0 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
26bc0 4f 70 73 2e 54 69 6d 65 53 74 61 6d 70 28 44 61  Ops.TimeStamp(Da
26bd0 74 65 54 69 6d 65 2e 55 74 63 4e 6f 77 29 2c 20  teTime.UtcNow), 
26be0 6d 65 73 73 61 67 65 29 2c 20 63 61 74 65 67 6f  message), catego
26bf0 72 79 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  ry);..        }.
26c00 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67  .        #endreg
26c10 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f  ion....        /
26c20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26c30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26c40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26c50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26c60 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
26c70 20 20 23 72 65 67 69 6f 6e 20 47 65 6e 65 72 69    #region Generi
26c80 63 20 50 6c 61 74 66 6f 72 6d 20 48 61 6e 64 6c  c Platform Handl
26c90 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 70 72 69  ing..        pri
26ca0 76 61 74 65 20 73 74 61 74 69 63 20 62 6f 6f 6c  vate static bool
26cb0 20 49 73 36 34 42 69 74 50 72 6f 63 65 73 73 28   Is64BitProcess(
26cc0 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
26cd0 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
26ce0 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54            // NOT
26cf0 45 3a 20 52 65 74 75 72 6e 73 20 74 72 75 65 20  E: Returns true 
26d00 69 66 20 74 68 65 20 63 75 72 72 65 6e 74 20 70  if the current p
26d10 72 6f 63 65 73 73 20 69 73 20 36 34 2d 62 69 74  rocess is 64-bit
26d20 2e 20 20 49 66 20 74 68 69 73 0d 0a 20 20 20 20  .  If this..    
26d30 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
26d40 20 69 73 20 74 72 75 65 2c 20 77 65 20 2a 6b 6e   is true, we *kn
26d50 6f 77 2a 20 74 68 61 74 20 77 65 20 6d 75 73 74  ow* that we must
26d60 20 62 65 20 72 75 6e 6e 69 6e 67 20 6f 6e 20 61   be running on a
26d70 20 36 34 2d 62 69 74 0d 0a 20 20 20 20 20 20 20   64-bit..       
26d80 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 6f 70       //       op
26d90 65 72 61 74 69 6e 67 20 73 79 73 74 65 6d 20 61  erating system a
26da0 73 20 77 65 6c 6c 2e 20 20 48 6f 77 65 76 65 72  s well.  However
26db0 2c 20 69 66 20 74 68 69 73 20 69 73 20 66 61 6c  , if this is fal
26dc0 73 65 2c 20 77 65 0d 0a 20 20 20 20 20 20 20 20  se, we..        
26dd0 20 20 20 20 2f 2f 20 20 20 20 20 20 20 64 6f 20      //       do 
26de0 6e 6f 74 20 6e 65 63 65 73 73 61 72 69 6c 79 20  not necessarily 
26df0 6b 6e 6f 77 20 74 68 61 74 20 77 65 20 61 72 65  know that we are
26e00 20 72 75 6e 6e 69 6e 67 20 6f 6e 20 61 20 33 32   running on a 32
26e10 2d 62 69 74 0d 0a 20 20 20 20 20 20 20 20 20 20  -bit..          
26e20 20 20 2f 2f 20 20 20 20 20 20 20 6f 70 65 72 61    //       opera
26e30 74 69 6e 67 20 73 79 73 74 65 6d 2c 20 64 75 65  ting system, due
26e40 20 74 6f 20 57 6f 57 36 34 20 28 57 69 6e 33 32   to WoW64 (Win32
26e50 2d 6f 6e 2d 57 69 6e 36 34 29 2c 20 65 74 63 2e  -on-Win64), etc.
26e60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
26e70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
26e80 74 75 72 6e 20 28 49 6e 74 50 74 72 2e 53 69 7a  turn (IntPtr.Siz
26e90 65 20 3d 3d 20 73 69 7a 65 6f 66 28 6c 6f 6e 67  e == sizeof(long
26ea0 29 29 3b 20 2f 2f 20 4e 4f 54 45 3a 20 50 6f 69  )); // NOTE: Poi
26eb0 6e 74 65 72 20 69 73 20 36 34 2d 62 69 74 73 3f  nter is 64-bits?
26ec0 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }.... 
26ed0 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
26ee0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26ef0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26f00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26f10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
26f20 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
26f30 65 20 73 74 61 74 69 63 20 62 6f 6f 6c 20 49 73  e static bool Is
26f40 53 75 70 70 6f 72 74 65 64 52 6f 6f 74 4b 65 79  SupportedRootKey
26f50 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 4d  (..            M
26f60 6f 63 6b 52 65 67 69 73 74 72 79 20 72 65 67 69  ockRegistry regi
26f70 73 74 72 79 2c 0d 0a 20 20 20 20 20 20 20 20 20  stry,..         
26f80 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b     MockRegistryK
26f90 65 79 20 72 6f 6f 74 4b 65 79 0d 0a 20 20 20 20  ey rootKey..    
26fa0 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
26fb0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
26fc0 20 20 72 65 74 75 72 6e 20 4f 62 6a 65 63 74 2e    return Object.
26fd0 52 65 66 65 72 65 6e 63 65 45 71 75 61 6c 73 28  ReferenceEquals(
26fe0 72 6f 6f 74 4b 65 79 2c 20 72 65 67 69 73 74 72  rootKey, registr
26ff0 79 2e 43 75 72 72 65 6e 74 55 73 65 72 29 20 7c  y.CurrentUser) |
27000 7c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  |..             
27010 20 20 20 4f 62 6a 65 63 74 2e 52 65 66 65 72 65     Object.Refere
27020 6e 63 65 45 71 75 61 6c 73 28 72 6f 6f 74 4b 65  nceEquals(rootKe
27030 79 2c 20 72 65 67 69 73 74 72 79 2e 4c 6f 63 61  y, registry.Loca
27040 6c 4d 61 63 68 69 6e 65 29 3b 0d 0a 20 20 20 20  lMachine);..    
27050 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
27060 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
27070 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27080 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27090 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
270a0 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
270b0 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74      private stat
270c0 69 63 20 73 74 72 69 6e 67 20 47 65 74 52 6f 6f  ic string GetRoo
270d0 74 4b 65 79 4e 61 6d 65 28 0d 0a 20 20 20 20 20  tKeyName(..     
270e0 20 20 20 20 20 20 20 62 6f 6f 6c 20 70 65 72 55         bool perU
270f0 73 65 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ser,..          
27100 20 20 62 6f 6f 6c 20 77 6f 77 36 34 0d 0a 20 20    bool wow64..  
27110 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
27120 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
27130 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
27140 20 20 20 20 2f 2f 20 42 55 47 46 49 58 3a 20 41      // BUGFIX: A
27150 70 70 61 72 65 6e 74 6c 79 2c 20 74 68 65 20 70  pparently, the p
27160 65 72 2d 75 73 65 72 20 72 65 67 69 73 74 72 79  er-user registry
27170 20 68 69 76 65 20 64 6f 65 73 20 6e 6f 74 20 75   hive does not u
27180 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  se..            
27190 2f 2f 20 20 20 20 20 20 20 20 20 74 68 65 20 22  //         the "
271a0 57 6f 77 36 34 33 32 4e 6f 64 65 22 20 6e 6f 64  Wow6432Node" nod
271b0 65 20 74 6f 20 73 74 6f 72 65 20 73 65 74 74 69  e to store setti
271c0 6e 67 73 20 66 6f 72 20 33 32 2d 62 69 74 0d 0a  ngs for 32-bit..
271d0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
271e0 20 20 20 20 20 20 20 61 70 70 6c 69 63 61 74 69         applicati
271f0 6f 6e 73 20 72 75 6e 6e 69 6e 67 20 6f 6e 20 61  ons running on a
27200 20 36 34 2d 62 69 74 20 6f 70 65 72 61 74 69 6e   64-bit operatin
27210 67 20 73 79 73 74 65 6d 2e 0d 0a 20 20 20 20 20  g system...     
27220 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
27230 20 20 54 69 63 6b 65 74 20 5b 61 30 36 37 37 33    Ticket [a06773
27240 30 39 66 30 5d 20 68 61 73 20 66 75 72 74 68 65  09f0] has furthe
27250 72 20 64 65 74 61 69 6c 73 2e 0d 0a 20 20 20 20  r details...    
27260 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
27270 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 53          return S
27280 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 22 7b 30  tring.Format("{0
27290 7d 7b 31 7d 22 2c 20 52 6f 6f 74 4b 65 79 4e 61  }{1}", RootKeyNa
272a0 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me,..           
272b0 20 20 20 20 20 21 70 65 72 55 73 65 72 20 26 26       !perUser &&
272c0 20 77 6f 77 36 34 20 26 26 20 49 73 36 34 42 69   wow64 && Is64Bi
272d0 74 50 72 6f 63 65 73 73 28 29 20 3f 0d 0a 20 20  tProcess() ?..  
272e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
272f0 20 20 22 5c 5c 22 20 2b 20 57 6f 77 36 34 53 75    "\\" + Wow64Su
27300 62 4b 65 79 4e 61 6d 65 20 3a 20 53 74 72 69 6e  bKeyName : Strin
27310 67 2e 45 6d 70 74 79 29 3b 0d 0a 20 20 20 20 20  g.Empty);..     
27320 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
27330 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27340 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27350 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27360 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27370 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
27380 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69     private stati
27390 63 20 73 74 72 69 6e 67 20 47 65 74 53 79 73 74  c string GetSyst
273a0 65 6d 44 69 72 65 63 74 6f 72 79 28 0d 0a 20 20  emDirectory(..  
273b0 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77            bool w
273c0 6f 77 36 34 0d 0a 20 20 20 20 20 20 20 20 20 20  ow64..          
273d0 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a    )..        {..
273e0 23 69 66 20 57 49 4e 44 4f 57 53 0d 0a 20 20 20  #if WINDOWS..   
273f0 20 20 20 20 20 20 20 20 20 69 66 20 28 77 6f 77           if (wow
27400 36 34 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  64)..           
27410 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
27420 20 20 20 20 69 66 20 28 73 79 73 74 65 6d 44 69      if (systemDi
27430 72 65 63 74 6f 72 79 57 6f 77 36 34 20 3d 3d 20  rectoryWow64 == 
27440 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
27450 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
27460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 79                sy
27470 73 74 65 6d 44 69 72 65 63 74 6f 72 79 57 6f 77  stemDirectoryWow
27480 36 34 20 3d 0d 0a 20 20 20 20 20 20 20 20 20 20  64 =..          
27490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 55 6e                Un
274a0 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
274b0 73 2e 47 65 74 53 79 73 74 65 6d 44 69 72 65 63  s.GetSystemDirec
274c0 74 6f 72 79 28 29 3b 0d 0a 20 20 20 20 20 20 20  tory();..       
274d0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
274e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
274f0 74 75 72 6e 20 73 79 73 74 65 6d 44 69 72 65 63  turn systemDirec
27500 74 6f 72 79 57 6f 77 36 34 3b 0d 0a 20 20 20 20  toryWow64;..    
27510 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
27520 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 23 65 6e         else..#en
27530 64 69 66 0d 0a 20 20 20 20 20 20 20 20 20 20 20  dif..           
27540 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
27550 20 20 20 20 69 66 20 28 73 79 73 74 65 6d 44 69      if (systemDi
27560 72 65 63 74 6f 72 79 20 3d 3d 20 6e 75 6c 6c 29  rectory == null)
27570 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
27580 20 20 20 20 20 20 73 79 73 74 65 6d 44 69 72 65        systemDire
27590 63 74 6f 72 79 20 3d 20 45 6e 76 69 72 6f 6e 6d  ctory = Environm
275a0 65 6e 74 2e 53 79 73 74 65 6d 44 69 72 65 63 74  ent.SystemDirect
275b0 6f 72 79 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ory;....        
275c0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 73          return s
275d0 79 73 74 65 6d 44 69 72 65 63 74 6f 72 79 3b 0d  ystemDirectory;.
275e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
275f0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
27600 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
27610 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
27620 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27630 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27640 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27650 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27660 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67  ....        #reg
27670 69 6f 6e 20 47 65 6e 65 72 69 63 20 53 74 72 69  ion Generic Stri
27680 6e 67 20 48 61 6e 64 6c 69 6e 67 0d 0a 20 20 20  ng Handling..   
27690 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61       private sta
276a0 74 69 63 20 73 74 72 69 6e 67 20 46 6f 72 44 69  tic string ForDi
276b0 73 70 6c 61 79 28 0d 0a 20 20 20 20 20 20 20 20  splay(..        
276c0 20 20 20 20 6f 62 6a 65 63 74 20 76 61 6c 75 65      object value
276d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d  ..            ).
276e0 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
276f0 20 20 20 20 20 20 20 20 69 66 20 28 76 61 6c 75          if (valu
27700 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  e == null)..    
27710 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
27720 72 6e 20 22 3c 6e 75 6c 6c 3e 22 3b 0d 0a 0d 0a  rn "<null>";....
27730 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
27740 6e 67 20 72 65 73 75 6c 74 3b 0d 0a 20 20 20 20  ng result;..    
27750 20 20 20 20 20 20 20 20 54 79 70 65 20 74 79 70          Type typ
27760 65 20 3d 20 76 61 6c 75 65 2e 47 65 74 54 79 70  e = value.GetTyp
27770 65 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  e();....        
27780 20 20 20 20 69 66 20 28 74 79 70 65 20 3d 3d 20      if (type == 
27790 74 79 70 65 6f 66 28 58 6d 6c 45 6c 65 6d 65 6e  typeof(XmlElemen
277a0 74 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  t))..           
277b0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
277c0 20 20 20 20 58 6d 6c 45 6c 65 6d 65 6e 74 20 65      XmlElement e
277d0 6c 65 6d 65 6e 74 20 3d 20 28 58 6d 6c 45 6c 65  lement = (XmlEle
277e0 6d 65 6e 74 29 76 61 6c 75 65 3b 0d 0a 0d 0a 20  ment)value;.... 
277f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
27800 65 73 75 6c 74 20 3d 20 65 6c 65 6d 65 6e 74 2e  esult = element.
27810 4f 75 74 65 72 58 6d 6c 3b 0d 0a 20 20 20 20 20  OuterXml;..     
27820 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
27830 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 74        else if (t
27840 79 70 65 20 3d 3d 20 74 79 70 65 6f 66 28 56 65  ype == typeof(Ve
27850 72 73 69 6f 6e 29 29 0d 0a 20 20 20 20 20 20 20  rsion))..       
27860 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
27870 20 20 20 20 20 20 20 20 56 65 72 73 69 6f 6e 20          Version 
27880 76 65 72 73 69 6f 6e 20 3d 20 28 56 65 72 73 69  version = (Versi
27890 6f 6e 29 76 61 6c 75 65 3b 0d 0a 0d 0a 20 20 20  on)value;....   
278a0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 73               res
278b0 75 6c 74 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72  ult = String.For
278c0 6d 61 74 28 22 76 7b 30 7d 22 2c 20 76 65 72 73  mat("v{0}", vers
278d0 69 6f 6e 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ion);..         
278e0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
278f0 20 20 65 6c 73 65 20 69 66 20 28 74 79 70 65 20    else if (type 
27900 3d 3d 20 74 79 70 65 6f 66 28 50 72 6f 63 65 73  == typeof(Proces
27910 73 53 74 61 72 74 49 6e 66 6f 29 29 0d 0a 20 20  sStartInfo))..  
27920 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
27930 20 20 20 20 20 20 20 20 20 20 20 20 20 50 72 6f               Pro
27940 63 65 73 73 53 74 61 72 74 49 6e 66 6f 20 73 74  cessStartInfo st
27950 61 72 74 49 6e 66 6f 20 3d 20 28 50 72 6f 63 65  artInfo = (Proce
27960 73 73 53 74 61 72 74 49 6e 66 6f 29 76 61 6c 75  ssStartInfo)valu
27970 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e;....          
27980 20 20 20 20 20 20 72 65 73 75 6c 74 20 3d 20 53        result = S
27990 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
279a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
279b0 20 20 20 22 66 69 6c 65 4e 61 6d 65 20 3d 20 7b     "fileName = {
279c0 30 7d 2c 20 61 72 67 75 6d 65 6e 74 73 20 3d 20  0}, arguments = 
279d0 7b 31 7d 2c 20 77 6f 72 6b 69 6e 67 44 69 72 65  {1}, workingDire
279e0 63 74 6f 72 79 20 3d 20 7b 32 7d 2c 20 22 20 2b  ctory = {2}, " +
279f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
27a00 20 20 20 20 20 20 22 75 73 65 53 68 65 6c 6c 45        "useShellE
27a10 78 65 63 75 74 65 20 3d 20 7b 33 7d 2c 20 72 65  xecute = {3}, re
27a20 64 69 72 65 63 74 53 74 61 6e 64 61 72 64 4f 75  directStandardOu
27a30 74 70 75 74 20 3d 20 7b 34 7d 2c 20 22 20 2b 0d  tput = {4}, " +.
27a40 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
27a50 20 20 20 20 20 22 72 65 64 69 72 65 63 74 53 74       "redirectSt
27a60 61 6e 64 61 72 64 45 72 72 6f 72 20 3d 20 7b 35  andardError = {5
27a70 7d 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 0d  }", ForDisplay(.
27a80 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
27a90 20 20 20 20 20 73 74 61 72 74 49 6e 66 6f 2e 46       startInfo.F
27aa0 69 6c 65 4e 61 6d 65 29 2c 20 46 6f 72 44 69 73  ileName), ForDis
27ab0 70 6c 61 79 28 73 74 61 72 74 49 6e 66 6f 2e 41  play(startInfo.A
27ac0 72 67 75 6d 65 6e 74 73 29 2c 0d 0a 20 20 20 20  rguments),..    
27ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27ae0 46 6f 72 44 69 73 70 6c 61 79 28 73 74 61 72 74  ForDisplay(start
27af0 49 6e 66 6f 2e 57 6f 72 6b 69 6e 67 44 69 72 65  Info.WorkingDire
27b00 63 74 6f 72 79 29 2c 20 46 6f 72 44 69 73 70 6c  ctory), ForDispl
27b10 61 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ay(..           
27b20 20 20 20 20 20 20 20 20 20 73 74 61 72 74 49 6e           startIn
27b30 66 6f 2e 55 73 65 53 68 65 6c 6c 45 78 65 63 75  fo.UseShellExecu
27b40 74 65 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28  te), ForDisplay(
27b50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
27b60 20 20 20 20 20 20 73 74 61 72 74 49 6e 66 6f 2e        startInfo.
27b70 52 65 64 69 72 65 63 74 53 74 61 6e 64 61 72 64  RedirectStandard
27b80 4f 75 74 70 75 74 29 2c 20 46 6f 72 44 69 73 70  Output), ForDisp
27b90 6c 61 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20  lay(..          
27ba0 20 20 20 20 20 20 20 20 20 20 73 74 61 72 74 49            startI
27bb0 6e 66 6f 2e 52 65 64 69 72 65 63 74 53 74 61 6e  nfo.RedirectStan
27bc0 64 61 72 64 45 72 72 6f 72 29 29 3b 20 2f 2a 20  dardError)); /* 
27bd0 52 45 43 55 52 53 49 56 45 20 2a 2f 0d 0a 20 20  RECURSIVE */..  
27be0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
27bf0 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66           else if
27c00 20 28 74 79 70 65 20 3d 3d 20 74 79 70 65 6f 66   (type == typeof
27c10 28 50 72 6f 63 65 73 73 29 29 0d 0a 20 20 20 20  (Process))..    
27c20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
27c30 20 20 20 20 20 20 20 20 20 20 20 50 72 6f 63 65             Proce
27c40 73 73 20 70 72 6f 63 65 73 73 20 3d 20 28 50 72  ss process = (Pr
27c50 6f 63 65 73 73 29 76 61 6c 75 65 3b 0d 0a 0d 0a  ocess)value;....
27c60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27c70 72 65 73 75 6c 74 20 3d 20 70 72 6f 63 65 73 73  result = process
27c80 2e 49 64 2e 54 6f 53 74 72 69 6e 67 28 29 3b 0d  .Id.ToString();.
27c90 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
27ca0 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65              else
27cb0 20 69 66 20 28 74 79 70 65 20 3d 3d 20 74 79 70   if (type == typ
27cc0 65 6f 66 28 44 61 74 61 52 65 63 65 69 76 65 64  eof(DataReceived
27cd0 45 76 65 6e 74 41 72 67 73 29 29 0d 0a 20 20 20  EventArgs))..   
27ce0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
27cf0 20 20 20 20 20 20 20 20 20 20 20 20 44 61 74 61              Data
27d00 52 65 63 65 69 76 65 64 45 76 65 6e 74 41 72 67  ReceivedEventArg
27d10 73 20 65 76 65 6e 74 41 72 67 73 20 3d 20 28 44  s eventArgs = (D
27d20 61 74 61 52 65 63 65 69 76 65 64 45 76 65 6e 74  ataReceivedEvent
27d30 41 72 67 73 29 76 61 6c 75 65 3b 0d 0a 0d 0a 20  Args)value;.... 
27d40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
27d50 65 73 75 6c 74 20 3d 20 46 6f 72 44 69 73 70 6c  esult = ForDispl
27d60 61 79 28 65 76 65 6e 74 41 72 67 73 2e 44 61 74  ay(eventArgs.Dat
27d70 61 29 3b 20 2f 2a 20 52 45 43 55 52 53 49 56 45  a); /* RECURSIVE
27d80 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   */..           
27d90 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
27da0 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20  else..          
27db0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
27dc0 20 20 20 20 20 72 65 73 75 6c 74 20 3d 20 76 61       result = va
27dd0 6c 75 65 2e 54 6f 53 74 72 69 6e 67 28 29 3b 0d  lue.ToString();.
27de0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
27df0 20 20 20 69 66 20 28 72 65 73 75 6c 74 2e 4c 65     if (result.Le
27e00 6e 67 74 68 20 3d 3d 20 30 29 0d 0a 20 20 20 20  ngth == 0)..    
27e10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27e20 72 65 74 75 72 6e 20 22 3c 65 6d 70 74 79 3e 22  return "<empty>"
27e30 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
27e40 20 20 20 20 20 72 65 73 75 6c 74 20 3d 20 53 74       result = St
27e50 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
27e60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27e70 20 20 74 79 70 65 2e 49 73 53 75 62 63 6c 61 73    type.IsSubclas
27e80 73 4f 66 28 74 79 70 65 6f 66 28 56 61 6c 75 65  sOf(typeof(Value
27e90 54 79 70 65 29 29 20 3f 20 22 7b 30 7d 22 20 3a  Type)) ? "{0}" :
27ea0 20 22 5c 22 7b 30 7d 5c 22 22 2c 0d 0a 20 20 20   "\"{0}\"",..   
27eb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27ec0 20 72 65 73 75 6c 74 29 3b 0d 0a 20 20 20 20 20   result);..     
27ed0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
27ee0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 72          return r
27ef0 65 73 75 6c 74 3b 0d 0a 20 20 20 20 20 20 20 20  esult;..        
27f00 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72  }..        #endr
27f10 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20  egion....       
27f20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
27f30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27f40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27f50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27f60 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
27f70 20 20 20 20 23 72 65 67 69 6f 6e 20 41 73 73 65      #region Asse
27f80 6d 62 6c 79 20 41 74 74 72 69 62 75 74 65 20 48  mbly Attribute H
27f90 61 6e 64 6c 69 6e 67 0d 0a 20 20 20 20 20 20 20  andling..       
27fa0 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 73   public static s
27fb0 74 72 69 6e 67 20 47 65 74 41 73 73 65 6d 62 6c  tring GetAssembl
27fc0 79 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 28 0d  yConfiguration(.
27fd0 0a 20 20 20 20 20 20 20 20 20 20 20 20 41 73 73  .            Ass
27fe0 65 6d 62 6c 79 20 61 73 73 65 6d 62 6c 79 0d 0a  embly assembly..
27ff0 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
28000 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
28010 20 20 20 20 20 20 69 66 20 28 61 73 73 65 6d 62        if (assemb
28020 6c 79 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ly != null)..   
28030 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
28040 20 20 20 20 20 20 20 20 20 20 20 20 74 72 79 0d              try.
28050 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
28060 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
28070 20 20 20 20 20 20 20 20 69 66 20 28 61 73 73 65          if (asse
28080 6d 62 6c 79 2e 49 73 44 65 66 69 6e 65 64 28 0d  mbly.IsDefined(.
28090 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
280a0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 79 70               typ
280b0 65 6f 66 28 41 73 73 65 6d 62 6c 79 43 6f 6e 66  eof(AssemblyConf
280c0 69 67 75 72 61 74 69 6f 6e 41 74 74 72 69 62 75  igurationAttribu
280d0 74 65 29 2c 20 66 61 6c 73 65 29 29 0d 0a 20 20  te), false))..  
280e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
280f0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
28100 20 20 20 20 20 20 20 20 20 20 20 20 20 41 73 73               Ass
28110 65 6d 62 6c 79 43 6f 6e 66 69 67 75 72 61 74 69  emblyConfigurati
28120 6f 6e 41 74 74 72 69 62 75 74 65 20 63 6f 6e 66  onAttribute conf
28130 69 67 75 72 61 74 69 6f 6e 20 3d 0d 0a 20 20 20  iguration =..   
28140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28150 20 20 20 20 20 20 20 20 20 28 41 73 73 65 6d 62           (Assemb
28160 6c 79 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 41  lyConfigurationA
28170 74 74 72 69 62 75 74 65 29 0d 0a 20 20 20 20 20  ttribute)..     
28180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28190 20 20 20 20 20 20 20 61 73 73 65 6d 62 6c 79 2e         assembly.
281a0 47 65 74 43 75 73 74 6f 6d 41 74 74 72 69 62 75  GetCustomAttribu
281b0 74 65 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20  tes(..          
281c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
281d0 20 20 20 20 20 20 74 79 70 65 6f 66 28 41 73 73        typeof(Ass
281e0 65 6d 62 6c 79 43 6f 6e 66 69 67 75 72 61 74 69  emblyConfigurati
281f0 6f 6e 41 74 74 72 69 62 75 74 65 29 2c 0d 0a 20  onAttribute),.. 
28200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66                 f
28220 61 6c 73 65 29 5b 30 5d 3b 0d 0a 0d 0a 20 20 20  alse)[0];....   
28230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28240 20 20 20 20 20 72 65 74 75 72 6e 20 63 6f 6e 66       return conf
28250 69 67 75 72 61 74 69 6f 6e 2e 43 6f 6e 66 69 67  iguration.Config
28260 75 72 61 74 69 6f 6e 3b 0d 0a 20 20 20 20 20 20  uration;..      
28270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
28280 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
28290 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
282a0 20 20 20 20 63 61 74 63 68 0d 0a 20 20 20 20 20      catch..     
282b0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
282c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
282d0 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e    // do nothing.
282e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
282f0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
28300 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
28310 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a    return null;..
28320 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
28330 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
28340 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28350 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28360 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28370 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
28380 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73          public s
28390 74 61 74 69 63 20 73 74 72 69 6e 67 20 47 65 74  tatic string Get
283a0 41 73 73 65 6d 62 6c 79 54 69 74 6c 65 28 0d 0a  AssemblyTitle(..
283b0 20 20 20 20 20 20 20 20 20 20 20 20 41 73 73 65              Asse
283c0 6d 62 6c 79 20 61 73 73 65 6d 62 6c 79 0d 0a 20  mbly assembly.. 
283d0 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
283e0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
283f0 20 20 20 20 20 69 66 20 28 61 73 73 65 6d 62 6c       if (assembl
28400 79 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  y != null)..    
28410 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
28420 20 20 20 20 20 20 20 20 20 20 20 74 72 79 0d 0a             try..
28430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28440 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
28450 20 20 20 20 20 20 20 69 66 20 28 61 73 73 65 6d         if (assem
28460 62 6c 79 2e 49 73 44 65 66 69 6e 65 64 28 0d 0a  bly.IsDefined(..
28470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28480 20 20 20 20 20 20 20 20 20 20 20 20 74 79 70 65              type
28490 6f 66 28 41 73 73 65 6d 62 6c 79 54 69 74 6c 65  of(AssemblyTitle
284a0 41 74 74 72 69 62 75 74 65 29 2c 20 66 61 6c 73  Attribute), fals
284b0 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e))..           
284c0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
284d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
284e0 20 20 20 20 41 73 73 65 6d 62 6c 79 54 69 74 6c      AssemblyTitl
284f0 65 41 74 74 72 69 62 75 74 65 20 74 69 74 6c 65  eAttribute title
28500 20 3d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   =..            
28510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28520 28 41 73 73 65 6d 62 6c 79 54 69 74 6c 65 41 74  (AssemblyTitleAt
28530 74 72 69 62 75 74 65 29 0d 0a 20 20 20 20 20 20  tribute)..      
28540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28550 20 20 20 20 20 20 61 73 73 65 6d 62 6c 79 2e 47        assembly.G
28560 65 74 43 75 73 74 6f 6d 41 74 74 72 69 62 75 74  etCustomAttribut
28570 65 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  es(..           
28580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28590 20 20 20 20 20 74 79 70 65 6f 66 28 41 73 73 65       typeof(Asse
285a0 6d 62 6c 79 54 69 74 6c 65 41 74 74 72 69 62 75  mblyTitleAttribu
285b0 74 65 29 2c 20 66 61 6c 73 65 29 5b 30 5d 3b 0d  te), false)[0];.
285c0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
285d0 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
285e0 6e 20 74 69 74 6c 65 2e 54 69 74 6c 65 3b 0d 0a  n title.Title;..
285f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28600 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
28610 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
28620 20 20 20 20 20 20 20 20 20 20 63 61 74 63 68 0d            catch.
28630 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
28640 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
28650 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f          // do no
28660 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20  thing...        
28670 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
28680 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
28690 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e          return n
286a0 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  ull;..        }.
286b0 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67  .        #endreg
286c0 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f  ion....        /
286d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
286e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
286f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28700 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28710 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
28720 20 20 23 72 65 67 69 6f 6e 20 2e 4e 45 54 20 46    #region .NET F
28730 72 61 6d 65 77 6f 72 6b 20 48 61 6e 64 6c 69 6e  ramework Handlin
28740 67 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61  g..        priva
28750 74 65 20 73 74 61 74 69 63 20 73 74 72 69 6e 67  te static string
28760 20 47 65 74 46 72 61 6d 65 77 6f 72 6b 52 6f 6f   GetFrameworkRoo
28770 74 4b 65 79 4e 61 6d 65 28 0d 0a 20 20 20 20 20  tKeyName(..     
28780 20 20 20 20 20 20 20 62 6f 6f 6c 20 70 65 72 55         bool perU
28790 73 65 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ser,..          
287a0 20 20 62 6f 6f 6c 20 77 6f 77 36 34 0d 0a 20 20    bool wow64..  
287b0 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
287c0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
287d0 20 20 20 20 72 65 74 75 72 6e 20 53 74 72 69 6e      return Strin
287e0 67 2e 46 6f 72 6d 61 74 28 22 7b 30 7d 5c 5c 4d  g.Format("{0}\\M
287f0 69 63 72 6f 73 6f 66 74 5c 5c 2e 4e 45 54 46 72  icrosoft\\.NETFr
28800 61 6d 65 77 6f 72 6b 22 2c 0d 0a 20 20 20 20 20  amework",..     
28810 20 20 20 20 20 20 20 20 20 20 20 47 65 74 52 6f             GetRo
28820 6f 74 4b 65 79 4e 61 6d 65 28 70 65 72 55 73 65  otKeyName(perUse
28830 72 2c 20 77 6f 77 36 34 29 29 3b 0d 0a 20 20 20  r, wow64));..   
28840 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
28850 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
28860 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28870 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28880 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28890 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
288a0 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61       private sta
288b0 74 69 63 20 73 74 72 69 6e 67 20 47 65 74 46 72  tic string GetFr
288c0 61 6d 65 77 6f 72 6b 4b 65 79 4e 61 6d 65 28 0d  ameworkKeyName(.
288d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72  .            str
288e0 69 6e 67 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d  ing frameworkNam
288f0 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
28900 56 65 72 73 69 6f 6e 20 66 72 61 6d 65 77 6f 72  Version framewor
28910 6b 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20  kVersion,..     
28920 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 70 6c         string pl
28930 61 74 66 6f 72 6d 4e 61 6d 65 2c 0d 0a 20 20 20  atformName,..   
28940 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 70 65           bool pe
28950 72 55 73 65 72 2c 0d 0a 20 20 20 20 20 20 20 20  rUser,..        
28960 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34 0d 0a      bool wow64..
28970 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
28980 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
28990 20 20 20 20 20 20 73 74 72 69 6e 67 20 66 6f 72        string for
289a0 6d 61 74 20 3d 20 21 53 74 72 69 6e 67 2e 49 73  mat = !String.Is
289b0 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 70 6c 61 74  NullOrEmpty(plat
289c0 66 6f 72 6d 4e 61 6d 65 29 20 3f 0d 0a 20 20 20  formName) ?..   
289d0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 7b 30               "{0
289e0 7d 5c 5c 4d 69 63 72 6f 73 6f 66 74 5c 5c 7b 31  }\\Microsoft\\{1
289f0 7d 5c 5c 76 7b 32 7d 5c 5c 7b 33 7d 22 20 3a 0d  }\\v{2}\\{3}" :.
28a00 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
28a10 20 22 7b 30 7d 5c 5c 4d 69 63 72 6f 73 6f 66 74   "{0}\\Microsoft
28a20 5c 5c 7b 31 7d 5c 5c 76 7b 32 7d 22 3b 0d 0a 0d  \\{1}\\v{2}";...
28a30 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
28a40 75 72 6e 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61  urn String.Forma
28a50 74 28 66 6f 72 6d 61 74 2c 20 47 65 74 52 6f 6f  t(format, GetRoo
28a60 74 4b 65 79 4e 61 6d 65 28 70 65 72 55 73 65 72  tKeyName(perUser
28a70 2c 20 77 6f 77 36 34 29 2c 0d 0a 20 20 20 20 20  , wow64),..     
28a80 20 20 20 20 20 20 20 20 20 20 20 66 72 61 6d 65             frame
28a90 77 6f 72 6b 4e 61 6d 65 2c 20 66 72 61 6d 65 77  workName, framew
28aa0 6f 72 6b 56 65 72 73 69 6f 6e 2c 20 70 6c 61 74  orkVersion, plat
28ab0 66 6f 72 6d 4e 61 6d 65 29 3b 0d 0a 20 20 20 20  formName);..    
28ac0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
28ad0 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
28ae0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28af0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28b00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28b10 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
28b20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74      private stat
28b30 69 63 20 73 74 72 69 6e 67 20 47 65 74 49 6d 61  ic string GetIma
28b40 67 65 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e  geRuntimeVersion
28b50 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  (..            s
28b60 74 72 69 6e 67 20 66 69 6c 65 4e 61 6d 65 0d 0a  tring fileName..
28b70 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
28b80 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
28b90 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20        try..     
28ba0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
28bb0 20 20 20 20 20 20 20 20 20 20 41 73 73 65 6d 62            Assemb
28bc0 6c 79 20 61 73 73 65 6d 62 6c 79 20 3d 20 41 73  ly assembly = As
28bd0 73 65 6d 62 6c 79 2e 52 65 66 6c 65 63 74 69 6f  sembly.Reflectio
28be0 6e 4f 6e 6c 79 4c 6f 61 64 46 72 6f 6d 28 0d 0a  nOnlyLoadFrom(..
28bf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28c00 20 20 20 20 66 69 6c 65 4e 61 6d 65 29 3b 20 2f      fileName); /
28c10 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a 0d 0a 20 20  * throw */....  
28c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
28c30 20 28 61 73 73 65 6d 62 6c 79 20 21 3d 20 6e 75   (assembly != nu
28c40 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
28c50 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
28c60 61 73 73 65 6d 62 6c 79 2e 49 6d 61 67 65 52 75  assembly.ImageRu
28c70 6e 74 69 6d 65 56 65 72 73 69 6f 6e 3b 0d 0a 20  ntimeVersion;.. 
28c80 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
28c90 20 20 20 20 20 20 20 20 20 20 63 61 74 63 68 0d            catch.
28ca0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
28cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28cc0 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a  // do nothing...
28cd0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
28ce0 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
28cf0 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20  urn null;..     
28d00 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
28d10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28d20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28d30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28d40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28d50 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
28d60 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69     private stati
28d70 63 20 73 74 72 69 6e 67 20 47 65 74 46 72 61 6d  c string GetFram
28d80 65 77 6f 72 6b 44 69 72 65 63 74 6f 72 79 28 0d  eworkDirectory(.
28d90 0a 20 20 20 20 20 20 20 20 20 20 20 20 4d 6f 63  .            Moc
28da0 6b 52 65 67 69 73 74 72 79 4b 65 79 20 72 6f 6f  kRegistryKey roo
28db0 74 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20  tKey,..         
28dc0 20 20 20 56 65 72 73 69 6f 6e 20 66 72 61 6d 65     Version frame
28dd0 77 6f 72 6b 56 65 72 73 69 6f 6e 2c 0d 0a 20 20  workVersion,..  
28de0 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 70            bool p
28df0 65 72 55 73 65 72 2c 0d 0a 20 20 20 20 20 20 20  erUser,..       
28e00 20 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34 2c       bool wow64,
28e10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f  ..            bo
28e20 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20  ol whatIf,..    
28e30 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65 72          bool ver
28e40 62 6f 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20  bose..          
28e50 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a    )..        {..
28e60 20 20 20 20 20 20 20 20 20 20 20 20 75 73 69 6e              usin
28e70 67 20 28 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b  g (MockRegistryK
28e80 65 79 20 6b 65 79 20 3d 20 52 65 67 69 73 74 72  ey key = Registr
28e90 79 48 65 6c 70 65 72 2e 4f 70 65 6e 53 75 62 4b  yHelper.OpenSubK
28ea0 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ey(..           
28eb0 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79           rootKey
28ec0 2c 20 47 65 74 46 72 61 6d 65 77 6f 72 6b 52 6f  , GetFrameworkRo
28ed0 6f 74 4b 65 79 4e 61 6d 65 28 70 65 72 55 73 65  otKeyName(perUse
28ee0 72 2c 20 77 6f 77 36 34 29 2c 0d 0a 20 20 20 20  r, wow64),..    
28ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28f00 66 61 6c 73 65 2c 20 77 68 61 74 49 66 2c 20 76  false, whatIf, v
28f10 65 72 62 6f 73 65 29 29 0d 0a 20 20 20 20 20 20  erbose))..      
28f20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
28f30 20 20 20 20 20 20 20 20 20 69 66 20 28 6b 65 79           if (key
28f40 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
28f50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
28f60 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20  eturn null;.... 
28f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6f                 o
28f80 62 6a 65 63 74 20 76 61 6c 75 65 20 3d 20 52 65  bject value = Re
28f90 67 69 73 74 72 79 48 65 6c 70 65 72 2e 47 65 74  gistryHelper.Get
28fa0 56 61 6c 75 65 28 0d 0a 20 20 20 20 20 20 20 20  Value(..        
28fb0 20 20 20 20 20 20 20 20 20 20 20 20 6b 65 79 2c              key,
28fc0 20 22 49 6e 73 74 61 6c 6c 52 6f 6f 74 22 2c 20   "InstallRoot", 
28fd0 6e 75 6c 6c 2c 20 77 68 61 74 49 66 2c 20 76 65  null, whatIf, ve
28fe0 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20  rbose);....     
28ff0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21             if (!
29000 28 76 61 6c 75 65 20 69 73 20 73 74 72 69 6e 67  (value is string
29010 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
29020 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e          return n
29030 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ull;....        
29040 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 50          return P
29050 61 74 68 2e 43 6f 6d 62 69 6e 65 28 0d 0a 20 20  ath.Combine(..  
29060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29070 20 20 28 73 74 72 69 6e 67 29 76 61 6c 75 65 2c    (string)value,
29080 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 22   String.Format("
29090 76 7b 30 7d 22 2c 20 66 72 61 6d 65 77 6f 72 6b  v{0}", framework
290a0 56 65 72 73 69 6f 6e 29 29 3b 0d 0a 20 20 20 20  Version));..    
290b0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
290c0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65     }..        #e
290d0 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20  ndregion....    
290e0 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
290f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29100 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29110 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29120 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
29130 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50         #region P
29140 65 72 2d 46 72 61 6d 65 77 6f 72 6b 2f 50 6c 61  er-Framework/Pla
29150 74 66 6f 72 6d 20 48 61 6e 64 6c 69 6e 67 0d 0a  tform Handling..
29160 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
29170 73 74 61 74 69 63 20 76 6f 69 64 20 49 6e 69 74  static void Init
29180 69 61 6c 69 7a 65 46 72 61 6d 65 77 6f 72 6b 4c  ializeFrameworkL
29190 69 73 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ist(..          
291a0 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65    MockRegistryKe
291b0 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20 20  y rootKey,..    
291c0 20 20 20 20 20 20 20 20 43 6f 6e 66 69 67 75 72          Configur
291d0 61 74 69 6f 6e 20 63 6f 6e 66 69 67 75 72 61 74  ation configurat
291e0 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ion,..          
291f0 20 20 72 65 66 20 46 72 61 6d 65 77 6f 72 6b 4c    ref FrameworkL
29200 69 73 74 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73  ist frameworkLis
29210 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29  t..            )
29220 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
29230 20 20 20 20 20 20 20 20 20 69 66 20 28 66 72 61           if (fra
29240 6d 65 77 6f 72 6b 4c 69 73 74 20 3d 3d 20 6e 75  meworkList == nu
29250 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
29260 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 4c 69       frameworkLi
29270 73 74 20 3d 20 6e 65 77 20 46 72 61 6d 65 77 6f  st = new Framewo
29280 72 6b 4c 69 73 74 28 29 3b 0d 0a 0d 0a 20 20 20  rkList();....   
29290 20 20 20 20 20 20 20 20 20 69 66 20 28 66 72 61           if (fra
292a0 6d 65 77 6f 72 6b 4c 69 73 74 2e 52 6f 6f 74 4b  meworkList.RootK
292b0 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ey == null)..   
292c0 20 20 20 20 20 20 20 20 20 20 20 20 20 66 72 61               fra
292d0 6d 65 77 6f 72 6b 4c 69 73 74 2e 52 6f 6f 74 4b  meworkList.RootK
292e0 65 79 20 3d 20 72 6f 6f 74 4b 65 79 3b 0d 0a 0d  ey = rootKey;...
292f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
29300 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29310 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29320 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29330 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29340 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
29350 69 66 20 28 66 72 61 6d 65 77 6f 72 6b 4c 69 73  if (frameworkLis
29360 74 2e 4e 61 6d 65 73 20 3d 3d 20 6e 75 6c 6c 29  t.Names == null)
29370 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
29380 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
29390 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 4e   frameworkList.N
293a0 61 6d 65 73 20 3d 20 6e 65 77 20 53 74 72 69 6e  ames = new Strin
293b0 67 4c 69 73 74 28 29 3b 0d 0a 0d 0a 20 20 20 20  gList();....    
293c0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
293d0 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 3d  (configuration =
293e0 3d 20 6e 75 6c 6c 29 20 7c 7c 20 21 63 6f 6e 66  = null) || !conf
293f0 69 67 75 72 61 74 69 6f 6e 2e 4e 6f 44 65 73 6b  iguration.NoDesk
29400 74 6f 70 29 0d 0a 20 20 20 20 20 20 20 20 20 20  top)..          
29410 20 20 20 20 20 20 20 20 20 20 66 72 61 6d 65 77            framew
29420 6f 72 6b 4c 69 73 74 2e 4e 61 6d 65 73 2e 41 64  orkList.Names.Ad
29430 64 28 22 2e 4e 45 54 46 72 61 6d 65 77 6f 72 6b  d(".NETFramework
29440 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ");....         
29450 20 20 20 20 20 20 20 69 66 20 28 28 63 6f 6e 66         if ((conf
29460 69 67 75 72 61 74 69 6f 6e 20 3d 3d 20 6e 75 6c  iguration == nul
29470 6c 29 20 7c 7c 20 21 63 6f 6e 66 69 67 75 72 61  l) || !configura
29480 74 69 6f 6e 2e 4e 6f 43 6f 6d 70 61 63 74 29 0d  tion.NoCompact).
29490 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
294a0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
294b0 20 20 20 20 20 20 20 20 66 72 61 6d 65 77 6f 72          framewor
294c0 6b 4c 69 73 74 2e 4e 61 6d 65 73 2e 41 64 64 28  kList.Names.Add(
294d0 22 2e 4e 45 54 43 6f 6d 70 61 63 74 46 72 61 6d  ".NETCompactFram
294e0 65 77 6f 72 6b 22 29 3b 0d 0a 20 20 20 20 20 20  ework");..      
294f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 72                fr
29500 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 4e 61 6d 65  ameworkList.Name
29510 73 2e 41 64 64 28 22 2e 4e 45 54 43 6f 6d 70 61  s.Add(".NETCompa
29520 63 74 46 72 61 6d 65 77 6f 72 6b 22 29 3b 0d 0a  ctFramework");..
29530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29540 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73      frameworkLis
29550 74 2e 4e 61 6d 65 73 2e 41 64 64 28 22 2e 4e 45  t.Names.Add(".NE
29560 54 43 6f 6d 70 61 63 74 46 72 61 6d 65 77 6f 72  TCompactFramewor
29570 6b 22 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  k");..          
29580 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
29590 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
295a0 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
295b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
295c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
295d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
295e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
295f0 20 20 20 20 20 20 20 20 20 69 66 20 28 66 72 61           if (fra
29600 6d 65 77 6f 72 6b 4c 69 73 74 2e 56 65 72 73 69  meworkList.Versi
29610 6f 6e 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  ons == null)..  
29620 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
29630 20 20 20 20 20 20 20 20 20 20 20 20 20 66 72 61               fra
29640 6d 65 77 6f 72 6b 4c 69 73 74 2e 56 65 72 73 69  meworkList.Versi
29650 6f 6e 73 20 3d 20 6e 65 77 20 56 65 72 73 69 6f  ons = new Versio
29660 6e 4d 61 70 28 29 3b 0d 0a 0d 0a 20 20 20 20 20  nMap();....     
29670 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 28             if ((
29680 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 3d 3d  configuration ==
29690 20 6e 75 6c 6c 29 20 7c 7c 20 21 63 6f 6e 66 69   null) || !confi
296a0 67 75 72 61 74 69 6f 6e 2e 4e 6f 44 65 73 6b 74  guration.NoDeskt
296b0 6f 70 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  op)..           
296c0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
296d0 20 20 20 20 20 20 20 20 20 20 20 20 56 65 72 73              Vers
296e0 69 6f 6e 4c 69 73 74 20 64 65 73 6b 74 6f 70 56  ionList desktopV
296f0 65 72 73 69 6f 6e 4c 69 73 74 20 3d 20 6e 65 77  ersionList = new
29700 20 56 65 72 73 69 6f 6e 4c 69 73 74 28 29 3b 0d   VersionList();.
29710 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
29720 20 20 20 20 20 20 20 69 66 20 28 28 63 6f 6e 66         if ((conf
29730 69 67 75 72 61 74 69 6f 6e 20 3d 3d 20 6e 75 6c  iguration == nul
29740 6c 29 20 7c 7c 20 21 63 6f 6e 66 69 67 75 72 61  l) || !configura
29750 74 69 6f 6e 2e 4e 6f 4e 65 74 46 78 32 30 29 0d  tion.NoNetFx20).
29760 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
29770 20 20 20 20 20 20 20 20 20 64 65 73 6b 74 6f 70           desktop
29780 56 65 72 73 69 6f 6e 4c 69 73 74 2e 41 64 64 28  VersionList.Add(
29790 6e 65 77 20 56 65 72 73 69 6f 6e 28 32 2c 20 30  new Version(2, 0
297a0 2c 20 35 30 37 32 37 29 29 3b 0d 0a 0d 0a 20 20  , 50727));....  
297b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
297c0 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
297d0 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54            // NOT
297e0 45 3a 20 54 68 65 20 2e 4e 45 54 20 46 72 61 6d  E: The .NET Fram
297f0 65 77 6f 72 6b 20 33 2e 35 20 64 6f 65 73 20 6e  ework 3.5 does n
29800 6f 74 20 68 61 76 65 20 69 74 73 20 6f 77 6e 0d  ot have its own.
29810 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
29820 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 64 69       //       di
29830 72 65 63 74 6f 72 79 3b 20 68 6f 77 65 76 65 72  rectory; however
29840 2c 20 69 74 20 73 74 69 6c 6c 20 6d 61 79 20 68  , it still may h
29850 61 76 65 20 61 73 73 65 6d 62 6c 79 0d 0a 20 20  ave assembly..  
29860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29870 20 20 2f 2f 20 20 20 20 20 20 20 66 6f 6c 64 65    //       folde
29880 72 73 20 66 6f 72 20 75 73 65 20 69 6e 20 56 69  rs for use in Vi
29890 73 75 61 6c 20 53 74 75 64 69 6f 2c 20 65 74 63  sual Studio, etc
298a0 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
298b0 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
298c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
298d0 66 20 28 28 63 6f 6e 66 69 67 75 72 61 74 69 6f  f ((configuratio
298e0 6e 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20 21 63  n == null) || !c
298f0 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 4e 6f 4e  onfiguration.NoN
29900 65 74 46 78 33 35 29 0d 0a 20 20 20 20 20 20 20  etFx35)..       
29910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29920 20 64 65 73 6b 74 6f 70 56 65 72 73 69 6f 6e 4c   desktopVersionL
29930 69 73 74 2e 41 64 64 28 6e 65 77 20 56 65 72 73  ist.Add(new Vers
29940 69 6f 6e 28 33 2c 20 35 29 29 3b 0d 0a 0d 0a 20  ion(3, 5));.... 
29950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29960 20 20 20 69 66 20 28 28 63 6f 6e 66 69 67 75 72     if ((configur
29970 61 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 20 7c  ation == null) |
29980 7c 20 21 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  | !configuration
29990 2e 4e 6f 4e 65 74 46 78 34 30 29 0d 0a 20 20 20  .NoNetFx40)..   
299a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
299b0 20 20 20 20 20 64 65 73 6b 74 6f 70 56 65 72 73       desktopVers
299c0 69 6f 6e 4c 69 73 74 2e 41 64 64 28 6e 65 77 20  ionList.Add(new 
299d0 56 65 72 73 69 6f 6e 28 34 2c 20 30 2c 20 33 30  Version(4, 0, 30
299e0 33 31 39 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  319));....      
299f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
29a00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
29a10 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 54        // NOTE: T
29a20 68 65 20 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72  he .NET Framewor
29a30 6b 20 34 2e 35 20 64 6f 65 73 20 6e 6f 74 20 68  k 4.5 does not h
29a40 61 76 65 20 69 74 73 20 6f 77 6e 0d 0a 20 20 20  ave its own..   
29a50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29a60 20 2f 2f 20 20 20 20 20 20 20 64 69 72 65 63 74   //       direct
29a70 6f 72 79 3b 20 68 6f 77 65 76 65 72 2c 20 69 74  ory; however, it
29a80 20 73 74 69 6c 6c 20 6d 61 79 20 68 61 76 65 20   still may have 
29a90 61 73 73 65 6d 62 6c 79 0d 0a 20 20 20 20 20 20  assembly..      
29aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
29ab0 20 20 20 20 20 20 20 66 6f 6c 64 65 72 73 20 66         folders f
29ac0 6f 72 20 75 73 65 20 69 6e 20 56 69 73 75 61 6c  or use in Visual
29ad0 20 53 74 75 64 69 6f 2c 20 65 74 63 2e 0d 0a 20   Studio, etc... 
29ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29af0 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
29b00 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 28             if ((
29b10 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 3d 3d  configuration ==
29b20 20 6e 75 6c 6c 29 20 7c 7c 20 21 63 6f 6e 66 69   null) || !confi
29b30 67 75 72 61 74 69 6f 6e 2e 4e 6f 4e 65 74 46 78  guration.NoNetFx
29b40 34 35 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  45)..           
29b50 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65 73               des
29b60 6b 74 6f 70 56 65 72 73 69 6f 6e 4c 69 73 74 2e  ktopVersionList.
29b70 41 64 64 28 6e 65 77 20 56 65 72 73 69 6f 6e 28  Add(new Version(
29b80 34 2c 20 35 2c 20 35 30 37 30 39 29 29 3b 0d 0a  4, 5, 50709));..
29b90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
29ba0 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
29bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
29bc0 20 4e 4f 54 45 3a 20 54 68 65 20 2e 4e 45 54 20   NOTE: The .NET 
29bd0 46 72 61 6d 65 77 6f 72 6b 20 34 2e 35 2e 31 20  Framework 4.5.1 
29be0 64 6f 65 73 20 6e 6f 74 20 68 61 76 65 20 69 74  does not have it
29bf0 73 20 6f 77 6e 0d 0a 20 20 20 20 20 20 20 20 20  s own..         
29c00 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
29c10 20 20 20 20 64 69 72 65 63 74 6f 72 79 3b 20 68      directory; h
29c20 6f 77 65 76 65 72 2c 20 69 74 20 73 74 69 6c 6c  owever, it still
29c30 20 6d 61 79 20 68 61 76 65 20 61 73 73 65 6d 62   may have assemb
29c40 6c 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ly..            
29c50 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
29c60 20 66 6f 6c 64 65 72 73 20 66 6f 72 20 75 73 65   folders for use
29c70 20 69 6e 20 56 69 73 75 61 6c 20 53 74 75 64 69   in Visual Studi
29c80 6f 2c 20 65 74 63 2e 0d 0a 20 20 20 20 20 20 20  o, etc...       
29c90 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
29ca0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
29cb0 20 20 20 20 20 69 66 20 28 28 63 6f 6e 66 69 67       if ((config
29cc0 75 72 61 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29  uration == null)
29cd0 20 7c 7c 20 21 63 6f 6e 66 69 67 75 72 61 74 69   || !configurati
29ce0 6f 6e 2e 4e 6f 4e 65 74 46 78 34 35 31 29 0d 0a  on.NoNetFx451)..
29cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29d00 20 20 20 20 20 20 20 20 64 65 73 6b 74 6f 70 56          desktopV
29d10 65 72 73 69 6f 6e 4c 69 73 74 2e 41 64 64 28 6e  ersionList.Add(n
29d20 65 77 20 56 65 72 73 69 6f 6e 28 34 2c 20 35 2c  ew Version(4, 5,
29d30 20 31 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20   1));....       
29d40 20 20 20 20 20 20 20 20 20 20 20 20 20 66 72 61               fra
29d50 6d 65 77 6f 72 6b 4c 69 73 74 2e 56 65 72 73 69  meworkList.Versi
29d60 6f 6e 73 2e 41 64 64 28 22 2e 4e 45 54 46 72 61  ons.Add(".NETFra
29d70 6d 65 77 6f 72 6b 22 2c 0d 0a 20 20 20 20 20 20  mework",..      
29d80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29d90 20 20 64 65 73 6b 74 6f 70 56 65 72 73 69 6f 6e    desktopVersion
29da0 4c 69 73 74 29 3b 0d 0a 20 20 20 20 20 20 20 20  List);..        
29db0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
29dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
29dd0 28 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20  ((configuration 
29de0 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20 21 63 6f 6e  == null) || !con
29df0 66 69 67 75 72 61 74 69 6f 6e 2e 4e 6f 43 6f 6d  figuration.NoCom
29e00 70 61 63 74 29 0d 0a 20 20 20 20 20 20 20 20 20  pact)..         
29e10 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
29e20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 72                fr
29e30 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 56 65 72 73  ameworkList.Vers
29e40 69 6f 6e 73 2e 41 64 64 28 22 2e 4e 45 54 43 6f  ions.Add(".NETCo
29e50 6d 70 61 63 74 46 72 61 6d 65 77 6f 72 6b 22 2c  mpactFramework",
29e60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
29e70 20 20 20 20 20 20 20 20 20 20 6e 65 77 20 56 65            new Ve
29e80 72 73 69 6f 6e 4c 69 73 74 28 6e 65 77 20 56 65  rsionList(new Ve
29e90 72 73 69 6f 6e 5b 5d 20 7b 0d 0a 20 20 20 20 20  rsion[] {..     
29ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29eb0 20 20 20 6e 65 77 20 56 65 72 73 69 6f 6e 28 32     new Version(2
29ec0 2c 20 30 2c 20 30 2c 20 30 29 2c 20 6e 65 77 20  , 0, 0, 0), new 
29ed0 56 65 72 73 69 6f 6e 28 33 2c 20 35 2c 20 30 2c  Version(3, 5, 0,
29ee0 20 30 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20   0)..           
29ef0 20 20 20 20 20 20 20 20 20 7d 29 29 3b 0d 0a 20           }));.. 
29f00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
29f10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
29f20 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
29f30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29f40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29f50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29f60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29f70 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
29f80 20 20 69 66 20 28 66 72 61 6d 65 77 6f 72 6b 4c    if (frameworkL
29f90 69 73 74 2e 50 6c 61 74 66 6f 72 6d 4e 61 6d 65  ist.PlatformName
29fa0 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  s == null)..    
29fb0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
29fc0 20 20 20 20 20 20 20 20 20 20 20 66 72 61 6d 65             frame
29fd0 77 6f 72 6b 4c 69 73 74 2e 50 6c 61 74 66 6f 72  workList.Platfor
29fe0 6d 4e 61 6d 65 73 20 3d 20 6e 65 77 20 53 74 72  mNames = new Str
29ff0 69 6e 67 4c 69 73 74 28 29 3b 0d 0a 0d 0a 20 20  ingList();....  
2a000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
2a010 20 28 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e   ((configuration
2a020 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20 21 63 6f   == null) || !co
2a030 6e 66 69 67 75 72 61 74 69 6f 6e 2e 4e 6f 44 65  nfiguration.NoDe
2a040 73 6b 74 6f 70 29 0d 0a 20 20 20 20 20 20 20 20  sktop)..        
2a050 20 20 20 20 20 20 20 20 20 20 20 20 66 72 61 6d              fram
2a060 65 77 6f 72 6b 4c 69 73 74 2e 50 6c 61 74 66 6f  eworkList.Platfo
2a070 72 6d 4e 61 6d 65 73 2e 41 64 64 28 6e 75 6c 6c  rmNames.Add(null
2a080 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
2a090 20 20 20 20 20 20 69 66 20 28 28 63 6f 6e 66 69        if ((confi
2a0a0 67 75 72 61 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c  guration == null
2a0b0 29 20 7c 7c 20 21 63 6f 6e 66 69 67 75 72 61 74  ) || !configurat
2a0c0 69 6f 6e 2e 4e 6f 43 6f 6d 70 61 63 74 29 0d 0a  ion.NoCompact)..
2a0d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a0e0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
2a0f0 20 20 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b         framework
2a100 4c 69 73 74 2e 50 6c 61 74 66 6f 72 6d 4e 61 6d  List.PlatformNam
2a110 65 73 2e 41 64 64 28 22 50 6f 63 6b 65 74 50 43  es.Add("PocketPC
2a120 22 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ");..           
2a130 20 20 20 20 20 20 20 20 20 66 72 61 6d 65 77 6f           framewo
2a140 72 6b 4c 69 73 74 2e 50 6c 61 74 66 6f 72 6d 4e  rkList.PlatformN
2a150 61 6d 65 73 2e 41 64 64 28 22 53 6d 61 72 74 70  ames.Add("Smartp
2a160 68 6f 6e 65 22 29 3b 0d 0a 20 20 20 20 20 20 20  hone");..       
2a170 20 20 20 20 20 20 20 20 20 20 20 20 20 66 72 61               fra
2a180 6d 65 77 6f 72 6b 4c 69 73 74 2e 50 6c 61 74 66  meworkList.Platf
2a190 6f 72 6d 4e 61 6d 65 73 2e 41 64 64 28 22 57 69  ormNames.Add("Wi
2a1a0 6e 64 6f 77 73 43 45 22 29 3b 0d 0a 20 20 20 20  ndowsCE");..    
2a1b0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
2a1c0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
2a1d0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
2a1e0 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
2a1f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a200 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a210 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a220 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
2a230 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74        private st
2a240 61 74 69 63 20 62 6f 6f 6c 20 48 61 76 65 46 72  atic bool HaveFr
2a250 61 6d 65 77 6f 72 6b 44 69 72 65 63 74 6f 72 79  ameworkDirectory
2a260 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 4d  (..            M
2a270 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 72  ockRegistryKey r
2a280 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20  ootKey,..       
2a290 20 20 20 20 20 73 74 72 69 6e 67 20 66 72 61 6d       string fram
2a2a0 65 77 6f 72 6b 4e 61 6d 65 2c 0d 0a 20 20 20 20  eworkName,..    
2a2b0 20 20 20 20 20 20 20 20 56 65 72 73 69 6f 6e 20          Version 
2a2c0 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e  frameworkVersion
2a2d0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  ,..            s
2a2e0 74 72 69 6e 67 20 70 6c 61 74 66 6f 72 6d 4e 61  tring platformNa
2a2f0 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me,..           
2a300 20 62 6f 6f 6c 20 70 65 72 55 73 65 72 2c 0d 0a   bool perUser,..
2a310 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
2a320 20 77 6f 77 36 34 2c 0d 0a 20 20 20 20 20 20 20   wow64,..       
2a330 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66       bool whatIf
2a340 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  ,..            b
2a350 6f 6f 6c 20 76 65 72 62 6f 73 65 2c 0d 0a 20 20  ool verbose,..  
2a360 20 20 20 20 20 20 20 20 20 20 72 65 66 20 73 74            ref st
2a370 72 69 6e 67 20 69 6e 73 74 61 6c 6c 44 69 72 65  ring installDire
2a380 63 74 6f 72 79 0d 0a 20 20 20 20 20 20 20 20 20  ctory..         
2a390 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d     )..        {.
2a3a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72  .            str
2a3b0 69 6e 67 20 6b 65 79 4e 61 6d 65 20 3d 20 47 65  ing keyName = Ge
2a3c0 74 46 72 61 6d 65 77 6f 72 6b 4b 65 79 4e 61 6d  tFrameworkKeyNam
2a3d0 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
2a3e0 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d      frameworkNam
2a3f0 65 2c 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73  e, frameworkVers
2a400 69 6f 6e 2c 20 70 6c 61 74 66 6f 72 6d 4e 61 6d  ion, platformNam
2a410 65 2c 20 70 65 72 55 73 65 72 2c 0d 0a 20 20 20  e, perUser,..   
2a420 20 20 20 20 20 20 20 20 20 20 20 20 20 77 6f 77               wow
2a430 36 34 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  64);....        
2a440 20 20 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52      using (MockR
2a450 65 67 69 73 74 72 79 4b 65 79 20 6b 65 79 20 3d  egistryKey key =
2a460 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e   RegistryHelper.
2a470 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20  OpenSubKey(..   
2a480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a490 20 72 6f 6f 74 4b 65 79 2c 20 6b 65 79 4e 61 6d   rootKey, keyNam
2a4a0 65 2c 20 66 61 6c 73 65 2c 20 77 68 61 74 49 66  e, false, whatIf
2a4b0 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a 20 20 20  , verbose))..   
2a4c0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
2a4d0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
2a4e0 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  key == null)..  
2a4f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a500 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
2a510 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
2a520 20 20 20 69 66 20 28 70 6c 61 74 66 6f 72 6d 4e     if (platformN
2a530 61 6d 65 20 21 3d 20 6e 75 6c 6c 29 20 2f 2f 20  ame != null) // 
2a540 4e 4f 54 45 3a 20 53 6b 69 70 20 6e 6f 6e 2d 64  NOTE: Skip non-d
2a550 65 73 6b 74 6f 70 2e 0d 0a 20 20 20 20 20 20 20  esktop...       
2a560 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
2a570 75 72 6e 20 74 72 75 65 3b 0d 0a 0d 0a 20 20 20  urn true;....   
2a580 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72               str
2a590 69 6e 67 20 64 69 72 65 63 74 6f 72 79 20 3d 20  ing directory = 
2a5a0 47 65 74 46 72 61 6d 65 77 6f 72 6b 44 69 72 65  GetFrameworkDire
2a5b0 63 74 6f 72 79 28 0d 0a 20 20 20 20 20 20 20 20  ctory(..        
2a5c0 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74              root
2a5d0 4b 65 79 2c 20 66 72 61 6d 65 77 6f 72 6b 56 65  Key, frameworkVe
2a5e0 72 73 69 6f 6e 2c 20 70 65 72 55 73 65 72 2c 20  rsion, perUser, 
2a5f0 77 6f 77 36 34 2c 20 77 68 61 74 49 66 2c 0d 0a  wow64, whatIf,..
2a600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a610 20 20 20 20 76 65 72 62 6f 73 65 29 3b 0d 0a 0d      verbose);...
2a620 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2a630 20 69 66 20 28 53 74 72 69 6e 67 2e 49 73 4e 75   if (String.IsNu
2a640 6c 6c 4f 72 45 6d 70 74 79 28 64 69 72 65 63 74  llOrEmpty(direct
2a650 6f 72 79 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ory))..         
2a660 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
2a670 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20  n false;....    
2a680 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
2a690 21 44 69 72 65 63 74 6f 72 79 2e 45 78 69 73 74  !Directory.Exist
2a6a0 73 28 64 69 72 65 63 74 6f 72 79 29 29 0d 0a 20  s(directory)).. 
2a6b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a6c0 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
2a6d0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2a6e0 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62      TraceOps.Deb
2a6f0 75 67 41 6e 64 54 72 61 63 65 28 54 72 61 63 65  ugAndTrace(Trace
2a700 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 72 2c 0d  Priority.Lower,.
2a710 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2a720 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61       debugCallba
2a730 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63  ck, traceCallbac
2a740 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  k, String.Format
2a750 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
2a760 20 20 20 20 20 20 20 22 2e 4e 45 54 20 46 72 61         ".NET Fra
2a770 6d 65 77 6f 72 6b 20 7b 30 7d 20 66 6f 75 6e 64  mework {0} found
2a780 20 76 69 61 20 64 69 72 65 63 74 6f 72 79 20 7b   via directory {
2a790 31 7d 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  1}.",..         
2a7a0 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69             ForDi
2a7b0 73 70 6c 61 79 28 66 72 61 6d 65 77 6f 72 6b 56  splay(frameworkV
2a7c0 65 72 73 69 6f 6e 29 2c 20 46 6f 72 44 69 73 70  ersion), ForDisp
2a7d0 6c 61 79 28 64 69 72 65 63 74 6f 72 79 29 29 2c  lay(directory)),
2a7e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2a7f0 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67        traceCateg
2a800 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
2a810 20 20 20 20 20 20 20 20 20 69 6e 73 74 61 6c 6c           install
2a820 44 69 72 65 63 74 6f 72 79 20 3d 20 64 69 72 65  Directory = dire
2a830 63 74 6f 72 79 3b 0d 0a 20 20 20 20 20 20 20 20  ctory;..        
2a840 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74          return t
2a850 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  rue;..          
2a860 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a    }..        }..
2a870 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
2a880 2f 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 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69  /....        pri
2a8d0 76 61 74 65 20 73 74 61 74 69 63 20 62 6f 6f 6c  vate static bool
2a8e0 20 48 61 76 65 46 72 61 6d 65 77 6f 72 6b 52 65   HaveFrameworkRe
2a8f0 67 69 73 74 72 79 28 0d 0a 20 20 20 20 20 20 20  gistry(..       
2a900 20 20 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72       MockRegistr
2a910 79 4b 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20  yKey rootKey,.. 
2a920 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
2a930 67 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c  g frameworkName,
2a940 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 56 65  ..            Ve
2a950 72 73 69 6f 6e 20 66 72 61 6d 65 77 6f 72 6b 56  rsion frameworkV
2a960 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20  ersion,..       
2a970 20 20 20 20 20 73 74 72 69 6e 67 20 70 6c 61 74       string plat
2a980 66 6f 72 6d 4e 61 6d 65 2c 0d 0a 20 20 20 20 20  formName,..     
2a990 20 20 20 20 20 20 20 62 6f 6f 6c 20 70 65 72 55         bool perU
2a9a0 73 65 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ser,..          
2a9b0 20 20 62 6f 6f 6c 20 77 6f 77 36 34 2c 0d 0a 20    bool wow64,.. 
2a9c0 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
2a9d0 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20  whatIf,..       
2a9e0 20 20 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73       bool verbos
2a9f0 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29  e..            )
2aa00 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
2aa10 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
2aa20 6b 65 79 4e 61 6d 65 20 3d 20 47 65 74 46 72 61  keyName = GetFra
2aa30 6d 65 77 6f 72 6b 4b 65 79 4e 61 6d 65 28 0d 0a  meworkKeyName(..
2aa40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2aa50 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c 20 66  frameworkName, f
2aa60 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 2c  rameworkVersion,
2aa70 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 2c 20 70   platformName, p
2aa80 65 72 55 73 65 72 2c 0d 0a 20 20 20 20 20 20 20  erUser,..       
2aa90 20 20 20 20 20 20 20 20 20 77 6f 77 36 34 29 3b           wow64);
2aaa0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2aab0 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73  using (MockRegis
2aac0 74 72 79 4b 65 79 20 6b 65 79 20 3d 20 52 65 67  tryKey key = Reg
2aad0 69 73 74 72 79 48 65 6c 70 65 72 2e 4f 70 65 6e  istryHelper.Open
2aae0 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20 20  SubKey(..       
2aaf0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f               roo
2ab00 74 4b 65 79 2c 20 6b 65 79 4e 61 6d 65 2c 20 66  tKey, keyName, f
2ab10 61 6c 73 65 2c 20 77 68 61 74 49 66 2c 20 76 65  alse, whatIf, ve
2ab20 72 62 6f 73 65 29 29 0d 0a 20 20 20 20 20 20 20  rbose))..       
2ab30 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
2ab40 20 20 20 20 20 20 20 20 69 66 20 28 6b 65 79 20          if (key 
2ab50 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
2ab60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
2ab70 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20  turn false;.... 
2ab80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
2ab90 66 20 28 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 20  f (platformName 
2aba0 21 3d 20 6e 75 6c 6c 29 20 2f 2f 20 4e 4f 54 45  != null) // NOTE
2abb0 3a 20 53 6b 69 70 20 6e 6f 6e 2d 64 65 73 6b 74  : Skip non-deskt
2abc0 6f 70 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  op...           
2abd0 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
2abe0 74 72 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  true;....       
2abf0 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70           TraceOp
2ac00 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28  s.DebugAndTrace(
2ac10 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f  TracePriority.Lo
2ac20 77 65 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  wer,..          
2ac30 20 20 20 20 20 20 20 20 20 20 64 65 62 75 67 43            debugC
2ac40 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61  allback, traceCa
2ac50 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46  llback, String.F
2ac60 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
2ac70 20 20 20 20 20 20 20 20 20 20 20 20 22 2e 4e 45              ".NE
2ac80 54 20 46 72 61 6d 65 77 6f 72 6b 20 7b 30 7d 20  T Framework {0} 
2ac90 66 6f 75 6e 64 20 76 69 61 20 72 65 67 69 73 74  found via regist
2aca0 72 79 20 7b 31 7d 2e 22 2c 0d 0a 20 20 20 20 20  ry {1}.",..     
2acb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46                 F
2acc0 6f 72 44 69 73 70 6c 61 79 28 66 72 61 6d 65 77  orDisplay(framew
2acd0 6f 72 6b 56 65 72 73 69 6f 6e 29 2c 20 46 6f 72  orkVersion), For
2ace0 44 69 73 70 6c 61 79 28 6b 65 79 4e 61 6d 65 29  Display(keyName)
2acf0 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
2ad00 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74          traceCat
2ad10 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20  egory);....     
2ad20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
2ad30 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20  n true;..       
2ad40 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
2ad50 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  }....        ///
2ad60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ad70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ad80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ad90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ada0 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
2adb0 5b 4d 65 74 68 6f 64 49 6d 70 6c 28 4d 65 74 68  [MethodImpl(Meth
2adc0 6f 64 49 6d 70 6c 4f 70 74 69 6f 6e 73 2e 4e 6f  odImplOptions.No
2add0 49 6e 6c 69 6e 69 6e 67 29 5d 0d 0a 20 20 20 20  Inlining)]..    
2ade0 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74      private stat
2adf0 69 63 20 62 6f 6f 6c 20 46 6f 72 45 61 63 68 46  ic bool ForEachF
2ae00 72 61 6d 65 77 6f 72 6b 43 6f 6e 66 69 67 28 0d  rameworkConfig(.
2ae10 0a 20 20 20 20 20 20 20 20 20 20 20 20 4d 6f 63  .            Moc
2ae20 6b 52 65 67 69 73 74 72 79 20 72 65 67 69 73 74  kRegistry regist
2ae30 72 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ry,..           
2ae40 20 46 72 61 6d 65 77 6f 72 6b 4c 69 73 74 20 66   FrameworkList f
2ae50 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2c 0d 0a 20  rameworkList,.. 
2ae60 20 20 20 20 20 20 20 20 20 20 20 46 72 61 6d 65             Frame
2ae70 77 6f 72 6b 43 6f 6e 66 69 67 43 61 6c 6c 62 61  workConfigCallba
2ae80 63 6b 20 63 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20  ck callback,..  
2ae90 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
2aea0 20 76 65 72 73 69 6f 6e 2c 20 2f 2a 20 4e 4f 54   version, /* NOT
2aeb0 45 3a 20 4f 70 74 69 6f 6e 61 6c 2e 20 2a 2f 0d  E: Optional. */.
2aec0 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72  .            str
2aed0 69 6e 67 20 69 6e 76 61 72 69 61 6e 74 4e 61 6d  ing invariantNam
2aee0 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
2aef0 73 74 72 69 6e 67 20 6e 61 6d 65 2c 0d 0a 20 20  string name,..  
2af00 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
2af10 20 64 65 73 63 72 69 70 74 69 6f 6e 2c 0d 0a 20   description,.. 
2af20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
2af30 67 20 74 79 70 65 4e 61 6d 65 2c 0d 0a 20 20 20  g typeName,..   
2af40 20 20 20 20 20 20 20 20 20 41 73 73 65 6d 62 6c           Assembl
2af50 79 4e 61 6d 65 20 61 73 73 65 6d 62 6c 79 4e 61  yName assemblyNa
2af60 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me,..           
2af70 20 6f 62 6a 65 63 74 20 63 6c 69 65 6e 74 44 61   object clientDa
2af80 74 61 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ta,..           
2af90 20 62 6f 6f 6c 20 70 65 72 55 73 65 72 2c 0d 0a   bool perUser,..
2afa0 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
2afb0 20 77 6f 77 36 34 2c 0d 0a 20 20 20 20 20 20 20   wow64,..       
2afc0 20 20 20 20 20 62 6f 6f 6c 20 74 68 72 6f 77 4f       bool throwO
2afd0 6e 4d 69 73 73 69 6e 67 2c 0d 0a 20 20 20 20 20  nMissing,..     
2afe0 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74         bool what
2aff0 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  If,..           
2b000 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c 0d 0a   bool verbose,..
2b010 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20              ref 
2b020 62 6f 6f 6c 20 73 61 76 65 64 2c 0d 0a 20 20 20  bool saved,..   
2b030 20 20 20 20 20 20 20 20 20 72 65 66 20 73 74 72           ref str
2b040 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20 20 20  ing error..     
2b050 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
2b060 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
2b070 20 69 66 20 28 72 65 67 69 73 74 72 79 20 3d 3d   if (registry ==
2b080 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
2b090 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
2b0a0 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22         error = "
2b0b0 69 6e 76 61 6c 69 64 20 72 65 67 69 73 74 72 79  invalid registry
2b0c0 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ";..            
2b0d0 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
2b0e0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
2b0f0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2b100 69 66 20 28 66 72 61 6d 65 77 6f 72 6b 4c 69 73  if (frameworkLis
2b110 74 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  t == null)..    
2b120 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
2b130 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72             error
2b140 20 3d 20 22 69 6e 76 61 6c 69 64 20 66 72 61 6d   = "invalid fram
2b150 65 77 6f 72 6b 20 6c 69 73 74 22 3b 0d 0a 20 20  ework list";..  
2b160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
2b170 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20  turn false;..   
2b180 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
2b190 20 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65            MockRe
2b1a0 67 69 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65  gistryKey rootKe
2b1b0 79 20 3d 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73  y = frameworkLis
2b1c0 74 2e 52 6f 6f 74 4b 65 79 3b 0d 0a 0d 0a 20 20  t.RootKey;....  
2b1d0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 72 6f            if (ro
2b1e0 6f 74 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  otKey == null)..
2b1f0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
2b200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
2b210 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64 20  rror = "invalid 
2b220 72 6f 6f 74 20 6b 65 79 22 3b 0d 0a 20 20 20 20  root key";..    
2b230 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
2b240 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20  rn false;..     
2b250 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
2b260 20 20 20 20 20 20 20 20 69 66 20 28 21 49 73 53          if (!IsS
2b270 75 70 70 6f 72 74 65 64 52 6f 6f 74 4b 65 79 28  upportedRootKey(
2b280 72 65 67 69 73 74 72 79 2c 20 72 6f 6f 74 4b 65  registry, rootKe
2b290 79 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  y))..           
2b2a0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
2b2b0 20 20 20 20 65 72 72 6f 72 20 3d 20 22 72 6f 6f      error = "roo
2b2c0 74 20 6b 65 79 20 6d 75 73 74 20 62 65 20 70 65  t key must be pe
2b2d0 72 2d 75 73 65 72 20 6f 72 20 70 65 72 2d 6d 61  r-user or per-ma
2b2e0 63 68 69 6e 65 22 3b 0d 0a 20 20 20 20 20 20 20  chine";..       
2b2f0 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
2b300 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20  false;..        
2b310 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
2b320 20 20 20 20 20 69 66 20 28 66 72 61 6d 65 77 6f       if (framewo
2b330 72 6b 4c 69 73 74 2e 4e 61 6d 65 73 20 3d 3d 20  rkList.Names == 
2b340 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
2b350 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
2b360 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 6e        error = "n
2b370 6f 20 66 72 61 6d 65 77 6f 72 6b 20 6e 61 6d 65  o framework name
2b380 73 20 66 6f 75 6e 64 22 3b 0d 0a 20 20 20 20 20  s found";..     
2b390 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
2b3a0 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  n false;..      
2b3b0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
2b3c0 20 20 20 20 20 20 20 69 66 20 28 66 72 61 6d 65         if (frame
2b3d0 77 6f 72 6b 4c 69 73 74 2e 56 65 72 73 69 6f 6e  workList.Version
2b3e0 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  s == null)..    
2b3f0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
2b400 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72             error
2b410 20 3d 20 22 6e 6f 20 66 72 61 6d 65 77 6f 72 6b   = "no framework
2b420 20 76 65 72 73 69 6f 6e 73 20 66 6f 75 6e 64 22   versions found"
2b430 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
2b440 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
2b450 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
2b460 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
2b470 66 20 28 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74  f (frameworkList
2b480 2e 50 6c 61 74 66 6f 72 6d 4e 61 6d 65 73 20 3d  .PlatformNames =
2b490 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
2b4a0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
2b4b0 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20          error = 
2b4c0 22 6e 6f 20 70 6c 61 74 66 6f 72 6d 20 6e 61 6d  "no platform nam
2b4d0 65 73 20 66 6f 75 6e 64 22 3b 0d 0a 20 20 20 20  es found";..    
2b4e0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
2b4f0 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20  rn false;..     
2b500 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
2b510 20 20 20 20 20 20 20 20 69 66 20 28 66 72 61 6d          if (fram
2b520 65 77 6f 72 6b 4c 69 73 74 2e 4e 61 6d 65 73 2e  eworkList.Names.
2b530 43 6f 75 6e 74 20 21 3d 20 66 72 61 6d 65 77 6f  Count != framewo
2b540 72 6b 4c 69 73 74 2e 50 6c 61 74 66 6f 72 6d 4e  rkList.PlatformN
2b550 61 6d 65 73 2e 43 6f 75 6e 74 29 0d 0a 20 20 20  ames.Count)..   
2b560 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
2b570 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
2b580 72 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61  r = String.Forma
2b590 74 28 22 66 72 61 6d 65 77 6f 72 6b 20 6e 61 6d  t("framework nam
2b5a0 65 20 63 6f 75 6e 74 20 7b 30 7d 20 64 6f 65 73  e count {0} does
2b5b0 20 6e 6f 74 20 22 20 2b 0d 0a 20 20 20 20 20 20   not " +..      
2b5c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 6d                "m
2b5d0 61 74 63 68 20 70 6c 61 74 66 6f 72 6d 20 6e 61  atch platform na
2b5e0 6d 65 20 63 6f 75 6e 74 20 7b 31 7d 22 2c 20 66  me count {1}", f
2b5f0 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 4e 61 6d  rameworkList.Nam
2b600 65 73 2e 43 6f 75 6e 74 2c 0d 0a 20 20 20 20 20  es.Count,..     
2b610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66                 f
2b620 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 50 6c 61  rameworkList.Pla
2b630 74 66 6f 72 6d 4e 61 6d 65 73 2e 43 6f 75 6e 74  tformNames.Count
2b640 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
2b650 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
2b660 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se;..           
2b670 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
2b680 20 20 66 6f 72 20 28 69 6e 74 20 69 6e 64 65 78    for (int index
2b690 20 3d 20 30 3b 20 69 6e 64 65 78 20 3c 20 66 72   = 0; index < fr
2b6a0 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 4e 61 6d 65  ameworkList.Name
2b6b0 73 2e 43 6f 75 6e 74 3b 20 69 6e 64 65 78 2b 2b  s.Count; index++
2b6c0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
2b6d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2b6e0 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
2b6f0 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 47        // NOTE: G
2b700 72 61 62 20 74 68 65 20 6e 61 6d 65 20 6f 66 20  rab the name of 
2b710 74 68 65 20 66 72 61 6d 65 77 6f 72 6b 20 28 65  the framework (e
2b720 2e 67 2e 20 22 2e 4e 45 54 46 72 61 6d 65 77 6f  .g. ".NETFramewo
2b730 72 6b 22 29 0d 0a 20 20 20 20 20 20 20 20 20 20  rk")..          
2b740 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 61        //       a
2b750 6e 64 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74  nd the name of t
2b760 68 65 20 70 6c 61 74 66 6f 72 6d 20 28 65 2e 67  he platform (e.g
2b770 2e 20 22 57 69 6e 64 6f 77 73 43 45 22 29 2e 0d  . "WindowsCE")..
2b780 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2b790 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
2b7a0 20 20 20 20 20 73 74 72 69 6e 67 20 66 72 61 6d       string fram
2b7b0 65 77 6f 72 6b 4e 61 6d 65 20 3d 20 66 72 61 6d  eworkName = fram
2b7c0 65 77 6f 72 6b 4c 69 73 74 2e 4e 61 6d 65 73 5b  eworkList.Names[
2b7d0 69 6e 64 65 78 5d 3b 0d 0a 20 20 20 20 20 20 20  index];..       
2b7e0 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
2b7f0 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 20 3d 20 66  platformName = f
2b800 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 50 6c 61  rameworkList.Pla
2b810 74 66 6f 72 6d 4e 61 6d 65 73 5b 69 6e 64 65 78  tformNames[index
2b820 5d 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  ];....          
2b830 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
2b840 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54            // NOT
2b850 45 3a 20 53 6b 69 70 20 61 6c 6c 20 6e 6f 6e 2d  E: Skip all non-
2b860 64 65 73 6b 74 6f 70 20 66 72 61 6d 65 77 6f 72  desktop framewor
2b870 6b 73 20 28 69 2e 65 2e 20 69 66 20 74 68 65 20  ks (i.e. if the 
2b880 70 6c 61 74 66 6f 72 6d 0d 0a 20 20 20 20 20 20  platform..      
2b890 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
2b8a0 20 20 20 6e 61 6d 65 20 69 73 20 6e 6f 74 20 6e     name is not n
2b8b0 75 6c 6c 29 2e 0d 0a 20 20 20 20 20 20 20 20 20  ull)...         
2b8c0 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
2b8d0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 70             if (p
2b8e0 6c 61 74 66 6f 72 6d 4e 61 6d 65 20 21 3d 20 6e  latformName != n
2b8f0 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
2b900 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e            contin
2b910 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ue;....         
2b920 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
2b930 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f             // NO
2b940 54 45 3a 20 47 72 61 62 20 74 68 65 20 73 75 70  TE: Grab the sup
2b950 70 6f 72 74 65 64 20 76 65 72 73 69 6f 6e 73 20  ported versions 
2b960 6f 66 20 74 68 69 73 20 70 61 72 74 69 63 75 6c  of this particul
2b970 61 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ar..            
2b980 20 20 20 20 2f 2f 20 20 20 20 20 20 20 66 72 61      //       fra
2b990 6d 65 77 6f 72 6b 2e 0d 0a 20 20 20 20 20 20 20  mework...       
2b9a0 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
2b9b0 20 20 20 20 20 20 20 20 20 20 20 20 20 56 65 72               Ver
2b9c0 73 69 6f 6e 4c 69 73 74 20 66 72 61 6d 65 77 6f  sionList framewo
2b9d0 72 6b 56 65 72 73 69 6f 6e 4c 69 73 74 3b 0d 0a  rkVersionList;..
2b9e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2b9f0 20 20 69 66 20 28 76 65 72 73 69 6f 6e 20 21 3d    if (version !=
2ba00 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
2ba10 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
2ba20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
2ba30 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
2ba40 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20         // NOTE: 
2ba50 4d 61 6e 75 61 6c 20 6f 76 65 72 72 69 64 65 20  Manual override 
2ba60 6f 66 20 74 68 65 20 2a 4f 4e 45 2a 20 66 72 61  of the *ONE* fra
2ba70 6d 65 77 6f 72 6b 20 76 65 72 73 69 6f 6e 0d 0a  mework version..
2ba80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ba90 20 20 20 20 2f 2f 20 20 20 20 20 20 20 74 6f 20      //       to 
2baa0 70 72 6f 63 65 73 73 2e 0d 0a 20 20 20 20 20 20  process...      
2bab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
2bac0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2bad0 20 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 56        frameworkV
2bae0 65 72 73 69 6f 6e 4c 69 73 74 20 3d 20 6e 65 77  ersionList = new
2baf0 20 56 65 72 73 69 6f 6e 4c 69 73 74 28 29 3b 0d   VersionList();.
2bb00 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2bb10 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 56 65       frameworkVe
2bb20 72 73 69 6f 6e 4c 69 73 74 2e 41 64 64 28 6e 65  rsionList.Add(ne
2bb30 77 20 56 65 72 73 69 6f 6e 28 76 65 72 73 69 6f  w Version(versio
2bb40 6e 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  n));..          
2bb50 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
2bb60 20 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20           else.. 
2bb70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
2bb80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2bb90 20 20 20 20 20 20 69 66 20 28 21 66 72 61 6d 65        if (!frame
2bba0 77 6f 72 6b 4c 69 73 74 2e 56 65 72 73 69 6f 6e  workList.Version
2bbb0 73 2e 54 72 79 47 65 74 56 61 6c 75 65 28 0d 0a  s.TryGetValue(..
2bbc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bbd0 20 20 20 20 20 20 20 20 20 20 20 20 66 72 61 6d              fram
2bbe0 65 77 6f 72 6b 4e 61 6d 65 2c 20 6f 75 74 20 66  eworkName, out f
2bbf0 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 4c  rameworkVersionL
2bc00 69 73 74 29 20 7c 7c 0d 0a 20 20 20 20 20 20 20  ist) ||..       
2bc10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bc20 20 28 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69   (frameworkVersi
2bc30 6f 6e 4c 69 73 74 20 3d 3d 20 6e 75 6c 6c 29 29  onList == null))
2bc40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2bc50 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
2bc60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bc70 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20   continue;..    
2bc80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bc90 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
2bca0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
2bcb0 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20          foreach 
2bcc0 28 56 65 72 73 69 6f 6e 20 66 72 61 6d 65 77 6f  (Version framewo
2bcd0 72 6b 56 65 72 73 69 6f 6e 20 69 6e 20 66 72 61  rkVersion in fra
2bce0 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 4c 69 73  meworkVersionLis
2bcf0 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t)..            
2bd00 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
2bd10 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
2bd20 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63  Ops.DebugAndTrac
2bd30 65 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e  e(TracePriority.
2bd40 4c 6f 77 65 72 2c 0d 0a 20 20 20 20 20 20 20 20  Lower,..        
2bd50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bd60 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74  debugCallback, t
2bd70 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74  raceCallback, St
2bd80 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
2bd90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bda0 20 20 20 20 20 20 22 66 72 61 6d 65 77 6f 72 6b        "framework
2bdb0 4e 61 6d 65 20 3d 20 7b 30 7d 2c 20 66 72 61 6d  Name = {0}, fram
2bdc0 65 77 6f 72 6b 56 65 72 73 69 6f 6e 20 3d 20 7b  eworkVersion = {
2bdd0 31 7d 2c 20 22 20 2b 0d 0a 20 20 20 20 20 20 20  1}, " +..       
2bde0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bdf0 20 22 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 20 3d   "platformName =
2be00 20 7b 32 7d 22 2c 20 46 6f 72 44 69 73 70 6c 61   {2}", ForDispla
2be10 79 28 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 29  y(frameworkName)
2be20 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
2be30 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69             ForDi
2be40 73 70 6c 61 79 28 66 72 61 6d 65 77 6f 72 6b 56  splay(frameworkV
2be50 65 72 73 69 6f 6e 29 2c 0d 0a 20 20 20 20 20 20  ersion),..      
2be60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2be70 20 20 46 6f 72 44 69 73 70 6c 61 79 28 70 6c 61    ForDisplay(pla
2be80 74 66 6f 72 6d 4e 61 6d 65 29 29 2c 20 74 72 61  tformName)), tra
2be90 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
2bea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2beb0 20 20 20 20 73 74 72 69 6e 67 20 69 6e 73 74 61      string insta
2bec0 6c 6c 44 69 72 65 63 74 6f 72 79 20 3d 20 6e 75  llDirectory = nu
2bed0 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ll;....         
2bee0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21             if (!
2bef0 48 61 76 65 46 72 61 6d 65 77 6f 72 6b 44 69 72  HaveFrameworkDir
2bf00 65 63 74 6f 72 79 28 0d 0a 20 20 20 20 20 20 20  ectory(..       
2bf10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bf20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 66 72       rootKey, fr
2bf30 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c 20 66 72 61  ameworkName, fra
2bf40 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 2c 0d 0a  meworkVersion,..
2bf50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bf60 20 20 20 20 20 20 20 20 20 20 20 20 70 6c 61 74              plat
2bf70 66 6f 72 6d 4e 61 6d 65 2c 20 70 65 72 55 73 65  formName, perUse
2bf80 72 2c 20 77 6f 77 36 34 2c 20 77 68 61 74 49 66  r, wow64, whatIf
2bf90 2c 20 76 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20  , verbose,..    
2bfa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bfb0 20 20 20 20 20 20 20 20 72 65 66 20 69 6e 73 74          ref inst
2bfc0 61 6c 6c 44 69 72 65 63 74 6f 72 79 29 29 0d 0a  allDirectory))..
2bfd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bfe0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
2bff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
2c000 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64  raceOps.DebugAnd
2c010 54 72 61 63 65 28 54 72 61 63 65 50 72 69 6f 72  Trace(TracePrior
2c020 69 74 79 2e 4c 6f 77 2c 0d 0a 20 20 20 20 20 20  ity.Low,..      
2c030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c040 20 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62        debugCallb
2c050 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61  ack, traceCallba
2c060 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ck, String.Forma
2c070 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
2c080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c090 22 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72 6b 20  ".NET Framework 
2c0a0 7b 30 7d 20 64 69 72 65 63 74 6f 72 79 20 6e 6f  {0} directory no
2c0b0 74 20 66 6f 75 6e 64 2c 20 22 20 2b 0d 0a 20 20  t found, " +..  
2c0c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c0d0 20 20 20 20 20 20 20 20 20 20 22 73 6b 69 70 70            "skipp
2c0e0 69 6e 67 2e 2e 2e 22 2c 20 46 6f 72 44 69 73 70  ing...", ForDisp
2c0f0 6c 61 79 28 66 72 61 6d 65 77 6f 72 6b 56 65 72  lay(frameworkVer
2c100 73 69 6f 6e 29 29 2c 0d 0a 20 20 20 20 20 20 20  sion)),..       
2c110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c120 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f       traceCatego
2c130 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
2c140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c150 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20  continue;..     
2c160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
2c170 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2c180 20 20 20 20 20 20 20 20 69 66 20 28 63 61 6c 6c          if (call
2c190 62 61 63 6b 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  back == null).. 
2c1a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c1b0 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b         continue;
2c1c0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2c1d0 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 64          string d
2c1e0 69 72 65 63 74 6f 72 79 20 3d 20 69 6e 73 74 61  irectory = insta
2c1f0 6c 6c 44 69 72 65 63 74 6f 72 79 3b 0d 0a 0d 0a  llDirectory;....
2c200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c210 20 20 20 20 69 66 20 28 53 74 72 69 6e 67 2e 49      if (String.I
2c220 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 64 69 72  sNullOrEmpty(dir
2c230 65 63 74 6f 72 79 29 29 0d 0a 20 20 20 20 20 20  ectory))..      
2c240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
2c250 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2c260 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70           TraceOp
2c270 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28  s.DebugAndTrace(
2c280 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f  TracePriority.Lo
2c290 77 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  w,..            
2c2a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c2b0 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74  debugCallback, t
2c2c0 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74  raceCallback, St
2c2d0 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
2c2e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c2f0 20 20 20 20 20 20 20 20 20 20 22 2e 4e 45 54 20            ".NET 
2c300 46 72 61 6d 65 77 6f 72 6b 20 7b 30 7d 20 64 69  Framework {0} di
2c310 72 65 63 74 6f 72 79 20 69 73 20 69 6e 76 61 6c  rectory is inval
2c320 69 64 2c 20 22 20 2b 0d 0a 20 20 20 20 20 20 20  id, " +..       
2c330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c340 20 20 20 20 20 22 73 6b 69 70 70 69 6e 67 2e 2e       "skipping..
2c350 2e 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 66  .", ForDisplay(f
2c360 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 29  rameworkVersion)
2c370 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
2c380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c390 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
2c3a0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
2c3b0 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69             conti
2c3c0 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  nue;..          
2c3d0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
2c3e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c3f0 20 20 20 64 69 72 65 63 74 6f 72 79 20 3d 20 50     directory = P
2c400 61 74 68 2e 43 6f 6d 62 69 6e 65 28 64 69 72 65  ath.Combine(dire
2c410 63 74 6f 72 79 2c 20 22 43 6f 6e 66 69 67 22 29  ctory, "Config")
2c420 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
2c430 20 20 20 20 20 20 20 20 20 69 66 20 28 21 44 69           if (!Di
2c440 72 65 63 74 6f 72 79 2e 45 78 69 73 74 73 28 64  rectory.Exists(d
2c450 69 72 65 63 74 6f 72 79 29 29 0d 0a 20 20 20 20  irectory))..    
2c460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c470 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
2c480 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
2c490 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63  Ops.DebugAndTrac
2c4a0 65 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e  e(TracePriority.
2c4b0 4c 6f 77 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  Low,..          
2c4c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c4d0 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c    debugCallback,
2c4e0 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20   traceCallback, 
2c4f0 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
2c500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c510 20 20 20 20 20 20 20 20 20 20 20 20 22 2e 4e 45              ".NE
2c520 54 20 46 72 61 6d 65 77 6f 72 6b 20 7b 30 7d 20  T Framework {0} 
2c530 64 69 72 65 63 74 6f 72 79 20 7b 31 7d 20 64 6f  directory {1} do
2c540 65 73 20 6e 6f 74 20 22 20 2b 0d 0a 20 20 20 20  es not " +..    
2c550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c560 20 20 20 20 20 20 20 20 22 65 78 69 73 74 2c 20          "exist, 
2c570 73 6b 69 70 70 69 6e 67 2e 2e 2e 22 2c 20 46 6f  skipping...", Fo
2c580 72 44 69 73 70 6c 61 79 28 66 72 61 6d 65 77 6f  rDisplay(framewo
2c590 72 6b 56 65 72 73 69 6f 6e 29 2c 0d 0a 20 20 20  rkVersion),..   
2c5a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c5b0 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70           ForDisp
2c5c0 6c 61 79 28 64 69 72 65 63 74 6f 72 79 29 29 2c  lay(directory)),
2c5d0 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
2c5e0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2c5f0 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74              cont
2c600 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  inue;..         
2c610 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
2c620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c630 20 20 20 20 73 74 72 69 6e 67 20 66 69 6c 65 4e      string fileN
2c640 61 6d 65 20 3d 20 50 61 74 68 2e 43 6f 6d 62 69  ame = Path.Combi
2c650 6e 65 28 64 69 72 65 63 74 6f 72 79 2c 20 22 6d  ne(directory, "m
2c660 61 63 68 69 6e 65 2e 63 6f 6e 66 69 67 22 29 3b  achine.config");
2c670 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2c680 20 20 20 20 20 20 20 20 69 66 20 28 21 46 69 6c          if (!Fil
2c690 65 2e 45 78 69 73 74 73 28 66 69 6c 65 4e 61 6d  e.Exists(fileNam
2c6a0 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e))..           
2c6b0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
2c6c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c6d0 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62      TraceOps.Deb
2c6e0 75 67 41 6e 64 54 72 61 63 65 28 54 72 61 63 65  ugAndTrace(Trace
2c6f0 50 72 69 6f 72 69 74 79 2e 4c 6f 77 2c 0d 0a 20  Priority.Low,.. 
2c700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c710 20 20 20 20 20 20 20 20 20 20 20 64 65 62 75 67             debug
2c720 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43  Callback, traceC
2c730 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e  allback, String.
2c740 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
2c750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c760 20 20 20 20 20 22 2e 4e 45 54 20 46 72 61 6d 65       ".NET Frame
2c770 77 6f 72 6b 20 7b 30 7d 20 66 69 6c 65 20 7b 31  work {0} file {1
2c780 7d 20 64 6f 65 73 20 6e 6f 74 20 65 78 69 73 74  } does not exist
2c790 2c 20 22 20 2b 0d 0a 20 20 20 20 20 20 20 20 20  , " +..         
2c7a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c7b0 20 20 20 22 73 6b 69 70 70 69 6e 67 2e 2e 2e 22     "skipping..."
2c7c0 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 66 72 61  , ForDisplay(fra
2c7d0 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 29 2c 0d  meworkVersion),.
2c7e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2c7f0 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72               For
2c800 44 69 73 70 6c 61 79 28 66 69 6c 65 4e 61 6d 65  Display(fileName
2c810 29 29 2c 20 74 72 61 63 65 43 61 74 65 67 6f 72  )), traceCategor
2c820 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
2c830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
2c840 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20  ontinue;..      
2c850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
2c860 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
2c870 20 20 20 20 20 20 20 62 6f 6f 6c 20 6c 6f 63 61         bool loca
2c880 6c 53 61 76 65 64 20 3d 20 66 61 6c 73 65 3b 0d  lSaved = false;.
2c890 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
2c8a0 20 20 20 20 20 20 20 69 66 20 28 21 63 61 6c 6c         if (!call
2c8b0 62 61 63 6b 28 0d 0a 20 20 20 20 20 20 20 20 20  back(..         
2c8c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c8d0 20 20 20 66 69 6c 65 4e 61 6d 65 2c 20 69 6e 76     fileName, inv
2c8e0 61 72 69 61 6e 74 4e 61 6d 65 2c 20 6e 61 6d 65  ariantName, name
2c8f0 2c 20 64 65 73 63 72 69 70 74 69 6f 6e 2c 0d 0a  , description,..
2c900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c910 20 20 20 20 20 20 20 20 20 20 20 20 74 79 70 65              type
2c920 4e 61 6d 65 2c 20 61 73 73 65 6d 62 6c 79 4e 61  Name, assemblyNa
2c930 6d 65 2c 20 69 6e 73 74 61 6c 6c 44 69 72 65 63  me, installDirec
2c940 74 6f 72 79 2c 0d 0a 20 20 20 20 20 20 20 20 20  tory,..         
2c950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c960 20 20 20 63 6c 69 65 6e 74 44 61 74 61 2c 20 70     clientData, p
2c970 65 72 55 73 65 72 2c 20 77 6f 77 36 34 2c 20 74  erUser, wow64, t
2c980 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 2c 0d 0a  hrowOnMissing,..
2c990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c9a0 20 20 20 20 20 20 20 20 20 20 20 20 77 68 61 74              what
2c9b0 49 66 2c 20 76 65 72 62 6f 73 65 2c 20 72 65 66  If, verbose, ref
2c9c0 20 6c 6f 63 61 6c 53 61 76 65 64 2c 20 72 65 66   localSaved, ref
2c9d0 20 65 72 72 6f 72 29 29 0d 0a 20 20 20 20 20 20   error))..      
2c9e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
2c9f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2ca00 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
2ca10 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20  false;..        
2ca20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
2ca30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ca40 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20     else..       
2ca50 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
2ca60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ca70 20 20 20 20 20 20 20 20 69 66 20 28 6c 6f 63 61          if (loca
2ca80 6c 53 61 76 65 64 20 26 26 20 21 73 61 76 65 64  lSaved && !saved
2ca90 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
2caa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
2cab0 61 76 65 64 20 3d 20 74 72 75 65 3b 0d 0a 0d 0a  aved = true;....
2cac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cad0 20 20 20 20 20 20 20 20 69 66 20 28 76 65 72 62          if (verb
2cae0 6f 73 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ose)..          
2caf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cb00 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67    TraceOps.Debug
2cb10 41 6e 64 54 72 61 63 65 28 54 72 61 63 65 50 72  AndTrace(TracePr
2cb20 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c 0d 0a  iority.Lowest,..
2cb30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cb40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cb50 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74  debugCallback, t
2cb60 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74  raceCallback, St
2cb70 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
2cb80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cb90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 6c                "l
2cba0 6f 63 61 6c 53 61 76 65 64 20 3d 20 7b 30 7d 2c  ocalSaved = {0},
2cbb0 20 73 61 76 65 64 20 3d 20 7b 31 7d 22 2c 0d 0a   saved = {1}",..
2cbc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cbd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cbe0 46 6f 72 44 69 73 70 6c 61 79 28 6c 6f 63 61 6c  ForDisplay(local
2cbf0 53 61 76 65 64 29 2c 20 46 6f 72 44 69 73 70 6c  Saved), ForDispl
2cc00 61 79 28 73 61 76 65 64 29 29 2c 0d 0a 20 20 20  ay(saved)),..   
2cc10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cc20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
2cc30 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 20 20  ceCategory);..  
2cc40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cc50 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
2cc60 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
2cc70 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
2cc80 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 65       return true
2cc90 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  ;..        }....
2cca0 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
2ccb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ccc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ccd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2cce0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
2ccf0 0a 0d 0a 20 20 20 20 20 20 20 20 5b 4d 65 74 68  ...        [Meth
2cd00 6f 64 49 6d 70 6c 28 4d 65 74 68 6f 64 49 6d 70  odImpl(MethodImp
2cd10 6c 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e  lOptions.NoInlin
2cd20 69 6e 67 29 5d 0d 0a 20 20 20 20 20 20 20 20 70  ing)]..        p
2cd30 72 69 76 61 74 65 20 73 74 61 74 69 63 20 62 6f  rivate static bo
2cd40 6f 6c 20 46 6f 72 45 61 63 68 46 72 61 6d 65 77  ol ForEachFramew
2cd50 6f 72 6b 52 65 67 69 73 74 72 79 28 0d 0a 20 20  orkRegistry(..  
2cd60 20 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65            MockRe
2cd70 67 69 73 74 72 79 20 72 65 67 69 73 74 72 79 2c  gistry registry,
2cd80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 46 72  ..            Fr
2cd90 61 6d 65 77 6f 72 6b 4c 69 73 74 20 66 72 61 6d  ameworkList fram
2cda0 65 77 6f 72 6b 4c 69 73 74 2c 0d 0a 20 20 20 20  eworkList,..    
2cdb0 20 20 20 20 20 20 20 20 46 72 61 6d 65 77 6f 72          Framewor
2cdc0 6b 52 65 67 69 73 74 72 79 43 61 6c 6c 62 61 63  kRegistryCallbac
2cdd0 6b 20 63 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20  k callback,..   
2cde0 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
2cdf0 76 65 72 73 69 6f 6e 2c 20 2f 2a 20 4e 4f 54 45  version, /* NOTE
2ce00 3a 20 4f 70 74 69 6f 6e 61 6c 2e 20 2a 2f 0d 0a  : Optional. */..
2ce10 20 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65              obje
2ce20 63 74 20 63 6c 69 65 6e 74 44 61 74 61 2c 0d 0a  ct clientData,..
2ce30 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
2ce40 20 70 65 72 55 73 65 72 2c 0d 0a 20 20 20 20 20   perUser,..     
2ce50 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36         bool wow6
2ce60 34 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  4,..            
2ce70 62 6f 6f 6c 20 74 68 72 6f 77 4f 6e 4d 69 73 73  bool throwOnMiss
2ce80 69 6e 67 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ing,..          
2ce90 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a    bool whatIf,..
2cea0 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
2ceb0 20 76 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20   verbose,..     
2cec0 20 20 20 20 20 20 20 72 65 66 20 73 74 72 69 6e         ref strin
2ced0 67 20 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 20  g error..       
2cee0 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
2cef0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  {..            i
2cf00 66 20 28 72 65 67 69 73 74 72 79 20 3d 3d 20 6e  f (registry == n
2cf10 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
2cf20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
2cf30 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 69 6e       error = "in
2cf40 76 61 6c 69 64 20 72 65 67 69 73 74 72 79 22 3b  valid registry";
2cf50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2cf60 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
2cf70 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
2cf80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
2cf90 20 28 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 20   (frameworkList 
2cfa0 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
2cfb0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
2cfc0 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d           error =
2cfd0 20 22 69 6e 76 61 6c 69 64 20 66 72 61 6d 65 77   "invalid framew
2cfe0 6f 72 6b 20 6c 69 73 74 22 3b 0d 0a 20 20 20 20  ork list";..    
2cff0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
2d000 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20  rn false;..     
2d010 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
2d020 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65 67 69          MockRegi
2d030 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79 20  stryKey rootKey 
2d040 3d 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e  = frameworkList.
2d050 52 6f 6f 74 4b 65 79 3b 0d 0a 0d 0a 20 20 20 20  RootKey;....    
2d060 20 20 20 20 20 20 20 20 69 66 20 28 72 6f 6f 74          if (root
2d070 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  Key == null)..  
2d080 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
2d090 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
2d0a0 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64 20 72 6f  or = "invalid ro
2d0b0 6f 74 20 6b 65 79 22 3b 0d 0a 20 20 20 20 20 20  ot key";..      
2d0c0 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
2d0d0 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20   false;..       
2d0e0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
2d0f0 20 20 20 20 20 20 69 66 20 28 21 49 73 53 75 70        if (!IsSup
2d100 70 6f 72 74 65 64 52 6f 6f 74 4b 65 79 28 72 65  portedRootKey(re
2d110 67 69 73 74 72 79 2c 20 72 6f 6f 74 4b 65 79 29  gistry, rootKey)
2d120 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
2d130 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2d140 20 20 65 72 72 6f 72 20 3d 20 22 72 6f 6f 74 20    error = "root 
2d150 6b 65 79 20 6d 75 73 74 20 62 65 20 70 65 72 2d  key must be per-
2d160 75 73 65 72 20 6f 72 20 70 65 72 2d 6d 61 63 68  user or per-mach
2d170 69 6e 65 22 3b 0d 0a 20 20 20 20 20 20 20 20 20  ine";..         
2d180 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
2d190 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lse;..          
2d1a0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
2d1b0 20 20 20 69 66 20 28 66 72 61 6d 65 77 6f 72 6b     if (framework
2d1c0 4c 69 73 74 2e 4e 61 6d 65 73 20 3d 3d 20 6e 75  List.Names == nu
2d1d0 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
2d1e0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
2d1f0 20 20 20 20 65 72 72 6f 72 20 3d 20 22 6e 6f 20      error = "no 
2d200 66 72 61 6d 65 77 6f 72 6b 20 6e 61 6d 65 73 20  framework names 
2d210 66 6f 75 6e 64 22 3b 0d 0a 20 20 20 20 20 20 20  found";..       
2d220 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
2d230 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20  false;..        
2d240 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
2d250 20 20 20 20 20 69 66 20 28 66 72 61 6d 65 77 6f       if (framewo
2d260 72 6b 4c 69 73 74 2e 56 65 72 73 69 6f 6e 73 20  rkList.Versions 
2d270 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
2d280 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
2d290 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d           error =
2d2a0 20 22 6e 6f 20 66 72 61 6d 65 77 6f 72 6b 20 76   "no framework v
2d2b0 65 72 73 69 6f 6e 73 20 66 6f 75 6e 64 22 3b 0d  ersions found";.
2d2c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2d2d0 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
2d2e0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
2d2f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
2d300 28 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 50  (frameworkList.P
2d310 6c 61 74 66 6f 72 6d 4e 61 6d 65 73 20 3d 3d 20  latformNames == 
2d320 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
2d330 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
2d340 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 6e        error = "n
2d350 6f 20 70 6c 61 74 66 6f 72 6d 20 6e 61 6d 65 73  o platform names
2d360 20 66 6f 75 6e 64 22 3b 0d 0a 20 20 20 20 20 20   found";..      
2d370 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
2d380 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20   false;..       
2d390 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
2d3a0 20 20 20 20 20 20 69 66 20 28 66 72 61 6d 65 77        if (framew
2d3b0 6f 72 6b 4c 69 73 74 2e 4e 61 6d 65 73 2e 43 6f  orkList.Names.Co
2d3c0 75 6e 74 20 21 3d 20 66 72 61 6d 65 77 6f 72 6b  unt != framework
2d3d0 4c 69 73 74 2e 50 6c 61 74 66 6f 72 6d 4e 61 6d  List.PlatformNam
2d3e0 65 73 2e 43 6f 75 6e 74 29 0d 0a 20 20 20 20 20  es.Count)..     
2d3f0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
2d400 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20            error 
2d410 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  = String.Format(
2d420 22 66 72 61 6d 65 77 6f 72 6b 20 6e 61 6d 65 20  "framework name 
2d430 63 6f 75 6e 74 20 7b 30 7d 20 64 6f 65 73 20 6e  count {0} does n
2d440 6f 74 20 22 20 2b 0d 0a 20 20 20 20 20 20 20 20  ot " +..        
2d450 20 20 20 20 20 20 20 20 20 20 20 20 22 6d 61 74              "mat
2d460 63 68 20 70 6c 61 74 66 6f 72 6d 20 6e 61 6d 65  ch platform name
2d470 20 63 6f 75 6e 74 20 7b 31 7d 22 2c 20 66 72 61   count {1}", fra
2d480 6d 65 77 6f 72 6b 4c 69 73 74 2e 4e 61 6d 65 73  meworkList.Names
2d490 2e 43 6f 75 6e 74 2c 0d 0a 20 20 20 20 20 20 20  .Count,..       
2d4a0 20 20 20 20 20 20 20 20 20 20 20 20 20 66 72 61               fra
2d4b0 6d 65 77 6f 72 6b 4c 69 73 74 2e 50 6c 61 74 66  meworkList.Platf
2d4c0 6f 72 6d 4e 61 6d 65 73 2e 43 6f 75 6e 74 29 3b  ormNames.Count);
2d4d0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2d4e0 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
2d4f0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
2d500 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2d510 66 6f 72 20 28 69 6e 74 20 69 6e 64 65 78 20 3d  for (int index =
2d520 20 30 3b 20 69 6e 64 65 78 20 3c 20 66 72 61 6d   0; index < fram
2d530 65 77 6f 72 6b 4c 69 73 74 2e 4e 61 6d 65 73 2e  eworkList.Names.
2d540 43 6f 75 6e 74 3b 20 69 6e 64 65 78 2b 2b 29 0d  Count; index++).
2d550 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
2d560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d570 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
2d580 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 47 72 61      // NOTE: Gra
2d590 62 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68  b the name of th
2d5a0 65 20 66 72 61 6d 65 77 6f 72 6b 20 28 65 2e 67  e framework (e.g
2d5b0 2e 20 22 2e 4e 45 54 46 72 61 6d 65 77 6f 72 6b  . ".NETFramework
2d5c0 22 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ")..            
2d5d0 20 20 20 20 2f 2f 20 20 20 20 20 20 20 61 6e 64      //       and
2d5e0 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65   the name of the
2d5f0 20 70 6c 61 74 66 6f 72 6d 20 28 65 2e 67 2e 20   platform (e.g. 
2d600 22 57 69 6e 64 6f 77 73 43 45 22 29 2e 0d 0a 20  "WindowsCE")... 
2d610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
2d620 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
2d630 20 20 20 73 74 72 69 6e 67 20 66 72 61 6d 65 77     string framew
2d640 6f 72 6b 4e 61 6d 65 20 3d 20 66 72 61 6d 65 77  orkName = framew
2d650 6f 72 6b 4c 69 73 74 2e 4e 61 6d 65 73 5b 69 6e  orkList.Names[in
2d660 64 65 78 5d 3b 0d 0a 20 20 20 20 20 20 20 20 20  dex];..         
2d670 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 70 6c         string pl
2d680 61 74 66 6f 72 6d 4e 61 6d 65 20 3d 20 66 72 61  atformName = fra
2d690 6d 65 77 6f 72 6b 4c 69 73 74 2e 50 6c 61 74 66  meworkList.Platf
2d6a0 6f 72 6d 4e 61 6d 65 73 5b 69 6e 64 65 78 5d 3b  ormNames[index];
2d6b0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2d6c0 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
2d6d0 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a          // NOTE:
2d6e0 20 47 72 61 62 20 74 68 65 20 73 75 70 70 6f 72   Grab the suppor
2d6f0 74 65 64 20 76 65 72 73 69 6f 6e 73 20 6f 66 20  ted versions of 
2d700 74 68 69 73 20 70 61 72 74 69 63 75 6c 61 72 0d  this particular.
2d710 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2d720 20 2f 2f 20 20 20 20 20 20 20 66 72 61 6d 65 77   //       framew
2d730 6f 72 6b 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  ork...          
2d740 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
2d750 20 20 20 20 20 20 20 20 20 20 56 65 72 73 69 6f            Versio
2d760 6e 4c 69 73 74 20 66 72 61 6d 65 77 6f 72 6b 56  nList frameworkV
2d770 65 72 73 69 6f 6e 4c 69 73 74 3b 0d 0a 0d 0a 20  ersionList;.... 
2d780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
2d790 66 20 28 76 65 72 73 69 6f 6e 20 21 3d 20 6e 75  f (version != nu
2d7a0 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
2d7b0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
2d7c0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
2d7d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d7e0 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 4d 61 6e      // NOTE: Man
2d7f0 75 61 6c 20 6f 76 65 72 72 69 64 65 20 6f 66 20  ual override of 
2d800 74 68 65 20 2a 4f 4e 45 2a 20 66 72 61 6d 65 77  the *ONE* framew
2d810 6f 72 6b 20 76 65 72 73 69 6f 6e 0d 0a 20 20 20  ork version..   
2d820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d830 20 2f 2f 20 20 20 20 20 20 20 74 6f 20 70 72 6f   //       to pro
2d840 63 65 73 73 2e 0d 0a 20 20 20 20 20 20 20 20 20  cess...         
2d850 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
2d860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d870 20 20 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73     frameworkVers
2d880 69 6f 6e 4c 69 73 74 20 3d 20 6e 65 77 20 56 65  ionList = new Ve
2d890 72 73 69 6f 6e 4c 69 73 74 28 29 3b 0d 0a 20 20  rsionList();..  
2d8a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d8b0 20 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69    frameworkVersi
2d8c0 6f 6e 4c 69 73 74 2e 41 64 64 28 6e 65 77 20 56  onList.Add(new V
2d8d0 65 72 73 69 6f 6e 28 76 65 72 73 69 6f 6e 29 29  ersion(version))
2d8e0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
2d8f0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
2d900 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20        else..    
2d910 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
2d920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d930 20 20 20 69 66 20 28 21 66 72 61 6d 65 77 6f 72     if (!framewor
2d940 6b 4c 69 73 74 2e 56 65 72 73 69 6f 6e 73 2e 54  kList.Versions.T
2d950 72 79 47 65 74 56 61 6c 75 65 28 0d 0a 20 20 20  ryGetValue(..   
2d960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d970 20 20 20 20 20 20 20 20 20 66 72 61 6d 65 77 6f           framewo
2d980 72 6b 4e 61 6d 65 2c 20 6f 75 74 20 66 72 61 6d  rkName, out fram
2d990 65 77 6f 72 6b 56 65 72 73 69 6f 6e 4c 69 73 74  eworkVersionList
2d9a0 29 20 7c 7c 0d 0a 20 20 20 20 20 20 20 20 20 20  ) ||..          
2d9b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 66                (f
2d9c0 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 4c  rameworkVersionL
2d9d0 69 73 74 20 3d 3d 20 6e 75 6c 6c 29 29 0d 0a 20  ist == null)).. 
2d9e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d9f0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
2da00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
2da10 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20  ntinue;..       
2da20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
2da30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2da40 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
2da50 20 20 20 20 20 66 6f 72 65 61 63 68 20 28 56 65       foreach (Ve
2da60 72 73 69 6f 6e 20 66 72 61 6d 65 77 6f 72 6b 56  rsion frameworkV
2da70 65 72 73 69 6f 6e 20 69 6e 20 66 72 61 6d 65 77  ersion in framew
2da80 6f 72 6b 56 65 72 73 69 6f 6e 4c 69 73 74 29 0d  orkVersionList).
2da90 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2daa0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
2dab0 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73          TraceOps
2dac0 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 54  .DebugAndTrace(T
2dad0 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77  racePriority.Low
2dae0 65 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  er,..           
2daf0 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65 62               deb
2db00 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63  ugCallback, trac
2db10 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e  eCallback, Strin
2db20 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
2db30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2db40 20 20 20 22 66 72 61 6d 65 77 6f 72 6b 4e 61 6d     "frameworkNam
2db50 65 20 3d 20 7b 30 7d 2c 20 66 72 61 6d 65 77 6f  e = {0}, framewo
2db60 72 6b 56 65 72 73 69 6f 6e 20 3d 20 7b 31 7d 2c  rkVersion = {1},
2db70 20 22 20 2b 0d 0a 20 20 20 20 20 20 20 20 20 20   " +..          
2db80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 70                "p
2db90 6c 61 74 66 6f 72 6d 4e 61 6d 65 20 3d 20 7b 32  latformName = {2
2dba0 7d 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 66  }", ForDisplay(f
2dbb0 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 29 2c 0d 0a  rameworkName),..
2dbc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2dbd0 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c          ForDispl
2dbe0 61 79 28 66 72 61 6d 65 77 6f 72 6b 56 65 72 73  ay(frameworkVers
2dbf0 69 6f 6e 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  ion),..         
2dc00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46                 F
2dc10 6f 72 44 69 73 70 6c 61 79 28 70 6c 61 74 66 6f  orDisplay(platfo
2dc20 72 6d 4e 61 6d 65 29 29 2c 20 74 72 61 63 65 43  rmName)), traceC
2dc30 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20  ategory);....   
2dc40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2dc50 20 69 66 20 28 21 48 61 76 65 46 72 61 6d 65 77   if (!HaveFramew
2dc60 6f 72 6b 52 65 67 69 73 74 72 79 28 0d 0a 20 20  orkRegistry(..  
2dc70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2dc80 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65            rootKe
2dc90 79 2c 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65  y, frameworkName
2dca0 2c 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69  , frameworkVersi
2dcb0 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  on,..           
2dcc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2dcd0 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 2c 20 70   platformName, p
2dce0 65 72 55 73 65 72 2c 20 77 6f 77 36 34 2c 20 77  erUser, wow64, w
2dcf0 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 29  hatIf, verbose))
2dd00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2dd10 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
2dd20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2dd30 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41   TraceOps.DebugA
2dd40 6e 64 54 72 61 63 65 28 54 72 61 63 65 50 72 69  ndTrace(TracePri
2dd50 6f 72 69 74 79 2e 4c 6f 77 2c 0d 0a 20 20 20 20  ority.Low,..    
2dd60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2dd70 20 20 20 20 20 20 20 20 64 65 62 75 67 43 61 6c          debugCal
2dd80 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c  lback, traceCall
2dd90 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72  back, String.For
2dda0 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
2ddb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ddc0 20 20 22 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72    ".NET Framewor
2ddd0 6b 20 7b 30 7d 20 72 65 67 69 73 74 72 79 20 6e  k {0} registry n
2dde0 6f 74 20 66 6f 75 6e 64 2c 20 22 20 2b 0d 0a 20  ot found, " +.. 
2ddf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2de00 20 20 20 20 20 20 20 20 20 20 20 22 73 6b 69 70             "skip
2de10 70 69 6e 67 2e 2e 2e 22 2c 20 46 6f 72 44 69 73  ping...", ForDis
2de20 70 6c 61 79 28 66 72 61 6d 65 77 6f 72 6b 56 65  play(frameworkVe
2de30 72 73 69 6f 6e 29 29 2c 0d 0a 20 20 20 20 20 20  rsion)),..      
2de40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2de50 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67        traceCateg
2de60 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
2de70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2de80 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20   continue;..    
2de90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2dea0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
2deb0 20 20 20 20 20 20 20 20 20 69 66 20 28 63 61 6c           if (cal
2dec0 6c 62 61 63 6b 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  lback == null)..
2ded0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2dee0 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65          continue
2def0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
2df00 20 20 20 20 20 20 20 20 20 69 66 20 28 21 63 61           if (!ca
2df10 6c 6c 62 61 63 6b 28 0d 0a 20 20 20 20 20 20 20  llback(..       
2df20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2df30 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 66 72       rootKey, fr
2df40 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c 20 66 72 61  ameworkName, fra
2df50 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 2c 0d 0a  meworkVersion,..
2df60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2df70 20 20 20 20 20 20 20 20 20 20 20 20 70 6c 61 74              plat
2df80 66 6f 72 6d 4e 61 6d 65 2c 20 6e 75 6c 6c 2c 20  formName, null, 
2df90 63 6c 69 65 6e 74 44 61 74 61 2c 20 70 65 72 55  clientData, perU
2dfa0 73 65 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ser,..          
2dfb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2dfc0 20 20 77 6f 77 36 34 2c 20 74 68 72 6f 77 4f 6e    wow64, throwOn
2dfd0 4d 69 73 73 69 6e 67 2c 20 77 68 61 74 49 66 2c  Missing, whatIf,
2dfe0 20 76 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20   verbose,..     
2dff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e000 20 20 20 20 20 20 20 72 65 66 20 65 72 72 6f 72         ref error
2e010 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
2e020 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
2e030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e040 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
2e050 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2e060 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
2e070 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
2e080 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
2e090 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
2e0a0 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d  true;..        }
2e0b0 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65  ..        #endre
2e0c0 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20  gion....        
2e0d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e0e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e0f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e100 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e110 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
2e120 20 20 20 23 72 65 67 69 6f 6e 20 50 65 72 2d 56     #region Per-V
2e130 69 73 75 61 6c 20 53 74 75 64 69 6f 20 56 65 72  isual Studio Ver
2e140 73 69 6f 6e 20 48 61 6e 64 6c 69 6e 67 0d 0a 20  sion Handling.. 
2e150 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
2e160 74 61 74 69 63 20 76 6f 69 64 20 49 6e 69 74 69  tatic void Initi
2e170 61 6c 69 7a 65 56 73 4c 69 73 74 28 0d 0a 20 20  alizeVsList(..  
2e180 20 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65            MockRe
2e190 67 69 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65  gistryKey rootKe
2e1a0 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y,..            
2e1b0 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 63 6f  Configuration co
2e1c0 6e 66 69 67 75 72 61 74 69 6f 6e 2c 0d 0a 20 20  nfiguration,..  
2e1d0 20 20 20 20 20 20 20 20 20 20 72 65 66 20 56 73            ref Vs
2e1e0 4c 69 73 74 20 76 73 4c 69 73 74 0d 0a 20 20 20  List vsList..   
2e1f0 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
2e200 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
2e210 20 20 20 69 66 20 28 76 73 4c 69 73 74 20 3d 3d     if (vsList ==
2e220 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
2e230 20 20 20 20 20 20 20 20 76 73 4c 69 73 74 20 3d          vsList =
2e240 20 6e 65 77 20 56 73 4c 69 73 74 28 29 3b 0d 0a   new VsList();..
2e250 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
2e260 20 28 76 73 4c 69 73 74 2e 52 6f 6f 74 4b 65 79   (vsList.RootKey
2e270 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
2e280 20 20 20 20 20 20 20 20 20 20 20 76 73 4c 69 73             vsLis
2e290 74 2e 52 6f 6f 74 4b 65 79 20 3d 20 72 6f 6f 74  t.RootKey = root
2e2a0 4b 65 79 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  Key;....        
2e2b0 20 20 20 20 69 66 20 28 76 73 4c 69 73 74 2e 56      if (vsList.V
2e2c0 65 72 73 69 6f 6e 73 20 3d 3d 20 6e 75 6c 6c 29  ersions == null)
2e2d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
2e2e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2e2f0 20 76 73 4c 69 73 74 2e 56 65 72 73 69 6f 6e 73   vsList.Versions
2e300 20 3d 20 6e 65 77 20 56 65 72 73 69 6f 6e 4c 69   = new VersionLi
2e310 73 74 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  st();....       
2e320 20 20 20 20 20 20 20 20 20 69 66 20 28 28 63 6f           if ((co
2e330 6e 66 69 67 75 72 61 74 69 6f 6e 20 3d 3d 20 6e  nfiguration == n
2e340 75 6c 6c 29 20 7c 7c 20 21 63 6f 6e 66 69 67 75  ull) || !configu
2e350 72 61 74 69 6f 6e 2e 4e 6f 56 73 32 30 30 35 29  ration.NoVs2005)
2e360 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2e370 20 20 20 20 20 20 76 73 4c 69 73 74 2e 56 65 72        vsList.Ver
2e380 73 69 6f 6e 73 2e 41 64 64 28 6e 65 77 20 56 65  sions.Add(new Ve
2e390 72 73 69 6f 6e 28 38 2c 20 30 29 29 3b 20 2f 2f  rsion(8, 0)); //
2e3a0 20 32 30 30 35 0d 0a 0d 0a 20 20 20 20 20 20 20   2005....       
2e3b0 20 20 20 20 20 20 20 20 20 69 66 20 28 28 63 6f           if ((co
2e3c0 6e 66 69 67 75 72 61 74 69 6f 6e 20 3d 3d 20 6e  nfiguration == n
2e3d0 75 6c 6c 29 20 7c 7c 20 21 63 6f 6e 66 69 67 75  ull) || !configu
2e3e0 72 61 74 69 6f 6e 2e 4e 6f 56 73 32 30 30 38 29  ration.NoVs2008)
2e3f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2e400 20 20 20 20 20 20 76 73 4c 69 73 74 2e 56 65 72        vsList.Ver
2e410 73 69 6f 6e 73 2e 41 64 64 28 6e 65 77 20 56 65  sions.Add(new Ve
2e420 72 73 69 6f 6e 28 39 2c 20 30 29 29 3b 20 2f 2f  rsion(9, 0)); //
2e430 20 32 30 30 38 0d 0a 0d 0a 20 20 20 20 20 20 20   2008....       
2e440 20 20 20 20 20 20 20 20 20 69 66 20 28 28 63 6f           if ((co
2e450 6e 66 69 67 75 72 61 74 69 6f 6e 20 3d 3d 20 6e  nfiguration == n
2e460 75 6c 6c 29 20 7c 7c 20 21 63 6f 6e 66 69 67 75  ull) || !configu
2e470 72 61 74 69 6f 6e 2e 4e 6f 56 73 32 30 31 30 29  ration.NoVs2010)
2e480 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2e490 20 20 20 20 20 20 76 73 4c 69 73 74 2e 56 65 72        vsList.Ver
2e4a0 73 69 6f 6e 73 2e 41 64 64 28 6e 65 77 20 56 65  sions.Add(new Ve
2e4b0 72 73 69 6f 6e 28 31 30 2c 20 30 29 29 3b 2f 2f  rsion(10, 0));//
2e4c0 20 32 30 31 30 0d 0a 0d 0a 20 20 20 20 20 20 20   2010....       
2e4d0 20 20 20 20 20 20 20 20 20 69 66 20 28 28 63 6f           if ((co
2e4e0 6e 66 69 67 75 72 61 74 69 6f 6e 20 3d 3d 20 6e  nfiguration == n
2e4f0 75 6c 6c 29 20 7c 7c 20 21 63 6f 6e 66 69 67 75  ull) || !configu
2e500 72 61 74 69 6f 6e 2e 4e 6f 56 73 32 30 31 32 29  ration.NoVs2012)
2e510 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2e520 20 20 20 20 20 20 76 73 4c 69 73 74 2e 56 65 72        vsList.Ver
2e530 73 69 6f 6e 73 2e 41 64 64 28 6e 65 77 20 56 65  sions.Add(new Ve
2e540 72 73 69 6f 6e 28 31 31 2c 20 30 29 29 3b 2f 2f  rsion(11, 0));//
2e550 20 32 30 31 32 0d 0a 0d 0a 20 20 20 20 20 20 20   2012....       
2e560 20 20 20 20 20 20 20 20 20 69 66 20 28 28 63 6f           if ((co
2e570 6e 66 69 67 75 72 61 74 69 6f 6e 20 3d 3d 20 6e  nfiguration == n
2e580 75 6c 6c 29 20 7c 7c 20 21 63 6f 6e 66 69 67 75  ull) || !configu
2e590 72 61 74 69 6f 6e 2e 4e 6f 56 73 32 30 31 33 29  ration.NoVs2013)
2e5a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2e5b0 20 20 20 20 20 20 76 73 4c 69 73 74 2e 56 65 72        vsList.Ver
2e5c0 73 69 6f 6e 73 2e 41 64 64 28 6e 65 77 20 56 65  sions.Add(new Ve
2e5d0 72 73 69 6f 6e 28 31 32 2c 20 30 29 29 3b 2f 2f  rsion(12, 0));//
2e5e0 20 32 30 31 33 0d 0a 20 20 20 20 20 20 20 20 20   2013..         
2e5f0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d     }..        }.
2e600 0a 0d 0a 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e640 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e650 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72  //....        pr
2e660 69 76 61 74 65 20 73 74 61 74 69 63 20 62 6f 6f  ivate static boo
2e670 6c 20 48 61 76 65 56 73 56 65 72 73 69 6f 6e 44  l HaveVsVersionD
2e680 69 72 65 63 74 6f 72 79 28 0d 0a 20 20 20 20 20  irectory(..     
2e690 20 20 20 20 20 20 20 4d 6f 63 6b 52 65 67 69 73         MockRegis
2e6a0 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79 2c 0d  tryKey rootKey,.
2e6b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 56 65 72  .            Ver
2e6c0 73 69 6f 6e 20 76 73 56 65 72 73 69 6f 6e 2c 0d  sion vsVersion,.
2e6d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72  .            str
2e6e0 69 6e 67 20 73 75 66 66 69 78 2c 0d 0a 20 20 20  ing suffix,..   
2e6f0 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 70 65           bool pe
2e700 72 55 73 65 72 2c 0d 0a 20 20 20 20 20 20 20 20  rUser,..        
2e710 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34 2c 0d      bool wow64,.
2e720 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f  .            boo
2e730 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20  l whatIf,..     
2e740 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65 72 62         bool verb
2e750 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ose,..          
2e760 20 20 72 65 66 20 73 74 72 69 6e 67 20 69 6e 73    ref string ins
2e770 74 61 6c 6c 44 69 72 65 63 74 6f 72 79 0d 0a 20  tallDirectory.. 
2e780 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
2e790 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
2e7a0 20 20 20 20 20 69 66 20 28 76 73 56 65 72 73 69       if (vsVersi
2e7b0 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  on == null)..   
2e7c0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
2e7d0 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20  urn false;....  
2e7e0 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
2e7f0 20 6b 65 79 4e 61 6d 65 20 3d 20 47 65 74 56 73   keyName = GetVs
2e800 4b 65 79 4e 61 6d 65 28 76 73 56 65 72 73 69 6f  KeyName(vsVersio
2e810 6e 2c 20 73 75 66 66 69 78 2c 20 70 65 72 55 73  n, suffix, perUs
2e820 65 72 2c 20 77 6f 77 36 34 29 3b 0d 0a 0d 0a 20  er, wow64);.... 
2e830 20 20 20 20 20 20 20 20 20 20 20 75 73 69 6e 67             using
2e840 20 28 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65   (MockRegistryKe
2e850 79 20 6b 65 79 20 3d 20 52 65 67 69 73 74 72 79  y key = Registry
2e860 48 65 6c 70 65 72 2e 4f 70 65 6e 53 75 62 4b 65  Helper.OpenSubKe
2e870 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y(..            
2e880 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c          rootKey,
2e890 20 6b 65 79 4e 61 6d 65 2c 20 66 61 6c 73 65 2c   keyName, false,
2e8a0 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65   whatIf, verbose
2e8b0 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
2e8c0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
2e8d0 20 20 20 69 66 20 28 6b 65 79 20 3d 3d 20 6e 75     if (key == nu
2e8e0 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
2e8f0 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
2e900 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  false;....      
2e910 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74            object
2e920 20 76 61 6c 75 65 20 3d 20 52 65 67 69 73 74 72   value = Registr
2e930 79 48 65 6c 70 65 72 2e 47 65 74 56 61 6c 75 65  yHelper.GetValue
2e940 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
2e950 20 20 20 20 20 20 20 6b 65 79 2c 20 22 49 6e 73         key, "Ins
2e960 74 61 6c 6c 44 69 72 22 2c 20 6e 75 6c 6c 2c 20  tallDir", null, 
2e970 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29  whatIf, verbose)
2e980 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
2e990 20 20 20 20 20 69 66 20 28 21 28 76 61 6c 75 65       if (!(value
2e9a0 20 69 73 20 73 74 72 69 6e 67 29 29 0d 0a 20 20   is string))..  
2e9b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e9c0 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
2e9d0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
2e9e0 20 20 20 73 74 72 69 6e 67 20 64 69 72 65 63 74     string direct
2e9f0 6f 72 79 20 3d 20 28 73 74 72 69 6e 67 29 76 61  ory = (string)va
2ea00 6c 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  lue;....        
2ea10 20 20 20 20 20 20 20 20 69 66 20 28 53 74 72 69          if (Stri
2ea20 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79  ng.IsNullOrEmpty
2ea30 28 64 69 72 65 63 74 6f 72 79 29 29 0d 0a 20 20  (directory))..  
2ea40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ea50 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
2ea60 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
2ea70 20 20 20 69 66 20 28 21 44 69 72 65 63 74 6f 72     if (!Director
2ea80 79 2e 45 78 69 73 74 73 28 64 69 72 65 63 74 6f  y.Exists(directo
2ea90 72 79 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ry))..          
2eaa0 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
2eab0 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20   false;....     
2eac0 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
2ead0 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63  Ops.DebugAndTrac
2eae0 65 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e  e(TracePriority.
2eaf0 4c 6f 77 65 72 2c 0d 0a 20 20 20 20 20 20 20 20  Lower,..        
2eb00 20 20 20 20 20 20 20 20 20 20 20 20 64 65 62 75              debu
2eb10 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65  gCallback, trace
2eb20 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67  Callback, String
2eb30 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  .Format(..      
2eb40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 56                "V
2eb50 69 73 75 61 6c 20 53 74 75 64 69 6f 20 7b 30 7d  isual Studio {0}
2eb60 20 66 6f 75 6e 64 20 69 6e 20 64 69 72 65 63 74   found in direct
2eb70 6f 72 79 20 7b 31 7d 2e 22 2c 0d 0a 20 20 20 20  ory {1}.",..    
2eb80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2eb90 46 6f 72 44 69 73 70 6c 61 79 28 76 73 56 65 72  ForDisplay(vsVer
2eba0 73 69 6f 6e 29 2c 20 46 6f 72 44 69 73 70 6c 61  sion), ForDispla
2ebb0 79 28 64 69 72 65 63 74 6f 72 79 29 29 2c 0d 0a  y(directory)),..
2ebc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ebd0 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72      traceCategor
2ebe0 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
2ebf0 20 20 20 20 20 20 20 69 6e 73 74 61 6c 6c 44 69         installDi
2ec00 72 65 63 74 6f 72 79 20 3d 20 64 69 72 65 63 74  rectory = direct
2ec10 6f 72 79 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ory;..          
2ec20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75        return tru
2ec30 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
2ec40 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  }..        }....
2ec50 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
2ec60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ec70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ec80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ec90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
2eca0 0a 0d 0a 20 20 20 20 20 20 20 20 5b 4d 65 74 68  ...        [Meth
2ecb0 6f 64 49 6d 70 6c 28 4d 65 74 68 6f 64 49 6d 70  odImpl(MethodImp
2ecc0 6c 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e  lOptions.NoInlin
2ecd0 69 6e 67 29 5d 0d 0a 20 20 20 20 20 20 20 20 70  ing)]..        p
2ece0 72 69 76 61 74 65 20 73 74 61 74 69 63 20 62 6f  rivate static bo
2ecf0 6f 6c 20 46 6f 72 45 61 63 68 56 73 56 65 72 73  ol ForEachVsVers
2ed00 69 6f 6e 52 65 67 69 73 74 72 79 28 0d 0a 20 20  ionRegistry(..  
2ed10 20 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65            MockRe
2ed20 67 69 73 74 72 79 20 72 65 67 69 73 74 72 79 2c  gistry registry,
2ed30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 56 73  ..            Vs
2ed40 4c 69 73 74 20 76 73 4c 69 73 74 2c 0d 0a 20 20  List vsList,..  
2ed50 20 20 20 20 20 20 20 20 20 20 56 69 73 75 61 6c            Visual
2ed60 53 74 75 64 69 6f 52 65 67 69 73 74 72 79 43 61  StudioRegistryCa
2ed70 6c 6c 62 61 63 6b 20 63 61 6c 6c 62 61 63 6b 2c  llback callback,
2ed80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74  ..            st
2ed90 72 69 6e 67 20 73 75 66 66 69 78 2c 0d 0a 20 20  ring suffix,..  
2eda0 20 20 20 20 20 20 20 20 20 20 50 61 63 6b 61 67            Packag
2edb0 65 20 70 61 63 6b 61 67 65 2c 0d 0a 20 20 20 20  e package,..    
2edc0 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 63          object c
2edd0 6c 69 65 6e 74 44 61 74 61 2c 0d 0a 20 20 20 20  lientData,..    
2ede0 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 70 65 72          bool per
2edf0 55 73 65 72 2c 0d 0a 20 20 20 20 20 20 20 20 20  User,..         
2ee00 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34 2c 0d 0a     bool wow64,..
2ee10 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
2ee20 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 2c   throwOnMissing,
2ee30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f  ..            bo
2ee40 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20  ol whatIf,..    
2ee50 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65 72          bool ver
2ee60 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  bose,..         
2ee70 20 20 20 72 65 66 20 73 74 72 69 6e 67 20 65 72     ref string er
2ee80 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ror..           
2ee90 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20   )..        {.. 
2eea0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 72             if (r
2eeb0 65 67 69 73 74 72 79 20 3d 3d 20 6e 75 6c 6c 29  egistry == null)
2eec0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
2eed0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2eee0 20 65 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69   error = "invali
2eef0 64 20 72 65 67 69 73 74 72 79 22 3b 0d 0a 20 20  d registry";..  
2ef00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
2ef10 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20  turn false;..   
2ef20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
2ef30 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76 73            if (vs
2ef40 4c 69 73 74 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  List == null).. 
2ef50 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
2ef60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72                er
2ef70 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64 20 56  ror = "invalid V
2ef80 53 20 6c 69 73 74 22 3b 0d 0a 20 20 20 20 20 20  S list";..      
2ef90 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
2efa0 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20   false;..       
2efb0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
2efc0 20 20 20 20 20 20 4d 6f 63 6b 52 65 67 69 73 74        MockRegist
2efd0 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79 20 3d 20  ryKey rootKey = 
2efe0 76 73 4c 69 73 74 2e 52 6f 6f 74 4b 65 79 3b 0d  vsList.RootKey;.
2eff0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
2f000 66 20 28 72 6f 6f 74 4b 65 79 20 3d 3d 20 6e 75  f (rootKey == nu
2f010 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
2f020 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
2f030 20 20 20 20 65 72 72 6f 72 20 3d 20 22 69 6e 76      error = "inv
2f040 61 6c 69 64 20 72 6f 6f 74 20 6b 65 79 22 3b 0d  alid root key";.
2f050 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2f060 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
2f070 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
2f080 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
2f090 28 21 49 73 53 75 70 70 6f 72 74 65 64 52 6f 6f  (!IsSupportedRoo
2f0a0 74 4b 65 79 28 72 65 67 69 73 74 72 79 2c 20 72  tKey(registry, r
2f0b0 6f 6f 74 4b 65 79 29 29 0d 0a 20 20 20 20 20 20  ootKey))..      
2f0c0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
2f0d0 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d           error =
2f0e0 20 22 72 6f 6f 74 20 6b 65 79 20 6d 75 73 74 20   "root key must 
2f0f0 62 65 20 70 65 72 2d 75 73 65 72 20 6f 72 20 70  be per-user or p
2f100 65 72 2d 6d 61 63 68 69 6e 65 22 3b 0d 0a 20 20  er-machine";..  
2f110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
2f120 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20  turn false;..   
2f130 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
2f140 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76 73            if (vs
2f150 4c 69 73 74 2e 56 65 72 73 69 6f 6e 73 20 3d 3d  List.Versions ==
2f160 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
2f170 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
2f180 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22         error = "
2f190 6e 6f 20 56 53 20 76 65 72 73 69 6f 6e 73 20 66  no VS versions f
2f1a0 6f 75 6e 64 22 3b 0d 0a 20 20 20 20 20 20 20 20  ound";..        
2f1b0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
2f1c0 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alse;..         
2f1d0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
2f1e0 20 20 20 20 66 6f 72 65 61 63 68 20 28 56 65 72      foreach (Ver
2f1f0 73 69 6f 6e 20 76 73 56 65 72 73 69 6f 6e 20 69  sion vsVersion i
2f200 6e 20 76 73 4c 69 73 74 2e 56 65 72 73 69 6f 6e  n vsList.Version
2f210 73 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  s)..            
2f220 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
2f230 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75     TraceOps.Debu
2f240 67 41 6e 64 54 72 61 63 65 28 54 72 61 63 65 50  gAndTrace(TraceP
2f250 72 69 6f 72 69 74 79 2e 4c 6f 77 65 72 2c 0d 0a  riority.Lower,..
2f260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f270 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63      debugCallbac
2f280 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b  k, traceCallback
2f290 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  , String.Format(
2f2a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2f2b0 20 20 20 20 20 20 22 76 73 56 65 72 73 69 6f 6e        "vsVersion
2f2c0 20 3d 20 7b 30 7d 22 2c 20 46 6f 72 44 69 73 70   = {0}", ForDisp
2f2d0 6c 61 79 28 76 73 56 65 72 73 69 6f 6e 29 29 2c  lay(vsVersion)),
2f2e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2f2f0 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67        traceCateg
2f300 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
2f310 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
2f320 69 6e 73 74 61 6c 6c 44 69 72 65 63 74 6f 72 79  installDirectory
2f330 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20   = null;....    
2f340 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
2f350 21 48 61 76 65 56 73 56 65 72 73 69 6f 6e 44 69  !HaveVsVersionDi
2f360 72 65 63 74 6f 72 79 28 0d 0a 20 20 20 20 20 20  rectory(..      
2f370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f380 20 20 72 6f 6f 74 4b 65 79 2c 20 76 73 56 65 72    rootKey, vsVer
2f390 73 69 6f 6e 2c 20 73 75 66 66 69 78 2c 20 70 65  sion, suffix, pe
2f3a0 72 55 73 65 72 2c 20 77 6f 77 36 34 2c 20 77 68  rUser, wow64, wh
2f3b0 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20  atIf,..         
2f3c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 76                 v
2f3d0 65 72 62 6f 73 65 2c 20 72 65 66 20 69 6e 73 74  erbose, ref inst
2f3e0 61 6c 6c 44 69 72 65 63 74 6f 72 79 29 29 0d 0a  allDirectory))..
2f3f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f400 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
2f410 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e         TraceOps.
2f420 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 54 72  DebugAndTrace(Tr
2f430 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 2c  acePriority.Low,
2f440 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2f450 20 20 20 20 20 20 20 20 20 20 64 65 62 75 67 43            debugC
2f460 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61  allback, traceCa
2f470 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46  llback, String.F
2f480 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
2f490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f4a0 22 56 69 73 75 61 6c 20 53 74 75 64 69 6f 20 7b  "Visual Studio {
2f4b0 30 7d 20 6e 6f 74 20 66 6f 75 6e 64 2c 20 73 6b  0} not found, sk
2f4c0 69 70 70 69 6e 67 2e 2e 2e 22 2c 0d 0a 20 20 20  ipping...",..   
2f4d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f4e0 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28       ForDisplay(
2f4f0 76 73 56 65 72 73 69 6f 6e 29 29 2c 20 74 72 61  vsVersion)), tra
2f500 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
2f510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f520 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20      continue;.. 
2f530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
2f540 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2f550 20 20 20 20 69 66 20 28 63 61 6c 6c 62 61 63 6b      if (callback
2f560 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
2f570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
2f580 6f 6e 74 69 6e 75 65 3b 0d 0a 0d 0a 20 20 20 20  ontinue;....    
2f590 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
2f5a0 21 63 61 6c 6c 62 61 63 6b 28 0d 0a 20 20 20 20  !callback(..    
2f5b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f5c0 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 76 73 56      rootKey, vsV
2f5d0 65 72 73 69 6f 6e 2c 20 73 75 66 66 69 78 2c 20  ersion, suffix, 
2f5e0 70 61 63 6b 61 67 65 2c 20 69 6e 73 74 61 6c 6c  package, install
2f5f0 44 69 72 65 63 74 6f 72 79 2c 0d 0a 20 20 20 20  Directory,..    
2f600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f610 20 20 20 20 63 6c 69 65 6e 74 44 61 74 61 2c 20      clientData, 
2f620 70 65 72 55 73 65 72 2c 20 77 6f 77 36 34 2c 20  perUser, wow64, 
2f630 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 2c 20  throwOnMissing, 
2f640 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20  whatIf,..       
2f650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f660 20 76 65 72 62 6f 73 65 2c 20 72 65 66 20 65 72   verbose, ref er
2f670 72 6f 72 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ror))..         
2f680 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
2f690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
2f6a0 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20  turn false;..   
2f6b0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
2f6c0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
2f6d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
2f6e0 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20 20  urn true;..     
2f6f0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65     }..        #e
2f700 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20  ndregion....    
2f710 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20  ///////////.... 
2f760 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 43         #region C
2f770 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 46 69 6c  onfiguration Fil
2f780 65 20 48 61 6e 64 6c 69 6e 67 0d 0a 20 20 20 20  e Handling..    
2f790 20 20 20 20 5b 4d 65 74 68 6f 64 49 6d 70 6c 28      [MethodImpl(
2f7a0 4d 65 74 68 6f 64 49 6d 70 6c 4f 70 74 69 6f 6e  MethodImplOption
2f7b0 73 2e 4e 6f 49 6e 6c 69 6e 69 6e 67 29 5d 0d 0a  s.NoInlining)]..
2f7c0 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
2f7d0 73 74 61 74 69 63 20 62 6f 6f 6c 20 41 64 64 44  static bool AddD
2f7e0 62 50 72 6f 76 69 64 65 72 46 61 63 74 6f 72 79  bProviderFactory
2f7f0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  (..            s
2f800 74 72 69 6e 67 20 66 69 6c 65 4e 61 6d 65 2c 0d  tring fileName,.
2f810 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72  .            str
2f820 69 6e 67 20 69 6e 76 61 72 69 61 6e 74 4e 61 6d  ing invariantNam
2f830 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
2f840 73 74 72 69 6e 67 20 6e 61 6d 65 2c 0d 0a 20 20  string name,..  
2f850 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
2f860 20 64 65 73 63 72 69 70 74 69 6f 6e 2c 0d 0a 20   description,.. 
2f870 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
2f880 67 20 74 79 70 65 4e 61 6d 65 2c 0d 0a 20 20 20  g typeName,..   
2f890 20 20 20 20 20 20 20 20 20 41 73 73 65 6d 62 6c           Assembl
2f8a0 79 4e 61 6d 65 20 61 73 73 65 6d 62 6c 79 4e 61  yName assemblyNa
2f8b0 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me,..           
2f8c0 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20   bool whatIf,.. 
2f8d0 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
2f8e0 76 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20  verbose,..      
2f8f0 20 20 20 20 20 20 72 65 66 20 62 6f 6f 6c 20 73        ref bool s
2f900 61 76 65 64 2c 0d 0a 20 20 20 20 20 20 20 20 20  aved,..         
2f910 20 20 20 72 65 66 20 73 74 72 69 6e 67 20 65 72     ref string er
2f920 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ror..           
2f930 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20   )..        {.. 
2f940 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
2f950 64 69 72 74 79 20 3d 20 66 61 6c 73 65 3b 0d 0a  dirty = false;..
2f960 20 20 20 20 20 20 20 20 20 20 20 20 58 6d 6c 44              XmlD
2f970 6f 63 75 6d 65 6e 74 20 64 6f 63 75 6d 65 6e 74  ocument document
2f980 20 3d 20 6e 65 77 20 58 6d 6c 44 6f 63 75 6d 65   = new XmlDocume
2f990 6e 74 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  nt();....       
2f9a0 20 20 20 20 20 64 6f 63 75 6d 65 6e 74 2e 50 72       document.Pr
2f9b0 65 73 65 72 76 65 57 68 69 74 65 73 70 61 63 65  eserveWhitespace
2f9c0 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20   = true;..      
2f9d0 20 20 20 20 20 20 64 6f 63 75 6d 65 6e 74 2e 4c        document.L
2f9e0 6f 61 64 28 66 69 6c 65 4e 61 6d 65 29 3b 0d 0a  oad(fileName);..
2f9f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 58 6d  ..            Xm
2fa00 6c 45 6c 65 6d 65 6e 74 20 61 64 64 45 6c 65 6d  lElement addElem
2fa10 65 6e 74 20 3d 20 64 6f 63 75 6d 65 6e 74 2e 53  ent = document.S
2fa20 65 6c 65 63 74 53 69 6e 67 6c 65 4e 6f 64 65 28  electSingleNode(
2fa30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2fa40 20 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28    String.Format(
2fa50 58 50 61 74 68 46 6f 72 41 64 64 45 6c 65 6d 65  XPathForAddEleme
2fa60 6e 74 2c 20 69 6e 76 61 72 69 61 6e 74 4e 61 6d  nt, invariantNam
2fa70 65 29 29 20 61 73 20 58 6d 6c 45 6c 65 6d 65 6e  e)) as XmlElemen
2fa80 74 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  t;....          
2fa90 20 20 69 66 20 28 61 64 64 45 6c 65 6d 65 6e 74    if (addElement
2faa0 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
2fab0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
2fac0 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
2fad0 5b 5d 20 65 6c 65 6d 65 6e 74 4e 61 6d 65 73 20  [] elementNames 
2fae0 3d 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  = {..           
2faf0 20 20 20 20 20 20 20 20 20 22 73 79 73 74 65 6d           "system
2fb00 2e 64 61 74 61 22 2c 20 22 44 62 50 72 6f 76 69  .data", "DbProvi
2fb10 64 65 72 46 61 63 74 6f 72 69 65 73 22 0d 0a 20  derFactories".. 
2fb20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
2fb30 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
2fb40 20 20 20 20 20 58 6d 6c 45 6c 65 6d 65 6e 74 20       XmlElement 
2fb50 70 72 65 76 69 6f 75 73 45 6c 65 6d 65 6e 74 20  previousElement 
2fb60 3d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  =..             
2fb70 20 20 20 20 20 20 20 64 6f 63 75 6d 65 6e 74 2e         document.
2fb80 44 6f 63 75 6d 65 6e 74 45 6c 65 6d 65 6e 74 3b  DocumentElement;
2fb90 20 2f 2a 20 63 6f 6e 66 69 67 75 72 61 74 69 6f   /* configuratio
2fba0 6e 20 2a 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  n */....        
2fbb0 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20          foreach 
2fbc0 28 73 74 72 69 6e 67 20 65 6c 65 6d 65 6e 74 4e  (string elementN
2fbd0 61 6d 65 20 69 6e 20 65 6c 65 6d 65 6e 74 4e 61  ame in elementNa
2fbe0 6d 65 73 29 0d 0a 20 20 20 20 20 20 20 20 20 20  mes)..          
2fbf0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
2fc00 20 20 20 20 20 20 20 20 20 20 20 20 20 61 64 64               add
2fc10 45 6c 65 6d 65 6e 74 20 3d 20 70 72 65 76 69 6f  Element = previo
2fc20 75 73 45 6c 65 6d 65 6e 74 2e 53 65 6c 65 63 74  usElement.Select
2fc30 53 69 6e 67 6c 65 4e 6f 64 65 28 0d 0a 20 20 20  SingleNode(..   
2fc40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fc50 20 20 20 20 20 65 6c 65 6d 65 6e 74 4e 61 6d 65       elementName
2fc60 29 20 61 73 20 58 6d 6c 45 6c 65 6d 65 6e 74 3b  ) as XmlElement;
2fc70 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2fc80 20 20 20 20 20 20 20 20 69 66 20 28 61 64 64 45          if (addE
2fc90 6c 65 6d 65 6e 74 20 3d 3d 20 6e 75 6c 6c 29 0d  lement == null).
2fca0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2fcb0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
2fcc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fcd0 61 64 64 45 6c 65 6d 65 6e 74 20 3d 20 64 6f 63  addElement = doc
2fce0 75 6d 65 6e 74 2e 43 72 65 61 74 65 45 6c 65 6d  ument.CreateElem
2fcf0 65 6e 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ent(..          
2fd00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fd10 20 20 65 6c 65 6d 65 6e 74 4e 61 6d 65 2c 20 53    elementName, S
2fd20 74 72 69 6e 67 2e 45 6d 70 74 79 29 3b 0d 0a 0d  tring.Empty);...
2fd30 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2fd40 20 20 20 20 20 20 20 20 20 70 72 65 76 69 6f 75           previou
2fd50 73 45 6c 65 6d 65 6e 74 2e 41 70 70 65 6e 64 43  sElement.AppendC
2fd60 68 69 6c 64 28 61 64 64 45 6c 65 6d 65 6e 74 29  hild(addElement)
2fd70 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
2fd80 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
2fd90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fda0 70 72 65 76 69 6f 75 73 45 6c 65 6d 65 6e 74 20  previousElement 
2fdb0 3d 20 61 64 64 45 6c 65 6d 65 6e 74 3b 0d 0a 20  = addElement;.. 
2fdc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
2fdd0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2fde0 20 20 20 20 61 64 64 45 6c 65 6d 65 6e 74 20 3d      addElement =
2fdf0 20 64 6f 63 75 6d 65 6e 74 2e 43 72 65 61 74 65   document.Create
2fe00 45 6c 65 6d 65 6e 74 28 0d 0a 20 20 20 20 20 20  Element(..      
2fe10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 61                "a
2fe20 64 64 22 2c 20 53 74 72 69 6e 67 2e 45 6d 70 74  dd", String.Empt
2fe30 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
2fe40 20 20 20 20 20 20 20 70 72 65 76 69 6f 75 73 45         previousE
2fe50 6c 65 6d 65 6e 74 2e 41 70 70 65 6e 64 43 68 69  lement.AppendChi
2fe60 6c 64 28 61 64 64 45 6c 65 6d 65 6e 74 29 3b 0d  ld(addElement);.
2fe70 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
2fe80 20 20 20 64 69 72 74 79 20 3d 20 74 72 75 65 3b     dirty = true;
2fe90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
2fea0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
2feb0 66 20 28 21 53 74 72 69 6e 67 2e 45 71 75 61 6c  f (!String.Equal
2fec0 73 28 61 64 64 45 6c 65 6d 65 6e 74 2e 47 65 74  s(addElement.Get
2fed0 41 74 74 72 69 62 75 74 65 28 22 6e 61 6d 65 22  Attribute("name"
2fee0 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
2fef0 20 20 20 20 20 20 20 20 6e 61 6d 65 2c 20 53 74          name, St
2ff00 72 69 6e 67 43 6f 6d 70 61 72 69 73 6f 6e 2e 4f  ringComparison.O
2ff10 72 64 69 6e 61 6c 29 29 0d 0a 20 20 20 20 20 20  rdinal))..      
2ff20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
2ff30 20 20 20 20 20 20 20 20 20 61 64 64 45 6c 65 6d           addElem
2ff40 65 6e 74 2e 53 65 74 41 74 74 72 69 62 75 74 65  ent.SetAttribute
2ff50 28 22 6e 61 6d 65 22 2c 20 6e 61 6d 65 29 3b 0d  ("name", name);.
2ff60 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2ff70 20 64 69 72 74 79 20 3d 20 74 72 75 65 3b 0d 0a   dirty = true;..
2ff80 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
2ff90 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
2ffa0 28 21 53 74 72 69 6e 67 2e 45 71 75 61 6c 73 28  (!String.Equals(
2ffb0 61 64 64 45 6c 65 6d 65 6e 74 2e 47 65 74 41 74  addElement.GetAt
2ffc0 74 72 69 62 75 74 65 28 22 69 6e 76 61 72 69 61  tribute("invaria
2ffd0 6e 74 22 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  nt"),..         
2ffe0 20 20 20 20 20 20 20 20 20 20 20 69 6e 76 61 72             invar
2fff0 69 61 6e 74 4e 61 6d 65 2c 20 53 74 72 69 6e 67  iantName, String
30000 43 6f 6d 70 61 72 69 73 6f 6e 2e 4f 72 64 69 6e  Comparison.Ordin
30010 61 6c 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  al))..          
30020 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
30030 20 20 20 20 20 61 64 64 45 6c 65 6d 65 6e 74 2e       addElement.
30040 53 65 74 41 74 74 72 69 62 75 74 65 28 22 69 6e  SetAttribute("in
30050 76 61 72 69 61 6e 74 22 2c 20 69 6e 76 61 72 69  variant", invari
30060 61 6e 74 4e 61 6d 65 29 3b 0d 0a 20 20 20 20 20  antName);..     
30070 20 20 20 20 20 20 20 20 20 20 20 64 69 72 74 79             dirty
30080 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20   = true;..      
30090 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
300a0 20 20 20 20 20 20 20 69 66 20 28 21 53 74 72 69         if (!Stri
300b0 6e 67 2e 45 71 75 61 6c 73 28 61 64 64 45 6c 65  ng.Equals(addEle
300c0 6d 65 6e 74 2e 47 65 74 41 74 74 72 69 62 75 74  ment.GetAttribut
300d0 65 28 22 64 65 73 63 72 69 70 74 69 6f 6e 22 29  e("description")
300e0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
300f0 20 20 20 20 20 20 20 64 65 73 63 72 69 70 74 69         descripti
30100 6f 6e 2c 20 53 74 72 69 6e 67 43 6f 6d 70 61 72  on, StringCompar
30110 69 73 6f 6e 2e 4f 72 64 69 6e 61 6c 29 29 0d 0a  ison.Ordinal))..
30120 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
30130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61                 a
30140 64 64 45 6c 65 6d 65 6e 74 2e 53 65 74 41 74 74  ddElement.SetAtt
30150 72 69 62 75 74 65 28 22 64 65 73 63 72 69 70 74  ribute("descript
30160 69 6f 6e 22 2c 20 64 65 73 63 72 69 70 74 69 6f  ion", descriptio
30170 6e 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n);..           
30180 20 20 20 20 20 64 69 72 74 79 20 3d 20 74 72 75       dirty = tru
30190 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
301a0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
301b0 20 73 74 72 69 6e 67 20 66 75 6c 6c 54 79 70 65   string fullType
301c0 4e 61 6d 65 20 3d 20 53 74 72 69 6e 67 2e 46 6f  Name = String.Fo
301d0 72 6d 61 74 28 22 7b 30 7d 2c 20 7b 31 7d 22 2c  rmat("{0}, {1}",
301e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
301f0 20 20 74 79 70 65 4e 61 6d 65 2c 20 61 73 73 65    typeName, asse
30200 6d 62 6c 79 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20  mblyName);....  
30210 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21 53            if (!S
30220 74 72 69 6e 67 2e 45 71 75 61 6c 73 28 61 64 64  tring.Equals(add
30230 45 6c 65 6d 65 6e 74 2e 47 65 74 41 74 74 72 69  Element.GetAttri
30240 62 75 74 65 28 22 74 79 70 65 22 29 2c 0d 0a 20  bute("type"),.. 
30250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30260 20 20 20 66 75 6c 6c 54 79 70 65 4e 61 6d 65 2c     fullTypeName,
30270 20 53 74 72 69 6e 67 43 6f 6d 70 61 72 69 73 6f   StringCompariso
30280 6e 2e 4f 72 64 69 6e 61 6c 29 29 0d 0a 20 20 20  n.Ordinal))..   
30290 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
302a0 20 20 20 20 20 20 20 20 20 20 20 20 61 64 64 45              addE
302b0 6c 65 6d 65 6e 74 2e 53 65 74 41 74 74 72 69 62  lement.SetAttrib
302c0 75 74 65 28 22 74 79 70 65 22 2c 20 66 75 6c 6c  ute("type", full
302d0 54 79 70 65 4e 61 6d 65 29 3b 0d 0a 20 20 20 20  TypeName);..    
302e0 20 20 20 20 20 20 20 20 20 20 20 20 64 69 72 74              dirt
302f0 79 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20  y = true;..     
30300 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
30310 20 20 20 20 20 20 20 20 69 66 20 28 64 69 72 74          if (dirt
30320 79 20 7c 7c 20 77 68 61 74 49 66 29 0d 0a 20 20  y || whatIf)..  
30330 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
30340 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
30350 28 76 65 72 62 6f 73 65 29 0d 0a 20 20 20 20 20  (verbose)..     
30360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
30370 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64  raceOps.DebugAnd
30380 54 72 61 63 65 28 54 72 61 63 65 50 72 69 6f 72  Trace(TracePrior
30390 69 74 79 2e 48 69 67 68 65 73 74 2c 0d 0a 20 20  ity.Highest,..  
303a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
303b0 20 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62        debugCallb
303c0 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61  ack, traceCallba
303d0 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ck, String.Forma
303e0 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
303f0 20 20 20 20 20 20 20 20 20 20 20 20 22 61 64 64              "add
30400 45 6c 65 6d 65 6e 74 20 3d 20 7b 30 7d 22 2c 20  Element = {0}", 
30410 46 6f 72 44 69 73 70 6c 61 79 28 61 64 64 45 6c  ForDisplay(addEl
30420 65 6d 65 6e 74 29 29 2c 0d 0a 20 20 20 20 20 20  ement)),..      
30430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30440 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29    traceCategory)
30450 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
30460 20 20 20 20 20 69 66 20 28 21 77 68 61 74 49 66       if (!whatIf
30470 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
30480 20 20 20 20 20 20 20 64 6f 63 75 6d 65 6e 74 2e         document.
30490 53 61 76 65 28 66 69 6c 65 4e 61 6d 65 29 3b 0d  Save(fileName);.
304a0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
304b0 20 20 20 66 69 6c 65 73 4d 6f 64 69 66 69 65 64     filesModified
304c0 2b 2b 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ++;....         
304d0 20 20 20 20 20 20 20 73 61 76 65 64 20 3d 20 74         saved = t
304e0 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  rue;..          
304f0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
30500 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d     return true;.
30510 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....  
30520 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
30530 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30540 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30550 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30560 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
30570 0a 20 20 20 20 20 20 20 20 5b 4d 65 74 68 6f 64  .        [Method
30580 49 6d 70 6c 28 4d 65 74 68 6f 64 49 6d 70 6c 4f  Impl(MethodImplO
30590 70 74 69 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e 69 6e  ptions.NoInlinin
305a0 67 29 5d 0d 0a 20 20 20 20 20 20 20 20 70 72 69  g)]..        pri
305b0 76 61 74 65 20 73 74 61 74 69 63 20 62 6f 6f 6c  vate static bool
305c0 20 52 65 6d 6f 76 65 44 62 50 72 6f 76 69 64 65   RemoveDbProvide
305d0 72 46 61 63 74 6f 72 79 28 0d 0a 20 20 20 20 20  rFactory(..     
305e0 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 66 69         string fi
305f0 6c 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20  leName,..       
30600 20 20 20 20 20 73 74 72 69 6e 67 20 69 6e 76 61       string inva
30610 72 69 61 6e 74 4e 61 6d 65 2c 0d 0a 20 20 20 20  riantName,..    
30620 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61          bool wha
30630 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  tIf,..          
30640 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c 0d    bool verbose,.
30650 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66  .            ref
30660 20 62 6f 6f 6c 20 73 61 76 65 64 2c 0d 0a 20 20   bool saved,..  
30670 20 20 20 20 20 20 20 20 20 20 72 65 66 20 73 74            ref st
30680 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20 20  ring error..    
30690 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
306a0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
306b0 20 20 62 6f 6f 6c 20 64 69 72 74 79 20 3d 20 66    bool dirty = f
306c0 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alse;..         
306d0 20 20 20 58 6d 6c 44 6f 63 75 6d 65 6e 74 20 64     XmlDocument d
306e0 6f 63 75 6d 65 6e 74 20 3d 20 6e 65 77 20 58 6d  ocument = new Xm
306f0 6c 44 6f 63 75 6d 65 6e 74 28 29 3b 0d 0a 0d 0a  lDocument();....
30700 20 20 20 20 20 20 20 20 20 20 20 20 64 6f 63 75              docu
30710 6d 65 6e 74 2e 50 72 65 73 65 72 76 65 57 68 69  ment.PreserveWhi
30720 74 65 73 70 61 63 65 20 3d 20 74 72 75 65 3b 0d  tespace = true;.
30730 0a 20 20 20 20 20 20 20 20 20 20 20 20 64 6f 63  .            doc
30740 75 6d 65 6e 74 2e 4c 6f 61 64 28 66 69 6c 65 4e  ument.Load(fileN
30750 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ame);....       
30760 20 20 20 20 20 58 6d 6c 45 6c 65 6d 65 6e 74 20       XmlElement 
30770 61 64 64 45 6c 65 6d 65 6e 74 20 3d 20 64 6f 63  addElement = doc
30780 75 6d 65 6e 74 2e 53 65 6c 65 63 74 53 69 6e 67  ument.SelectSing
30790 6c 65 4e 6f 64 65 28 0d 0a 20 20 20 20 20 20 20  leNode(..       
307a0 20 20 20 20 20 20 20 20 20 53 74 72 69 6e 67 2e           String.
307b0 46 6f 72 6d 61 74 28 58 50 61 74 68 46 6f 72 41  Format(XPathForA
307c0 64 64 45 6c 65 6d 65 6e 74 2c 20 69 6e 76 61 72  ddElement, invar
307d0 69 61 6e 74 4e 61 6d 65 29 29 20 61 73 20 58 6d  iantName)) as Xm
307e0 6c 45 6c 65 6d 65 6e 74 3b 0d 0a 0d 0a 20 20 20  lElement;....   
307f0 20 20 20 20 20 20 20 20 20 69 66 20 28 61 64 64           if (add
30800 45 6c 65 6d 65 6e 74 20 21 3d 20 6e 75 6c 6c 29  Element != null)
30810 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
30820 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
30830 20 61 64 64 45 6c 65 6d 65 6e 74 2e 50 61 72 65   addElement.Pare
30840 6e 74 4e 6f 64 65 2e 52 65 6d 6f 76 65 43 68 69  ntNode.RemoveChi
30850 6c 64 28 61 64 64 45 6c 65 6d 65 6e 74 29 3b 0d  ld(addElement);.
30860 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
30870 20 64 69 72 74 79 20 3d 20 74 72 75 65 3b 0d 0a   dirty = true;..
30880 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
30890 0a 20 20 20 20 20 20 20 20 20 20 20 20 58 6d 6c  .            Xml
308a0 45 6c 65 6d 65 6e 74 20 72 65 6d 6f 76 65 45 6c  Element removeEl
308b0 65 6d 65 6e 74 20 3d 20 64 6f 63 75 6d 65 6e 74  ement = document
308c0 2e 53 65 6c 65 63 74 53 69 6e 67 6c 65 4e 6f 64  .SelectSingleNod
308d0 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
308e0 20 20 20 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61      String.Forma
308f0 74 28 58 50 61 74 68 46 6f 72 52 65 6d 6f 76 65  t(XPathForRemove
30900 45 6c 65 6d 65 6e 74 2c 20 69 6e 76 61 72 69 61  Element, invaria
30910 6e 74 4e 61 6d 65 29 29 20 61 73 20 58 6d 6c 45  ntName)) as XmlE
30920 6c 65 6d 65 6e 74 3b 0d 0a 0d 0a 20 20 20 20 20  lement;....     
30930 20 20 20 20 20 20 20 69 66 20 28 72 65 6d 6f 76         if (remov
30940 65 45 6c 65 6d 65 6e 74 20 21 3d 20 6e 75 6c 6c  eElement != null
30950 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
30960 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
30970 20 20 72 65 6d 6f 76 65 45 6c 65 6d 65 6e 74 2e    removeElement.
30980 50 61 72 65 6e 74 4e 6f 64 65 2e 52 65 6d 6f 76  ParentNode.Remov
30990 65 43 68 69 6c 64 28 72 65 6d 6f 76 65 45 6c 65  eChild(removeEle
309a0 6d 65 6e 74 29 3b 0d 0a 20 20 20 20 20 20 20 20  ment);..        
309b0 20 20 20 20 20 20 20 20 64 69 72 74 79 20 3d 20          dirty = 
309c0 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  true;..         
309d0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
309e0 20 20 20 20 69 66 20 28 64 69 72 74 79 20 7c 7c      if (dirty ||
309f0 20 77 68 61 74 49 66 29 0d 0a 20 20 20 20 20 20   whatIf)..      
30a00 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
30a10 20 20 20 20 20 20 20 20 20 69 66 20 28 76 65 72           if (ver
30a20 62 6f 73 65 29 0d 0a 20 20 20 20 20 20 20 20 20  bose)..         
30a30 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
30a40 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63  Ops.DebugAndTrac
30a50 65 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e  e(TracePriority.
30a60 48 69 67 68 65 73 74 2c 0d 0a 20 20 20 20 20 20  Highest,..      
30a70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30a80 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c    debugCallback,
30a90 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20   traceCallback, 
30aa0 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
30ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30ac0 20 20 20 20 20 20 20 20 22 61 64 64 45 6c 65 6d          "addElem
30ad0 65 6e 74 20 3d 20 7b 30 7d 2c 20 72 65 6d 6f 76  ent = {0}, remov
30ae0 65 45 6c 65 6d 65 6e 74 20 3d 20 7b 31 7d 22 2c  eElement = {1}",
30af0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
30b00 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73            ForDis
30b10 70 6c 61 79 28 61 64 64 45 6c 65 6d 65 6e 74 29  play(addElement)
30b20 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 72 65 6d  , ForDisplay(rem
30b30 6f 76 65 45 6c 65 6d 65 6e 74 29 29 2c 0d 0a 20  oveElement)),.. 
30b40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30b50 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65         traceCate
30b60 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
30b70 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21 77            if (!w
30b80 68 61 74 49 66 29 0d 0a 20 20 20 20 20 20 20 20  hatIf)..        
30b90 20 20 20 20 20 20 20 20 20 20 20 20 64 6f 63 75              docu
30ba0 6d 65 6e 74 2e 53 61 76 65 28 66 69 6c 65 4e 61  ment.Save(fileNa
30bb0 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  me);....        
30bc0 20 20 20 20 20 20 20 20 66 69 6c 65 73 4d 6f 64          filesMod
30bd0 69 66 69 65 64 2b 2b 3b 0d 0a 0d 0a 20 20 20 20  ified++;....    
30be0 20 20 20 20 20 20 20 20 20 20 20 20 73 61 76 65              save
30bf0 64 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20  d = true;..     
30c00 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
30c10 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74          return t
30c20 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  rue;..        }.
30c30 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
30c40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30c50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30c60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30c70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30c80 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72  //....        pr
30c90 69 76 61 74 65 20 73 74 61 74 69 63 20 62 6f 6f  ivate static boo
30ca0 6c 20 50 72 6f 63 65 73 73 44 62 50 72 6f 76 69  l ProcessDbProvi
30cb0 64 65 72 46 61 63 74 6f 72 79 28 0d 0a 20 20 20  derFactory(..   
30cc0 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
30cd0 66 69 6c 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20  fileName,..     
30ce0 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 69 6e         string in
30cf0 76 61 72 69 61 6e 74 4e 61 6d 65 2c 0d 0a 20 20  variantName,..  
30d00 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
30d10 20 6e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20   name,..        
30d20 20 20 20 20 73 74 72 69 6e 67 20 64 65 73 63 72      string descr
30d30 69 70 74 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20  iption,..       
30d40 20 20 20 20 20 73 74 72 69 6e 67 20 74 79 70 65       string type
30d50 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  Name,..         
30d60 20 20 20 41 73 73 65 6d 62 6c 79 4e 61 6d 65 20     AssemblyName 
30d70 61 73 73 65 6d 62 6c 79 4e 61 6d 65 2c 0d 0a 20  assemblyName,.. 
30d80 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
30d90 67 20 64 69 72 65 63 74 6f 72 79 2c 0d 0a 20 20  g directory,..  
30da0 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74            object
30db0 20 63 6c 69 65 6e 74 44 61 74 61 2c 0d 0a 20 20   clientData,..  
30dc0 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 70            bool p
30dd0 65 72 55 73 65 72 2c 0d 0a 20 20 20 20 20 20 20  erUser,..       
30de0 20 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34 2c       bool wow64,
30df0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f  ..            bo
30e00 6f 6c 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e  ol throwOnMissin
30e10 67 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  g,..            
30e20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20  bool whatIf,..  
30e30 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76            bool v
30e40 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20  erbose,..       
30e50 20 20 20 20 20 72 65 66 20 62 6f 6f 6c 20 73 61       ref bool sa
30e60 76 65 64 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ved,..          
30e70 20 20 72 65 66 20 73 74 72 69 6e 67 20 65 72 72    ref string err
30e80 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  or..            
30e90 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
30ea0 20 20 20 20 20 20 20 20 20 20 41 6e 79 50 61 69            AnyPai
30eb0 72 3c 73 74 72 69 6e 67 2c 20 62 6f 6f 6c 3e 20  r<string, bool> 
30ec0 70 61 69 72 20 3d 20 63 6c 69 65 6e 74 44 61 74  pair = clientDat
30ed0 61 20 61 73 20 41 6e 79 50 61 69 72 3c 73 74 72  a as AnyPair<str
30ee0 69 6e 67 2c 20 62 6f 6f 6c 3e 3b 0d 0a 0d 0a 20  ing, bool>;.... 
30ef0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 70             if (p
30f00 61 69 72 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  air == null)..  
30f10 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
30f20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
30f30 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64 20 66 72  or = "invalid fr
30f40 61 6d 65 77 6f 72 6b 20 63 6f 6e 66 69 67 20 63  amework config c
30f50 61 6c 6c 62 61 63 6b 20 64 61 74 61 22 3b 0d 0a  allback data";..
30f60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30f70 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20  return false;.. 
30f80 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
30f90 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
30fa0 70 61 69 72 2e 59 29 0d 0a 20 20 20 20 20 20 20  pair.Y)..       
30fb0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
30fc0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 52          return R
30fd0 65 6d 6f 76 65 44 62 50 72 6f 76 69 64 65 72 46  emoveDbProviderF
30fe0 61 63 74 6f 72 79 28 0d 0a 20 20 20 20 20 20 20  actory(..       
30ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 66 69 6c               fil
31000 65 4e 61 6d 65 2c 20 69 6e 76 61 72 69 61 6e 74  eName, invariant
31010 4e 61 6d 65 2c 20 77 68 61 74 49 66 2c 20 76 65  Name, whatIf, ve
31020 72 62 6f 73 65 2c 20 72 65 66 20 73 61 76 65 64  rbose, ref saved
31030 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
31040 20 20 20 20 20 20 20 72 65 66 20 65 72 72 6f 72         ref error
31050 29 20 26 26 0d 0a 20 20 20 20 20 20 20 20 20 20  ) &&..          
31060 20 20 20 20 20 20 41 64 64 44 62 50 72 6f 76 69        AddDbProvi
31070 64 65 72 46 61 63 74 6f 72 79 28 0d 0a 20 20 20  derFactory(..   
31080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31090 20 66 69 6c 65 4e 61 6d 65 2c 20 69 6e 76 61 72   fileName, invar
310a0 69 61 6e 74 4e 61 6d 65 2c 20 6e 61 6d 65 2c 20  iantName, name, 
310b0 64 65 73 63 72 69 70 74 69 6f 6e 2c 20 74 79 70  description, typ
310c0 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20  eName,..        
310d0 20 20 20 20 20 20 20 20 20 20 20 20 61 73 73 65              asse
310e0 6d 62 6c 79 4e 61 6d 65 2c 20 77 68 61 74 49 66  mblyName, whatIf
310f0 2c 20 76 65 72 62 6f 73 65 2c 20 72 65 66 20 73  , verbose, ref s
31100 61 76 65 64 2c 20 72 65 66 20 65 72 72 6f 72 29  aved, ref error)
31110 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
31120 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 65 6c  ..            el
31130 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  se..            
31140 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
31150 20 20 20 72 65 74 75 72 6e 20 52 65 6d 6f 76 65     return Remove
31160 44 62 50 72 6f 76 69 64 65 72 46 61 63 74 6f 72  DbProviderFactor
31170 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y(..            
31180 20 20 20 20 20 20 20 20 66 69 6c 65 4e 61 6d 65          fileName
31190 2c 20 69 6e 76 61 72 69 61 6e 74 4e 61 6d 65 2c  , invariantName,
311a0 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65   whatIf, verbose
311b0 2c 20 72 65 66 20 73 61 76 65 64 2c 0d 0a 20 20  , ref saved,..  
311c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
311d0 20 20 72 65 66 20 65 72 72 6f 72 29 3b 0d 0a 20    ref error);.. 
311e0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
311f0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
31200 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20   #endregion.... 
31210 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
31220 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31230 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31240 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31250 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
31260 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f  ..        #regio
31270 6e 20 41 73 73 65 6d 62 6c 79 20 46 6f 6c 64 65  n Assembly Folde
31280 72 73 20 48 61 6e 64 6c 69 6e 67 0d 0a 20 20 20  rs Handling..   
31290 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61       private sta
312a0 74 69 63 20 73 74 72 69 6e 67 20 47 65 74 41 73  tic string GetAs
312b0 73 65 6d 62 6c 79 46 6f 6c 64 65 72 73 4b 65 79  semblyFoldersKey
312c0 4e 61 6d 65 28 0d 0a 20 20 20 20 20 20 20 20 20  Name(..         
312d0 20 20 20 73 74 72 69 6e 67 20 66 72 61 6d 65 77     string framew
312e0 6f 72 6b 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20  orkName,..      
312f0 20 20 20 20 20 20 56 65 72 73 69 6f 6e 20 66 72        Version fr
31300 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 2c 0d  ameworkVersion,.
31310 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72  .            str
31320 69 6e 67 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65  ing platformName
31330 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  ,..            b
31340 6f 6f 6c 20 70 65 72 55 73 65 72 2c 0d 0a 20 20  ool perUser,..  
31350 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77            bool w
31360 6f 77 36 34 0d 0a 20 20 20 20 20 20 20 20 20 20  ow64..          
31370 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a    )..        {..
31380 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
31390 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e              // N
313a0 4f 54 45 3a 20 54 68 69 73 20 72 65 67 69 73 74  OTE: This regist
313b0 72 79 20 6b 65 79 20 61 70 70 65 61 72 73 20 74  ry key appears t
313c0 6f 20 61 6c 77 61 79 73 20 62 65 20 33 32 2d 62  o always be 32-b
313d0 69 74 20 6f 6e 6c 79 0d 0a 20 20 20 20 20 20 20  it only..       
313e0 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 28 69       //       (i
313f0 2e 65 2e 20 70 72 6f 62 61 62 6c 79 20 62 65 63  .e. probably bec
31400 61 75 73 65 20 69 74 20 69 73 20 6f 6e 6c 79 20  ause it is only 
31410 75 73 65 64 20 62 79 20 56 69 73 75 61 6c 0d 0a  used by Visual..
31420 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
31430 20 20 20 20 20 53 74 75 64 69 6f 2c 20 77 68 69       Studio, whi
31440 63 68 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20  ch is currently 
31450 61 6c 77 61 79 73 20 33 32 2d 62 69 74 20 6f 6e  always 32-bit on
31460 6c 79 29 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  ly)...          
31470 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
31480 20 20 73 74 72 69 6e 67 20 66 6f 72 6d 61 74 20    string format 
31490 3d 20 21 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c  = !String.IsNull
314a0 4f 72 45 6d 70 74 79 28 70 6c 61 74 66 6f 72 6d  OrEmpty(platform
314b0 4e 61 6d 65 29 20 3f 0d 0a 20 20 20 20 20 20 20  Name) ?..       
314c0 20 20 20 20 20 20 20 20 20 22 7b 30 7d 5c 5c 4d           "{0}\\M
314d0 69 63 72 6f 73 6f 66 74 5c 5c 7b 31 7d 5c 5c 76  icrosoft\\{1}\\v
314e0 7b 32 7d 5c 5c 7b 33 7d 5c 5c 41 73 73 65 6d 62  {2}\\{3}\\Assemb
314f0 6c 79 46 6f 6c 64 65 72 73 45 78 22 20 3a 0d 0a  lyFoldersEx" :..
31500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31510 22 7b 30 7d 5c 5c 4d 69 63 72 6f 73 6f 66 74 5c  "{0}\\Microsoft\
31520 5c 7b 31 7d 5c 5c 76 7b 32 7d 5c 5c 41 73 73 65  \{1}\\v{2}\\Asse
31530 6d 62 6c 79 46 6f 6c 64 65 72 73 45 78 22 3b 0d  mblyFoldersEx";.
31540 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  ...            r
31550 65 74 75 72 6e 20 53 74 72 69 6e 67 2e 46 6f 72  eturn String.For
31560 6d 61 74 28 66 6f 72 6d 61 74 2c 20 47 65 74 52  mat(format, GetR
31570 6f 6f 74 4b 65 79 4e 61 6d 65 28 70 65 72 55 73  ootKeyName(perUs
31580 65 72 2c 20 77 6f 77 36 34 29 2c 0d 0a 20 20 20  er, wow64),..   
31590 20 20 20 20 20 20 20 20 20 20 20 20 20 66 72 61               fra
315a0 6d 65 77 6f 72 6b 4e 61 6d 65 2c 20 66 72 61 6d  meworkName, fram
315b0 65 77 6f 72 6b 56 65 72 73 69 6f 6e 2c 20 70 6c  eworkVersion, pl
315c0 61 74 66 6f 72 6d 4e 61 6d 65 29 3b 0d 0a 20 20  atformName);..  
315d0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
315e0 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20  //////////....  
31630 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74        private st
31640 61 74 69 63 20 62 6f 6f 6c 20 41 64 64 54 6f 41  atic bool AddToA
31650 73 73 65 6d 62 6c 79 46 6f 6c 64 65 72 73 28 0d  ssemblyFolders(.
31660 0a 20 20 20 20 20 20 20 20 20 20 20 20 4d 6f 63  .            Moc
31670 6b 52 65 67 69 73 74 72 79 4b 65 79 20 72 6f 6f  kRegistryKey roo
31680 74 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20  tKey,..         
31690 20 20 20 73 74 72 69 6e 67 20 66 72 61 6d 65 77     string framew
316a0 6f 72 6b 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20  orkName,..      
316b0 20 20 20 20 20 20 56 65 72 73 69 6f 6e 20 66 72        Version fr
316c0 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 2c 0d  ameworkVersion,.
316d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72  .            str
316e0 69 6e 67 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65  ing platformName
316f0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  ,..            s
31700 74 72 69 6e 67 20 73 75 62 4b 65 79 4e 61 6d 65  tring subKeyName
31710 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  ,..            s
31720 74 72 69 6e 67 20 64 69 72 65 63 74 6f 72 79 2c  tring directory,
31730 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f  ..            bo
31740 6f 6c 20 70 65 72 55 73 65 72 2c 0d 0a 20 20 20  ol perUser,..   
31750 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 6f           bool wo
31760 77 36 34 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  w64,..          
31770 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a    bool whatIf,..
31780 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
31790 20 76 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20   verbose,..     
317a0 20 20 20 20 20 20 20 72 65 66 20 73 74 72 69 6e         ref strin
317b0 67 20 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 20  g error..       
317c0 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
317d0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  {..            s
317e0 74 72 69 6e 67 20 6b 65 79 4e 61 6d 65 20 3d 20  tring keyName = 
317f0 47 65 74 41 73 73 65 6d 62 6c 79 46 6f 6c 64 65  GetAssemblyFolde
31800 72 73 4b 65 79 4e 61 6d 65 28 0d 0a 20 20 20 20  rsKeyName(..    
31810 20 20 20 20 20 20 20 20 20 20 20 20 66 72 61 6d              fram
31820 65 77 6f 72 6b 4e 61 6d 65 2c 20 66 72 61 6d 65  eworkName, frame
31830 77 6f 72 6b 56 65 72 73 69 6f 6e 2c 20 70 6c 61  workVersion, pla
31840 74 66 6f 72 6d 4e 61 6d 65 2c 20 70 65 72 55 73  tformName, perUs
31850 65 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  er,..           
31860 20 20 20 20 20 77 6f 77 36 34 29 3b 0d 0a 0d 0a       wow64);....
31870 20 20 20 20 20 20 20 20 20 20 20 20 75 73 69 6e              usin
31880 67 20 28 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b  g (MockRegistryK
31890 65 79 20 6b 65 79 20 3d 20 52 65 67 69 73 74 72  ey key = Registr
318a0 79 48 65 6c 70 65 72 2e 4f 70 65 6e 53 75 62 4b  yHelper.OpenSubK
318b0 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ey(..           
318c0 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79           rootKey
318d0 2c 20 6b 65 79 4e 61 6d 65 2c 20 74 72 75 65 2c  , keyName, true,
318e0 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65   whatIf, verbose
318f0 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
31900 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
31910 20 20 20 69 66 20 28 6b 65 79 20 3d 3d 20 6e 75     if (key == nu
31920 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
31930 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
31940 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
31950 72 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61  r = String.Forma
31960 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
31970 20 20 20 20 20 20 20 20 20 20 20 20 22 63 6f 75              "cou
31980 6c 64 20 6e 6f 74 20 6f 70 65 6e 20 72 65 67 69  ld not open regi
31990 73 74 72 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c 7b  stry key: {0}\\{
319a0 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  1}",..          
319b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f                ro
319c0 6f 74 4b 65 79 2c 20 6b 65 79 4e 61 6d 65 29 3b  otKey, keyName);
319d0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
319e0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
319f0 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alse;..         
31a00 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
31a10 20 20 20 20 20 20 20 20 20 20 20 20 75 73 69 6e              usin
31a20 67 20 28 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b  g (MockRegistryK
31a30 65 79 20 73 75 62 4b 65 79 20 3d 20 52 65 67 69  ey subKey = Regi
31a40 73 74 72 79 48 65 6c 70 65 72 2e 43 72 65 61 74  stryHelper.Creat
31a50 65 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20  eSubKey(..      
31a60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31a70 20 20 6b 65 79 2c 20 73 75 62 4b 65 79 4e 61 6d    key, subKeyNam
31a80 65 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f  e, whatIf, verbo
31a90 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  se))..          
31aa0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
31ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
31ac0 28 73 75 62 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29  (subKey == null)
31ad0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
31ae0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
31af0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31b00 20 65 72 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e   error = String.
31b10 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
31b20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31b30 20 20 20 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20       "could not 
31b40 63 72 65 61 74 65 20 72 65 67 69 73 74 72 79 20  create registry 
31b50 6b 65 79 3a 20 7b 30 7d 5c 5c 7b 31 7d 22 2c 0d  key: {0}\\{1}",.
31b60 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
31b70 20 20 20 20 20 20 20 20 20 20 20 20 20 6b 65 79               key
31b80 2c 20 73 75 62 4b 65 79 4e 61 6d 65 29 3b 0d 0a  , subKeyName);..
31b90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
31ba0 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
31bb0 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20   false;..       
31bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
31bd0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
31be0 20 20 20 20 20 20 52 65 67 69 73 74 72 79 48 65        RegistryHe
31bf0 6c 70 65 72 2e 53 65 74 56 61 6c 75 65 28 0d 0a  lper.SetValue(..
31c00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31c10 20 20 20 20 20 20 20 20 73 75 62 4b 65 79 2c 20          subKey, 
31c20 6e 75 6c 6c 2c 20 64 69 72 65 63 74 6f 72 79 2c  null, directory,
31c30 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65   whatIf, verbose
31c40 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
31c50 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
31c60 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
31c70 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b      return true;
31c80 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }.... 
31c90 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
31ca0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31cb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31cc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31cd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
31ce0 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
31cf0 65 20 73 74 61 74 69 63 20 62 6f 6f 6c 20 52 65  e static bool Re
31d00 6d 6f 76 65 46 72 6f 6d 41 73 73 65 6d 62 6c 79  moveFromAssembly
31d10 46 6f 6c 64 65 72 73 28 0d 0a 20 20 20 20 20 20  Folders(..      
31d20 20 20 20 20 20 20 4d 6f 63 6b 52 65 67 69 73 74        MockRegist
31d30 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a  ryKey rootKey,..
31d40 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
31d50 6e 67 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65  ng frameworkName
31d60 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 56  ,..            V
31d70 65 72 73 69 6f 6e 20 66 72 61 6d 65 77 6f 72 6b  ersion framework
31d80 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20  Version,..      
31d90 20 20 20 20 20 20 73 74 72 69 6e 67 20 70 6c 61        string pla
31da0 74 66 6f 72 6d 4e 61 6d 65 2c 0d 0a 20 20 20 20  tformName,..    
31db0 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 73          string s
31dc0 75 62 4b 65 79 4e 61 6d 65 2c 0d 0a 20 20 20 20  ubKeyName,..    
31dd0 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 70 65 72          bool per
31de0 55 73 65 72 2c 0d 0a 20 20 20 20 20 20 20 20 20  User,..         
31df0 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34 2c 0d 0a     bool wow64,..
31e00 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
31e10 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 2c   throwOnMissing,
31e20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f  ..            bo
31e30 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20  ol whatIf,..    
31e40 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65 72          bool ver
31e50 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  bose,..         
31e60 20 20 20 72 65 66 20 73 74 72 69 6e 67 20 65 72     ref string er
31e70 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ror..           
31e80 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20   )..        {.. 
31e90 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
31ea0 67 20 6b 65 79 4e 61 6d 65 20 3d 20 47 65 74 41  g keyName = GetA
31eb0 73 73 65 6d 62 6c 79 46 6f 6c 64 65 72 73 4b 65  ssemblyFoldersKe
31ec0 79 4e 61 6d 65 28 0d 0a 20 20 20 20 20 20 20 20  yName(..        
31ed0 20 20 20 20 20 20 20 20 66 72 61 6d 65 77 6f 72          framewor
31ee0 6b 4e 61 6d 65 2c 20 66 72 61 6d 65 77 6f 72 6b  kName, framework
31ef0 56 65 72 73 69 6f 6e 2c 20 70 6c 61 74 66 6f 72  Version, platfor
31f00 6d 4e 61 6d 65 2c 20 70 65 72 55 73 65 72 2c 0d  mName, perUser,.
31f10 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
31f20 20 77 6f 77 36 34 29 3b 0d 0a 0d 0a 20 20 20 20   wow64);....    
31f30 20 20 20 20 20 20 20 20 75 73 69 6e 67 20 28 4d          using (M
31f40 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 6b  ockRegistryKey k
31f50 65 79 20 3d 20 52 65 67 69 73 74 72 79 48 65 6c  ey = RegistryHel
31f60 70 65 72 2e 4f 70 65 6e 53 75 62 4b 65 79 28 0d  per.OpenSubKey(.
31f70 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
31f80 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 6b 65       rootKey, ke
31f90 79 4e 61 6d 65 2c 20 74 72 75 65 2c 20 77 68 61  yName, true, wha
31fa0 74 49 66 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a  tIf, verbose))..
31fb0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
31fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
31fd0 66 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d  f (key == null).
31fe0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
31ff0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
32000 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20          error = 
32010 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
32020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32030 20 20 20 20 20 20 20 20 22 63 6f 75 6c 64 20 6e          "could n
32040 6f 74 20 6f 70 65 6e 20 72 65 67 69 73 74 72 79  ot open registry
32050 20 6b 65 79 3a 20 7b 30 7d 5c 5c 7b 31 7d 22 2c   key: {0}\\{1}",
32060 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
32070 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65            rootKe
32080 79 2c 20 6b 65 79 4e 61 6d 65 29 3b 0d 0a 0d 0a  y, keyName);....
32090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
320a0 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
320b0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
320c0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
320d0 20 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79          Registry
320e0 48 65 6c 70 65 72 2e 44 65 6c 65 74 65 53 75 62  Helper.DeleteSub
320f0 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20  Key(..          
32100 20 20 20 20 20 20 20 20 20 20 6b 65 79 2c 20 73            key, s
32110 75 62 4b 65 79 4e 61 6d 65 2c 20 74 68 72 6f 77  ubKeyName, throw
32120 4f 6e 4d 69 73 73 69 6e 67 2c 20 77 68 61 74 49  OnMissing, whatI
32130 66 2c 20 76 65 72 62 6f 73 65 29 3b 0d 0a 20 20  f, verbose);..  
32140 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
32150 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
32160 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20  n true;..       
32170 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f   }....        //
32180 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32190 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
321a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
321b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
321c0 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
321d0 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20   private static 
321e0 62 6f 6f 6c 20 50 72 6f 63 65 73 73 41 73 73 65  bool ProcessAsse
321f0 6d 62 6c 79 46 6f 6c 64 65 72 73 28 0d 0a 20 20  mblyFolders(..  
32200 20 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65            MockRe
32210 67 69 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65  gistryKey rootKe
32220 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y,..            
32230 73 74 72 69 6e 67 20 66 72 61 6d 65 77 6f 72 6b  string framework
32240 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  Name,..         
32250 20 20 20 56 65 72 73 69 6f 6e 20 66 72 61 6d 65     Version frame
32260 77 6f 72 6b 56 65 72 73 69 6f 6e 2c 0d 0a 20 20  workVersion,..  
32270 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
32280 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 2c 0d 0a   platformName,..
32290 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
322a0 6e 67 20 64 69 72 65 63 74 6f 72 79 2c 0d 0a 20  ng directory,.. 
322b0 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63             objec
322c0 74 20 63 6c 69 65 6e 74 44 61 74 61 2c 0d 0a 20  t clientData,.. 
322d0 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
322e0 70 65 72 55 73 65 72 2c 0d 0a 20 20 20 20 20 20  perUser,..      
322f0 20 20 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34        bool wow64
32300 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  ,..            b
32310 6f 6f 6c 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69  ool throwOnMissi
32320 6e 67 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ng,..           
32330 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20   bool whatIf,.. 
32340 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
32350 76 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20  verbose,..      
32360 20 20 20 20 20 20 72 65 66 20 73 74 72 69 6e 67        ref string
32370 20 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20   error..        
32380 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b      )..        {
32390 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 41 6e  ..            An
323a0 79 50 61 69 72 3c 73 74 72 69 6e 67 2c 20 62 6f  yPair<string, bo
323b0 6f 6c 3e 20 70 61 69 72 20 3d 20 63 6c 69 65 6e  ol> pair = clien
323c0 74 44 61 74 61 20 61 73 20 41 6e 79 50 61 69 72  tData as AnyPair
323d0 3c 73 74 72 69 6e 67 2c 20 62 6f 6f 6c 3e 3b 0d  <string, bool>;.
323e0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
323f0 66 20 28 70 61 69 72 20 3d 3d 20 6e 75 6c 6c 29  f (pair == null)
32400 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
32410 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
32420 20 65 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69   error = "invali
32430 64 20 66 72 61 6d 65 77 6f 72 6b 20 63 61 6c 6c  d framework call
32440 62 61 63 6b 20 64 61 74 61 22 3b 0d 0a 20 20 20  back data";..   
32450 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
32460 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20  urn false;..    
32470 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
32480 20 20 20 20 20 20 20 20 20 69 66 20 28 70 61 69           if (pai
32490 72 2e 59 29 0d 0a 20 20 20 20 20 20 20 20 20 20  r.Y)..          
324a0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
324b0 20 20 20 20 20 72 65 74 75 72 6e 20 52 65 6d 6f       return Remo
324c0 76 65 46 72 6f 6d 41 73 73 65 6d 62 6c 79 46 6f  veFromAssemblyFo
324d0 6c 64 65 72 73 28 0d 0a 20 20 20 20 20 20 20 20  lders(..        
324e0 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74              root
324f0 4b 65 79 2c 20 66 72 61 6d 65 77 6f 72 6b 4e 61  Key, frameworkNa
32500 6d 65 2c 20 66 72 61 6d 65 77 6f 72 6b 56 65 72  me, frameworkVer
32510 73 69 6f 6e 2c 20 70 6c 61 74 66 6f 72 6d 4e 61  sion, platformNa
32520 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me,..           
32530 20 20 20 20 20 20 20 20 20 4c 65 67 61 63 79 50           LegacyP
32540 72 6f 6a 65 63 74 4e 61 6d 65 2c 20 70 65 72 55  rojectName, perU
32550 73 65 72 2c 20 77 6f 77 36 34 2c 20 66 61 6c 73  ser, wow64, fals
32560 65 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f  e, whatIf, verbo
32570 73 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se,..           
32580 20 20 20 20 20 20 20 20 20 72 65 66 20 65 72 72           ref err
32590 6f 72 29 20 26 26 0d 0a 20 20 20 20 20 20 20 20  or) &&..        
325a0 20 20 20 20 20 20 20 20 41 64 64 54 6f 41 73 73          AddToAss
325b0 65 6d 62 6c 79 46 6f 6c 64 65 72 73 28 0d 0a 20  emblyFolders(.. 
325c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
325d0 20 20 20 72 6f 6f 74 4b 65 79 2c 20 66 72 61 6d     rootKey, fram
325e0 65 77 6f 72 6b 4e 61 6d 65 2c 20 66 72 61 6d 65  eworkName, frame
325f0 77 6f 72 6b 56 65 72 73 69 6f 6e 2c 20 70 6c 61  workVersion, pla
32600 74 66 6f 72 6d 4e 61 6d 65 2c 0d 0a 20 20 20 20  tformName,..    
32610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32620 50 72 6f 6a 65 63 74 4e 61 6d 65 2c 20 70 61 69  ProjectName, pai
32630 72 2e 58 2c 20 70 65 72 55 73 65 72 2c 20 77 6f  r.X, perUser, wo
32640 77 36 34 2c 20 77 68 61 74 49 66 2c 20 76 65 72  w64, whatIf, ver
32650 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  bose,..         
32660 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20 65             ref e
32670 72 72 6f 72 29 3b 0d 0a 20 20 20 20 20 20 20 20  rror);..        
32680 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
32690 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20     else..       
326a0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
326b0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 52          return R
326c0 65 6d 6f 76 65 46 72 6f 6d 41 73 73 65 6d 62 6c  emoveFromAssembl
326d0 79 46 6f 6c 64 65 72 73 28 0d 0a 20 20 20 20 20  yFolders(..     
326e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
326f0 6f 6f 74 4b 65 79 2c 20 66 72 61 6d 65 77 6f 72  ootKey, framewor
32700 6b 4e 61 6d 65 2c 20 66 72 61 6d 65 77 6f 72 6b  kName, framework
32710 56 65 72 73 69 6f 6e 2c 20 70 6c 61 74 66 6f 72  Version, platfor
32720 6d 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20  mName,..        
32730 20 20 20 20 20 20 20 20 20 20 20 20 50 72 6f 6a              Proj
32740 65 63 74 4e 61 6d 65 2c 20 70 65 72 55 73 65 72  ectName, perUser
32750 2c 20 77 6f 77 36 34 2c 20 74 68 72 6f 77 4f 6e  , wow64, throwOn
32760 4d 69 73 73 69 6e 67 2c 20 77 68 61 74 49 66 2c  Missing, whatIf,
32770 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
32780 20 20 20 20 20 20 76 65 72 62 6f 73 65 2c 20 72        verbose, r
32790 65 66 20 65 72 72 6f 72 29 3b 0d 0a 20 20 20 20  ef error);..    
327a0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
327b0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65     }..        #e
327c0 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20  ndregion....    
327d0 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
327e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
327f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32800 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32810 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
32820 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 56         #region V
32830 69 73 75 61 6c 20 53 74 75 64 69 6f 20 48 61 6e  isual Studio Han
32840 64 6c 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 70  dling..        p
32850 72 69 76 61 74 65 20 73 74 61 74 69 63 20 73 74  rivate static st
32860 72 69 6e 67 20 47 65 74 56 73 52 6f 6f 74 4b 65  ring GetVsRootKe
32870 79 4e 61 6d 65 28 0d 0a 20 20 20 20 20 20 20 20  yName(..        
32880 20 20 20 20 62 6f 6f 6c 20 70 65 72 55 73 65 72      bool perUser
32890 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  ,..            b
328a0 6f 6f 6c 20 77 6f 77 36 34 0d 0a 20 20 20 20 20  ool wow64..     
328b0 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
328c0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
328d0 20 72 65 74 75 72 6e 20 53 74 72 69 6e 67 2e 46   return String.F
328e0 6f 72 6d 61 74 28 22 7b 30 7d 5c 5c 4d 69 63 72  ormat("{0}\\Micr
328f0 6f 73 6f 66 74 5c 5c 56 69 73 75 61 6c 53 74 75  osoft\\VisualStu
32900 64 69 6f 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  dio",..         
32910 20 20 20 20 20 20 20 47 65 74 52 6f 6f 74 4b 65         GetRootKe
32920 79 4e 61 6d 65 28 70 65 72 55 73 65 72 2c 20 77  yName(perUser, w
32930 6f 77 36 34 29 29 3b 0d 0a 20 20 20 20 20 20 20  ow64));..       
32940 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f   }....        //
32950 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32960 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32970 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32980 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32990 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
329a0 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20   private static 
329b0 73 74 72 69 6e 67 20 47 65 74 56 73 4b 65 79 4e  string GetVsKeyN
329c0 61 6d 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ame(..          
329d0 20 20 56 65 72 73 69 6f 6e 20 76 73 56 65 72 73    Version vsVers
329e0 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ion,..          
329f0 20 20 73 74 72 69 6e 67 20 73 75 66 66 69 78 2c    string suffix,
32a00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f  ..            bo
32a10 6f 6c 20 70 65 72 55 73 65 72 2c 0d 0a 20 20 20  ol perUser,..   
32a20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 6f           bool wo
32a30 77 36 34 0d 0a 20 20 20 20 20 20 20 20 20 20 20  w64..           
32a40 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20   )..        {.. 
32a50 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76             if (v
32a60 73 56 65 72 73 69 6f 6e 20 3d 3d 20 6e 75 6c 6c  sVersion == null
32a70 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
32a80 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d     return null;.
32a90 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  ...            r
32aa0 65 74 75 72 6e 20 53 74 72 69 6e 67 2e 46 6f 72  eturn String.For
32ab0 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
32ac0 20 20 20 20 20 20 22 7b 30 7d 5c 5c 7b 31 7d 7b        "{0}\\{1}{
32ad0 32 7d 22 2c 20 47 65 74 56 73 52 6f 6f 74 4b 65  2}", GetVsRootKe
32ae0 79 4e 61 6d 65 28 70 65 72 55 73 65 72 2c 20 77  yName(perUser, w
32af0 6f 77 36 34 29 2c 20 76 73 56 65 72 73 69 6f 6e  ow64), vsVersion
32b00 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
32b10 20 20 20 73 75 66 66 69 78 29 3b 0d 0a 20 20 20     suffix);..   
32b20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
32b30 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
32b40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32b50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32b60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32b70 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
32b80 20 20 20 20 20 23 72 65 67 69 6f 6e 20 56 69 73       #region Vis
32b90 75 61 6c 20 53 74 75 64 69 6f 20 44 61 74 61 20  ual Studio Data 
32ba0 53 6f 75 72 63 65 20 48 61 6e 64 6c 69 6e 67 0d  Source Handling.
32bb0 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65  .        private
32bc0 20 73 74 61 74 69 63 20 62 6f 6f 6c 20 41 64 64   static bool Add
32bd0 56 73 44 61 74 61 53 6f 75 72 63 65 28 0d 0a 20  VsDataSource(.. 
32be0 20 20 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52             MockR
32bf0 65 67 69 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b  egistryKey rootK
32c00 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ey,..           
32c10 20 56 65 72 73 69 6f 6e 20 76 73 56 65 72 73 69   Version vsVersi
32c20 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  on,..           
32c30 20 73 74 72 69 6e 67 20 73 75 66 66 69 78 2c 0d   string suffix,.
32c40 0a 20 20 20 20 20 20 20 20 20 20 20 20 50 61 63  .            Pac
32c50 6b 61 67 65 20 70 61 63 6b 61 67 65 2c 0d 0a 20  kage package,.. 
32c60 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
32c70 70 65 72 55 73 65 72 2c 0d 0a 20 20 20 20 20 20  perUser,..      
32c80 20 20 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34        bool wow64
32c90 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  ,..            b
32ca0 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20  ool whatIf,..   
32cb0 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65           bool ve
32cc0 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20 20  rbose,..        
32cd0 20 20 20 20 72 65 66 20 73 74 72 69 6e 67 20 65      ref string e
32ce0 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20  rror..          
32cf0 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a    )..        {..
32d00 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
32d10 76 73 56 65 72 73 69 6f 6e 20 3d 3d 20 6e 75 6c  vsVersion == nul
32d20 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
32d30 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
32d40 20 20 20 65 72 72 6f 72 20 3d 20 22 69 6e 76 61     error = "inva
32d50 6c 69 64 20 56 53 20 76 65 72 73 69 6f 6e 22 3b  lid VS version";
32d60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
32d70 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
32d80 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
32d90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
32da0 20 28 70 61 63 6b 61 67 65 20 3d 3d 20 6e 75 6c   (package == nul
32db0 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
32dc0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
32dd0 20 20 20 65 72 72 6f 72 20 3d 20 22 69 6e 76 61     error = "inva
32de0 6c 69 64 20 56 53 20 70 61 63 6b 61 67 65 22 3b  lid VS package";
32df0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
32e00 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
32e10 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
32e20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74  ..            st
32e30 72 69 6e 67 20 6b 65 79 4e 61 6d 65 20 3d 20 47  ring keyName = G
32e40 65 74 56 73 4b 65 79 4e 61 6d 65 28 76 73 56 65  etVsKeyName(vsVe
32e50 72 73 69 6f 6e 2c 20 73 75 66 66 69 78 2c 20 70  rsion, suffix, p
32e60 65 72 55 73 65 72 2c 20 77 6f 77 36 34 29 3b 0d  erUser, wow64);.
32e70 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 75  ...            u
32e80 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73 74  sing (MockRegist
32e90 72 79 4b 65 79 20 6b 65 79 20 3d 20 52 65 67 69  ryKey key = Regi
32ea0 73 74 72 79 48 65 6c 70 65 72 2e 4f 70 65 6e 53  stryHelper.OpenS
32eb0 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20  ubKey(..        
32ec0 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74              root
32ed0 4b 65 79 2c 20 6b 65 79 4e 61 6d 65 2c 20 66 61  Key, keyName, fa
32ee0 6c 73 65 2c 20 77 68 61 74 49 66 2c 20 76 65 72  lse, whatIf, ver
32ef0 62 6f 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20  bose))..        
32f00 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
32f10 20 20 20 20 20 20 20 69 66 20 28 6b 65 79 20 3d         if (key =
32f20 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
32f30 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
32f40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32f50 65 72 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46  error = String.F
32f60 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
32f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32f80 22 63 6f 75 6c 64 20 6e 6f 74 20 6f 70 65 6e 20  "could not open 
32f90 72 65 67 69 73 74 72 79 20 6b 65 79 3a 20 7b 30  registry key: {0
32fa0 7d 5c 5c 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20  }\\{1}",..      
32fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32fc0 20 20 72 6f 6f 74 4b 65 79 2c 20 6b 65 79 4e 61    rootKey, keyNa
32fd0 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  me);....        
32fe0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
32ff0 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20  rn false;..     
33000 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
33010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33020 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73  using (MockRegis
33030 74 72 79 4b 65 79 20 73 75 62 4b 65 79 20 3d 20  tryKey subKey = 
33040 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 4f  RegistryHelper.O
33050 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20 20  penSubKey(..    
33060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33070 20 20 20 20 6b 65 79 2c 20 22 44 61 74 61 53 6f      key, "DataSo
33080 75 72 63 65 73 22 2c 20 74 72 75 65 2c 20 77 68  urces", true, wh
33090 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 29 0d  atIf, verbose)).
330a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
330b0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
330c0 20 20 20 20 20 20 20 20 69 66 20 28 73 75 62 4b          if (subK
330d0 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ey == null)..   
330e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
330f0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
33100 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
33110 72 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61  r = String.Forma
33120 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
33130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33140 22 63 6f 75 6c 64 20 6e 6f 74 20 6f 70 65 6e 20  "could not open 
33150 72 65 67 69 73 74 72 79 20 6b 65 79 3a 20 7b 30  registry key: {0
33160 7d 5c 5c 44 61 74 61 53 6f 75 72 63 65 73 22 2c  }\\DataSources",
33170 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
33180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6b 65                ke
33190 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
331a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
331b0 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20  eturn false;..  
331c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
331d0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
331e0 20 20 20 20 20 20 20 20 20 20 20 75 73 69 6e 67             using
331f0 20 28 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65   (MockRegistryKe
33200 79 20 64 61 74 61 53 6f 75 72 63 65 4b 65 79 20  y dataSourceKey 
33210 3d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  =..             
33220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52                 R
33230 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 43 72  egistryHelper.Cr
33240 65 61 74 65 53 75 62 4b 65 79 28 73 75 62 4b 65  eateSubKey(subKe
33250 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y,..            
33260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33270 70 61 63 6b 61 67 65 2e 44 61 74 61 53 6f 75 72  package.DataSour
33280 63 65 49 64 2e 54 6f 53 74 72 69 6e 67 28 56 73  ceId.ToString(Vs
33290 49 64 46 6f 72 6d 61 74 29 2c 0d 0a 20 20 20 20  IdFormat),..    
332a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
332b0 20 20 20 20 20 20 20 20 77 68 61 74 49 66 2c 20          whatIf, 
332c0 76 65 72 62 6f 73 65 29 29 0d 0a 20 20 20 20 20  verbose))..     
332d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
332e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
332f0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 64 61            if (da
33300 74 61 53 6f 75 72 63 65 4b 65 79 20 3d 3d 20 6e  taSourceKey == n
33310 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
33320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
33330 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
33340 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
33350 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d  or = String.Form
33360 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
33370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33380 20 20 20 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20       "could not 
33390 63 72 65 61 74 65 20 72 65 67 69 73 74 72 79 20  create registry 
333a0 6b 65 79 3a 20 7b 30 7d 5c 5c 7b 31 7d 22 2c 20  key: {0}\\{1}", 
333b0 6b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  key,..          
333c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
333d0 20 20 20 20 20 20 70 61 63 6b 61 67 65 2e 44 61        package.Da
333e0 74 61 53 6f 75 72 63 65 49 64 2e 54 6f 53 74 72  taSourceId.ToStr
333f0 69 6e 67 28 56 73 49 64 46 6f 72 6d 61 74 29 29  ing(VsIdFormat))
33400 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
33410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33420 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
33430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33440 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
33450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33460 20 20 20 20 20 52 65 67 69 73 74 72 79 48 65 6c       RegistryHel
33470 70 65 72 2e 53 65 74 56 61 6c 75 65 28 0d 0a 20  per.SetValue(.. 
33480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33490 20 20 20 20 20 20 20 20 20 20 20 64 61 74 61 53             dataS
334a0 6f 75 72 63 65 4b 65 79 2c 20 6e 75 6c 6c 2c 20  ourceKey, null, 
334b0 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
334c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
334d0 20 20 20 20 20 20 20 20 20 20 20 20 22 7b 30 7d              "{0}
334e0 20 44 61 74 61 62 61 73 65 20 46 69 6c 65 22 2c   Database File",
334f0 20 50 72 6f 6a 65 63 74 4e 61 6d 65 29 2c 20 77   ProjectName), w
33500 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20  hatIf,..        
33510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33520 20 20 20 20 76 65 72 62 6f 73 65 29 3b 0d 0a 0d      verbose);...
33530 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
33540 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
33550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33560 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 54 68       // NOTE: Th
33570 69 73 20 76 61 6c 75 65 20 69 73 20 6e 65 77 20  is value is new 
33580 61 73 20 6f 66 20 31 2e 30 2e 38 33 2e 30 2e 0d  as of 1.0.83.0..
33590 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
335a0 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
335b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
335c0 20 20 20 20 20 52 65 67 69 73 74 72 79 48 65 6c       RegistryHel
335d0 70 65 72 2e 53 65 74 56 61 6c 75 65 28 0d 0a 20  per.SetValue(.. 
335e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
335f0 20 20 20 20 20 20 20 20 20 20 20 64 61 74 61 53             dataS
33600 6f 75 72 63 65 4b 65 79 2c 20 22 44 65 66 61 75  ourceKey, "Defau
33610 6c 74 50 72 6f 76 69 64 65 72 22 2c 0d 0a 20 20  ltProvider",..  
33620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33630 20 20 20 20 20 20 20 20 20 20 70 61 63 6b 61 67            packag
33640 65 2e 44 61 74 61 50 72 6f 76 69 64 65 72 49 64  e.DataProviderId
33650 2e 54 6f 53 74 72 69 6e 67 28 56 73 49 64 46 6f  .ToString(VsIdFo
33660 72 6d 61 74 29 2c 0d 0a 20 20 20 20 20 20 20 20  rmat),..        
33670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33680 20 20 20 20 77 68 61 74 49 66 2c 20 76 65 72 62      whatIf, verb
33690 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ose);....       
336a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
336b0 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e   RegistryHelper.
336c0 43 72 65 61 74 65 53 75 62 4b 65 79 28 64 61 74  CreateSubKey(dat
336d0 61 53 6f 75 72 63 65 4b 65 79 2c 0d 0a 20 20 20  aSourceKey,..   
336e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
336f0 20 20 20 20 20 20 20 20 20 53 74 72 69 6e 67 2e           String.
33700 46 6f 72 6d 61 74 28 22 53 75 70 70 6f 72 74 69  Format("Supporti
33710 6e 67 50 72 6f 76 69 64 65 72 73 5c 5c 7b 30 7d  ngProviders\\{0}
33720 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
33730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33740 70 61 63 6b 61 67 65 2e 44 61 74 61 50 72 6f 76  package.DataProv
33750 69 64 65 72 49 64 2e 54 6f 53 74 72 69 6e 67 28  iderId.ToString(
33760 56 73 49 64 46 6f 72 6d 61 74 29 29 2c 0d 0a 20  VsIdFormat)),.. 
33770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33780 20 20 20 20 20 20 20 20 20 20 20 77 68 61 74 49             whatI
33790 66 2c 20 76 65 72 62 6f 73 65 29 3b 0d 0a 20 20  f, verbose);..  
337a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
337b0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
337c0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
337d0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
337e0 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 65       return true
337f0 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  ;..        }....
33800 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
33810 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33820 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33830 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33840 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
33850 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61  ...        priva
33860 74 65 20 73 74 61 74 69 63 20 62 6f 6f 6c 20 52  te static bool R
33870 65 6d 6f 76 65 56 73 44 61 74 61 53 6f 75 72 63  emoveVsDataSourc
33880 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
33890 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20  MockRegistryKey 
338a0 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20 20 20 20  rootKey,..      
338b0 20 20 20 20 20 20 56 65 72 73 69 6f 6e 20 76 73        Version vs
338c0 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20  Version,..      
338d0 20 20 20 20 20 20 73 74 72 69 6e 67 20 73 75 66        string suf
338e0 66 69 78 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  fix,..          
338f0 20 20 50 61 63 6b 61 67 65 20 70 61 63 6b 61 67    Package packag
33900 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
33910 62 6f 6f 6c 20 70 65 72 55 73 65 72 2c 0d 0a 20  bool perUser,.. 
33920 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
33930 77 6f 77 36 34 2c 0d 0a 20 20 20 20 20 20 20 20  wow64,..        
33940 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c      bool whatIf,
33950 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f  ..            bo
33960 6f 6c 20 76 65 72 62 6f 73 65 2c 0d 0a 20 20 20  ol verbose,..   
33970 20 20 20 20 20 20 20 20 20 72 65 66 20 73 74 72           ref str
33980 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20 20 20  ing error..     
33990 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
339a0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
339b0 20 69 66 20 28 76 73 56 65 72 73 69 6f 6e 20 3d   if (vsVersion =
339c0 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
339d0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
339e0 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20          error = 
339f0 22 69 6e 76 61 6c 69 64 20 56 53 20 76 65 72 73  "invalid VS vers
33a00 69 6f 6e 22 3b 0d 0a 20 20 20 20 20 20 20 20 20  ion";..         
33a10 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
33a20 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lse;..          
33a30 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
33a40 20 20 20 69 66 20 28 70 61 63 6b 61 67 65 20 3d     if (package =
33a50 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
33a60 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
33a70 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20          error = 
33a80 22 69 6e 76 61 6c 69 64 20 56 53 20 70 61 63 6b  "invalid VS pack
33a90 61 67 65 22 3b 0d 0a 20 20 20 20 20 20 20 20 20  age";..         
33aa0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
33ab0 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lse;..          
33ac0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
33ad0 20 20 20 73 74 72 69 6e 67 20 6b 65 79 4e 61 6d     string keyNam
33ae0 65 20 3d 20 47 65 74 56 73 4b 65 79 4e 61 6d 65  e = GetVsKeyName
33af0 28 76 73 56 65 72 73 69 6f 6e 2c 20 73 75 66 66  (vsVersion, suff
33b00 69 78 2c 20 70 65 72 55 73 65 72 2c 20 77 6f 77  ix, perUser, wow
33b10 36 34 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  64);....        
33b20 20 20 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52      using (MockR
33b30 65 67 69 73 74 72 79 4b 65 79 20 6b 65 79 20 3d  egistryKey key =
33b40 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e   RegistryHelper.
33b50 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20  OpenSubKey(..   
33b60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33b70 20 72 6f 6f 74 4b 65 79 2c 20 6b 65 79 4e 61 6d   rootKey, keyNam
33b80 65 2c 20 66 61 6c 73 65 2c 20 77 68 61 74 49 66  e, false, whatIf
33b90 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a 20 20 20  , verbose))..   
33ba0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
33bb0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
33bc0 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  key == null)..  
33bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
33be0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
33bf0 20 20 20 20 20 65 72 72 6f 72 20 3d 20 53 74 72       error = Str
33c00 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
33c10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33c20 20 20 20 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20       "could not 
33c30 6f 70 65 6e 20 72 65 67 69 73 74 72 79 20 6b 65  open registry ke
33c40 79 3a 20 7b 30 7d 5c 5c 7b 31 7d 22 2c 0d 0a 20  y: {0}\\{1}",.. 
33c50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33c60 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20         rootKey, 
33c70 6b 65 79 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20  keyName);....   
33c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33c90 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
33ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33cb0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
33cc0 20 20 20 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b       using (Mock
33cd0 52 65 67 69 73 74 72 79 4b 65 79 20 73 75 62 4b  RegistryKey subK
33ce0 65 79 20 3d 20 52 65 67 69 73 74 72 79 48 65 6c  ey = RegistryHel
33cf0 70 65 72 2e 4f 70 65 6e 53 75 62 4b 65 79 28 0d  per.OpenSubKey(.
33d00 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
33d10 20 20 20 20 20 20 20 20 20 6b 65 79 2c 20 22 44           key, "D
33d20 61 74 61 53 6f 75 72 63 65 73 22 2c 20 74 72 75  ataSources", tru
33d30 65 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f  e, whatIf, verbo
33d40 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  se))..          
33d50 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
33d60 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
33d70 28 73 75 62 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29  (subKey == null)
33d80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
33d90 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
33da0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33db0 20 65 72 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e   error = String.
33dc0 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
33dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33de0 20 20 20 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20       "could not 
33df0 6f 70 65 6e 20 72 65 67 69 73 74 72 79 20 6b 65  open registry ke
33e00 79 3a 20 7b 30 7d 5c 5c 44 61 74 61 53 6f 75 72  y: {0}\\DataSour
33e10 63 65 73 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  ces",..         
33e20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33e30 20 20 20 6b 65 79 29 3b 0d 0a 0d 0a 20 20 20 20     key);....    
33e40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33e50 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
33e60 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
33e70 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
33e80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33e90 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 44  RegistryHelper.D
33ea0 65 6c 65 74 65 53 75 62 4b 65 79 54 72 65 65 28  eleteSubKeyTree(
33eb0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
33ec0 20 20 20 20 20 20 20 20 20 20 73 75 62 4b 65 79            subKey
33ed0 2c 20 70 61 63 6b 61 67 65 2e 44 61 74 61 53 6f  , package.DataSo
33ee0 75 72 63 65 49 64 2e 54 6f 53 74 72 69 6e 67 28  urceId.ToString(
33ef0 56 73 49 64 46 6f 72 6d 61 74 29 2c 0d 0a 20 20  VsIdFormat),..  
33f00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33f10 20 20 20 20 20 20 77 68 61 74 49 66 2c 20 76 65        whatIf, ve
33f20 72 62 6f 73 65 29 3b 0d 0a 20 20 20 20 20 20 20  rbose);..       
33f30 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
33f40 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
33f50 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
33f60 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d  true;..        }
33f70 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
33f80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33f90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33fa0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33fb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33fc0 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70  ///....        p
33fd0 72 69 76 61 74 65 20 73 74 61 74 69 63 20 62 6f  rivate static bo
33fe0 6f 6c 20 50 72 6f 63 65 73 73 56 73 44 61 74 61  ol ProcessVsData
33ff0 53 6f 75 72 63 65 28 0d 0a 20 20 20 20 20 20 20  Source(..       
34000 20 20 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72       MockRegistr
34010 79 4b 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20  yKey rootKey,.. 
34020 20 20 20 20 20 20 20 20 20 20 20 56 65 72 73 69             Versi
34030 6f 6e 20 76 73 56 65 72 73 69 6f 6e 2c 0d 0a 20  on vsVersion,.. 
34040 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
34050 67 20 73 75 66 66 69 78 2c 0d 0a 20 20 20 20 20  g suffix,..     
34060 20 20 20 20 20 20 20 50 61 63 6b 61 67 65 20 70         Package p
34070 61 63 6b 61 67 65 2c 0d 0a 20 20 20 20 20 20 20  ackage,..       
34080 20 20 20 20 20 73 74 72 69 6e 67 20 64 69 72 65       string dire
34090 63 74 6f 72 79 2c 0d 0a 20 20 20 20 20 20 20 20  ctory,..        
340a0 20 20 20 20 6f 62 6a 65 63 74 20 63 6c 69 65 6e      object clien
340b0 74 44 61 74 61 2c 0d 0a 20 20 20 20 20 20 20 20  tData,..        
340c0 20 20 20 20 62 6f 6f 6c 20 70 65 72 55 73 65 72      bool perUser
340d0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  ,..            b
340e0 6f 6f 6c 20 77 6f 77 36 34 2c 0d 0a 20 20 20 20  ool wow64,..    
340f0 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 74 68 72          bool thr
34100 6f 77 4f 6e 4d 69 73 73 69 6e 67 2c 0d 0a 20 20  owOnMissing,..  
34110 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77            bool w
34120 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20  hatIf,..        
34130 20 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65      bool verbose
34140 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  ,..            r
34150 65 66 20 73 74 72 69 6e 67 20 65 72 72 6f 72 0d  ef string error.
34160 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a  .            )..
34170 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
34180 20 20 20 20 20 20 20 69 66 20 28 70 61 63 6b 61         if (packa
34190 67 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ge == null)..   
341a0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
341b0 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
341c0 72 20 3d 20 22 69 6e 76 61 6c 69 64 20 56 53 20  r = "invalid VS 
341d0 70 61 63 6b 61 67 65 22 3b 0d 0a 20 20 20 20 20  package";..     
341e0 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
341f0 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  n false;..      
34200 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
34210 20 20 20 20 20 20 20 41 6e 79 50 61 69 72 3c 73         AnyPair<s
34220 74 72 69 6e 67 2c 20 62 6f 6f 6c 3e 20 70 61 69  tring, bool> pai
34230 72 20 3d 20 63 6c 69 65 6e 74 44 61 74 61 20 61  r = clientData a
34240 73 20 41 6e 79 50 61 69 72 3c 73 74 72 69 6e 67  s AnyPair<string
34250 2c 20 62 6f 6f 6c 3e 3b 0d 0a 0d 0a 20 20 20 20  , bool>;....    
34260 20 20 20 20 20 20 20 20 69 66 20 28 70 61 69 72          if (pair
34270 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
34280 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
34290 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20            error 
342a0 3d 20 22 69 6e 76 61 6c 69 64 20 56 53 20 63 61  = "invalid VS ca
342b0 6c 6c 62 61 63 6b 20 64 61 74 61 22 3b 0d 0a 20  llback data";.. 
342c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
342d0 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20  eturn false;..  
342e0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
342f0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 70             if (p
34300 61 69 72 2e 59 29 0d 0a 20 20 20 20 20 20 20 20  air.Y)..        
34310 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
34320 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 41 64         return Ad
34330 64 56 73 44 61 74 61 53 6f 75 72 63 65 28 0d 0a  dVsDataSource(..
34340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34350 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 76 73 56      rootKey, vsV
34360 65 72 73 69 6f 6e 2c 20 73 75 66 66 69 78 2c 20  ersion, suffix, 
34370 70 61 63 6b 61 67 65 2c 20 70 65 72 55 73 65 72  package, perUser
34380 2c 20 77 6f 77 36 34 2c 0d 0a 20 20 20 20 20 20  , wow64,..      
34390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 77 68                wh
343a0 61 74 49 66 2c 20 76 65 72 62 6f 73 65 2c 20 72  atIf, verbose, r
343b0 65 66 20 65 72 72 6f 72 29 3b 0d 0a 20 20 20 20  ef error);..    
343c0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
343d0 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20         else..   
343e0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
343f0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
34400 72 6e 20 52 65 6d 6f 76 65 56 73 44 61 74 61 53  rn RemoveVsDataS
34410 6f 75 72 63 65 28 0d 0a 20 20 20 20 20 20 20 20  ource(..        
34420 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74              root
34430 4b 65 79 2c 20 76 73 56 65 72 73 69 6f 6e 2c 20  Key, vsVersion, 
34440 73 75 66 66 69 78 2c 20 70 61 63 6b 61 67 65 2c  suffix, package,
34450 20 70 65 72 55 73 65 72 2c 20 77 6f 77 36 34 2c   perUser, wow64,
34460 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
34470 20 20 20 20 20 20 77 68 61 74 49 66 2c 20 76 65        whatIf, ve
34480 72 62 6f 73 65 2c 20 72 65 66 20 65 72 72 6f 72  rbose, ref error
34490 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
344a0 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  }..        }..  
344b0 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
344c0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
344d0 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23  ///....        #
34520 72 65 67 69 6f 6e 20 56 69 73 75 61 6c 20 53 74  region Visual St
34530 75 64 69 6f 20 44 61 74 61 20 50 72 6f 76 69 64  udio Data Provid
34540 65 72 20 48 61 6e 64 6c 69 6e 67 0d 0a 20 20 20  er Handling..   
34550 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61       private sta
34560 74 69 63 20 62 6f 6f 6c 20 41 64 64 56 73 44 61  tic bool AddVsDa
34570 74 61 50 72 6f 76 69 64 65 72 28 0d 0a 20 20 20  taProvider(..   
34580 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65 67           MockReg
34590 69 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79  istryKey rootKey
345a0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 56  ,..            V
345b0 65 72 73 69 6f 6e 20 76 73 56 65 72 73 69 6f 6e  ersion vsVersion
345c0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  ,..            s
345d0 74 72 69 6e 67 20 73 75 66 66 69 78 2c 0d 0a 20  tring suffix,.. 
345e0 20 20 20 20 20 20 20 20 20 20 20 50 61 63 6b 61             Packa
345f0 67 65 20 70 61 63 6b 61 67 65 2c 0d 0a 20 20 20  ge package,..   
34600 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
34610 66 69 6c 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20  fileName,..     
34620 20 20 20 20 20 20 20 62 6f 6f 6c 20 70 65 72 55         bool perU
34630 73 65 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ser,..          
34640 20 20 62 6f 6f 6c 20 77 6f 77 36 34 2c 0d 0a 20    bool wow64,.. 
34650 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
34660 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20  whatIf,..       
34670 20 20 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73       bool verbos
34680 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
34690 72 65 66 20 73 74 72 69 6e 67 20 65 72 72 6f 72  ref string error
346a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d  ..            ).
346b0 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
346c0 20 20 20 20 20 20 20 20 69 66 20 28 76 73 56 65          if (vsVe
346d0 72 73 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  rsion == null)..
346e0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
346f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
34700 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64 20  rror = "invalid 
34710 56 53 20 76 65 72 73 69 6f 6e 22 3b 0d 0a 20 20  VS version";..  
34720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
34730 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20  turn false;..   
34740 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
34750 20 20 20 20 20 20 20 20 20 20 69 66 20 28 70 61            if (pa
34760 63 6b 61 67 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  ckage == null)..
34770 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
34780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
34790 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64 20  rror = "invalid 
347a0 56 53 20 70 61 63 6b 61 67 65 22 3b 0d 0a 20 20  VS package";..  
347b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
347c0 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20  turn false;..   
347d0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
347e0 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
347f0 20 6b 65 79 4e 61 6d 65 20 3d 20 47 65 74 56 73   keyName = GetVs
34800 4b 65 79 4e 61 6d 65 28 76 73 56 65 72 73 69 6f  KeyName(vsVersio
34810 6e 2c 20 73 75 66 66 69 78 2c 20 70 65 72 55 73  n, suffix, perUs
34820 65 72 2c 20 77 6f 77 36 34 29 3b 0d 0a 0d 0a 20  er, wow64);.... 
34830 20 20 20 20 20 20 20 20 20 20 20 75 73 69 6e 67             using
34840 20 28 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65   (MockRegistryKe
34850 79 20 6b 65 79 20 3d 20 52 65 67 69 73 74 72 79  y key = Registry
34860 48 65 6c 70 65 72 2e 4f 70 65 6e 53 75 62 4b 65  Helper.OpenSubKe
34870 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y(..            
34880 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c          rootKey,
34890 20 6b 65 79 4e 61 6d 65 2c 20 66 61 6c 73 65 2c   keyName, false,
348a0 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65   whatIf, verbose
348b0 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
348c0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
348d0 20 20 20 69 66 20 28 6b 65 79 20 3d 3d 20 6e 75     if (key == nu
348e0 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
348f0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
34900 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
34910 72 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61  r = String.Forma
34920 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
34930 20 20 20 20 20 20 20 20 20 20 20 20 22 63 6f 75              "cou
34940 6c 64 20 6e 6f 74 20 6f 70 65 6e 20 72 65 67 69  ld not open regi
34950 73 74 72 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c 7b  stry key: {0}\\{
34960 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  1}",..          
34970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f                ro
34980 6f 74 4b 65 79 2c 20 6b 65 79 4e 61 6d 65 29 3b  otKey, keyName);
34990 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
349a0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
349b0 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alse;..         
349c0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
349d0 20 20 20 20 20 20 20 20 20 20 20 20 75 73 69 6e              usin
349e0 67 20 28 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b  g (MockRegistryK
349f0 65 79 20 73 75 62 4b 65 79 20 3d 20 52 65 67 69  ey subKey = Regi
34a00 73 74 72 79 48 65 6c 70 65 72 2e 4f 70 65 6e 53  stryHelper.OpenS
34a10 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20  ubKey(..        
34a20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34a30 6b 65 79 2c 20 22 44 61 74 61 50 72 6f 76 69 64  key, "DataProvid
34a40 65 72 73 22 2c 20 74 72 75 65 2c 20 77 68 61 74  ers", true, what
34a50 49 66 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a 20  If, verbose)).. 
34a60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
34a70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
34a80 20 20 20 20 20 20 69 66 20 28 73 75 62 4b 65 79        if (subKey
34a90 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
34aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
34ab0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
34ac0 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20            error 
34ad0 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  = String.Format(
34ae0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
34af0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 63                "c
34b00 6f 75 6c 64 20 6e 6f 74 20 6f 70 65 6e 20 72 65  ould not open re
34b10 67 69 73 74 72 79 20 6b 65 79 3a 20 7b 30 7d 5c  gistry key: {0}\
34b20 5c 44 61 74 61 50 72 6f 76 69 64 65 72 73 22 2c  \DataProviders",
34b30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
34b40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6b 65                ke
34b50 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
34b60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
34b70 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20  eturn false;..  
34b80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34b90 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
34ba0 20 20 20 20 20 20 20 20 20 20 20 75 73 69 6e 67             using
34bb0 20 28 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65   (MockRegistryKe
34bc0 79 20 64 61 74 61 50 72 6f 76 69 64 65 72 4b 65  y dataProviderKe
34bd0 79 20 3d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  y =..           
34be0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34bf0 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e   RegistryHelper.
34c00 43 72 65 61 74 65 53 75 62 4b 65 79 28 73 75 62  CreateSubKey(sub
34c10 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  Key,..          
34c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34c30 20 20 70 61 63 6b 61 67 65 2e 44 61 74 61 50 72    package.DataPr
34c40 6f 76 69 64 65 72 49 64 2e 54 6f 53 74 72 69 6e  oviderId.ToStrin
34c50 67 28 56 73 49 64 46 6f 72 6d 61 74 29 2c 0d 0a  g(VsIdFormat),..
34c60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34c70 20 20 20 20 20 20 20 20 20 20 20 20 77 68 61 74              what
34c80 49 66 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a 20  If, verbose)).. 
34c90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34ca0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
34cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
34cc0 20 28 64 61 74 61 50 72 6f 76 69 64 65 72 4b 65   (dataProviderKe
34cd0 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  y == null)..    
34ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34cf0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
34d00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34d10 20 20 20 65 72 72 6f 72 20 3d 20 53 74 72 69 6e     error = Strin
34d20 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
34d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34d40 20 20 20 20 20 20 20 20 20 20 20 22 63 6f 75 6c             "coul
34d50 64 20 6e 6f 74 20 63 72 65 61 74 65 20 72 65 67  d not create reg
34d60 69 73 74 72 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c  istry key: {0}\\
34d70 7b 31 7d 22 2c 20 6b 65 79 2c 0d 0a 20 20 20 20  {1}", key,..    
34d80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34d90 20 20 20 20 20 20 20 20 20 20 20 20 70 61 63 6b              pack
34da0 61 67 65 2e 44 61 74 61 50 72 6f 76 69 64 65 72  age.DataProvider
34db0 49 64 2e 54 6f 53 74 72 69 6e 67 28 56 73 49 64  Id.ToString(VsId
34dc0 46 6f 72 6d 61 74 29 29 3b 0d 0a 0d 0a 20 20 20  Format));....   
34dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34de0 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
34df0 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20  false;..        
34e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34e10 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
34e20 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67               Reg
34e30 69 73 74 72 79 48 65 6c 70 65 72 2e 53 65 74 56  istryHelper.SetV
34e40 61 6c 75 65 28 0d 0a 20 20 20 20 20 20 20 20 20  alue(..         
34e50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34e60 20 20 20 64 61 74 61 50 72 6f 76 69 64 65 72 4b     dataProviderK
34e70 65 79 2c 20 6e 75 6c 6c 2c 20 44 65 73 63 72 69  ey, null, Descri
34e80 70 74 69 6f 6e 2c 20 77 68 61 74 49 66 2c 0d 0a  ption, whatIf,..
34e90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34ea0 20 20 20 20 20 20 20 20 20 20 20 20 76 65 72 62              verb
34eb0 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ose);....       
34ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34ed0 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
34ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
34ef0 4e 4f 54 45 3a 20 54 68 69 73 20 76 61 6c 75 65  NOTE: This value
34f00 20 69 73 20 6e 65 77 20 61 73 20 6f 66 20 31 2e   is new as of 1.
34f10 30 2e 38 33 2e 30 2e 20 20 48 6f 77 65 76 65 72  0.83.0.  However
34f20 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
34f30 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
34f40 20 20 20 20 69 74 20 73 68 6f 75 6c 64 20 6f 6e      it should on
34f50 6c 79 20 62 65 20 73 65 74 20 69 66 20 74 68 65  ly be set if the
34f60 20 70 61 63 6b 61 67 65 20 61 73 73 65 6d 62 6c   package assembl
34f70 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  y..             
34f80 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
34f90 20 20 20 20 61 6e 64 20 61 6c 6c 20 74 68 65 20      and all the 
34fa0 61 73 73 65 6d 62 6c 69 65 73 20 69 74 20 72 65  assemblies it re
34fb0 66 65 72 73 20 74 6f 20 61 72 65 20 62 65 69 6e  fers to are bein
34fc0 67 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  g..             
34fd0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
34fe0 20 20 20 20 70 6c 61 63 65 64 20 69 6e 74 6f 20      placed into 
34ff0 74 68 65 20 67 6c 6f 62 61 6c 20 61 73 73 65 6d  the global assem
35000 62 6c 79 20 63 61 63 68 65 2e 0d 0a 20 20 20 20  bly cache...    
35010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35020 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
35030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35040 69 66 20 28 70 61 63 6b 61 67 65 2e 47 6c 6f 62  if (package.Glob
35050 61 6c 41 73 73 65 6d 62 6c 79 43 61 63 68 65 29  alAssemblyCache)
35060 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
35070 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
35080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35090 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74 72           Registr
350a0 79 48 65 6c 70 65 72 2e 53 65 74 56 61 6c 75 65  yHelper.SetValue
350b0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
350c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
350d0 20 20 20 64 61 74 61 50 72 6f 76 69 64 65 72 4b     dataProviderK
350e0 65 79 2c 20 22 41 73 73 65 6d 62 6c 79 22 2c 0d  ey, "Assembly",.
350f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
35100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35110 20 70 61 63 6b 61 67 65 2e 44 65 73 69 67 6e 65   package.Designe
35120 72 41 73 73 65 6d 62 6c 79 4e 61 6d 65 2e 54 6f  rAssemblyName.To
35130 53 74 72 69 6e 67 28 29 2c 0d 0a 20 20 20 20 20  String(),..     
35140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35150 20 20 20 20 20 20 20 20 20 20 20 77 68 61 74 49             whatI
35160 66 2c 20 76 65 72 62 6f 73 65 29 3b 0d 0a 20 20  f, verbose);..  
35170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35180 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
35190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
351a0 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
351b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
351c0 2f 20 4e 4f 54 45 3a 20 54 68 69 73 20 76 61 6c  / NOTE: This val
351d0 75 65 20 69 73 20 6e 65 77 20 61 73 20 6f 66 20  ue is new as of 
351e0 31 2e 30 2e 38 33 2e 30 2e 0d 0a 20 20 20 20 20  1.0.83.0...     
351f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35200 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
35210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52                 R
35220 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 53 65  egistryHelper.Se
35230 74 56 61 6c 75 65 28 0d 0a 20 20 20 20 20 20 20  tValue(..       
35240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35250 20 20 20 20 20 64 61 74 61 50 72 6f 76 69 64 65       dataProvide
35260 72 4b 65 79 2c 20 22 41 73 73 6f 63 69 61 74 65  rKey, "Associate
35270 64 53 6f 75 72 63 65 22 2c 0d 0a 20 20 20 20 20  dSource",..     
35280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35290 20 20 20 20 20 20 20 70 61 63 6b 61 67 65 2e 44         package.D
352a0 61 74 61 53 6f 75 72 63 65 49 64 2e 54 6f 53 74  ataSourceId.ToSt
352b0 72 69 6e 67 28 56 73 49 64 46 6f 72 6d 61 74 29  ring(VsIdFormat)
352c0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
352d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 77                 w
352e0 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 3b  hatIf, verbose);
352f0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
35300 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69              Regi
35310 73 74 72 79 48 65 6c 70 65 72 2e 53 65 74 56 61  stryHelper.SetVa
35320 6c 75 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  lue(..          
35330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35340 20 20 64 61 74 61 50 72 6f 76 69 64 65 72 4b 65    dataProviderKe
35350 79 2c 20 22 49 6e 76 61 72 69 61 6e 74 4e 61 6d  y, "InvariantNam
35360 65 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e",..           
35370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35380 20 70 61 63 6b 61 67 65 2e 49 6e 76 61 72 69 61   package.Invaria
35390 6e 74 4e 61 6d 65 2c 20 77 68 61 74 49 66 2c 20  ntName, whatIf, 
353a0 76 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20  verbose);....   
353b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
353c0 20 20 20 20 20 52 65 67 69 73 74 72 79 48 65 6c       RegistryHel
353d0 70 65 72 2e 53 65 74 56 61 6c 75 65 28 0d 0a 20  per.SetValue(.. 
353e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
353f0 20 20 20 20 20 20 20 20 20 20 20 64 61 74 61 50             dataP
35400 72 6f 76 69 64 65 72 4b 65 79 2c 20 22 54 65 63  roviderKey, "Tec
35410 68 6e 6f 6c 6f 67 79 22 2c 0d 0a 20 20 20 20 20  hnology",..     
35420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35430 20 20 20 20 20 20 20 70 61 63 6b 61 67 65 2e 41         package.A
35440 64 6f 4e 65 74 54 65 63 68 6e 6f 6c 6f 67 79 49  doNetTechnologyI
35450 64 2e 54 6f 53 74 72 69 6e 67 28 56 73 49 64 46  d.ToString(VsIdF
35460 6f 72 6d 61 74 29 2c 0d 0a 20 20 20 20 20 20 20  ormat),..       
35470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35480 20 20 20 20 20 77 68 61 74 49 66 2c 20 76 65 72       whatIf, ver
35490 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  bose);....      
354a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
354b0 20 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72    RegistryHelper
354c0 2e 53 65 74 56 61 6c 75 65 28 0d 0a 20 20 20 20  .SetValue(..    
354d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
354e0 20 20 20 20 20 20 20 20 64 61 74 61 50 72 6f 76          dataProv
354f0 69 64 65 72 4b 65 79 2c 20 22 43 6f 64 65 42 61  iderKey, "CodeBa
35500 73 65 22 2c 20 66 69 6c 65 4e 61 6d 65 2c 20 77  se", fileName, w
35510 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20  hatIf,..        
35520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35530 20 20 20 20 76 65 72 62 6f 73 65 29 3b 0d 0a 0d      verbose);...
35540 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
35550 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74 72           Registr
35560 79 48 65 6c 70 65 72 2e 53 65 74 56 61 6c 75 65  yHelper.SetValue
35570 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
35580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64                 d
35590 61 74 61 50 72 6f 76 69 64 65 72 4b 65 79 2c 20  ataProviderKey, 
355a0 22 46 61 63 74 6f 72 79 53 65 72 76 69 63 65 22  "FactoryService"
355b0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
355c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70                 p
355d0 61 63 6b 61 67 65 2e 53 65 72 76 69 63 65 49 64  ackage.ServiceId
355e0 2e 54 6f 53 74 72 69 6e 67 28 56 73 49 64 46 6f  .ToString(VsIdFo
355f0 72 6d 61 74 29 2c 20 77 68 61 74 49 66 2c 0d 0a  rmat), whatIf,..
35600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35610 20 20 20 20 20 20 20 20 20 20 20 20 76 65 72 62              verb
35620 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ose);....       
35630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35640 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e   RegistryHelper.
35650 43 72 65 61 74 65 53 75 62 4b 65 79 28 64 61 74  CreateSubKey(dat
35660 61 50 72 6f 76 69 64 65 72 4b 65 79 2c 0d 0a 20  aProviderKey,.. 
35670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35680 20 20 20 20 20 20 20 20 20 20 20 22 53 75 70 70             "Supp
35690 6f 72 74 65 64 4f 62 6a 65 63 74 73 5c 5c 44 61  ortedObjects\\Da
356a0 74 61 43 6f 6e 6e 65 63 74 69 6f 6e 55 49 43 6f  taConnectionUICo
356b0 6e 74 72 6f 6c 22 2c 0d 0a 20 20 20 20 20 20 20  ntrol",..       
356c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
356d0 20 20 20 20 20 77 68 61 74 49 66 2c 20 76 65 72       whatIf, ver
356e0 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  bose);....      
356f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35700 20 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72    RegistryHelper
35710 2e 43 72 65 61 74 65 53 75 62 4b 65 79 28 64 61  .CreateSubKey(da
35720 74 61 50 72 6f 76 69 64 65 72 4b 65 79 2c 0d 0a  taProviderKey,..
35730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35740 20 20 20 20 20 20 20 20 20 20 20 20 22 53 75 70              "Sup
35750 70 6f 72 74 65 64 4f 62 6a 65 63 74 73 5c 5c 44  portedObjects\\D
35760 61 74 61 43 6f 6e 6e 65 63 74 69 6f 6e 50 72 6f  ataConnectionPro
35770 70 65 72 74 69 65 73 22 2c 0d 0a 20 20 20 20 20  perties",..     
35780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35790 20 20 20 20 20 20 20 77 68 61 74 49 66 2c 20 76         whatIf, v
357a0 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20  erbose);....    
357b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
357c0 20 20 20 20 52 65 67 69 73 74 72 79 48 65 6c 70      RegistryHelp
357d0 65 72 2e 43 72 65 61 74 65 53 75 62 4b 65 79 28  er.CreateSubKey(
357e0 64 61 74 61 50 72 6f 76 69 64 65 72 4b 65 79 2c  dataProviderKey,
357f0 0d 0a 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 20 20 20 22 53                "S
35810 75 70 70 6f 72 74 65 64 4f 62 6a 65 63 74 73 5c  upportedObjects\
35820 5c 44 61 74 61 43 6f 6e 6e 65 63 74 69 6f 6e 53  \DataConnectionS
35830 75 70 70 6f 72 74 22 2c 20 77 68 61 74 49 66 2c  upport", whatIf,
35840 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
35850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 76 65                ve
35860 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20  rbose);....     
35870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35880 20 20 20 52 65 67 69 73 74 72 79 48 65 6c 70 65     RegistryHelpe
35890 72 2e 43 72 65 61 74 65 53 75 62 4b 65 79 28 64  r.CreateSubKey(d
358a0 61 74 61 50 72 6f 76 69 64 65 72 4b 65 79 2c 0d  ataProviderKey,.
358b0 0a 20 20 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 20 20 22 53 75               "Su
358d0 70 70 6f 72 74 65 64 4f 62 6a 65 63 74 73 5c 5c  pportedObjects\\
358e0 44 61 74 61 4f 62 6a 65 63 74 53 75 70 70 6f 72  DataObjectSuppor
358f0 74 22 2c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20  t", whatIf,..   
35900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35910 20 20 20 20 20 20 20 20 20 76 65 72 62 6f 73 65           verbose
35920 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
35930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65                Re
35940 67 69 73 74 72 79 48 65 6c 70 65 72 2e 43 72 65  gistryHelper.Cre
35950 61 74 65 53 75 62 4b 65 79 28 64 61 74 61 50 72  ateSubKey(dataPr
35960 6f 76 69 64 65 72 4b 65 79 2c 0d 0a 20 20 20 20  oviderKey,..    
35970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35980 20 20 20 20 20 20 20 20 22 53 75 70 70 6f 72 74          "Support
35990 65 64 4f 62 6a 65 63 74 73 5c 5c 44 61 74 61 56  edObjects\\DataV
359a0 69 65 77 53 75 70 70 6f 72 74 22 2c 20 77 68 61  iewSupport", wha
359b0 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  tIf,..          
359c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
359d0 20 20 76 65 72 62 6f 73 65 29 3b 0d 0a 20 20 20    verbose);..   
359e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
359f0 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
35a00 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
35a10 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
35a20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b      return true;
35a30 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }.... 
35a40 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
35a50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35a60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35a70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35a80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
35a90 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
35aa0 65 20 73 74 61 74 69 63 20 62 6f 6f 6c 20 52 65  e static bool Re
35ab0 6d 6f 76 65 56 73 44 61 74 61 50 72 6f 76 69 64  moveVsDataProvid
35ac0 65 72 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  er(..           
35ad0 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79   MockRegistryKey
35ae0 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20 20 20   rootKey,..     
35af0 20 20 20 20 20 20 20 56 65 72 73 69 6f 6e 20 76         Version v
35b00 73 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20  sVersion,..     
35b10 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 73 75         string su
35b20 66 66 69 78 2c 0d 0a 20 20 20 20 20 20 20 20 20  ffix,..         
35b30 20 20 20 50 61 63 6b 61 67 65 20 70 61 63 6b 61     Package packa
35b40 67 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ge,..           
35b50 20 62 6f 6f 6c 20 70 65 72 55 73 65 72 2c 0d 0a   bool perUser,..
35b60 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
35b70 20 77 6f 77 36 34 2c 0d 0a 20 20 20 20 20 20 20   wow64,..       
35b80 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66       bool whatIf
35b90 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  ,..            b
35ba0 6f 6f 6c 20 76 65 72 62 6f 73 65 2c 0d 0a 20 20  ool verbose,..  
35bb0 20 20 20 20 20 20 20 20 20 20 72 65 66 20 73 74            ref st
35bc0 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20 20  ring error..    
35bd0 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
35be0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
35bf0 20 20 69 66 20 28 76 73 56 65 72 73 69 6f 6e 20    if (vsVersion 
35c00 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
35c10 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
35c20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d           error =
35c30 20 22 69 6e 76 61 6c 69 64 20 56 53 20 76 65 72   "invalid VS ver
35c40 73 69 6f 6e 22 3b 0d 0a 20 20 20 20 20 20 20 20  sion";..        
35c50 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
35c60 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alse;..         
35c70 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
35c80 20 20 20 20 73 74 72 69 6e 67 20 6b 65 79 4e 61      string keyNa
35c90 6d 65 20 3d 20 47 65 74 56 73 4b 65 79 4e 61 6d  me = GetVsKeyNam
35ca0 65 28 76 73 56 65 72 73 69 6f 6e 2c 20 73 75 66  e(vsVersion, suf
35cb0 66 69 78 2c 20 70 65 72 55 73 65 72 2c 20 77 6f  fix, perUser, wo
35cc0 77 36 34 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  w64);....       
35cd0 20 20 20 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b       using (Mock
35ce0 52 65 67 69 73 74 72 79 4b 65 79 20 6b 65 79 20  RegistryKey key 
35cf0 3d 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72  = RegistryHelper
35d00 2e 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20  .OpenSubKey(..  
35d10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35d20 20 20 72 6f 6f 74 4b 65 79 2c 20 6b 65 79 4e 61    rootKey, keyNa
35d30 6d 65 2c 20 66 61 6c 73 65 2c 20 77 68 61 74 49  me, false, whatI
35d40 66 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a 20 20  f, verbose))..  
35d50 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
35d60 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
35d70 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  (key == null).. 
35d80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
35d90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
35da0 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 53 74        error = St
35db0 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
35dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35dd0 20 20 20 20 20 20 22 63 6f 75 6c 64 20 6e 6f 74        "could not
35de0 20 6f 70 65 6e 20 72 65 67 69 73 74 72 79 20 6b   open registry k
35df0 65 79 3a 20 7b 30 7d 5c 5c 7b 31 7d 22 2c 0d 0a  ey: {0}\\{1}",..
35e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35e10 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c          rootKey,
35e20 20 6b 65 79 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20   keyName);....  
35e30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35e40 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
35e50 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
35e60 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
35e70 20 20 20 20 20 20 75 73 69 6e 67 20 28 4d 6f 63        using (Moc
35e80 6b 52 65 67 69 73 74 72 79 4b 65 79 20 73 75 62  kRegistryKey sub
35e90 4b 65 79 20 3d 20 52 65 67 69 73 74 72 79 48 65  Key = RegistryHe
35ea0 6c 70 65 72 2e 4f 70 65 6e 53 75 62 4b 65 79 28  lper.OpenSubKey(
35eb0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
35ec0 20 20 20 20 20 20 20 20 20 20 6b 65 79 2c 20 22            key, "
35ed0 44 61 74 61 50 72 6f 76 69 64 65 72 73 22 2c 20  DataProviders", 
35ee0 74 72 75 65 2c 20 77 68 61 74 49 66 2c 20 76 65  true, whatIf, ve
35ef0 72 62 6f 73 65 29 29 0d 0a 20 20 20 20 20 20 20  rbose))..       
35f00 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
35f10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35f20 69 66 20 28 73 75 62 4b 65 79 20 3d 3d 20 6e 75  if (subKey == nu
35f30 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
35f40 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
35f50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35f60 20 20 20 20 65 72 72 6f 72 20 3d 20 53 74 72 69      error = Stri
35f70 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20  ng.Format(..    
35f80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35f90 20 20 20 20 20 20 20 20 22 63 6f 75 6c 64 20 6e          "could n
35fa0 6f 74 20 6f 70 65 6e 20 72 65 67 69 73 74 72 79  ot open registry
35fb0 20 6b 65 79 3a 20 7b 30 7d 5c 5c 44 61 74 61 50   key: {0}\\DataP
35fc0 72 6f 76 69 64 65 72 73 22 2c 0d 0a 20 20 20 20  roviders",..    
35fd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35fe0 20 20 20 20 20 20 20 20 6b 65 79 29 3b 0d 0a 0d          key);...
35ff0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
36000 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
36010 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20  false;..        
36020 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
36030 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
36040 20 20 20 20 20 52 65 67 69 73 74 72 79 48 65 6c       RegistryHel
36050 70 65 72 2e 44 65 6c 65 74 65 53 75 62 4b 65 79  per.DeleteSubKey
36060 54 72 65 65 28 0d 0a 20 20 20 20 20 20 20 20 20  Tree(..         
36070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
36080 75 62 4b 65 79 2c 20 70 61 63 6b 61 67 65 2e 44  ubKey, package.D
36090 61 74 61 50 72 6f 76 69 64 65 72 49 64 2e 54 6f  ataProviderId.To
360a0 53 74 72 69 6e 67 28 56 73 49 64 46 6f 72 6d 61  String(VsIdForma
360b0 74 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  t),..           
360c0 20 20 20 20 20 20 20 20 20 20 20 20 20 77 68 61               wha
360d0 74 49 66 2c 20 76 65 72 62 6f 73 65 29 3b 0d 0a  tIf, verbose);..
360e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
360f0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
36100 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
36110 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20  return true;..  
36120 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
36130 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
36140 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36150 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36160 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36170 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
36180 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74        private st
36190 61 74 69 63 20 62 6f 6f 6c 20 50 72 6f 63 65 73  atic bool Proces
361a0 73 56 73 44 61 74 61 50 72 6f 76 69 64 65 72 28  sVsDataProvider(
361b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 4d 6f  ..            Mo
361c0 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 72 6f  ckRegistryKey ro
361d0 6f 74 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20  otKey,..        
361e0 20 20 20 20 56 65 72 73 69 6f 6e 20 76 73 56 65      Version vsVe
361f0 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20  rsion,..        
36200 20 20 20 20 73 74 72 69 6e 67 20 73 75 66 66 69      string suffi
36210 78 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  x,..            
36220 50 61 63 6b 61 67 65 20 70 61 63 6b 61 67 65 2c  Package package,
36230 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74  ..            st
36240 72 69 6e 67 20 64 69 72 65 63 74 6f 72 79 2c 0d  ring directory,.
36250 0a 20 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a  .            obj
36260 65 63 74 20 63 6c 69 65 6e 74 44 61 74 61 2c 0d  ect clientData,.
36270 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f  .            boo
36280 6c 20 70 65 72 55 73 65 72 2c 0d 0a 20 20 20 20  l perUser,..    
36290 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 6f 77          bool wow
362a0 36 34 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  64,..           
362b0 20 62 6f 6f 6c 20 74 68 72 6f 77 4f 6e 4d 69 73   bool throwOnMis
362c0 73 69 6e 67 2c 0d 0a 20 20 20 20 20 20 20 20 20  sing,..         
362d0 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d     bool whatIf,.
362e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f  .            boo
362f0 6c 20 76 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20  l verbose,..    
36300 20 20 20 20 20 20 20 20 72 65 66 20 73 74 72 69          ref stri
36310 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20 20 20 20  ng error..      
36320 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
36330 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
36340 41 6e 79 50 61 69 72 3c 73 74 72 69 6e 67 2c 20  AnyPair<string, 
36350 62 6f 6f 6c 3e 20 70 61 69 72 20 3d 20 63 6c 69  bool> pair = cli
36360 65 6e 74 44 61 74 61 20 61 73 20 41 6e 79 50 61  entData as AnyPa
36370 69 72 3c 73 74 72 69 6e 67 2c 20 62 6f 6f 6c 3e  ir<string, bool>
36380 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
36390 20 69 66 20 28 70 61 69 72 20 3d 3d 20 6e 75 6c   if (pair == nul
363a0 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
363b0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
363c0 20 20 20 65 72 72 6f 72 20 3d 20 22 69 6e 76 61     error = "inva
363d0 6c 69 64 20 56 53 20 63 61 6c 6c 62 61 63 6b 20  lid VS callback 
363e0 64 61 74 61 22 3b 0d 0a 20 20 20 20 20 20 20 20  data";..        
363f0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
36400 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alse;..         
36410 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
36420 20 20 20 20 69 66 20 28 70 61 69 72 2e 59 29 0d      if (pair.Y).
36430 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
36440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36450 72 65 74 75 72 6e 20 41 64 64 56 73 44 61 74 61  return AddVsData
36460 50 72 6f 76 69 64 65 72 28 0d 0a 20 20 20 20 20  Provider(..     
36470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
36480 6f 6f 74 4b 65 79 2c 20 76 73 56 65 72 73 69 6f  ootKey, vsVersio
36490 6e 2c 20 73 75 66 66 69 78 2c 20 70 61 63 6b 61  n, suffix, packa
364a0 67 65 2c 20 70 61 69 72 2e 58 2c 20 70 65 72 55  ge, pair.X, perU
364b0 73 65 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ser,..          
364c0 20 20 20 20 20 20 20 20 20 20 77 6f 77 36 34 2c            wow64,
364d0 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65   whatIf, verbose
364e0 2c 20 72 65 66 20 65 72 72 6f 72 29 3b 0d 0a 20  , ref error);.. 
364f0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
36500 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a            else..
36510 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
36520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
36530 65 74 75 72 6e 20 52 65 6d 6f 76 65 56 73 44 61  eturn RemoveVsDa
36540 74 61 50 72 6f 76 69 64 65 72 28 0d 0a 20 20 20  taProvider(..   
36550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36560 20 72 6f 6f 74 4b 65 79 2c 20 76 73 56 65 72 73   rootKey, vsVers
36570 69 6f 6e 2c 20 73 75 66 66 69 78 2c 20 70 61 63  ion, suffix, pac
36580 6b 61 67 65 2c 20 70 65 72 55 73 65 72 2c 20 77  kage, perUser, w
36590 6f 77 36 34 2c 0d 0a 20 20 20 20 20 20 20 20 20  ow64,..         
365a0 20 20 20 20 20 20 20 20 20 20 20 77 68 61 74 49             whatI
365b0 66 2c 20 76 65 72 62 6f 73 65 2c 20 72 65 66 20  f, verbose, ref 
365c0 65 72 72 6f 72 29 3b 0d 0a 20 20 20 20 20 20 20  error);..       
365d0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
365e0 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72  }..        #endr
365f0 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20  egion....       
36600 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
36610 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36620 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36630 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36640 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
36650 20 20 20 20 23 72 65 67 69 6f 6e 20 56 69 73 75      #region Visu
36660 61 6c 20 53 74 75 64 69 6f 20 50 61 63 6b 61 67  al Studio Packag
36670 65 20 48 61 6e 64 6c 69 6e 67 0d 0a 20 20 20 20  e Handling..    
36680 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74      private stat
36690 69 63 20 76 6f 69 64 20 49 6e 69 74 69 61 6c 69  ic void Initiali
366a0 7a 65 56 73 50 61 63 6b 61 67 65 28 0d 0a 20 20  zeVsPackage(..  
366b0 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
366c0 20 69 6e 76 61 72 69 61 6e 74 4e 61 6d 65 2c 0d   invariantName,.
366d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72  .            str
366e0 69 6e 67 20 66 61 63 74 6f 72 79 54 79 70 65 4e  ing factoryTypeN
366f0 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ame,..          
36700 20 20 41 73 73 65 6d 62 6c 79 4e 61 6d 65 20 70    AssemblyName p
36710 72 6f 76 69 64 65 72 41 73 73 65 6d 62 6c 79 4e  roviderAssemblyN
36720 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ame,..          
36730 20 20 41 73 73 65 6d 62 6c 79 4e 61 6d 65 20 64    AssemblyName d
36740 65 73 69 67 6e 65 72 41 73 73 65 6d 62 6c 79 4e  esignerAssemblyN
36750 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ame,..          
36760 20 20 62 6f 6f 6c 20 67 6c 6f 62 61 6c 41 73 73    bool globalAss
36770 65 6d 62 6c 79 43 61 63 68 65 2c 0d 0a 20 20 20  emblyCache,..   
36780 20 20 20 20 20 20 20 20 20 72 65 66 20 50 61 63           ref Pac
36790 6b 61 67 65 20 70 61 63 6b 61 67 65 0d 0a 20 20  kage package..  
367a0 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
367b0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
367c0 20 20 20 20 69 66 20 28 70 61 63 6b 61 67 65 20      if (package 
367d0 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
367e0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
367f0 20 20 20 20 20 20 20 20 20 70 61 63 6b 61 67 65           package
36800 20 3d 20 6e 65 77 20 50 61 63 6b 61 67 65 28 29   = new Package()
36810 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
36820 20 20 20 20 20 70 61 63 6b 61 67 65 2e 49 6e 76       package.Inv
36830 61 72 69 61 6e 74 4e 61 6d 65 20 3d 20 69 6e 76  ariantName = inv
36840 61 72 69 61 6e 74 4e 61 6d 65 3b 0d 0a 20 20 20  ariantName;..   
36850 20 20 20 20 20 20 20 20 20 20 20 20 20 70 61 63               pac
36860 6b 61 67 65 2e 46 61 63 74 6f 72 79 54 79 70 65  kage.FactoryType
36870 4e 61 6d 65 20 3d 20 66 61 63 74 6f 72 79 54 79  Name = factoryTy
36880 70 65 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20  peName;..       
36890 20 20 20 20 20 20 20 20 20 70 61 63 6b 61 67 65           package
368a0 2e 50 72 6f 76 69 64 65 72 41 73 73 65 6d 62 6c  .ProviderAssembl
368b0 79 4e 61 6d 65 20 3d 20 70 72 6f 76 69 64 65 72  yName = provider
368c0 41 73 73 65 6d 62 6c 79 4e 61 6d 65 3b 0d 0a 20  AssemblyName;.. 
368d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70                 p
368e0 61 63 6b 61 67 65 2e 44 65 73 69 67 6e 65 72 41  ackage.DesignerA
368f0 73 73 65 6d 62 6c 79 4e 61 6d 65 20 3d 20 64 65  ssemblyName = de
36900 73 69 67 6e 65 72 41 73 73 65 6d 62 6c 79 4e 61  signerAssemblyNa
36910 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me;..           
36920 20 20 20 20 20 70 61 63 6b 61 67 65 2e 47 6c 6f       package.Glo
36930 62 61 6c 41 73 73 65 6d 62 6c 79 43 61 63 68 65  balAssemblyCache
36940 20 3d 20 67 6c 6f 62 61 6c 41 73 73 65 6d 62 6c   = globalAssembl
36950 79 43 61 63 68 65 3b 0d 0a 0d 0a 20 20 20 20 20  yCache;....     
36960 20 20 20 20 20 20 20 20 20 20 20 70 61 63 6b 61             packa
36970 67 65 2e 41 64 6f 4e 65 74 54 65 63 68 6e 6f 6c  ge.AdoNetTechnol
36980 6f 67 79 49 64 20 3d 20 6e 65 77 20 47 75 69 64  ogyId = new Guid
36990 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
369a0 20 20 20 20 20 20 20 22 37 37 41 42 39 41 39 44         "77AB9A9D
369b0 2d 37 38 42 39 2d 34 42 41 37 2d 39 31 41 43 2d  -78B9-4BA7-91AC-
369c0 38 37 33 46 35 33 33 38 46 31 44 32 22 29 3b 0d  873F5338F1D2");.
369d0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
369e0 20 20 20 70 61 63 6b 61 67 65 2e 50 61 63 6b 61     package.Packa
369f0 67 65 49 64 20 3d 20 6e 65 77 20 47 75 69 64 28  geId = new Guid(
36a00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
36a10 20 20 20 20 20 20 22 44 43 42 45 36 43 38 44 2d        "DCBE6C8D-
36a20 30 45 35 37 2d 34 30 39 39 2d 41 31 38 33 2d 39  0E57-4099-A183-9
36a30 38 46 46 37 34 43 36 34 44 39 43 22 29 3b 0d 0a  8FF74C64D9C");..
36a40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
36a50 20 20 70 61 63 6b 61 67 65 2e 53 65 72 76 69 63    package.Servic
36a60 65 49 64 20 3d 20 6e 65 77 20 47 75 69 64 28 0d  eId = new Guid(.
36a70 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
36a80 20 20 20 20 20 22 44 43 42 45 36 43 38 44 2d 30       "DCBE6C8D-0
36a90 45 35 37 2d 34 30 39 39 2d 41 31 38 33 2d 39 38  E57-4099-A183-98
36aa0 46 46 37 34 43 36 34 44 39 44 22 29 3b 0d 0a 0d  FF74C64D9D");...
36ab0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
36ac0 20 70 61 63 6b 61 67 65 2e 44 61 74 61 53 6f 75   package.DataSou
36ad0 72 63 65 49 64 20 3d 20 6e 65 77 20 47 75 69 64  rceId = new Guid
36ae0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
36af0 20 20 20 20 20 20 20 22 30 45 42 41 41 42 36 45         "0EBAAB6E
36b00 2d 43 41 38 30 2d 34 42 34 41 2d 38 44 44 46 2d  -CA80-4B4A-8DDF-
36b10 43 42 45 36 42 46 30 35 38 43 37 31 22 29 3b 0d  CBE6BF058C71");.
36b20 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
36b30 20 20 20 70 61 63 6b 61 67 65 2e 44 61 74 61 50     package.DataP
36b40 72 6f 76 69 64 65 72 49 64 20 3d 20 6e 65 77 20  roviderId = new 
36b50 47 75 69 64 28 0d 0a 20 20 20 20 20 20 20 20 20  Guid(..         
36b60 20 20 20 20 20 20 20 20 20 20 20 22 30 45 42 41             "0EBA
36b70 41 42 36 45 2d 43 41 38 30 2d 34 42 34 41 2d 38  AB6E-CA80-4B4A-8
36b80 44 44 46 2d 43 42 45 36 42 46 30 35 38 43 37 30  DDF-CBE6BF058C70
36b90 22 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ");..           
36ba0 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d   }..        }...
36bb0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
36bc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36bd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36be0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36bf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36c00 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76  ....        priv
36c10 61 74 65 20 73 74 61 74 69 63 20 62 6f 6f 6c 20  ate static bool 
36c20 41 64 64 56 73 50 61 63 6b 61 67 65 28 0d 0a 20  AddVsPackage(.. 
36c30 20 20 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52             MockR
36c40 65 67 69 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b  egistryKey rootK
36c50 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ey,..           
36c60 20 56 65 72 73 69 6f 6e 20 76 73 56 65 72 73 69   Version vsVersi
36c70 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  on,..           
36c80 20 73 74 72 69 6e 67 20 73 75 66 66 69 78 2c 0d   string suffix,.
36c90 0a 20 20 20 20 20 20 20 20 20 20 20 20 50 61 63  .            Pac
36ca0 6b 61 67 65 20 70 61 63 6b 61 67 65 2c 0d 0a 20  kage package,.. 
36cb0 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
36cc0 67 20 66 69 6c 65 4e 61 6d 65 2c 0d 0a 20 20 20  g fileName,..   
36cd0 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 70 65           bool pe
36ce0 72 55 73 65 72 2c 0d 0a 20 20 20 20 20 20 20 20  rUser,..        
36cf0 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34 2c 0d      bool wow64,.
36d00 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f  .            boo
36d10 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20  l whatIf,..     
36d20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65 72 62         bool verb
36d30 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ose,..          
36d40 20 20 72 65 66 20 73 74 72 69 6e 67 20 65 72 72    ref string err
36d50 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  or..            
36d60 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
36d70 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76 73            if (vs
36d80 56 65 72 73 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29  Version == null)
36d90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
36da0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
36db0 20 65 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69   error = "invali
36dc0 64 20 56 53 20 76 65 72 73 69 6f 6e 22 3b 0d 0a  d VS version";..
36dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36de0 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20  return false;.. 
36df0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
36e00 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
36e10 70 61 63 6b 61 67 65 20 3d 3d 20 6e 75 6c 6c 29  package == null)
36e20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
36e30 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
36e40 20 65 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69   error = "invali
36e50 64 20 56 53 20 70 61 63 6b 61 67 65 22 3b 0d 0a  d VS package";..
36e60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36e70 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20  return false;.. 
36e80 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
36e90 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
36ea0 6e 67 20 6b 65 79 4e 61 6d 65 20 3d 20 47 65 74  ng keyName = Get
36eb0 56 73 4b 65 79 4e 61 6d 65 28 76 73 56 65 72 73  VsKeyName(vsVers
36ec0 69 6f 6e 2c 20 73 75 66 66 69 78 2c 20 70 65 72  ion, suffix, per
36ed0 55 73 65 72 2c 20 77 6f 77 36 34 29 3b 0d 0a 0d  User, wow64);...
36ee0 0a 20 20 20 20 20 20 20 20 20 20 20 20 75 73 69  .            usi
36ef0 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73 74 72 79  ng (MockRegistry
36f00 4b 65 79 20 6b 65 79 20 3d 20 52 65 67 69 73 74  Key key = Regist
36f10 72 79 48 65 6c 70 65 72 2e 4f 70 65 6e 53 75 62  ryHelper.OpenSub
36f20 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20  Key(..          
36f30 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65            rootKe
36f40 79 2c 20 6b 65 79 4e 61 6d 65 2c 20 66 61 6c 73  y, keyName, fals
36f50 65 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f  e, whatIf, verbo
36f60 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  se))..          
36f70 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
36f80 20 20 20 20 20 69 66 20 28 6b 65 79 20 3d 3d 20       if (key == 
36f90 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
36fa0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
36fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72                er
36fc0 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72  ror = String.For
36fd0 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
36fe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 63                "c
36ff0 6f 75 6c 64 20 6e 6f 74 20 6f 70 65 6e 20 72 65  ould not open re
37000 67 69 73 74 72 79 20 6b 65 79 3a 20 7b 30 7d 5c  gistry key: {0}\
37010 5c 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20  \{1}",..        
37020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37030 72 6f 6f 74 4b 65 79 2c 20 6b 65 79 4e 61 6d 65  rootKey, keyName
37040 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
37050 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
37060 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20   false;..       
37070 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
37080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 75 73                us
37090 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73 74 72  ing (MockRegistr
370a0 79 4b 65 79 20 73 75 62 4b 65 79 20 3d 20 52 65  yKey subKey = Re
370b0 67 69 73 74 72 79 48 65 6c 70 65 72 2e 4f 70 65  gistryHelper.Ope
370c0 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20  nSubKey(..      
370d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
370e0 20 20 6b 65 79 2c 20 22 50 61 63 6b 61 67 65 73    key, "Packages
370f0 22 2c 20 74 72 75 65 2c 20 77 68 61 74 49 66 2c  ", true, whatIf,
37100 20 76 65 72 62 6f 73 65 29 29 0d 0a 20 20 20 20   verbose))..    
37110 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
37120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37130 20 20 20 69 66 20 28 73 75 62 4b 65 79 20 3d 3d     if (subKey ==
37140 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
37150 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
37160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37170 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 53         error = S
37180 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
37190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
371a0 20 20 20 20 20 20 20 20 20 20 20 22 63 6f 75 6c             "coul
371b0 64 20 6e 6f 74 20 6f 70 65 6e 20 72 65 67 69 73  d not open regis
371c0 74 72 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c 50 61  try key: {0}\\Pa
371d0 63 6b 61 67 65 73 22 2c 0d 0a 20 20 20 20 20 20  ckages",..      
371e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
371f0 20 20 20 20 20 20 6b 65 79 29 3b 0d 0a 0d 0a 20        key);.... 
37200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37210 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
37220 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lse;..          
37230 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
37240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37250 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
37260 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f             // NO
37270 54 45 3a 20 2a 57 41 52 4e 49 4e 47 2a 20 43 68  TE: *WARNING* Ch
37280 61 6e 67 69 6e 67 20 61 6e 79 20 6f 66 20 74 68  anging any of th
37290 65 73 65 20 76 61 6c 75 65 73 20 77 69 6c 6c 20  ese values will 
372a0 6c 69 6b 65 6c 79 0d 0a 20 20 20 20 20 20 20 20  likely..        
372b0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
372c0 20 20 20 20 20 72 65 71 75 69 72 65 20 61 20 6e       require a n
372d0 65 77 20 22 70 61 63 6b 61 67 65 20 6c 6f 61 64  ew "package load
372e0 20 6b 65 79 22 20 28 50 4c 4b 29 20 74 6f 20 62   key" (PLK) to b
372f0 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e..             
37300 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
37310 67 65 6e 65 72 61 74 65 64 20 69 6e 20 6f 72 64  generated in ord
37320 65 72 20 74 6f 20 70 72 6f 70 65 72 6c 79 20 73  er to properly s
37330 75 70 70 6f 72 74 20 6c 6f 61 64 69 6e 67 20 74  upport loading t
37340 68 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  he..            
37350 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
37360 20 70 61 63 6b 61 67 65 20 69 6e 74 6f 20 56 69   package into Vi
37370 73 75 61 6c 20 53 74 75 64 69 6f 20 32 30 30 38  sual Studio 2008
37380 20 61 6e 64 20 65 61 72 6c 69 65 72 20 77 69 74   and earlier wit
37390 68 6f 75 74 0d 0a 20 20 20 20 20 20 20 20 20 20  hout..          
373a0 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
373b0 20 20 20 74 68 65 20 6d 61 74 63 68 69 6e 67 20     the matching 
373c0 56 69 73 75 61 6c 20 53 74 75 64 69 6f 20 53 44  Visual Studio SD
373d0 4b 20 62 65 69 6e 67 20 69 6e 73 74 61 6c 6c 65  K being installe
373e0 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  d...            
373f0 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
37400 20 50 6c 65 61 73 65 20 72 65 66 65 72 20 74 6f   Please refer to
37410 20 74 68 65 20 22 53 51 4c 69 74 65 2e 44 65 73   the "SQLite.Des
37420 69 67 6e 65 72 5c 70 6c 6b 2e 74 78 74 22 20 66  igner\plk.txt" f
37430 69 6c 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ile..           
37440 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
37450 20 20 66 6f 72 20 74 68 65 20 65 78 69 73 74 69    for the existi
37460 6e 67 20 6f 66 66 69 63 69 61 6c 20 76 61 6c 75  ng official valu
37470 65 73 20 61 6e 64 20 75 70 64 61 74 65 20 74 68  es and update th
37480 65 6d 20 69 66 0d 0a 20 20 20 20 20 20 20 20 20  em if..         
37490 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
374a0 20 20 20 20 6e 65 63 65 73 73 61 72 79 2e 20 20      necessary.  
374b0 41 6c 73 6f 2c 20 74 68 65 20 6e 65 77 6c 79 20  Also, the newly 
374c0 67 65 6e 65 72 61 74 65 64 20 70 61 63 6b 61 67  generated packag
374d0 65 20 6c 6f 61 64 0d 0a 20 20 20 20 20 20 20 20  e load..        
374e0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
374f0 20 20 20 20 20 6b 65 79 20 69 74 73 65 6c 66 2c       key itself,
37500 20 77 68 69 63 68 20 69 73 20 61 20 31 32 38 20   which is a 128 
37510 63 68 61 72 61 63 74 65 72 20 61 6c 70 68 61 6e  character alphan
37520 75 6d 65 72 69 63 0d 0a 20 20 20 20 20 20 20 20  umeric..        
37530 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
37540 20 20 20 20 20 73 74 72 69 6e 67 2c 20 6d 75 73       string, mus
37550 74 20 62 65 20 70 6c 61 63 65 64 20 69 6e 20 74  t be placed in t
37560 68 65 20 72 65 73 6f 75 72 63 65 20 73 74 72 69  he resource stri
37570 6e 67 20 6e 61 6d 65 64 0d 0a 20 20 20 20 20 20  ng named..      
37580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
37590 20 20 20 20 20 20 20 22 34 30 30 22 20 69 6e 20         "400" in 
375a0 74 68 65 20 22 53 51 4c 69 74 65 2e 44 65 73 69  the "SQLite.Desi
375b0 67 6e 65 72 5c 56 53 50 61 63 6b 61 67 65 2e 72  gner\VSPackage.r
375c0 65 73 78 22 20 66 69 6c 65 0d 0a 20 20 20 20 20  esx" file..     
375d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
375e0 2f 20 20 20 20 20 20 20 61 6e 64 20 74 68 65 6e  /       and then
375f0 20 74 68 65 20 64 65 73 69 67 6e 65 72 20 61 73   the designer as
37600 73 65 6d 62 6c 79 20 69 74 73 65 6c 66 20 6d 75  sembly itself mu
37610 73 74 20 62 65 0d 0a 20 20 20 20 20 20 20 20 20  st be..         
37620 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
37630 20 20 20 20 72 65 63 6f 6d 70 69 6c 65 64 2e 20      recompiled. 
37640 20 41 73 20 6f 66 20 74 68 69 73 20 77 72 69 74   As of this writ
37650 69 6e 67 20 28 69 6e 20 46 65 62 72 75 61 72 79  ing (in February
37660 20 32 30 31 32 29 2c 0d 0a 20 20 20 20 20 20 20   2012),..       
37670 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
37680 20 20 20 20 20 20 74 68 65 20 66 6f 6c 6c 6f 77        the follow
37690 69 6e 67 20 55 52 4c 20 69 73 20 74 68 65 20 70  ing URL is the p
376a0 72 6f 70 65 72 20 70 6c 61 63 65 20 74 6f 20 67  roper place to g
376b0 65 6e 65 72 61 74 65 0d 0a 20 20 20 20 20 20 20  enerate..       
376c0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
376d0 20 20 20 20 20 20 70 61 63 6b 61 67 65 20 6c 6f        package lo
376e0 61 64 20 6b 65 79 73 3a 0d 0a 20 20 20 20 20 20  ad keys:..      
376f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
37700 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
37710 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 68        //       h
37720 74 74 70 3a 2f 2f 6d 73 64 6e 2e 6d 69 63 72 6f  ttp://msdn.micro
37730 73 6f 66 74 2e 63 6f 6d 2f 65 6e 2d 75 73 2f 76  soft.com/en-us/v
37740 73 74 75 64 69 6f 2f 63 63 36 35 35 37 39 35 0d  studio/cc655795.
37750 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
37760 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
37770 20 20 20 20 20 20 20 20 20 20 20 20 20 75 73 69               usi
37780 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73 74 72 79  ng (MockRegistry
37790 4b 65 79 20 70 61 63 6b 61 67 65 4b 65 79 20 3d  Key packageKey =
377a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
377b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65                Re
377c0 67 69 73 74 72 79 48 65 6c 70 65 72 2e 43 72 65  gistryHelper.Cre
377d0 61 74 65 53 75 62 4b 65 79 28 73 75 62 4b 65 79  ateSubKey(subKey
377e0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
377f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70                 p
37800 61 63 6b 61 67 65 2e 50 61 63 6b 61 67 65 49 64  ackage.PackageId
37810 2e 54 6f 53 74 72 69 6e 67 28 56 73 49 64 46 6f  .ToString(VsIdFo
37820 72 6d 61 74 29 2c 20 77 68 61 74 49 66 2c 0d 0a  rmat), whatIf,..
37830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37840 20 20 20 20 20 20 20 20 20 20 20 20 76 65 72 62              verb
37850 6f 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ose))..         
37860 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
37870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37880 20 20 20 20 20 20 69 66 20 28 70 61 63 6b 61 67        if (packag
37890 65 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  eKey == null).. 
378a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
378b0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
378c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
378d0 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 53 74        error = St
378e0 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
378f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 63                "c
37910 6f 75 6c 64 20 6e 6f 74 20 63 72 65 61 74 65 20  ould not create 
37920 72 65 67 69 73 74 72 79 20 6b 65 79 3a 20 7b 30  registry key: {0
37930 7d 5c 5c 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20  }\\{1}",..      
37940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37950 20 20 20 20 20 20 20 20 20 20 6b 65 79 2c 20 70            key, p
37960 61 63 6b 61 67 65 2e 50 61 63 6b 61 67 65 49 64  ackage.PackageId
37970 2e 54 6f 53 74 72 69 6e 67 28 56 73 49 64 46 6f  .ToString(VsIdFo
37980 72 6d 61 74 29 29 3b 0d 0a 0d 0a 20 20 20 20 20  rmat));....     
37990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
379a0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
379b0 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lse;..          
379c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
379d0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
379e0 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73             Regis
379f0 74 72 79 48 65 6c 70 65 72 2e 53 65 74 56 61 6c  tryHelper.SetVal
37a00 75 65 28 70 61 63 6b 61 67 65 4b 65 79 2c 20 6e  ue(packageKey, n
37a10 75 6c 6c 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ull,..          
37a20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37a30 20 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28    String.Format(
37a40 22 7b 30 7d 20 44 65 73 69 67 6e 65 72 20 50 61  "{0} Designer Pa
37a50 63 6b 61 67 65 22 2c 20 50 72 6f 6a 65 63 74 4e  ckage", ProjectN
37a60 61 6d 65 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  ame),..         
37a70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37a80 20 20 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f     whatIf, verbo
37a90 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  se);....        
37aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37ab0 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 53  RegistryHelper.S
37ac0 65 74 56 61 6c 75 65 28 70 61 63 6b 61 67 65 4b  etValue(packageK
37ad0 65 79 2c 20 22 43 6c 61 73 73 22 2c 0d 0a 20 20  ey, "Class",..  
37ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37af0 20 20 20 20 20 20 20 20 20 20 22 53 51 4c 69 74            "SQLit
37b00 65 2e 44 65 73 69 67 6e 65 72 2e 53 51 4c 69 74  e.Designer.SQLit
37b10 65 50 61 63 6b 61 67 65 22 2c 20 77 68 61 74 49  ePackage", whatI
37b20 66 2c 20 76 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a  f, verbose);....
37b30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37b40 20 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79          Registry
37b50 48 65 6c 70 65 72 2e 53 65 74 56 61 6c 75 65 28  Helper.SetValue(
37b60 70 61 63 6b 61 67 65 4b 65 79 2c 20 22 43 6f 64  packageKey, "Cod
37b70 65 42 61 73 65 22 2c 0d 0a 20 20 20 20 20 20 20  eBase",..       
37b80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37b90 20 20 20 20 20 66 69 6c 65 4e 61 6d 65 2c 20 77       fileName, w
37ba0 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 3b  hatIf, verbose);
37bb0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
37bc0 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69              Regi
37bd0 73 74 72 79 48 65 6c 70 65 72 2e 53 65 74 56 61  stryHelper.SetVa
37be0 6c 75 65 28 70 61 63 6b 61 67 65 4b 65 79 2c 20  lue(packageKey, 
37bf0 22 49 44 22 2c 20 34 30 30 2c 20 77 68 61 74 49  "ID", 400, whatI
37c00 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  f,..            
37c10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37c20 76 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20  verbose);....   
37c30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37c40 20 20 20 20 20 73 74 72 69 6e 67 20 64 69 72 65       string dire
37c50 63 74 6f 72 79 20 3d 20 47 65 74 53 79 73 74 65  ctory = GetSyste
37c60 6d 44 69 72 65 63 74 6f 72 79 28 77 6f 77 36 34  mDirectory(wow64
37c70 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
37c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
37c90 20 28 64 69 72 65 63 74 6f 72 79 20 3d 3d 20 6e   (directory == n
37ca0 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
37cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37cc0 20 20 64 69 72 65 63 74 6f 72 79 20 3d 20 53 74    directory = St
37cd0 72 69 6e 67 2e 45 6d 70 74 79 3b 0d 0a 0d 0a 20  ring.Empty;.... 
37ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37cf0 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79 48         RegistryH
37d00 65 6c 70 65 72 2e 53 65 74 56 61 6c 75 65 28 70  elper.SetValue(p
37d10 61 63 6b 61 67 65 4b 65 79 2c 20 22 49 6e 70 72  ackageKey, "Inpr
37d20 6f 63 53 65 72 76 65 72 33 32 22 2c 0d 0a 20 20  ocServer32",..  
37d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37d40 20 20 20 20 20 20 20 20 20 20 50 61 74 68 2e 43            Path.C
37d50 6f 6d 62 69 6e 65 28 64 69 72 65 63 74 6f 72 79  ombine(directory
37d60 2c 20 22 6d 73 63 6f 72 65 65 2e 64 6c 6c 22 29  , "mscoree.dll")
37d70 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
37d80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 77                 w
37d90 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 3b  hatIf, verbose);
37da0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
37db0 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69              Regi
37dc0 73 74 72 79 48 65 6c 70 65 72 2e 53 65 74 56 61  stryHelper.SetVa
37dd0 6c 75 65 28 70 61 63 6b 61 67 65 4b 65 79 2c 20  lue(packageKey, 
37de0 22 43 6f 6d 70 61 6e 79 4e 61 6d 65 22 2c 0d 0a  "CompanyName",..
37df0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37e00 20 20 20 20 20 20 20 20 20 20 20 20 22 68 74 74              "htt
37e10 70 3a 2f 2f 73 79 73 74 65 6d 2e 64 61 74 61 2e  p://system.data.
37e20 73 71 6c 69 74 65 2e 6f 72 67 2f 22 2c 20 77 68  sqlite.org/", wh
37e30 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 3b 0d  atIf, verbose);.
37e40 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
37e50 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73             Regis
37e60 74 72 79 48 65 6c 70 65 72 2e 53 65 74 56 61 6c  tryHelper.SetVal
37e70 75 65 28 70 61 63 6b 61 67 65 4b 65 79 2c 20 22  ue(packageKey, "
37e80 4d 69 6e 45 64 69 74 69 6f 6e 22 2c 0d 0a 20 20  MinEdition",..  
37e90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37ea0 20 20 20 20 20 20 20 20 20 20 22 73 74 61 6e 64            "stand
37eb0 61 72 64 22 2c 20 77 68 61 74 49 66 2c 20 76 65  ard", whatIf, ve
37ec0 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20  rbose);....     
37ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37ee0 20 20 20 52 65 67 69 73 74 72 79 48 65 6c 70 65     RegistryHelpe
37ef0 72 2e 53 65 74 56 61 6c 75 65 28 70 61 63 6b 61  r.SetValue(packa
37f00 67 65 4b 65 79 2c 20 22 50 72 6f 64 75 63 74 4e  geKey, "ProductN
37f10 61 6d 65 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  ame",..         
37f20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37f30 20 20 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74     String.Format
37f40 28 22 7b 30 7d 20 44 65 73 69 67 6e 65 72 20 50  ("{0} Designer P
37f50 61 63 6b 61 67 65 22 2c 20 50 72 6f 6a 65 63 74  ackage", Project
37f60 4e 61 6d 65 29 2c 0d 0a 20 20 20 20 20 20 20 20  Name),..        
37f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37f80 20 20 20 20 77 68 61 74 49 66 2c 20 76 65 72 62      whatIf, verb
37f90 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ose);....       
37fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37fb0 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e   RegistryHelper.
37fc0 53 65 74 56 61 6c 75 65 28 70 61 63 6b 61 67 65  SetValue(package
37fd0 4b 65 79 2c 20 22 50 72 6f 64 75 63 74 56 65 72  Key, "ProductVer
37fe0 73 69 6f 6e 22 2c 0d 0a 20 20 20 20 20 20 20 20  sion",..        
37ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38000 20 20 20 20 22 31 2e 30 22 2c 20 77 68 61 74 49      "1.0", whatI
38010 66 2c 20 76 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a  f, verbose);....
38020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38030 20 20 20 20 20 20 20 20 75 73 69 6e 67 20 28 4d          using (M
38040 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 74  ockRegistryKey t
38050 6f 6f 6c 62 6f 78 4b 65 79 20 3d 0d 0a 20 20 20  oolboxKey =..   
38060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38070 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67               Reg
38080 69 73 74 72 79 48 65 6c 70 65 72 2e 43 72 65 61  istryHelper.Crea
38090 74 65 53 75 62 4b 65 79 28 70 61 63 6b 61 67 65  teSubKey(package
380a0 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  Key,..          
380b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
380c0 20 20 20 20 20 20 22 54 6f 6f 6c 62 6f 78 22 2c        "Toolbox",
380d0 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65   whatIf, verbose
380e0 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
380f0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
38100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38110 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 74             if (t
38120 6f 6f 6c 62 6f 78 4b 65 79 20 3d 3d 20 6e 75 6c  oolboxKey == nul
38130 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
38140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38150 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
38160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38170 20 20 20 65 72 72 6f 72 20 3d 20 53 74 72 69 6e     error = Strin
38180 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
38190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
381a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
381b0 63 6f 75 6c 64 20 6e 6f 74 20 63 72 65 61 74 65  could not create
381c0 20 72 65 67 69 73 74 72 79 20 6b 65 79 3a 20 22   registry key: "
381d0 20 2b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   +..            
381e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
381f0 20 20 20 20 20 20 20 20 22 7b 30 7d 5c 5c 54 6f          "{0}\\To
38200 6f 6c 62 6f 78 22 2c 20 70 61 63 6b 61 67 65 4b  olbox", packageK
38210 65 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ey);....        
38220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38230 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
38240 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alse;..         
38250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38260 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
38270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38280 20 20 20 20 52 65 67 69 73 74 72 79 48 65 6c 70      RegistryHelp
38290 65 72 2e 53 65 74 56 61 6c 75 65 28 0d 0a 20 20  er.SetValue(..  
382a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
382b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 6f                to
382c0 6f 6c 62 6f 78 4b 65 79 2c 20 22 44 65 66 61 75  olboxKey, "Defau
382d0 6c 74 20 49 74 65 6d 73 22 2c 20 33 2c 20 77 68  lt Items", 3, wh
382e0 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20  atIf,..         
382f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38300 20 20 20 20 20 20 20 76 65 72 62 6f 73 65 29 3b         verbose);
38310 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
38320 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
38330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38340 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
38350 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
38360 20 20 20 20 20 20 20 20 20 75 73 69 6e 67 20 28           using (
38370 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20  MockRegistryKey 
38380 73 75 62 4b 65 79 20 3d 20 52 65 67 69 73 74 72  subKey = Registr
38390 79 48 65 6c 70 65 72 2e 4f 70 65 6e 53 75 62 4b  yHelper.OpenSubK
383a0 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ey(..           
383b0 20 20 20 20 20 20 20 20 20 20 20 20 20 6b 65 79               key
383c0 2c 20 22 4d 65 6e 75 73 22 2c 20 74 72 75 65 2c  , "Menus", true,
383d0 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65   whatIf, verbose
383e0 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
383f0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
38400 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 73             if (s
38410 75 62 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  ubKey == null)..
38420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38430 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
38440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
38450 72 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46 6f  rror = String.Fo
38460 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
38470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38480 20 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20 6f 70     "could not op
38490 65 6e 20 72 65 67 69 73 74 72 79 20 6b 65 79 3a  en registry key:
384a0 20 7b 30 7d 5c 5c 4d 65 6e 75 73 22 2c 0d 0a 20   {0}\\Menus",.. 
384b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
384c0 20 20 20 20 20 20 20 20 20 20 20 6b 65 79 29 3b             key);
384d0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
384e0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
384f0 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20  rn false;..     
38500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
38510 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
38520 20 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79          Registry
38530 48 65 6c 70 65 72 2e 53 65 74 56 61 6c 75 65 28  Helper.SetValue(
38540 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
38550 20 20 20 20 20 20 20 20 20 20 73 75 62 4b 65 79            subKey
38560 2c 20 70 61 63 6b 61 67 65 2e 50 61 63 6b 61 67  , package.Packag
38570 65 49 64 2e 54 6f 53 74 72 69 6e 67 28 56 73 49  eId.ToString(VsI
38580 64 46 6f 72 6d 61 74 29 2c 0d 0a 20 20 20 20 20  dFormat),..     
38590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
385a0 20 20 20 22 2c 20 31 30 30 30 2c 20 33 22 2c 20     ", 1000, 3", 
385b0 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29  whatIf, verbose)
385c0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
385d0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
385e0 20 20 20 20 20 20 20 20 75 73 69 6e 67 20 28 4d          using (M
385f0 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 73  ockRegistryKey s
38600 75 62 4b 65 79 20 3d 20 52 65 67 69 73 74 72 79  ubKey = Registry
38610 48 65 6c 70 65 72 2e 4f 70 65 6e 53 75 62 4b 65  Helper.OpenSubKe
38620 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y(..            
38630 20 20 20 20 20 20 20 20 20 20 20 20 6b 65 79 2c              key,
38640 20 22 53 65 72 76 69 63 65 73 22 2c 20 74 72 75   "Services", tru
38650 65 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f  e, whatIf, verbo
38660 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  se))..          
38670 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
38680 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
38690 28 73 75 62 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29  (subKey == null)
386a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
386b0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
386c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
386d0 20 65 72 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e   error = String.
386e0 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
386f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38700 20 20 20 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20       "could not 
38710 6f 70 65 6e 20 72 65 67 69 73 74 72 79 20 6b 65  open registry ke
38720 79 3a 20 7b 30 7d 5c 5c 53 65 72 76 69 63 65 73  y: {0}\\Services
38730 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
38740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38750 6b 65 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  key);....       
38760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38770 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
38780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38790 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
387a0 20 20 20 20 20 20 20 20 20 20 20 20 20 75 73 69               usi
387b0 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73 74 72 79  ng (MockRegistry
387c0 4b 65 79 20 73 65 72 76 69 63 65 4b 65 79 20 3d  Key serviceKey =
387d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
387e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65                Re
387f0 67 69 73 74 72 79 48 65 6c 70 65 72 2e 43 72 65  gistryHelper.Cre
38800 61 74 65 53 75 62 4b 65 79 28 73 75 62 4b 65 79  ateSubKey(subKey
38810 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..