System.Data.SQLite
Hex Artifact Content
Not logged in

Artifact 76e960f1afbe18233ccd73c1d9d4bf005efba9a8:


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 20 20 20 20 20 20 20        }..       
219d0 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
219e0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
219f0 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f         #endregio
21a00 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n....           
21a10 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
21a20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21a30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21a40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21a50 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
21a60 20 20 20 20 23 72 65 67 69 6f 6e 20 50 75 62 6c      #region Publ
21a70 69 63 20 50 72 6f 70 65 72 74 69 65 73 0d 0a 20  ic Properties.. 
21a80 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
21a90 74 65 20 41 73 73 65 6d 62 6c 79 20 61 73 73 65  te Assembly asse
21aa0 6d 62 6c 79 3b 0d 0a 20 20 20 20 20 20 20 20 20  mbly;..         
21ab0 20 20 20 70 75 62 6c 69 63 20 41 73 73 65 6d 62     public Assemb
21ac0 6c 79 20 41 73 73 65 6d 62 6c 79 0d 0a 20 20 20  ly Assembly..   
21ad0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
21ae0 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20              get 
21af0 7b 20 72 65 74 75 72 6e 20 61 73 73 65 6d 62 6c  { return assembl
21b00 79 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  y; }..          
21b10 20 20 20 20 20 20 73 65 74 20 7b 20 61 73 73 65        set { asse
21b20 6d 62 6c 79 20 3d 20 76 61 6c 75 65 3b 20 7d 0d  mbly = value; }.
21b30 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
21b40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
21b50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21b60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21b70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21b80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21b90 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
21ba0 20 70 72 69 76 61 74 65 20 73 74 72 69 6e 67 20   private string 
21bb0 6c 6f 67 46 69 6c 65 4e 61 6d 65 3b 0d 0a 20 20  logFileName;..  
21bc0 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
21bd0 20 73 74 72 69 6e 67 20 4c 6f 67 46 69 6c 65 4e   string LogFileN
21be0 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ame..           
21bf0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
21c00 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e      get { return
21c10 20 6c 6f 67 46 69 6c 65 4e 61 6d 65 3b 20 7d 0d   logFileName; }.
21c20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
21c30 20 73 65 74 20 7b 20 6c 6f 67 46 69 6c 65 4e 61   set { logFileNa
21c40 6d 65 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20  me = value; }.. 
21c50 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
21c60 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
21c70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21c80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21c90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21ca0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
21cb0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
21cc0 72 69 76 61 74 65 20 73 74 72 69 6e 67 20 64 69  rivate string di
21cd0 72 65 63 74 6f 72 79 3b 0d 0a 20 20 20 20 20 20  rectory;..      
21ce0 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 72        public str
21cf0 69 6e 67 20 44 69 72 65 63 74 6f 72 79 0d 0a 20  ing Directory.. 
21d00 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
21d10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65                ge
21d20 74 20 7b 20 72 65 74 75 72 6e 20 64 69 72 65 63  t { return direc
21d30 74 6f 72 79 3b 20 7d 0d 0a 20 20 20 20 20 20 20  tory; }..       
21d40 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 64           set { d
21d50 69 72 65 63 74 6f 72 79 20 3d 20 76 61 6c 75 65  irectory = value
21d60 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
21d70 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
21d80 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
21d90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21da0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21db0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21dc0 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
21dd0 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 72       private str
21de0 69 6e 67 20 63 6f 72 65 46 69 6c 65 4e 61 6d 65  ing coreFileName
21df0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ;..            p
21e00 75 62 6c 69 63 20 73 74 72 69 6e 67 20 43 6f 72  ublic string Cor
21e10 65 46 69 6c 65 4e 61 6d 65 0d 0a 20 20 20 20 20  eFileName..     
21e20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
21e30 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20            get { 
21e40 72 65 74 75 72 6e 20 63 6f 72 65 46 69 6c 65 4e  return coreFileN
21e50 61 6d 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  ame; }..        
21e60 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 63 6f          set { co
21e70 72 65 46 69 6c 65 4e 61 6d 65 20 3d 20 76 61 6c  reFileName = val
21e80 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  ue; }..         
21e90 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
21ea0 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
21eb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21ec0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21ed0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21ee0 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
21ef0 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
21f00 74 72 69 6e 67 20 6c 69 6e 71 46 69 6c 65 4e 61  tring linqFileNa
21f10 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me;..           
21f20 20 70 75 62 6c 69 63 20 73 74 72 69 6e 67 20 4c   public string L
21f30 69 6e 71 46 69 6c 65 4e 61 6d 65 0d 0a 20 20 20  inqFileName..   
21f40 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
21f50 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20              get 
21f60 7b 20 72 65 74 75 72 6e 20 6c 69 6e 71 46 69 6c  { return linqFil
21f70 65 4e 61 6d 65 3b 20 7d 0d 0a 20 20 20 20 20 20  eName; }..      
21f80 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20            set { 
21f90 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 20 3d 20 76  linqFileName = v
21fa0 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20  alue; }..       
21fb0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
21fc0 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
21fd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21fe0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21ff0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22000 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
22010 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65           private
22020 20 73 74 72 69 6e 67 20 65 66 36 46 69 6c 65 4e   string ef6FileN
22030 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ame;..          
22040 20 20 70 75 62 6c 69 63 20 73 74 72 69 6e 67 20    public string 
22050 45 66 36 46 69 6c 65 4e 61 6d 65 0d 0a 20 20 20  Ef6FileName..   
22060 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
22070 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20              get 
22080 7b 20 72 65 74 75 72 6e 20 65 66 36 46 69 6c 65  { return ef6File
22090 4e 61 6d 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20  Name; }..       
220a0 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 65           set { e
220b0 66 36 46 69 6c 65 4e 61 6d 65 20 3d 20 76 61 6c  f6FileName = val
220c0 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  ue; }..         
220d0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
220e0 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
220f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22100 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22110 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22120 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
22130 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
22140 74 72 69 6e 67 20 64 65 73 69 67 6e 65 72 46 69  tring designerFi
22150 6c 65 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20  leName;..       
22160 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 72 69       public stri
22170 6e 67 20 44 65 73 69 67 6e 65 72 46 69 6c 65 4e  ng DesignerFileN
22180 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ame..           
22190 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
221a0 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e      get { return
221b0 20 64 65 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d   designerFileNam
221c0 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  e; }..          
221d0 20 20 20 20 20 20 73 65 74 20 7b 20 64 65 73 69        set { desi
221e0 67 6e 65 72 46 69 6c 65 4e 61 6d 65 20 3d 20 76  gnerFileName = v
221f0 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20  alue; }..       
22200 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
22210 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
22220 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22230 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22240 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22250 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
22260 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65           private
22270 20 73 74 72 69 6e 67 20 72 65 67 69 73 74 72 79   string registry
22280 56 65 72 73 69 6f 6e 3b 0d 0a 20 20 20 20 20 20  Version;..      
22290 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 72        public str
222a0 69 6e 67 20 52 65 67 69 73 74 72 79 56 65 72 73  ing RegistryVers
222b0 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ion..           
222c0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
222d0 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e      get { return
222e0 20 72 65 67 69 73 74 72 79 56 65 72 73 69 6f 6e   registryVersion
222f0 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
22300 20 20 20 20 20 73 65 74 20 7b 20 72 65 67 69 73       set { regis
22310 74 72 79 56 65 72 73 69 6f 6e 20 3d 20 76 61 6c  tryVersion = val
22320 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  ue; }..         
22330 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
22340 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22370 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22380 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
22390 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
223a0 74 72 69 6e 67 20 63 6f 6e 66 69 67 56 65 72 73  tring configVers
223b0 69 6f 6e 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ion;..          
223c0 20 20 70 75 62 6c 69 63 20 73 74 72 69 6e 67 20    public string 
223d0 43 6f 6e 66 69 67 56 65 72 73 69 6f 6e 0d 0a 20  ConfigVersion.. 
223e0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
223f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65                ge
22400 74 20 7b 20 72 65 74 75 72 6e 20 63 6f 6e 66 69  t { return confi
22410 67 56 65 72 73 69 6f 6e 3b 20 7d 0d 0a 20 20 20  gVersion; }..   
22420 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74               set
22430 20 7b 20 63 6f 6e 66 69 67 56 65 72 73 69 6f 6e   { configVersion
22440 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20   = value; }..   
22450 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
22460 20 20 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22490 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
224a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
224b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69  .            pri
224c0 76 61 74 65 20 73 74 72 69 6e 67 20 76 73 56 65  vate string vsVe
224d0 72 73 69 6f 6e 53 75 66 66 69 78 3b 0d 0a 20 20  rsionSuffix;..  
224e0 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
224f0 20 73 74 72 69 6e 67 20 56 73 56 65 72 73 69 6f   string VsVersio
22500 6e 53 75 66 66 69 78 0d 0a 20 20 20 20 20 20 20  nSuffix..       
22510 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
22520 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65          get { re
22530 74 75 72 6e 20 76 73 56 65 72 73 69 6f 6e 53 75  turn vsVersionSu
22540 66 66 69 78 3b 20 7d 0d 0a 20 20 20 20 20 20 20  ffix; }..       
22550 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 76           set { v
22560 73 56 65 72 73 69 6f 6e 53 75 66 66 69 78 20 3d  sVersionSuffix =
22570 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20   value; }..     
22580 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
22590 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
225a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
225b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
225c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
225d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
225e0 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
225f0 74 65 20 73 74 72 69 6e 67 20 64 65 62 75 67 46  te string debugF
22600 6f 72 6d 61 74 3b 0d 0a 20 20 20 20 20 20 20 20  ormat;..        
22610 20 20 20 20 70 75 62 6c 69 63 20 73 74 72 69 6e      public strin
22620 67 20 44 65 62 75 67 46 6f 72 6d 61 74 0d 0a 20  g DebugFormat.. 
22630 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
22640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65                ge
22650 74 20 7b 20 72 65 74 75 72 6e 20 64 65 62 75 67  t { return debug
22660 46 6f 72 6d 61 74 3b 20 7d 0d 0a 20 20 20 20 20  Format; }..     
22670 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b             set {
22680 20 64 65 62 75 67 46 6f 72 6d 61 74 20 3d 20 76   debugFormat = v
22690 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20  alue; }..       
226a0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
226b0 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
226c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
226d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
226e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
226f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
22700 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65           private
22710 20 73 74 72 69 6e 67 20 74 72 61 63 65 46 6f 72   string traceFor
22720 6d 61 74 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  mat;..          
22730 20 20 70 75 62 6c 69 63 20 73 74 72 69 6e 67 20    public string 
22740 54 72 61 63 65 46 6f 72 6d 61 74 0d 0a 20 20 20  TraceFormat..   
22750 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
22760 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20              get 
22770 7b 20 72 65 74 75 72 6e 20 74 72 61 63 65 46 6f  { return traceFo
22780 72 6d 61 74 3b 20 7d 0d 0a 20 20 20 20 20 20 20  rmat; }..       
22790 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 74           set { t
227a0 72 61 63 65 46 6f 72 6d 61 74 20 3d 20 76 61 6c  raceFormat = val
227b0 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  ue; }..         
227c0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
227d0 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
227e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
227f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22800 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22810 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
22820 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 49         private I
22830 6e 73 74 61 6c 6c 46 6c 61 67 73 20 69 6e 73 74  nstallFlags inst
22840 61 6c 6c 46 6c 61 67 73 3b 0d 0a 20 20 20 20 20  allFlags;..     
22850 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 49 6e         public In
22860 73 74 61 6c 6c 46 6c 61 67 73 20 49 6e 73 74 61  stallFlags Insta
22870 6c 6c 46 6c 61 67 73 0d 0a 20 20 20 20 20 20 20  llFlags..       
22880 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
22890 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65          get { re
228a0 74 75 72 6e 20 69 6e 73 74 61 6c 6c 46 6c 61 67  turn installFlag
228b0 73 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  s; }..          
228c0 20 20 20 20 20 20 73 65 74 20 7b 20 69 6e 73 74        set { inst
228d0 61 6c 6c 46 6c 61 67 73 20 3d 20 76 61 6c 75 65  allFlags = value
228e0 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
228f0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
22900 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
22910 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22920 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22930 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22940 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
22950 20 20 20 20 20 70 72 69 76 61 74 65 20 54 72 61       private Tra
22960 63 65 50 72 69 6f 72 69 74 79 20 64 65 62 75 67  cePriority debug
22970 50 72 69 6f 72 69 74 79 3b 0d 0a 20 20 20 20 20  Priority;..     
22980 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 54 72         public Tr
22990 61 63 65 50 72 69 6f 72 69 74 79 20 44 65 62 75  acePriority Debu
229a0 67 50 72 69 6f 72 69 74 79 0d 0a 20 20 20 20 20  gPriority..     
229b0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
229c0 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20            get { 
229d0 72 65 74 75 72 6e 20 64 65 62 75 67 50 72 69 6f  return debugPrio
229e0 72 69 74 79 3b 20 7d 0d 0a 20 20 20 20 20 20 20  rity; }..       
229f0 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 64           set { d
22a00 65 62 75 67 50 72 69 6f 72 69 74 79 20 3d 20 76  ebugPriority = v
22a10 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20  alue; }..       
22a20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
22a30 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
22a40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22a50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22a60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22a70 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
22a80 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65           private
22a90 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 20 74   TracePriority t
22aa0 72 61 63 65 50 72 69 6f 72 69 74 79 3b 0d 0a 20  racePriority;.. 
22ab0 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
22ac0 63 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 20  c TracePriority 
22ad0 54 72 61 63 65 50 72 69 6f 72 69 74 79 0d 0a 20  TracePriority.. 
22ae0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
22af0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65                ge
22b00 74 20 7b 20 72 65 74 75 72 6e 20 74 72 61 63 65  t { return trace
22b10 50 72 69 6f 72 69 74 79 3b 20 7d 0d 0a 20 20 20  Priority; }..   
22b20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74               set
22b30 20 7b 20 74 72 61 63 65 50 72 69 6f 72 69 74 79   { tracePriority
22b40 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20   = value; }..   
22b50 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
22b60 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
22b70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22b80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22b90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22ba0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
22bb0 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69  .            pri
22bc0 76 61 74 65 20 62 6f 6f 6c 20 70 65 72 55 73 65  vate bool perUse
22bd0 72 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  r;..            
22be0 70 75 62 6c 69 63 20 62 6f 6f 6c 20 50 65 72 55  public bool PerU
22bf0 73 65 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ser..           
22c00 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
22c10 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e      get { return
22c20 20 70 65 72 55 73 65 72 3b 20 7d 0d 0a 20 20 20   perUser; }..   
22c30 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74               set
22c40 20 7b 20 70 65 72 55 73 65 72 20 3d 20 76 61 6c   { perUser = val
22c50 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  ue; }..         
22c60 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
22c70 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
22c80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22c90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22ca0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22cb0 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
22cc0 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 62         private b
22cd0 6f 6f 6c 20 69 6e 73 74 61 6c 6c 3b 0d 0a 20 20  ool install;..  
22ce0 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
22cf0 20 62 6f 6f 6c 20 49 6e 73 74 61 6c 6c 0d 0a 20   bool Install.. 
22d00 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
22d10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65                ge
22d20 74 20 7b 20 72 65 74 75 72 6e 20 69 6e 73 74 61  t { return insta
22d30 6c 6c 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  ll; }..         
22d40 20 20 20 20 20 20 20 73 65 74 20 7b 20 69 6e 73         set { ins
22d50 74 61 6c 6c 20 3d 20 76 61 6c 75 65 3b 20 7d 0d  tall = value; }.
22d60 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
22d70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22dc0 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
22dd0 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 77 6f   private bool wo
22de0 77 36 34 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  w64;..          
22df0 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 57 6f    public bool Wo
22e00 77 36 34 0d 0a 20 20 20 20 20 20 20 20 20 20 20  w64..           
22e10 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
22e20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e      get { return
22e30 20 77 6f 77 36 34 3b 20 7d 0d 0a 20 20 20 20 20   wow64; }..     
22e40 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b             set {
22e50 20 77 6f 77 36 34 20 3d 20 76 61 6c 75 65 3b 20   wow64 = value; 
22e60 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
22e70 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
22e80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
22ed0 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20     private bool 
22ee0 6e 6f 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e  noRuntimeVersion
22ef0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ;..            p
22f00 75 62 6c 69 63 20 62 6f 6f 6c 20 4e 6f 52 75 6e  ublic bool NoRun
22f10 74 69 6d 65 56 65 72 73 69 6f 6e 0d 0a 20 20 20  timeVersion..   
22f20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
22f30 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20              get 
22f40 7b 20 72 65 74 75 72 6e 20 6e 6f 52 75 6e 74 69  { return noRunti
22f50 6d 65 56 65 72 73 69 6f 6e 3b 20 7d 0d 0a 20 20  meVersion; }..  
22f60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65                se
22f70 74 20 7b 20 6e 6f 52 75 6e 74 69 6d 65 56 65 72  t { noRuntimeVer
22f80 73 69 6f 6e 20 3d 20 76 61 6c 75 65 3b 20 7d 0d  sion = value; }.
22f90 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
22fa0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 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 2f 2f  ////////////////
22ff0 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
23000 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 6e 6f   private bool no
23010 44 65 73 6b 74 6f 70 3b 0d 0a 20 20 20 20 20 20  Desktop;..      
23020 20 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f        public boo
23030 6c 20 4e 6f 44 65 73 6b 74 6f 70 0d 0a 20 20 20  l NoDesktop..   
23040 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
23050 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20              get 
23060 7b 20 72 65 74 75 72 6e 20 6e 6f 44 65 73 6b 74  { return noDeskt
23070 6f 70 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  op; }..         
23080 20 20 20 20 20 20 20 73 65 74 20 7b 20 6e 6f 44         set { noD
23090 65 73 6b 74 6f 70 20 3d 20 76 61 6c 75 65 3b 20  esktop = value; 
230a0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
230b0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
230c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
230d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
23110 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20     private bool 
23120 6e 6f 43 6f 6d 70 61 63 74 3b 0d 0a 20 20 20 20  noCompact;..    
23130 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 62          public b
23140 6f 6f 6c 20 4e 6f 43 6f 6d 70 61 63 74 0d 0a 20  ool NoCompact.. 
23150 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
23160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65                ge
23170 74 20 7b 20 72 65 74 75 72 6e 20 6e 6f 43 6f 6d  t { return noCom
23180 70 61 63 74 3b 20 7d 0d 0a 20 20 20 20 20 20 20  pact; }..       
23190 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 6e           set { n
231a0 6f 43 6f 6d 70 61 63 74 20 3d 20 76 61 6c 75 65  oCompact = value
231b0 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
231c0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
231d0 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
231e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
231f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23200 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23210 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
23220 20 20 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f       private boo
23230 6c 20 6e 6f 4e 65 74 46 78 32 30 3b 0d 0a 20 20  l noNetFx20;..  
23240 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
23250 20 62 6f 6f 6c 20 4e 6f 4e 65 74 46 78 32 30 0d   bool NoNetFx20.
23260 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
23270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23280 67 65 74 20 7b 20 72 65 74 75 72 6e 20 6e 6f 4e  get { return noN
23290 65 74 46 78 32 30 3b 20 7d 0d 0a 20 20 20 20 20  etFx20; }..     
232a0 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b             set {
232b0 20 6e 6f 4e 65 74 46 78 32 30 20 3d 20 76 61 6c   noNetFx20 = val
232c0 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  ue; }..         
232d0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
232e0 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
232f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23300 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23310 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23320 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
23330 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 62         private b
23340 6f 6f 6c 20 6e 6f 4e 65 74 46 78 33 35 3b 0d 0a  ool noNetFx35;..
23350 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
23360 69 63 20 62 6f 6f 6c 20 4e 6f 4e 65 74 46 78 33  ic bool NoNetFx3
23370 35 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  5..            {
23380 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
23390 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 6e    get { return n
233a0 6f 4e 65 74 46 78 33 35 3b 20 7d 0d 0a 20 20 20  oNetFx35; }..   
233b0 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74               set
233c0 20 7b 20 6e 6f 4e 65 74 46 78 33 35 20 3d 20 76   { noNetFx35 = v
233d0 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20  alue; }..       
233e0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
233f0 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
23400 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23410 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23420 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23430 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
23440 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65           private
23450 20 62 6f 6f 6c 20 6e 6f 4e 65 74 46 78 34 30 3b   bool noNetFx40;
23460 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
23470 62 6c 69 63 20 62 6f 6f 6c 20 4e 6f 4e 65 74 46  blic bool NoNetF
23480 78 34 30 0d 0a 20 20 20 20 20 20 20 20 20 20 20  x40..           
23490 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
234a0 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e      get { return
234b0 20 6e 6f 4e 65 74 46 78 34 30 3b 20 7d 0d 0a 20   noNetFx40; }.. 
234c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
234d0 65 74 20 7b 20 6e 6f 4e 65 74 46 78 34 30 20 3d  et { noNetFx40 =
234e0 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20   value; }..     
234f0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
23500 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
23510 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23520 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23530 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23540 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
23550 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
23560 74 65 20 62 6f 6f 6c 20 6e 6f 4e 65 74 46 78 34  te bool noNetFx4
23570 35 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  5;..            
23580 70 75 62 6c 69 63 20 62 6f 6f 6c 20 4e 6f 4e 65  public bool NoNe
23590 74 46 78 34 35 0d 0a 20 20 20 20 20 20 20 20 20  tFx45..         
235a0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
235b0 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75        get { retu
235c0 72 6e 20 6e 6f 4e 65 74 46 78 34 35 3b 20 7d 0d  rn noNetFx45; }.
235d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
235e0 20 73 65 74 20 7b 20 6e 6f 4e 65 74 46 78 34 35   set { noNetFx45
235f0 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20   = value; }..   
23600 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
23610 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
23620 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23630 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23640 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23650 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
23660 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69  .            pri
23670 76 61 74 65 20 62 6f 6f 6c 20 6e 6f 4e 65 74 46  vate bool noNetF
23680 78 34 35 31 3b 0d 0a 20 20 20 20 20 20 20 20 20  x451;..         
23690 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 4e     public bool N
236a0 6f 4e 65 74 46 78 34 35 31 0d 0a 20 20 20 20 20  oNetFx451..     
236b0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
236c0 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20            get { 
236d0 72 65 74 75 72 6e 20 6e 6f 4e 65 74 46 78 34 35  return noNetFx45
236e0 31 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  1; }..          
236f0 20 20 20 20 20 20 73 65 74 20 7b 20 6e 6f 4e 65        set { noNe
23700 74 46 78 34 35 31 20 3d 20 76 61 6c 75 65 3b 20  tFx451 = value; 
23710 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
23720 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
23730 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23740 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23750 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23760 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23770 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
23780 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20     private bool 
23790 6e 6f 56 73 32 30 30 35 3b 0d 0a 20 20 20 20 20  noVs2005;..     
237a0 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f         public bo
237b0 6f 6c 20 4e 6f 56 73 32 30 30 35 0d 0a 20 20 20  ol NoVs2005..   
237c0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
237d0 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20              get 
237e0 7b 20 72 65 74 75 72 6e 20 6e 6f 56 73 32 30 30  { return noVs200
237f0 35 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  5; }..          
23800 20 20 20 20 20 20 73 65 74 20 7b 20 6e 6f 56 73        set { noVs
23810 32 30 30 35 20 3d 20 76 61 6c 75 65 3b 20 7d 0d  2005 = value; }.
23820 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
23830 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
23840 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23850 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23860 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23870 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23880 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
23890 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 6e 6f   private bool no
238a0 56 73 32 30 30 38 3b 0d 0a 20 20 20 20 20 20 20  Vs2008;..       
238b0 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c       public bool
238c0 20 4e 6f 56 73 32 30 30 38 0d 0a 20 20 20 20 20   NoVs2008..     
238d0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
238e0 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20            get { 
238f0 72 65 74 75 72 6e 20 6e 6f 56 73 32 30 30 38 3b  return noVs2008;
23900 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
23910 20 20 20 20 73 65 74 20 7b 20 6e 6f 56 73 32 30      set { noVs20
23920 30 38 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20  08 = value; }.. 
23930 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
23940 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
23950 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23960 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23970 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23980 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
23990 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
239a0 72 69 76 61 74 65 20 62 6f 6f 6c 20 6e 6f 56 73  rivate bool noVs
239b0 32 30 31 30 3b 0d 0a 20 20 20 20 20 20 20 20 20  2010;..         
239c0 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 4e     public bool N
239d0 6f 56 73 32 30 31 30 0d 0a 20 20 20 20 20 20 20  oVs2010..       
239e0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
239f0 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65          get { re
23a00 74 75 72 6e 20 6e 6f 56 73 32 30 31 30 3b 20 7d  turn noVs2010; }
23a10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
23a20 20 20 73 65 74 20 7b 20 6e 6f 56 73 32 30 31 30    set { noVs2010
23a30 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20   = value; }..   
23a40 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
23a50 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
23a60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23a70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23a80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23a90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
23aa0 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69  .            pri
23ab0 76 61 74 65 20 62 6f 6f 6c 20 6e 6f 56 73 32 30  vate bool noVs20
23ac0 31 32 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  12;..           
23ad0 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 4e 6f 56   public bool NoV
23ae0 73 32 30 31 32 0d 0a 20 20 20 20 20 20 20 20 20  s2012..         
23af0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
23b00 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75        get { retu
23b10 72 6e 20 6e 6f 56 73 32 30 31 32 3b 20 7d 0d 0a  rn noVs2012; }..
23b20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23b30 73 65 74 20 7b 20 6e 6f 56 73 32 30 31 32 20 3d  set { noVs2012 =
23b40 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20   value; }..     
23b50 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
23b60 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
23b70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23b80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23b90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23ba0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
23bb0 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
23bc0 74 65 20 62 6f 6f 6c 20 6e 6f 56 73 32 30 31 33  te bool noVs2013
23bd0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ;..            p
23be0 75 62 6c 69 63 20 62 6f 6f 6c 20 4e 6f 56 73 32  ublic bool NoVs2
23bf0 30 31 33 0d 0a 20 20 20 20 20 20 20 20 20 20 20  013..           
23c00 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
23c10 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e      get { return
23c20 20 6e 6f 56 73 32 30 31 33 3b 20 7d 0d 0a 20 20   noVs2013; }..  
23c30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65                se
23c40 74 20 7b 20 6e 6f 56 73 32 30 31 33 20 3d 20 76  t { noVs2013 = v
23c50 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20  alue; }..       
23c60 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
23c70 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
23c80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23c90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23ca0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23cb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
23cc0 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65           private
23cd0 20 62 6f 6f 6c 20 6e 6f 54 72 61 63 65 3b 0d 0a   bool noTrace;..
23ce0 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
23cf0 69 63 20 62 6f 6f 6c 20 4e 6f 54 72 61 63 65 0d  ic bool NoTrace.
23d00 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
23d10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23d20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 6e 6f 54  get { return noT
23d30 72 61 63 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20  race; }..       
23d40 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 6e           set { n
23d50 6f 54 72 61 63 65 20 3d 20 76 61 6c 75 65 3b 20  oTrace = value; 
23d60 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
23d70 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
23d80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23d90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23da0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23db0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23dc0 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
23dd0 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20     private bool 
23de0 6e 6f 43 6f 6e 73 6f 6c 65 3b 0d 0a 20 20 20 20  noConsole;..    
23df0 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 62          public b
23e00 6f 6f 6c 20 4e 6f 43 6f 6e 73 6f 6c 65 0d 0a 20  ool NoConsole.. 
23e10 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
23e20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65                ge
23e30 74 20 7b 20 72 65 74 75 72 6e 20 6e 6f 43 6f 6e  t { return noCon
23e40 73 6f 6c 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20  sole; }..       
23e50 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 6e           set { n
23e60 6f 43 6f 6e 73 6f 6c 65 20 3d 20 76 61 6c 75 65  oConsole = value
23e70 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
23e80 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
23e90 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
23ea0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23eb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23ec0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23ed0 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
23ee0 20 20 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f       private boo
23ef0 6c 20 6e 6f 4c 6f 67 3b 0d 0a 20 20 20 20 20 20  l noLog;..      
23f00 20 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f        public boo
23f10 6c 20 4e 6f 4c 6f 67 0d 0a 20 20 20 20 20 20 20  l NoLog..       
23f20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
23f30 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65          get { re
23f40 74 75 72 6e 20 6e 6f 4c 6f 67 3b 20 7d 0d 0a 20  turn noLog; }.. 
23f50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
23f60 65 74 20 7b 20 6e 6f 4c 6f 67 20 3d 20 76 61 6c  et { noLog = val
23f70 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  ue; }..         
23f80 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
23f90 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
23fa0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23fb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23fc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23fd0 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
23fe0 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 62         private b
23ff0 6f 6f 6c 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69  ool throwOnMissi
24000 6e 67 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ng;..           
24010 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 54 68 72   public bool Thr
24020 6f 77 4f 6e 4d 69 73 73 69 6e 67 0d 0a 20 20 20  owOnMissing..   
24030 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
24040 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20              get 
24050 7b 20 72 65 74 75 72 6e 20 74 68 72 6f 77 4f 6e  { return throwOn
24060 4d 69 73 73 69 6e 67 3b 20 7d 0d 0a 20 20 20 20  Missing; }..    
24070 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20              set 
24080 7b 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67  { throwOnMissing
24090 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20   = value; }..   
240a0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
240b0 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
240c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
240d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
240e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
240f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
24100 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69  .            pri
24110 76 61 74 65 20 62 6f 6f 6c 20 77 68 61 74 49 66  vate bool whatIf
24120 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ;..            p
24130 75 62 6c 69 63 20 62 6f 6f 6c 20 57 68 61 74 49  ublic bool WhatI
24140 66 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  f..            {
24150 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
24160 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 77    get { return w
24170 68 61 74 49 66 3b 20 7d 0d 0a 20 20 20 20 20 20  hatIf; }..      
24180 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20            set { 
24190 77 68 61 74 49 66 20 3d 20 76 61 6c 75 65 3b 20  whatIf = value; 
241a0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
241b0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
241c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
241d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
241e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
241f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24200 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
24210 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20     private bool 
24220 64 65 62 75 67 3b 0d 0a 20 20 20 20 20 20 20 20  debug;..        
24230 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20      public bool 
24240 44 65 62 75 67 0d 0a 20 20 20 20 20 20 20 20 20  Debug..         
24250 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
24260 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75        get { retu
24270 72 6e 20 64 65 62 75 67 3b 20 7d 0d 0a 20 20 20  rn debug; }..   
24280 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74               set
24290 20 7b 20 64 65 62 75 67 20 3d 20 76 61 6c 75 65   { debug = value
242a0 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
242b0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
242c0 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
242d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
242e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
242f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24300 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
24310 20 20 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f       private boo
24320 6c 20 76 65 72 62 6f 73 65 3b 0d 0a 20 20 20 20  l verbose;..    
24330 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 62          public b
24340 6f 6f 6c 20 56 65 72 62 6f 73 65 0d 0a 20 20 20  ool Verbose..   
24350 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
24360 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20              get 
24370 7b 20 72 65 74 75 72 6e 20 76 65 72 62 6f 73 65  { return verbose
24380 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
24390 20 20 20 20 20 73 65 74 20 7b 20 76 65 72 62 6f       set { verbo
243a0 73 65 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20  se = value; }.. 
243b0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
243c0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
243d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
243e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
243f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24400 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
24410 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
24420 72 69 76 61 74 65 20 62 6f 6f 6c 20 63 6f 6e 66  rivate bool conf
24430 69 72 6d 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  irm;..          
24440 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 43 6f    public bool Co
24450 6e 66 69 72 6d 0d 0a 20 20 20 20 20 20 20 20 20  nfirm..         
24460 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
24470 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75        get { retu
24480 72 6e 20 63 6f 6e 66 69 72 6d 3b 20 7d 0d 0a 20  rn confirm; }.. 
24490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
244a0 65 74 20 7b 20 63 6f 6e 66 69 72 6d 20 3d 20 76  et { confirm = v
244b0 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20  alue; }..       
244c0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
244d0 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
244e0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
244f0 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
24500 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
24510 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24520 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24530 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24540 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24550 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67  ....        #reg
24560 69 6f 6e 20 46 72 61 6d 65 77 6f 72 6b 4c 69 73  ion FrameworkLis
24570 74 20 43 6c 61 73 73 0d 0a 20 20 20 20 20 20 20  t Class..       
24580 20 70 72 69 76 61 74 65 20 73 65 61 6c 65 64 20   private sealed 
24590 63 6c 61 73 73 20 46 72 61 6d 65 77 6f 72 6b 4c  class FrameworkL
245a0 69 73 74 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  ist..        {..
245b0 20 20 20 20 20 20 20 20 20 20 20 20 23 72 65 67              #reg
245c0 69 6f 6e 20 50 75 62 6c 69 63 20 43 6f 6e 73 74  ion Public Const
245d0 72 75 63 74 6f 72 73 0d 0a 20 20 20 20 20 20 20  ructors..       
245e0 20 20 20 20 20 70 75 62 6c 69 63 20 46 72 61 6d       public Fram
245f0 65 77 6f 72 6b 4c 69 73 74 28 29 0d 0a 20 20 20  eworkList()..   
24600 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
24610 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64              // d
24620 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20  o nothing...    
24630 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
24640 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f         #endregio
24650 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n....           
24660 20 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
246b0 20 20 20 20 23 72 65 67 69 6f 6e 20 50 75 62 6c      #region Publ
246c0 69 63 20 4d 65 74 68 6f 64 73 0d 0a 20 20 20 20  ic Methods..    
246d0 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
246e0 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20  MockRegistryKey 
246f0 72 6f 6f 74 4b 65 79 3b 0d 0a 20 20 20 20 20 20  rootKey;..      
24700 20 20 20 20 20 20 70 75 62 6c 69 63 20 4d 6f 63        public Moc
24710 6b 52 65 67 69 73 74 72 79 4b 65 79 20 52 6f 6f  kRegistryKey Roo
24720 74 4b 65 79 0d 0a 20 20 20 20 20 20 20 20 20 20  tKey..          
24730 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
24740 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72       get { retur
24750 6e 20 72 6f 6f 74 4b 65 79 3b 20 7d 0d 0a 20 20  n rootKey; }..  
24760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65                se
24770 74 20 7b 20 72 6f 6f 74 4b 65 79 20 3d 20 76 61  t { rootKey = va
24780 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  lue; }..        
24790 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
247a0 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
247b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
247c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
247d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
247e0 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
247f0 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
24800 53 74 72 69 6e 67 4c 69 73 74 20 6e 61 6d 65 73  StringList names
24810 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ;..            p
24820 75 62 6c 69 63 20 53 74 72 69 6e 67 4c 69 73 74  ublic StringList
24830 20 4e 61 6d 65 73 0d 0a 20 20 20 20 20 20 20 20   Names..        
24840 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
24850 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74         get { ret
24860 75 72 6e 20 6e 61 6d 65 73 3b 20 7d 0d 0a 20 20  urn names; }..  
24870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65                se
24880 74 20 7b 20 6e 61 6d 65 73 20 3d 20 76 61 6c 75  t { names = valu
24890 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  e; }..          
248a0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
248b0 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
248e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
248f0 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
24900 20 20 20 20 20 20 70 72 69 76 61 74 65 20 56 65        private Ve
24910 72 73 69 6f 6e 4d 61 70 20 76 65 72 73 69 6f 6e  rsionMap version
24920 73 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  s;..            
24930 70 75 62 6c 69 63 20 56 65 72 73 69 6f 6e 4d 61  public VersionMa
24940 70 20 56 65 72 73 69 6f 6e 73 0d 0a 20 20 20 20  p Versions..    
24950 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
24960 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b             get {
24970 20 72 65 74 75 72 6e 20 76 65 72 73 69 6f 6e 73   return versions
24980 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
24990 20 20 20 20 20 73 65 74 20 7b 20 76 65 72 73 69       set { versi
249a0 6f 6e 73 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a  ons = value; }..
249b0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
249c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
249d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
249e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
249f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24a00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24a10 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
24a20 70 72 69 76 61 74 65 20 53 74 72 69 6e 67 4c 69  private StringLi
24a30 73 74 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 73  st platformNames
24a40 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ;..            p
24a50 75 62 6c 69 63 20 53 74 72 69 6e 67 4c 69 73 74  ublic StringList
24a60 20 50 6c 61 74 66 6f 72 6d 4e 61 6d 65 73 0d 0a   PlatformNames..
24a70 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
24a80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67                 g
24a90 65 74 20 7b 20 72 65 74 75 72 6e 20 70 6c 61 74  et { return plat
24aa0 66 6f 72 6d 4e 61 6d 65 73 3b 20 7d 0d 0a 20 20  formNames; }..  
24ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65                se
24ac0 74 20 7b 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65  t { platformName
24ad0 73 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20  s = value; }..  
24ae0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
24af0 20 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67           #endreg
24b00 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  ion..        }..
24b10 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
24b20 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  on....        //
24b30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24b40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24b50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24b60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24b70 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
24b80 20 23 72 65 67 69 6f 6e 20 56 73 4c 69 73 74 20   #region VsList 
24b90 43 6c 61 73 73 0d 0a 20 20 20 20 20 20 20 20 70  Class..        p
24ba0 72 69 76 61 74 65 20 73 65 61 6c 65 64 20 63 6c  rivate sealed cl
24bb0 61 73 73 20 56 73 4c 69 73 74 0d 0a 20 20 20 20  ass VsList..    
24bc0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
24bd0 20 20 20 23 72 65 67 69 6f 6e 20 50 75 62 6c 69     #region Publi
24be0 63 20 43 6f 6e 73 74 72 75 63 74 6f 72 73 0d 0a  c Constructors..
24bf0 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
24c00 69 63 20 56 73 4c 69 73 74 28 29 0d 0a 20 20 20  ic VsList()..   
24c10 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
24c20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64              // d
24c30 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20  o nothing...    
24c40 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
24c50 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f         #endregio
24c60 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n....           
24c70 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
24c80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24c90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24ca0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24cb0 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
24cc0 20 20 20 20 23 72 65 67 69 6f 6e 20 50 75 62 6c      #region Publ
24cd0 69 63 20 50 72 6f 70 65 72 74 69 65 73 0d 0a 20  ic Properties.. 
24ce0 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
24cf0 74 65 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b  te MockRegistryK
24d00 65 79 20 72 6f 6f 74 4b 65 79 3b 0d 0a 20 20 20  ey rootKey;..   
24d10 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
24d20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20  MockRegistryKey 
24d30 52 6f 6f 74 4b 65 79 0d 0a 20 20 20 20 20 20 20  RootKey..       
24d40 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
24d50 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65          get { re
24d60 74 75 72 6e 20 72 6f 6f 74 4b 65 79 3b 20 7d 0d  turn rootKey; }.
24d70 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
24d80 20 73 65 74 20 7b 20 72 6f 6f 74 4b 65 79 20 3d   set { rootKey =
24d90 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20   value; }..     
24da0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
24db0 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
24dc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24dd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24de0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24df0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
24e00 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
24e10 74 65 20 56 65 72 73 69 6f 6e 4c 69 73 74 20 76  te VersionList v
24e20 65 72 73 69 6f 6e 73 3b 0d 0a 20 20 20 20 20 20  ersions;..      
24e30 20 20 20 20 20 20 70 75 62 6c 69 63 20 56 65 72        public Ver
24e40 73 69 6f 6e 4c 69 73 74 20 56 65 72 73 69 6f 6e  sionList Version
24e50 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  s..            {
24e60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
24e70 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 76    get { return v
24e80 65 72 73 69 6f 6e 73 3b 20 7d 0d 0a 20 20 20 20  ersions; }..    
24e90 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20              set 
24ea0 7b 20 76 65 72 73 69 6f 6e 73 20 3d 20 76 61 6c  { versions = val
24eb0 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  ue; }..         
24ec0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
24ed0 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 20 20    #endregion..  
24ee0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
24ef0 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 20 20 20   #endregion..   
24f00 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d       #endregion.
24f10 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
24f20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24f30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24f40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24f50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24f60 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72  //....        #r
24f70 65 67 69 6f 6e 20 50 72 69 76 61 74 65 20 43 6f  egion Private Co
24f80 6e 73 74 61 6e 74 20 44 61 74 61 0d 0a 20 20 20  nstant Data..   
24f90 20 20 20 20 20 70 72 69 76 61 74 65 20 63 6f 6e       private con
24fa0 73 74 20 73 74 72 69 6e 67 20 43 6f 72 65 46 69  st string CoreFi
24fb0 6c 65 4e 61 6d 65 20 3d 20 22 53 79 73 74 65 6d  leName = "System
24fc0 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 64 6c 6c  .Data.SQLite.dll
24fd0 22 3b 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76  ";..        priv
24fe0 61 74 65 20 63 6f 6e 73 74 20 73 74 72 69 6e 67  ate const string
24ff0 20 4c 69 6e 71 46 69 6c 65 4e 61 6d 65 20 3d 20   LinqFileName = 
25000 22 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c  "System.Data.SQL
25010 69 74 65 2e 4c 69 6e 71 2e 64 6c 6c 22 3b 0d 0a  ite.Linq.dll";..
25020 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
25030 63 6f 6e 73 74 20 73 74 72 69 6e 67 20 45 66 36  const string Ef6
25040 46 69 6c 65 4e 61 6d 65 20 3d 20 22 53 79 73 74  FileName = "Syst
25050 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 45  em.Data.SQLite.E
25060 46 36 2e 64 6c 6c 22 3b 0d 0a 20 20 20 20 20 20  F6.dll";..      
25070 20 20 70 72 69 76 61 74 65 20 63 6f 6e 73 74 20    private const 
25080 73 74 72 69 6e 67 20 44 65 73 69 67 6e 65 72 46  string DesignerF
25090 69 6c 65 4e 61 6d 65 20 3d 20 22 53 51 4c 69 74  ileName = "SQLit
250a0 65 2e 44 65 73 69 67 6e 65 72 2e 64 6c 6c 22 3b  e.Designer.dll";
250b0 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
250c0 65 20 63 6f 6e 73 74 20 73 74 72 69 6e 67 20 50  e const string P
250d0 72 6f 76 69 64 65 72 4e 61 6d 65 20 3d 20 22 53  roviderName = "S
250e0 51 4c 69 74 65 20 44 61 74 61 20 50 72 6f 76 69  QLite Data Provi
250f0 64 65 72 22 3b 0d 0a 20 20 20 20 20 20 20 20 70  der";..        p
25100 72 69 76 61 74 65 20 63 6f 6e 73 74 20 73 74 72  rivate const str
25110 69 6e 67 20 50 72 6f 6a 65 63 74 4e 61 6d 65 20  ing ProjectName 
25120 3d 20 22 53 79 73 74 65 6d 2e 44 61 74 61 2e 53  = "System.Data.S
25130 51 4c 69 74 65 22 3b 0d 0a 20 20 20 20 20 20 20  QLite";..       
25140 20 70 72 69 76 61 74 65 20 63 6f 6e 73 74 20 73   private const s
25150 74 72 69 6e 67 20 4c 65 67 61 63 79 50 72 6f 6a  tring LegacyProj
25160 65 63 74 4e 61 6d 65 20 3d 20 22 53 51 4c 69 74  ectName = "SQLit
25170 65 22 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f  e";....        /
25180 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25190 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
251a0 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
251d0 20 20 70 72 69 76 61 74 65 20 63 6f 6e 73 74 20    private const 
251e0 73 74 72 69 6e 67 20 44 65 73 63 72 69 70 74 69  string Descripti
251f0 6f 6e 20 3d 0d 0a 20 20 20 20 20 20 20 20 20 20  on =..          
25200 20 20 22 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72    ".NET Framewor
25210 6b 20 44 61 74 61 20 50 72 6f 76 69 64 65 72 20  k Data Provider 
25220 66 6f 72 20 53 51 4c 69 74 65 22 3b 0d 0a 0d 0a  for SQLite";....
25230 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
25240 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25250 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25260 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25270 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
25280 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61  ...        priva
25290 74 65 20 63 6f 6e 73 74 20 73 74 72 69 6e 67 20  te const string 
252a0 43 4c 52 76 32 49 6d 61 67 65 52 75 6e 74 69 6d  CLRv2ImageRuntim
252b0 65 56 65 72 73 69 6f 6e 20 3d 20 22 76 32 2e 30  eVersion = "v2.0
252c0 2e 35 30 37 32 37 22 3b 0d 0a 20 20 20 20 20 20  .50727";..      
252d0 20 20 70 72 69 76 61 74 65 20 63 6f 6e 73 74 20    private const 
252e0 73 74 72 69 6e 67 20 43 4c 52 76 34 49 6d 61 67  string CLRv4Imag
252f0 65 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 20  eRuntimeVersion 
25300 3d 20 22 76 34 2e 30 2e 33 30 33 31 39 22 3b 0d  = "v4.0.30319";.
25310 0a 0d 0a 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f  ////////////////
25350 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25360 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72  //....        pr
25370 69 76 61 74 65 20 63 6f 6e 73 74 20 73 74 72 69  ivate const stri
25380 6e 67 20 53 79 73 74 65 6d 45 66 36 41 73 73 65  ng SystemEf6Asse
25390 6d 62 6c 79 4e 61 6d 65 20 3d 20 22 45 6e 74 69  mblyName = "Enti
253a0 74 79 46 72 61 6d 65 77 6f 72 6b 2c 20 22 20 2b  tyFramework, " +
253b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 56  ..            "V
253c0 65 72 73 69 6f 6e 3d 36 2e 30 2e 30 2e 30 2c 20  ersion=6.0.0.0, 
253d0 43 75 6c 74 75 72 65 3d 6e 65 75 74 72 61 6c 2c  Culture=neutral,
253e0 20 50 75 62 6c 69 63 4b 65 79 54 6f 6b 65 6e 3d   PublicKeyToken=
253f0 62 37 37 61 35 63 35 36 31 39 33 34 65 30 38 39  b77a5c561934e089
25400 22 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ";....        //
25410 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25420 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25430 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25440 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25450 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
25460 20 70 72 69 76 61 74 65 20 63 6f 6e 73 74 20 73   private const s
25470 74 72 69 6e 67 20 4e 61 6d 65 41 6e 64 56 61 6c  tring NameAndVal
25480 75 65 46 6f 72 6d 61 74 20 3d 20 22 7b 30 7d 3a  ueFormat = "{0}:
25490 20 7b 31 7d 22 3b 0d 0a 20 20 20 20 20 20 20 20   {1}";..        
254a0 70 72 69 76 61 74 65 20 63 6f 6e 73 74 20 73 74  private const st
254b0 72 69 6e 67 20 4c 6f 67 46 69 6c 65 53 75 66 66  ring LogFileSuff
254c0 69 78 20 3d 20 22 2e 6c 6f 67 22 3b 0d 0a 0d 0a  ix = ".log";....
254d0 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
254e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
254f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25500 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25510 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
25520 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61  ...        priva
25530 74 65 20 63 6f 6e 73 74 20 73 74 72 69 6e 67 20  te const string 
25540 56 73 44 65 76 45 6e 76 53 65 74 75 70 46 6f 72  VsDevEnvSetupFor
25550 6d 61 74 20 3d 20 22 7b 30 7d 3a 20 7b 31 7d 22  mat = "{0}: {1}"
25560 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ;....        ///
25570 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25580 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
255c0 70 72 69 76 61 74 65 20 63 6f 6e 73 74 20 73 74  private const st
255d0 72 69 6e 67 20 52 6f 6f 74 4b 65 79 4e 61 6d 65  ring RootKeyName
255e0 20 3d 20 22 53 6f 66 74 77 61 72 65 22 3b 0d 0a   = "Software";..
255f0 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
25600 63 6f 6e 73 74 20 73 74 72 69 6e 67 20 57 6f 77  const string Wow
25610 36 34 53 75 62 4b 65 79 4e 61 6d 65 20 3d 20 22  64SubKeyName = "
25620 57 6f 77 36 34 33 32 4e 6f 64 65 22 3b 0d 0a 0d  Wow6432Node";...
25630 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
25640 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25650 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25660 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25670 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25680 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 0d 0a  ....        //..
25690 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a          // NOTE:
256a0 20 54 68 65 20 2e 4e 45 54 20 46 72 61 6d 65 77   The .NET Framew
256b0 6f 72 6b 20 68 61 73 20 62 6f 74 68 20 33 32 2d  ork has both 32-
256c0 62 69 74 20 61 6e 64 20 36 34 2d 62 69 74 20 65  bit and 64-bit e
256d0 64 69 74 69 6f 6e 73 2e 0d 0a 20 20 20 20 20 20  ditions...      
256e0 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 70 72    //..        pr
256f0 69 76 61 74 65 20 73 74 61 74 69 63 20 72 65 61  ivate static rea
25700 64 6f 6e 6c 79 20 62 6f 6f 6c 20 4e 65 74 46 78  donly bool NetFx
25710 49 73 33 32 42 69 74 4f 6e 6c 79 20 3d 20 66 61  Is32BitOnly = fa
25720 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  lse;....        
25730 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25740 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25750 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25760 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25770 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
25780 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 2f     //..        /
25790 2f 20 4e 4f 54 45 3a 20 46 6f 72 20 6e 6f 77 2c  / NOTE: For now,
257a0 20 56 69 73 75 61 6c 20 53 74 75 64 69 6f 20 69   Visual Studio i
257b0 73 20 61 6c 77 61 79 73 20 61 20 33 32 2d 62 69  s always a 32-bi
257c0 74 20 61 70 70 6c 69 63 61 74 69 6f 6e 2e 0d 0a  t application...
257d0 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
257e0 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74      private stat
257f0 69 63 20 72 65 61 64 6f 6e 6c 79 20 62 6f 6f 6c  ic readonly bool
25800 20 56 73 49 73 33 32 42 69 74 4f 6e 6c 79 20 3d   VsIs32BitOnly =
25810 20 74 72 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20   true;....      
25820 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
25830 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25840 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25850 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25860 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
25870 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61       private sta
25880 74 69 63 20 72 65 61 64 6f 6e 6c 79 20 73 74 72  tic readonly str
25890 69 6e 67 20 56 73 49 64 46 6f 72 6d 61 74 20 3d  ing VsIdFormat =
258a0 20 22 42 22 3b 0d 0a 0d 0a 20 20 20 20 20 20 20   "B";....       
258b0 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
258c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
258d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
258e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
258f0 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
25900 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74      private stat
25910 69 63 20 72 65 61 64 6f 6e 6c 79 20 73 74 72 69  ic readonly stri
25920 6e 67 20 58 50 61 74 68 46 6f 72 41 64 64 45 6c  ng XPathForAddEl
25930 65 6d 65 6e 74 20 3d 0d 0a 20 20 20 20 20 20 20  ement =..       
25940 20 20 20 20 20 22 63 6f 6e 66 69 67 75 72 61 74       "configurat
25950 69 6f 6e 2f 73 79 73 74 65 6d 2e 64 61 74 61 2f  ion/system.data/
25960 44 62 50 72 6f 76 69 64 65 72 46 61 63 74 6f 72  DbProviderFactor
25970 69 65 73 2f 61 64 64 5b 40 69 6e 76 61 72 69 61  ies/add[@invaria
25980 6e 74 3d 5c 22 7b 30 7d 5c 22 5d 22 3b 0d 0a 0d  nt=\"{0}\"]";...
25990 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65  .        private
259a0 20 73 74 61 74 69 63 20 72 65 61 64 6f 6e 6c 79   static readonly
259b0 20 73 74 72 69 6e 67 20 58 50 61 74 68 46 6f 72   string XPathFor
259c0 52 65 6d 6f 76 65 45 6c 65 6d 65 6e 74 20 3d 0d  RemoveElement =.
259d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 63 6f  .            "co
259e0 6e 66 69 67 75 72 61 74 69 6f 6e 2f 73 79 73 74  nfiguration/syst
259f0 65 6d 2e 64 61 74 61 2f 44 62 50 72 6f 76 69 64  em.data/DbProvid
25a00 65 72 46 61 63 74 6f 72 69 65 73 2f 72 65 6d 6f  erFactories/remo
25a10 76 65 5b 40 69 6e 76 61 72 69 61 6e 74 3d 5c 22  ve[@invariant=\"
25a20 7b 30 7d 5c 22 5d 22 3b 0d 0a 20 20 20 20 20 20  {0}\"]";..      
25a30 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a    #endregion....
25a40 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
25a50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25a60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25a70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25a80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
25a90 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69  ...        #regi
25aa0 6f 6e 20 50 72 69 76 61 74 65 20 53 74 61 74 69  on Private Stati
25ab0 63 20 44 61 74 61 0d 0a 20 20 20 20 20 20 20 20  c Data..        
25ac0 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 41  private static A
25ad0 73 73 65 6d 62 6c 79 20 74 68 69 73 41 73 73 65  ssembly thisAsse
25ae0 6d 62 6c 79 20 3d 20 41 73 73 65 6d 62 6c 79 2e  mbly = Assembly.
25af0 47 65 74 45 78 65 63 75 74 69 6e 67 41 73 73 65  GetExecutingAsse
25b00 6d 62 6c 79 28 29 3b 0d 0a 0d 0a 20 20 20 20 20  mbly();....     
25b10 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69     private stati
25b20 63 20 73 74 72 69 6e 67 20 74 72 61 63 65 43 61  c string traceCa
25b30 74 65 67 6f 72 79 20 3d 20 50 61 74 68 2e 47 65  tegory = Path.Ge
25b40 74 46 69 6c 65 4e 61 6d 65 28 0d 0a 20 20 20 20  tFileName(..    
25b50 20 20 20 20 20 20 20 20 74 68 69 73 41 73 73 65          thisAsse
25b60 6d 62 6c 79 2e 4c 6f 63 61 74 69 6f 6e 29 3b 20  mbly.Location); 
25b70 2f 2a 20 4e 4f 54 45 3a 20 53 61 6d 65 20 66 6f  /* NOTE: Same fo
25b80 72 20 64 65 62 75 67 20 61 6e 64 20 74 72 61 63  r debug and trac
25b90 65 2e 20 2a 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  e. */....       
25ba0 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20   private static 
25bb0 54 72 61 63 65 43 61 6c 6c 62 61 63 6b 20 64 65  TraceCallback de
25bc0 62 75 67 43 61 6c 6c 62 61 63 6b 20 3d 20 41 70  bugCallback = Ap
25bd0 70 44 65 62 75 67 3b 0d 0a 20 20 20 20 20 20 20  pDebug;..       
25be0 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20   private static 
25bf0 54 72 61 63 65 43 61 6c 6c 62 61 63 6b 20 74 72  TraceCallback tr
25c00 61 63 65 43 61 6c 6c 62 61 63 6b 20 3d 20 41 70  aceCallback = Ap
25c10 70 54 72 61 63 65 3b 0d 0a 0d 0a 20 20 20 20 20  pTrace;....     
25c20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
25c30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25c40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25c50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25c60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
25c70 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74        private st
25c80 61 74 69 63 20 73 74 72 69 6e 67 20 73 79 73 74  atic string syst
25c90 65 6d 44 69 72 65 63 74 6f 72 79 20 3d 20 6e 75  emDirectory = nu
25ca0 6c 6c 3b 0d 0a 0d 0a 23 69 66 20 57 49 4e 44 4f  ll;....#if WINDO
25cb0 57 53 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76  WS..        priv
25cc0 61 74 65 20 73 74 61 74 69 63 20 73 74 72 69 6e  ate static strin
25cd0 67 20 73 79 73 74 65 6d 44 69 72 65 63 74 6f 72  g systemDirector
25ce0 79 57 6f 77 36 34 20 3d 20 6e 75 6c 6c 3b 0d 0a  yWow64 = null;..
25cf0 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 20 20  #endif....      
25d00 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
25d10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25d20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25d30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25d40 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
25d50 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61       private sta
25d60 74 69 63 20 69 6e 74 20 66 69 6c 65 73 43 72 65  tic int filesCre
25d70 61 74 65 64 20 3d 20 30 3b 0d 0a 20 20 20 20 20  ated = 0;..     
25d80 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69     private stati
25d90 63 20 69 6e 74 20 66 69 6c 65 73 4d 6f 64 69 66  c int filesModif
25da0 69 65 64 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20  ied = 0;..      
25db0 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63    private static
25dc0 20 69 6e 74 20 66 69 6c 65 73 44 65 6c 65 74 65   int filesDelete
25dd0 64 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20 20 20  d = 0;..        
25de0 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20  #endregion....  
25df0 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
25e00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
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 0d 0a 0d  /////////////...
25e40 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e  .        #region
25e50 20 54 72 61 63 65 20 48 61 6e 64 6c 69 6e 67 0d   Trace Handling.
25e60 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65  .        private
25e70 20 73 74 61 74 69 63 20 73 74 72 69 6e 67 20 47   static string G
25e80 65 74 4c 6f 67 46 69 6c 65 4e 61 6d 65 28 0d 0a  etLogFileName(..
25e90 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
25ea0 6e 67 20 74 79 70 65 4e 61 6d 65 0d 0a 20 20 20  ng typeName..   
25eb0 20 20 20 20 20 20 20 20 20 29 20 2f 2a 20 74 68           ) /* th
25ec0 72 6f 77 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20  row */..        
25ed0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  {..            s
25ee0 74 72 69 6e 67 20 66 69 6c 65 4e 61 6d 65 20 3d  tring fileName =
25ef0 20 50 61 74 68 2e 47 65 74 54 65 6d 70 46 69 6c   Path.GetTempFil
25f00 65 4e 61 6d 65 28 29 3b 0d 0a 20 20 20 20 20 20  eName();..      
25f10 20 20 20 20 20 20 73 74 72 69 6e 67 20 64 69 72        string dir
25f20 65 63 74 6f 72 79 20 3d 20 50 61 74 68 2e 47 65  ectory = Path.Ge
25f30 74 44 69 72 65 63 74 6f 72 79 4e 61 6d 65 28 66  tDirectoryName(f
25f40 69 6c 65 4e 61 6d 65 29 3b 0d 0a 20 20 20 20 20  ileName);..     
25f50 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 66 69         string fi
25f60 6c 65 4e 61 6d 65 4f 6e 6c 79 20 3d 20 50 61 74  leNameOnly = Pat
25f70 68 2e 47 65 74 46 69 6c 65 4e 61 6d 65 57 69 74  h.GetFileNameWit
25f80 68 6f 75 74 45 78 74 65 6e 73 69 6f 6e 28 66 69  houtExtension(fi
25f90 6c 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20  leName);....    
25fa0 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6e          string n
25fb0 65 77 46 69 6c 65 4e 61 6d 65 20 3d 20 50 61 74  ewFileName = Pat
25fc0 68 2e 43 6f 6d 62 69 6e 65 28 64 69 72 65 63 74  h.Combine(direct
25fd0 6f 72 79 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d  ory, String.Form
25fe0 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
25ff0 20 20 20 20 20 22 7b 30 7d 7b 31 7d 7b 32 7d 22       "{0}{1}{2}"
26000 2c 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 2c  , traceCategory,
26010 20 21 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f   !String.IsNullO
26020 72 45 6d 70 74 79 28 74 79 70 65 4e 61 6d 65 29  rEmpty(typeName)
26030 20 3f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   ?..            
26040 20 20 20 20 20 20 20 20 22 2e 22 20 2b 20 74 79          "." + ty
26050 70 65 4e 61 6d 65 20 3a 20 53 74 72 69 6e 67 2e  peName : String.
26060 45 6d 70 74 79 2c 20 22 2e 22 20 2b 20 66 69 6c  Empty, "." + fil
26070 65 4e 61 6d 65 4f 6e 6c 79 20 2b 0d 0a 20 20 20  eNameOnly +..   
26080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26090 20 4c 6f 67 46 69 6c 65 53 75 66 66 69 78 29 29   LogFileSuffix))
260a0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
260b0 20 46 69 6c 65 2e 4d 6f 76 65 28 66 69 6c 65 4e   File.Move(fileN
260c0 61 6d 65 2c 20 6e 65 77 46 69 6c 65 4e 61 6d 65  ame, newFileName
260d0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
260e0 20 20 72 65 74 75 72 6e 20 6e 65 77 46 69 6c 65    return newFile
260f0 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d  Name;..        }
26100 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
26110 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26120 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26130 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26140 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26150 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70  ///....        p
26160 72 69 76 61 74 65 20 73 74 61 74 69 63 20 76 6f  rivate static vo
26170 69 64 20 41 70 70 44 65 62 75 67 28 0d 0a 20 20  id AppDebug(..  
26180 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
26190 20 6d 65 73 73 61 67 65 2c 0d 0a 20 20 20 20 20   message,..     
261a0 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 63 61         string ca
261b0 74 65 67 6f 72 79 0d 0a 20 20 20 20 20 20 20 20  tegory..        
261c0 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b      )..        {
261d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 54 72  ..            Tr
261e0 61 63 65 4f 70 73 2e 44 65 62 75 67 43 6f 72 65  aceOps.DebugCore
261f0 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d  (String.Format(.
26200 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
26210 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 46   TraceOps.DebugF
26220 6f 72 6d 61 74 2c 20 54 72 61 63 65 4f 70 73 2e  ormat, TraceOps.
26230 4e 65 78 74 44 65 62 75 67 49 64 28 29 2c 0d 0a  NextDebugId(),..
26240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26250 54 72 61 63 65 4f 70 73 2e 54 69 6d 65 53 74 61  TraceOps.TimeSta
26260 6d 70 28 44 61 74 65 54 69 6d 65 2e 55 74 63 4e  mp(DateTime.UtcN
26270 6f 77 29 2c 20 6d 65 73 73 61 67 65 29 2c 20 63  ow), message), c
26280 61 74 65 67 6f 72 79 29 3b 0d 0a 20 20 20 20 20  ategory);..     
26290 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
262a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
262b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
262c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
262d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
262e0 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
262f0 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69     private stati
26300 63 20 76 6f 69 64 20 41 70 70 54 72 61 63 65 28  c void AppTrace(
26310 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74  ..            st
26320 72 69 6e 67 20 6d 65 73 73 61 67 65 2c 0d 0a 20  ring message,.. 
26330 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
26340 67 20 63 61 74 65 67 6f 72 79 0d 0a 20 20 20 20  g category..    
26350 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
26360 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
26370 20 20 54 72 61 63 65 4f 70 73 2e 54 72 61 63 65    TraceOps.Trace
26380 43 6f 72 65 28 53 74 72 69 6e 67 2e 46 6f 72 6d  Core(String.Form
26390 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
263a0 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 54 72       TraceOps.Tr
263b0 61 63 65 46 6f 72 6d 61 74 2c 20 54 72 61 63 65  aceFormat, Trace
263c0 4f 70 73 2e 4e 65 78 74 54 72 61 63 65 49 64 28  Ops.NextTraceId(
263d0 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
263e0 20 20 20 20 54 72 61 63 65 4f 70 73 2e 54 69 6d      TraceOps.Tim
263f0 65 53 74 61 6d 70 28 44 61 74 65 54 69 6d 65 2e  eStamp(DateTime.
26400 55 74 63 4e 6f 77 29 2c 20 6d 65 73 73 61 67 65  UtcNow), message
26410 29 2c 20 63 61 74 65 67 6f 72 79 29 3b 0d 0a 20  ), category);.. 
26420 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
26430 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a    #endregion....
26440 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
26450 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26460 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26470 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26480 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
26490 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69  ...        #regi
264a0 6f 6e 20 47 65 6e 65 72 69 63 20 50 6c 61 74 66  on Generic Platf
264b0 6f 72 6d 20 48 61 6e 64 6c 69 6e 67 0d 0a 20 20  orm Handling..  
264c0 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74        private st
264d0 61 74 69 63 20 62 6f 6f 6c 20 49 73 36 34 42 69  atic bool Is64Bi
264e0 74 50 72 6f 63 65 73 73 28 29 0d 0a 20 20 20 20  tProcess()..    
264f0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
26500 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
26510 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 52 65 74 75     // NOTE: Retu
26520 72 6e 73 20 74 72 75 65 20 69 66 20 74 68 65 20  rns true if the 
26530 63 75 72 72 65 6e 74 20 70 72 6f 63 65 73 73 20  current process 
26540 69 73 20 36 34 2d 62 69 74 2e 20 20 49 66 20 74  is 64-bit.  If t
26550 68 69 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20  his..           
26560 20 2f 2f 20 20 20 20 20 20 20 69 73 20 74 72 75   //       is tru
26570 65 2c 20 77 65 20 2a 6b 6e 6f 77 2a 20 74 68 61  e, we *know* tha
26580 74 20 77 65 20 6d 75 73 74 20 62 65 20 72 75 6e  t we must be run
26590 6e 69 6e 67 20 6f 6e 20 61 20 36 34 2d 62 69 74  ning on a 64-bit
265a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
265b0 20 20 20 20 20 20 20 6f 70 65 72 61 74 69 6e 67         operating
265c0 20 73 79 73 74 65 6d 20 61 73 20 77 65 6c 6c 2e   system as well.
265d0 20 20 48 6f 77 65 76 65 72 2c 20 69 66 20 74 68    However, if th
265e0 69 73 20 69 73 20 66 61 6c 73 65 2c 20 77 65 0d  is is false, we.
265f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20  .            // 
26600 20 20 20 20 20 20 64 6f 20 6e 6f 74 20 6e 65 63        do not nec
26610 65 73 73 61 72 69 6c 79 20 6b 6e 6f 77 20 74 68  essarily know th
26620 61 74 20 77 65 20 61 72 65 20 72 75 6e 6e 69 6e  at we are runnin
26630 67 20 6f 6e 20 61 20 33 32 2d 62 69 74 0d 0a 20  g on a 32-bit.. 
26640 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
26650 20 20 20 20 6f 70 65 72 61 74 69 6e 67 20 73 79      operating sy
26660 73 74 65 6d 2c 20 64 75 65 20 74 6f 20 57 6f 57  stem, due to WoW
26670 36 34 20 28 57 69 6e 33 32 2d 6f 6e 2d 57 69 6e  64 (Win32-on-Win
26680 36 34 29 2c 20 65 74 63 2e 0d 0a 20 20 20 20 20  64), etc...     
26690 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
266a0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 28 49         return (I
266b0 6e 74 50 74 72 2e 53 69 7a 65 20 3d 3d 20 73 69  ntPtr.Size == si
266c0 7a 65 6f 66 28 6c 6f 6e 67 29 29 3b 20 2f 2f 20  zeof(long)); // 
266d0 4e 4f 54 45 3a 20 50 6f 69 6e 74 65 72 20 69 73  NOTE: Pointer is
266e0 20 36 34 2d 62 69 74 73 3f 0d 0a 20 20 20 20 20   64-bits?..     
266f0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
26700 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26710 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26720 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26730 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26740 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
26750 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69     private stati
26760 63 20 62 6f 6f 6c 20 49 73 53 75 70 70 6f 72 74  c bool IsSupport
26770 65 64 52 6f 6f 74 4b 65 79 28 0d 0a 20 20 20 20  edRootKey(..    
26780 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65 67 69          MockRegi
26790 73 74 72 79 20 72 65 67 69 73 74 72 79 2c 0d 0a  stry registry,..
267a0 20 20 20 20 20 20 20 20 20 20 20 20 4d 6f 63 6b              Mock
267b0 52 65 67 69 73 74 72 79 4b 65 79 20 72 6f 6f 74  RegistryKey root
267c0 4b 65 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20  Key..           
267d0 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20   )..        {.. 
267e0 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
267f0 6e 20 4f 62 6a 65 63 74 2e 52 65 66 65 72 65 6e  n Object.Referen
26800 63 65 45 71 75 61 6c 73 28 72 6f 6f 74 4b 65 79  ceEquals(rootKey
26810 2c 20 72 65 67 69 73 74 72 79 2e 43 75 72 72 65  , registry.Curre
26820 6e 74 55 73 65 72 29 20 7c 7c 0d 0a 20 20 20 20  ntUser) ||..    
26830 20 20 20 20 20 20 20 20 20 20 20 20 4f 62 6a 65              Obje
26840 63 74 2e 52 65 66 65 72 65 6e 63 65 45 71 75 61  ct.ReferenceEqua
26850 6c 73 28 72 6f 6f 74 4b 65 79 2c 20 72 65 67 69  ls(rootKey, regi
26860 73 74 72 79 2e 4c 6f 63 61 6c 4d 61 63 68 69 6e  stry.LocalMachin
26870 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  e);..        }..
26880 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
26890 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
268a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
268b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
268c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
268d0 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69  /....        pri
268e0 76 61 74 65 20 73 74 61 74 69 63 20 73 74 72 69  vate static stri
268f0 6e 67 20 47 65 74 52 6f 6f 74 4b 65 79 4e 61 6d  ng GetRootKeyNam
26900 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
26910 62 6f 6f 6c 20 70 65 72 55 73 65 72 2c 0d 0a 20  bool perUser,.. 
26920 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
26930 77 6f 77 36 34 0d 0a 20 20 20 20 20 20 20 20 20  wow64..         
26940 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d     )..        {.
26950 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d  .            //.
26960 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20  .            // 
26970 42 55 47 46 49 58 3a 20 41 70 70 61 72 65 6e 74  BUGFIX: Apparent
26980 6c 79 2c 20 74 68 65 20 70 65 72 2d 75 73 65 72  ly, the per-user
26990 20 72 65 67 69 73 74 72 79 20 68 69 76 65 20 64   registry hive d
269a0 6f 65 73 20 6e 6f 74 20 75 73 65 0d 0a 20 20 20  oes not use..   
269b0 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
269c0 20 20 20 20 74 68 65 20 22 57 6f 77 36 34 33 32      the "Wow6432
269d0 4e 6f 64 65 22 20 6e 6f 64 65 20 74 6f 20 73 74  Node" node to st
269e0 6f 72 65 20 73 65 74 74 69 6e 67 73 20 66 6f 72  ore settings for
269f0 20 33 32 2d 62 69 74 0d 0a 20 20 20 20 20 20 20   32-bit..       
26a00 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 20 20       //         
26a10 61 70 70 6c 69 63 61 74 69 6f 6e 73 20 72 75 6e  applications run
26a20 6e 69 6e 67 20 6f 6e 20 61 20 36 34 2d 62 69 74  ning on a 64-bit
26a30 20 6f 70 65 72 61 74 69 6e 67 20 73 79 73 74 65   operating syste
26a40 6d 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  m...            
26a50 2f 2f 20 20 20 20 20 20 20 20 20 54 69 63 6b 65  //         Ticke
26a60 74 20 5b 61 30 36 37 37 33 30 39 66 30 5d 20 68  t [a0677309f0] h
26a70 61 73 20 66 75 72 74 68 65 72 20 64 65 74 61 69  as further detai
26a80 6c 73 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ls...           
26a90 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
26aa0 20 72 65 74 75 72 6e 20 53 74 72 69 6e 67 2e 46   return String.F
26ab0 6f 72 6d 61 74 28 22 7b 30 7d 7b 31 7d 22 2c 20  ormat("{0}{1}", 
26ac0 52 6f 6f 74 4b 65 79 4e 61 6d 65 2c 0d 0a 20 20  RootKeyName,..  
26ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 21 70                !p
26ae0 65 72 55 73 65 72 20 26 26 20 77 6f 77 36 34 20  erUser && wow64 
26af0 26 26 20 49 73 36 34 42 69 74 50 72 6f 63 65 73  && Is64BitProces
26b00 73 28 29 20 3f 0d 0a 20 20 20 20 20 20 20 20 20  s() ?..         
26b10 20 20 20 20 20 20 20 20 20 20 20 22 5c 5c 22 20             "\\" 
26b20 2b 20 57 6f 77 36 34 53 75 62 4b 65 79 4e 61 6d  + Wow64SubKeyNam
26b30 65 20 3a 20 53 74 72 69 6e 67 2e 45 6d 70 74 79  e : String.Empty
26b40 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d  );..        }...
26b50 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
26b60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26b70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26b80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26b90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26ba0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76  ....        priv
26bb0 61 74 65 20 73 74 61 74 69 63 20 73 74 72 69 6e  ate static strin
26bc0 67 20 47 65 74 53 79 73 74 65 6d 44 69 72 65 63  g GetSystemDirec
26bd0 74 6f 72 79 28 0d 0a 20 20 20 20 20 20 20 20 20  tory(..         
26be0 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34 0d 0a 20     bool wow64.. 
26bf0 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
26c00 20 20 20 20 20 20 7b 0d 0a 23 69 66 20 57 49 4e        {..#if WIN
26c10 44 4f 57 53 0d 0a 20 20 20 20 20 20 20 20 20 20  DOWS..          
26c20 20 20 69 66 20 28 77 6f 77 36 34 29 0d 0a 20 20    if (wow64)..  
26c30 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
26c40 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
26c50 28 73 79 73 74 65 6d 44 69 72 65 63 74 6f 72 79  (systemDirectory
26c60 57 6f 77 36 34 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  Wow64 == null)..
26c70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26c80 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
26c90 20 20 20 20 20 20 20 73 79 73 74 65 6d 44 69 72         systemDir
26ca0 65 63 74 6f 72 79 57 6f 77 36 34 20 3d 0d 0a 20  ectoryWow64 =.. 
26cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26cc0 20 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74         UnsafeNat
26cd0 69 76 65 4d 65 74 68 6f 64 73 2e 47 65 74 53 79  iveMethods.GetSy
26ce0 73 74 65 6d 44 69 72 65 63 74 6f 72 79 28 29 3b  stemDirectory();
26cf0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
26d00 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
26d10 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 73 79         return sy
26d20 73 74 65 6d 44 69 72 65 63 74 6f 72 79 57 6f 77  stemDirectoryWow
26d30 36 34 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  64;..           
26d40 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
26d50 65 6c 73 65 0d 0a 23 65 6e 64 69 66 0d 0a 20 20  else..#endif..  
26d60 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
26d70 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
26d80 28 73 79 73 74 65 6d 44 69 72 65 63 74 6f 72 79  (systemDirectory
26d90 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
26da0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
26db0 79 73 74 65 6d 44 69 72 65 63 74 6f 72 79 20 3d  ystemDirectory =
26dc0 20 45 6e 76 69 72 6f 6e 6d 65 6e 74 2e 53 79 73   Environment.Sys
26dd0 74 65 6d 44 69 72 65 63 74 6f 72 79 3b 0d 0a 0d  temDirectory;...
26de0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
26df0 20 72 65 74 75 72 6e 20 73 79 73 74 65 6d 44 69   return systemDi
26e00 72 65 63 74 6f 72 79 3b 0d 0a 20 20 20 20 20 20  rectory;..      
26e10 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
26e20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64   }..        #end
26e30 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20  region....      
26e40 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
26e50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26e60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26e70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26e80 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
26e90 20 20 20 20 20 23 72 65 67 69 6f 6e 20 47 65 6e       #region Gen
26ea0 65 72 69 63 20 53 74 72 69 6e 67 20 48 61 6e 64  eric String Hand
26eb0 6c 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 70 72  ling..        pr
26ec0 69 76 61 74 65 20 73 74 61 74 69 63 20 73 74 72  ivate static str
26ed0 69 6e 67 20 46 6f 72 44 69 73 70 6c 61 79 28 0d  ing ForDisplay(.
26ee0 0a 20 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a  .            obj
26ef0 65 63 74 20 76 61 6c 75 65 0d 0a 20 20 20 20 20  ect value..     
26f00 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
26f10 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
26f20 20 69 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75   if (value == nu
26f30 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
26f40 20 20 20 20 20 72 65 74 75 72 6e 20 22 3c 6e 75       return "<nu
26f50 6c 6c 3e 22 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ll>";....       
26f60 20 20 20 20 20 73 74 72 69 6e 67 20 72 65 73 75       string resu
26f70 6c 74 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  lt;..           
26f80 20 54 79 70 65 20 74 79 70 65 20 3d 20 76 61 6c   Type type = val
26f90 75 65 2e 47 65 74 54 79 70 65 28 29 3b 0d 0a 0d  ue.GetType();...
26fa0 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
26fb0 28 74 79 70 65 20 3d 3d 20 74 79 70 65 6f 66 28  (type == typeof(
26fc0 58 6d 6c 45 6c 65 6d 65 6e 74 29 29 0d 0a 20 20  XmlElement))..  
26fd0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
26fe0 20 20 20 20 20 20 20 20 20 20 20 20 20 58 6d 6c               Xml
26ff0 45 6c 65 6d 65 6e 74 20 65 6c 65 6d 65 6e 74 20  Element element 
27000 3d 20 28 58 6d 6c 45 6c 65 6d 65 6e 74 29 76 61  = (XmlElement)va
27010 6c 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  lue;....        
27020 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 20 3d          result =
27030 20 65 6c 65 6d 65 6e 74 2e 4f 75 74 65 72 58 6d   element.OuterXm
27040 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l;..            
27050 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 65  }..            e
27060 6c 73 65 20 69 66 20 28 74 79 70 65 20 3d 3d 20  lse if (type == 
27070 74 79 70 65 6f 66 28 56 65 72 73 69 6f 6e 29 29  typeof(Version))
27080 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
27090 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
270a0 20 56 65 72 73 69 6f 6e 20 76 65 72 73 69 6f 6e   Version version
270b0 20 3d 20 28 56 65 72 73 69 6f 6e 29 76 61 6c 75   = (Version)valu
270c0 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e;....          
270d0 20 20 20 20 20 20 72 65 73 75 6c 74 20 3d 20 53        result = S
270e0 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 22 76 7b  tring.Format("v{
270f0 30 7d 22 2c 20 76 65 72 73 69 6f 6e 29 3b 0d 0a  0}", version);..
27100 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
27110 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20             else 
27120 69 66 20 28 74 79 70 65 20 3d 3d 20 74 79 70 65  if (type == type
27130 6f 66 28 50 72 6f 63 65 73 73 53 74 61 72 74 49  of(ProcessStartI
27140 6e 66 6f 29 29 0d 0a 20 20 20 20 20 20 20 20 20  nfo))..         
27150 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
27160 20 20 20 20 20 20 50 72 6f 63 65 73 73 53 74 61        ProcessSta
27170 72 74 49 6e 66 6f 20 73 74 61 72 74 49 6e 66 6f  rtInfo startInfo
27180 20 3d 20 28 50 72 6f 63 65 73 73 53 74 61 72 74   = (ProcessStart
27190 49 6e 66 6f 29 76 61 6c 75 65 3b 0d 0a 0d 0a 20  Info)value;.... 
271a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
271b0 65 73 75 6c 74 20 3d 20 53 74 72 69 6e 67 2e 46  esult = String.F
271c0 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
271d0 20 20 20 20 20 20 20 20 20 20 20 20 22 66 69 6c              "fil
271e0 65 4e 61 6d 65 20 3d 20 7b 30 7d 2c 20 61 72 67  eName = {0}, arg
271f0 75 6d 65 6e 74 73 20 3d 20 7b 31 7d 2c 20 77 6f  uments = {1}, wo
27200 72 6b 69 6e 67 44 69 72 65 63 74 6f 72 79 20 3d  rkingDirectory =
27210 20 7b 32 7d 2c 20 22 20 2b 0d 0a 20 20 20 20 20   {2}, " +..     
27220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
27230 75 73 65 53 68 65 6c 6c 45 78 65 63 75 74 65 20  useShellExecute 
27240 3d 20 7b 33 7d 2c 20 72 65 64 69 72 65 63 74 53  = {3}, redirectS
27250 74 61 6e 64 61 72 64 4f 75 74 70 75 74 20 3d 20  tandardOutput = 
27260 7b 34 7d 2c 20 22 20 2b 0d 0a 20 20 20 20 20 20  {4}, " +..      
27270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 72                "r
27280 65 64 69 72 65 63 74 53 74 61 6e 64 61 72 64 45  edirectStandardE
27290 72 72 6f 72 20 3d 20 7b 35 7d 22 2c 20 46 6f 72  rror = {5}", For
272a0 44 69 73 70 6c 61 79 28 0d 0a 20 20 20 20 20 20  Display(..      
272b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
272c0 61 72 74 49 6e 66 6f 2e 46 69 6c 65 4e 61 6d 65  artInfo.FileName
272d0 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 73 74  ), ForDisplay(st
272e0 61 72 74 49 6e 66 6f 2e 41 72 67 75 6d 65 6e 74  artInfo.Argument
272f0 73 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s),..           
27300 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70           ForDisp
27310 6c 61 79 28 73 74 61 72 74 49 6e 66 6f 2e 57 6f  lay(startInfo.Wo
27320 72 6b 69 6e 67 44 69 72 65 63 74 6f 72 79 29 2c  rkingDirectory),
27330 20 46 6f 72 44 69 73 70 6c 61 79 28 0d 0a 20 20   ForDisplay(..  
27340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27350 20 20 73 74 61 72 74 49 6e 66 6f 2e 55 73 65 53    startInfo.UseS
27360 68 65 6c 6c 45 78 65 63 75 74 65 29 2c 20 46 6f  hellExecute), Fo
27370 72 44 69 73 70 6c 61 79 28 0d 0a 20 20 20 20 20  rDisplay(..     
27380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
27390 74 61 72 74 49 6e 66 6f 2e 52 65 64 69 72 65 63  tartInfo.Redirec
273a0 74 53 74 61 6e 64 61 72 64 4f 75 74 70 75 74 29  tStandardOutput)
273b0 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 0d 0a 20  , ForDisplay(.. 
273c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
273d0 20 20 20 73 74 61 72 74 49 6e 66 6f 2e 52 65 64     startInfo.Red
273e0 69 72 65 63 74 53 74 61 6e 64 61 72 64 45 72 72  irectStandardErr
273f0 6f 72 29 29 3b 20 2f 2a 20 52 45 43 55 52 53 49  or)); /* RECURSI
27400 56 45 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20  VE */..         
27410 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
27420 20 20 65 6c 73 65 20 69 66 20 28 74 79 70 65 20    else if (type 
27430 3d 3d 20 74 79 70 65 6f 66 28 50 72 6f 63 65 73  == typeof(Proces
27440 73 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s))..           
27450 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
27460 20 20 20 20 50 72 6f 63 65 73 73 20 70 72 6f 63      Process proc
27470 65 73 73 20 3d 20 28 50 72 6f 63 65 73 73 29 76  ess = (Process)v
27480 61 6c 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  alue;....       
27490 20 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 20           result 
274a0 3d 20 70 72 6f 63 65 73 73 2e 49 64 2e 54 6f 53  = process.Id.ToS
274b0 74 72 69 6e 67 28 29 3b 0d 0a 20 20 20 20 20 20  tring();..      
274c0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
274d0 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 74 79       else if (ty
274e0 70 65 20 3d 3d 20 74 79 70 65 6f 66 28 44 61 74  pe == typeof(Dat
274f0 61 52 65 63 65 69 76 65 64 45 76 65 6e 74 41 72  aReceivedEventAr
27500 67 73 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  gs))..          
27510 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
27520 20 20 20 20 20 44 61 74 61 52 65 63 65 69 76 65       DataReceive
27530 64 45 76 65 6e 74 41 72 67 73 20 65 76 65 6e 74  dEventArgs event
27540 41 72 67 73 20 3d 20 28 44 61 74 61 52 65 63 65  Args = (DataRece
27550 69 76 65 64 45 76 65 6e 74 41 72 67 73 29 76 61  ivedEventArgs)va
27560 6c 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  lue;....        
27570 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 20 3d          result =
27580 20 46 6f 72 44 69 73 70 6c 61 79 28 65 76 65 6e   ForDisplay(even
27590 74 41 72 67 73 2e 44 61 74 61 29 3b 20 2f 2a 20  tArgs.Data); /* 
275a0 52 45 43 55 52 53 49 56 45 20 2a 2f 0d 0a 20 20  RECURSIVE */..  
275b0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
275c0 20 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20           else.. 
275d0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
275e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
275f0 73 75 6c 74 20 3d 20 76 61 6c 75 65 2e 54 6f 53  sult = value.ToS
27600 74 72 69 6e 67 28 29 3b 0d 0a 0d 0a 20 20 20 20  tring();....    
27610 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
27620 72 65 73 75 6c 74 2e 4c 65 6e 67 74 68 20 3d 3d  result.Length ==
27630 20 30 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20   0)..           
27640 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
27650 22 3c 65 6d 70 74 79 3e 22 3b 0d 0a 0d 0a 20 20  "<empty>";....  
27660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
27670 73 75 6c 74 20 3d 20 53 74 72 69 6e 67 2e 46 6f  sult = String.Fo
27680 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
27690 20 20 20 20 20 20 20 20 20 20 20 74 79 70 65 2e             type.
276a0 49 73 53 75 62 63 6c 61 73 73 4f 66 28 74 79 70  IsSubclassOf(typ
276b0 65 6f 66 28 56 61 6c 75 65 54 79 70 65 29 29 20  eof(ValueType)) 
276c0 3f 20 22 7b 30 7d 22 20 3a 20 22 5c 22 7b 30 7d  ? "{0}" : "\"{0}
276d0 5c 22 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  \"",..          
276e0 20 20 20 20 20 20 20 20 20 20 72 65 73 75 6c 74            result
276f0 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
27700 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
27710 20 72 65 74 75 72 6e 20 72 65 73 75 6c 74 3b 0d   return result;.
27720 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..    
27730 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
27740 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
27750 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27760 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27770 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27780 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27790 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65  /....        #re
277a0 67 69 6f 6e 20 41 73 73 65 6d 62 6c 79 20 41 74  gion Assembly At
277b0 74 72 69 62 75 74 65 20 48 61 6e 64 6c 69 6e 67  tribute Handling
277c0 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69 63  ..        public
277d0 20 73 74 61 74 69 63 20 73 74 72 69 6e 67 20 47   static string G
277e0 65 74 41 73 73 65 6d 62 6c 79 43 6f 6e 66 69 67  etAssemblyConfig
277f0 75 72 61 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20  uration(..      
27800 20 20 20 20 20 20 41 73 73 65 6d 62 6c 79 20 61        Assembly a
27810 73 73 65 6d 62 6c 79 0d 0a 20 20 20 20 20 20 20  ssembly..       
27820 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
27830 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  {..            i
27840 66 20 28 61 73 73 65 6d 62 6c 79 20 21 3d 20 6e  f (assembly != n
27850 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
27860 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
27870 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20       try..      
27880 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
27890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
278a0 20 69 66 20 28 61 73 73 65 6d 62 6c 79 2e 49 73   if (assembly.Is
278b0 44 65 66 69 6e 65 64 28 0d 0a 20 20 20 20 20 20  Defined(..      
278c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
278d0 20 20 20 20 20 20 74 79 70 65 6f 66 28 41 73 73        typeof(Ass
278e0 65 6d 62 6c 79 43 6f 6e 66 69 67 75 72 61 74 69  emblyConfigurati
278f0 6f 6e 41 74 74 72 69 62 75 74 65 29 2c 20 66 61  onAttribute), fa
27900 6c 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20  lse))..         
27910 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
27920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27930 20 20 20 20 20 20 41 73 73 65 6d 62 6c 79 43 6f        AssemblyCo
27940 6e 66 69 67 75 72 61 74 69 6f 6e 41 74 74 72 69  nfigurationAttri
27950 62 75 74 65 20 63 6f 6e 66 69 67 75 72 61 74 69  bute configurati
27960 6f 6e 20 3d 0d 0a 20 20 20 20 20 20 20 20 20 20  on =..          
27970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27980 20 20 28 41 73 73 65 6d 62 6c 79 43 6f 6e 66 69    (AssemblyConfi
27990 67 75 72 61 74 69 6f 6e 41 74 74 72 69 62 75 74  gurationAttribut
279a0 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e)..            
279b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
279c0 61 73 73 65 6d 62 6c 79 2e 47 65 74 43 75 73 74  assembly.GetCust
279d0 6f 6d 41 74 74 72 69 62 75 74 65 73 28 0d 0a 20  omAttributes(.. 
279e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
279f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
27a00 79 70 65 6f 66 28 41 73 73 65 6d 62 6c 79 43 6f  ypeof(AssemblyCo
27a10 6e 66 69 67 75 72 61 74 69 6f 6e 41 74 74 72 69  nfigurationAttri
27a20 62 75 74 65 29 2c 0d 0a 20 20 20 20 20 20 20 20  bute),..        
27a30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27a40 20 20 20 20 20 20 20 20 66 61 6c 73 65 29 5b 30          false)[0
27a50 5d 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  ];....          
27a60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
27a70 74 75 72 6e 20 63 6f 6e 66 69 67 75 72 61 74 69  turn configurati
27a80 6f 6e 2e 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e  on.Configuration
27a90 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
27aa0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
27ab0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
27ac0 20 20 20 20 20 20 20 20 20 20 20 20 20 63 61 74               cat
27ad0 63 68 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ch..            
27ae0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
27af0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f             // do
27b00 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20   nothing...     
27b10 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
27b20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
27b30 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
27b40 6e 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20  n null;..       
27b50 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f   }....        //
27b60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27b70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27b80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27b90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27ba0 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
27bb0 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 73   public static s
27bc0 74 72 69 6e 67 20 47 65 74 41 73 73 65 6d 62 6c  tring GetAssembl
27bd0 79 54 69 74 6c 65 28 0d 0a 20 20 20 20 20 20 20  yTitle(..       
27be0 20 20 20 20 20 41 73 73 65 6d 62 6c 79 20 61 73       Assembly as
27bf0 73 65 6d 62 6c 79 0d 0a 20 20 20 20 20 20 20 20  sembly..        
27c00 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b      )..        {
27c10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
27c20 20 28 61 73 73 65 6d 62 6c 79 20 21 3d 20 6e 75   (assembly != nu
27c30 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
27c40 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
27c50 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20      try..       
27c60 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
27c70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27c80 69 66 20 28 61 73 73 65 6d 62 6c 79 2e 49 73 44  if (assembly.IsD
27c90 65 66 69 6e 65 64 28 0d 0a 20 20 20 20 20 20 20  efined(..       
27ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27cb0 20 20 20 20 20 74 79 70 65 6f 66 28 41 73 73 65       typeof(Asse
27cc0 6d 62 6c 79 54 69 74 6c 65 41 74 74 72 69 62 75  mblyTitleAttribu
27cd0 74 65 29 2c 20 66 61 6c 73 65 29 29 0d 0a 20 20  te), false))..  
27ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27cf0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
27d00 20 20 20 20 20 20 20 20 20 20 20 20 20 41 73 73               Ass
27d10 65 6d 62 6c 79 54 69 74 6c 65 41 74 74 72 69 62  emblyTitleAttrib
27d20 75 74 65 20 74 69 74 6c 65 20 3d 0d 0a 20 20 20  ute title =..   
27d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27d40 20 20 20 20 20 20 20 20 20 28 41 73 73 65 6d 62           (Assemb
27d50 6c 79 54 69 74 6c 65 41 74 74 72 69 62 75 74 65  lyTitleAttribute
27d60 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
27d70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61                 a
27d80 73 73 65 6d 62 6c 79 2e 47 65 74 43 75 73 74 6f  ssembly.GetCusto
27d90 6d 41 74 74 72 69 62 75 74 65 73 28 0d 0a 20 20  mAttributes(..  
27da0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27db0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 79                ty
27dc0 70 65 6f 66 28 41 73 73 65 6d 62 6c 79 54 69 74  peof(AssemblyTit
27dd0 6c 65 41 74 74 72 69 62 75 74 65 29 2c 20 66 61  leAttribute), fa
27de0 6c 73 65 29 5b 30 5d 3b 0d 0a 0d 0a 20 20 20 20  lse)[0];....    
27df0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27e00 20 20 20 20 72 65 74 75 72 6e 20 74 69 74 6c 65      return title
27e10 2e 54 69 74 6c 65 3b 0d 0a 20 20 20 20 20 20 20  .Title;..       
27e20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
27e30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27e40 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
27e50 20 20 20 63 61 74 63 68 0d 0a 20 20 20 20 20 20     catch..      
27e60 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
27e70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27e80 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d   // do nothing..
27e90 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
27ea0 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
27eb0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
27ec0 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 20   return null;.. 
27ed0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
27ee0 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a    #endregion....
27ef0 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
27f00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27f10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27f20 2f 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 0d  ///////////////.
27f40 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69  ...        #regi
27f50 6f 6e 20 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72  on .NET Framewor
27f60 6b 20 48 61 6e 64 6c 69 6e 67 0d 0a 20 20 20 20  k Handling..    
27f70 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74      private stat
27f80 69 63 20 73 74 72 69 6e 67 20 47 65 74 46 72 61  ic string GetFra
27f90 6d 65 77 6f 72 6b 52 6f 6f 74 4b 65 79 4e 61 6d  meworkRootKeyNam
27fa0 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
27fb0 62 6f 6f 6c 20 70 65 72 55 73 65 72 2c 0d 0a 20  bool perUser,.. 
27fc0 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
27fd0 77 6f 77 36 34 0d 0a 20 20 20 20 20 20 20 20 20  wow64..         
27fe0 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d     )..        {.
27ff0 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
28000 75 72 6e 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61  urn String.Forma
28010 74 28 22 7b 30 7d 5c 5c 4d 69 63 72 6f 73 6f 66  t("{0}\\Microsof
28020 74 5c 5c 2e 4e 45 54 46 72 61 6d 65 77 6f 72 6b  t\\.NETFramework
28030 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
28040 20 20 20 20 47 65 74 52 6f 6f 74 4b 65 79 4e 61      GetRootKeyNa
28050 6d 65 28 70 65 72 55 73 65 72 2c 20 77 6f 77 36  me(perUser, wow6
28060 34 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  4));..        }.
28070 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
28080 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28090 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
280a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
280b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
280c0 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72  //....        pr
280d0 69 76 61 74 65 20 73 74 61 74 69 63 20 73 74 72  ivate static str
280e0 69 6e 67 20 47 65 74 46 72 61 6d 65 77 6f 72 6b  ing GetFramework
280f0 4b 65 79 4e 61 6d 65 28 0d 0a 20 20 20 20 20 20  KeyName(..      
28100 20 20 20 20 20 20 73 74 72 69 6e 67 20 66 72 61        string fra
28110 6d 65 77 6f 72 6b 4e 61 6d 65 2c 0d 0a 20 20 20  meworkName,..   
28120 20 20 20 20 20 20 20 20 20 56 65 72 73 69 6f 6e           Version
28130 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f   frameworkVersio
28140 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n,..            
28150 73 74 72 69 6e 67 20 70 6c 61 74 66 6f 72 6d 4e  string platformN
28160 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ame,..          
28170 20 20 62 6f 6f 6c 20 70 65 72 55 73 65 72 2c 0d    bool perUser,.
28180 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f  .            boo
28190 6c 20 77 6f 77 36 34 0d 0a 20 20 20 20 20 20 20  l wow64..       
281a0 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
281b0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  {..            s
281c0 74 72 69 6e 67 20 66 6f 72 6d 61 74 20 3d 20 21  tring format = !
281d0 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45  String.IsNullOrE
281e0 6d 70 74 79 28 70 6c 61 74 66 6f 72 6d 4e 61 6d  mpty(platformNam
281f0 65 29 20 3f 0d 0a 20 20 20 20 20 20 20 20 20 20  e) ?..          
28200 20 20 20 20 20 20 22 7b 30 7d 5c 5c 4d 69 63 72        "{0}\\Micr
28210 6f 73 6f 66 74 5c 5c 7b 31 7d 5c 5c 76 7b 32 7d  osoft\\{1}\\v{2}
28220 5c 5c 7b 33 7d 22 20 3a 0d 0a 20 20 20 20 20 20  \\{3}" :..      
28230 20 20 20 20 20 20 20 20 20 20 22 7b 30 7d 5c 5c            "{0}\\
28240 4d 69 63 72 6f 73 6f 66 74 5c 5c 7b 31 7d 5c 5c  Microsoft\\{1}\\
28250 76 7b 32 7d 22 3b 0d 0a 0d 0a 20 20 20 20 20 20  v{2}";....      
28260 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 74 72        return Str
28270 69 6e 67 2e 46 6f 72 6d 61 74 28 66 6f 72 6d 61  ing.Format(forma
28280 74 2c 20 47 65 74 52 6f 6f 74 4b 65 79 4e 61 6d  t, GetRootKeyNam
28290 65 28 70 65 72 55 73 65 72 2c 20 77 6f 77 36 34  e(perUser, wow64
282a0 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
282b0 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d      frameworkNam
282c0 65 2c 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73  e, frameworkVers
282d0 69 6f 6e 2c 20 70 6c 61 74 66 6f 72 6d 4e 61 6d  ion, platformNam
282e0 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  e);..        }..
282f0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
28300 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28310 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28320 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28330 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28340 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69  /....        pri
28350 76 61 74 65 20 73 74 61 74 69 63 20 73 74 72 69  vate static stri
28360 6e 67 20 47 65 74 49 6d 61 67 65 52 75 6e 74 69  ng GetImageRunti
28370 6d 65 56 65 72 73 69 6f 6e 28 0d 0a 20 20 20 20  meVersion(..    
28380 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 66          string f
28390 69 6c 65 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20  ileName..       
283a0 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
283b0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74  {..            t
283c0 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ry..            
283d0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
283e0 20 20 20 41 73 73 65 6d 62 6c 79 20 61 73 73 65     Assembly asse
283f0 6d 62 6c 79 20 3d 20 41 73 73 65 6d 62 6c 79 2e  mbly = Assembly.
28400 52 65 66 6c 65 63 74 69 6f 6e 4f 6e 6c 79 4c 6f  ReflectionOnlyLo
28410 61 64 46 72 6f 6d 28 0d 0a 20 20 20 20 20 20 20  adFrom(..       
28420 20 20 20 20 20 20 20 20 20 20 20 20 20 66 69 6c               fil
28430 65 4e 61 6d 65 29 3b 20 2f 2a 20 74 68 72 6f 77  eName); /* throw
28440 20 2a 2f 0d 0a 0d 0a 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 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20  bly != null)..  
28470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28480 20 20 72 65 74 75 72 6e 20 61 73 73 65 6d 62 6c    return assembl
28490 79 2e 49 6d 61 67 65 52 75 6e 74 69 6d 65 56 65  y.ImageRuntimeVe
284a0 72 73 69 6f 6e 3b 0d 0a 20 20 20 20 20 20 20 20  rsion;..        
284b0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
284c0 20 20 20 63 61 74 63 68 0d 0a 20 20 20 20 20 20     catch..      
284d0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
284e0 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e           // do n
284f0 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20  othing...       
28500 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
28510 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 75 6c        return nul
28520 6c 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d  l;..        }...
28530 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
28540 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28550 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28560 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28570 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28580 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76  ....        priv
28590 61 74 65 20 73 74 61 74 69 63 20 73 74 72 69 6e  ate static strin
285a0 67 20 47 65 74 46 72 61 6d 65 77 6f 72 6b 44 69  g GetFrameworkDi
285b0 72 65 63 74 6f 72 79 28 0d 0a 20 20 20 20 20 20  rectory(..      
285c0 20 20 20 20 20 20 4d 6f 63 6b 52 65 67 69 73 74        MockRegist
285d0 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a  ryKey rootKey,..
285e0 20 20 20 20 20 20 20 20 20 20 20 20 56 65 72 73              Vers
285f0 69 6f 6e 20 66 72 61 6d 65 77 6f 72 6b 56 65 72  ion frameworkVer
28600 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20  sion,..         
28610 20 20 20 62 6f 6f 6c 20 70 65 72 55 73 65 72 2c     bool perUser,
28620 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f  ..            bo
28630 6f 6c 20 77 6f 77 36 34 2c 0d 0a 20 20 20 20 20  ol wow64,..     
28640 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74         bool what
28650 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  If,..           
28660 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 0d 0a 20   bool verbose.. 
28670 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
28680 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
28690 20 20 20 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b       using (Mock
286a0 52 65 67 69 73 74 72 79 4b 65 79 20 6b 65 79 20  RegistryKey key 
286b0 3d 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72  = RegistryHelper
286c0 2e 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20  .OpenSubKey(..  
286d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
286e0 20 20 72 6f 6f 74 4b 65 79 2c 20 47 65 74 46 72    rootKey, GetFr
286f0 61 6d 65 77 6f 72 6b 52 6f 6f 74 4b 65 79 4e 61  ameworkRootKeyNa
28700 6d 65 28 70 65 72 55 73 65 72 2c 20 77 6f 77 36  me(perUser, wow6
28710 34 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  4),..           
28720 20 20 20 20 20 20 20 20 20 66 61 6c 73 65 2c 20           false, 
28730 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29  whatIf, verbose)
28740 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
28750 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
28760 20 20 69 66 20 28 6b 65 79 20 3d 3d 20 6e 75 6c    if (key == nul
28770 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
28780 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e          return n
28790 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ull;....        
287a0 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 76          object v
287b0 61 6c 75 65 20 3d 20 52 65 67 69 73 74 72 79 48  alue = RegistryH
287c0 65 6c 70 65 72 2e 47 65 74 56 61 6c 75 65 28 0d  elper.GetValue(.
287d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
287e0 20 20 20 20 20 6b 65 79 2c 20 22 49 6e 73 74 61       key, "Insta
287f0 6c 6c 52 6f 6f 74 22 2c 20 6e 75 6c 6c 2c 20 77  llRoot", null, w
28800 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 3b  hatIf, verbose);
28810 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
28820 20 20 20 20 69 66 20 28 21 28 76 61 6c 75 65 20      if (!(value 
28830 69 73 20 73 74 72 69 6e 67 29 29 0d 0a 20 20 20  is string))..   
28840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28850 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d   return null;...
28860 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
28870 20 72 65 74 75 72 6e 20 50 61 74 68 2e 43 6f 6d   return Path.Com
28880 62 69 6e 65 28 0d 0a 20 20 20 20 20 20 20 20 20  bine(..         
28890 20 20 20 20 20 20 20 20 20 20 20 28 73 74 72 69             (stri
288a0 6e 67 29 76 61 6c 75 65 2c 20 53 74 72 69 6e 67  ng)value, String
288b0 2e 46 6f 72 6d 61 74 28 22 76 7b 30 7d 22 2c 20  .Format("v{0}", 
288c0 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e  frameworkVersion
288d0 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ));..           
288e0 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20   }..        }.. 
288f0 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f         #endregio
28900 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  n....        ///
28910 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28920 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28930 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28940 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28950 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
28960 23 72 65 67 69 6f 6e 20 50 65 72 2d 46 72 61 6d  #region Per-Fram
28970 65 77 6f 72 6b 2f 50 6c 61 74 66 6f 72 6d 20 48  ework/Platform H
28980 61 6e 64 6c 69 6e 67 0d 0a 20 20 20 20 20 20 20  andling..       
28990 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20   private static 
289a0 76 6f 69 64 20 49 6e 69 74 69 61 6c 69 7a 65 46  void InitializeF
289b0 72 61 6d 65 77 6f 72 6b 4c 69 73 74 28 0d 0a 20  rameworkList(.. 
289c0 20 20 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52             MockR
289d0 65 67 69 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b  egistryKey rootK
289e0 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ey,..           
289f0 20 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 63   Configuration c
28a00 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2c 0d 0a 20  onfiguration,.. 
28a10 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20 46             ref F
28a20 72 61 6d 65 77 6f 72 6b 4c 69 73 74 20 66 72 61  rameworkList fra
28a30 6d 65 77 6f 72 6b 4c 69 73 74 0d 0a 20 20 20 20  meworkList..    
28a40 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
28a50 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
28a60 20 20 69 66 20 28 66 72 61 6d 65 77 6f 72 6b 4c    if (frameworkL
28a70 69 73 74 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  ist == null)..  
28a80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 72                fr
28a90 61 6d 65 77 6f 72 6b 4c 69 73 74 20 3d 20 6e 65  ameworkList = ne
28aa0 77 20 46 72 61 6d 65 77 6f 72 6b 4c 69 73 74 28  w FrameworkList(
28ab0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
28ac0 20 20 69 66 20 28 66 72 61 6d 65 77 6f 72 6b 4c    if (frameworkL
28ad0 69 73 74 2e 52 6f 6f 74 4b 65 79 20 3d 3d 20 6e  ist.RootKey == n
28ae0 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
28af0 20 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 4c        frameworkL
28b00 69 73 74 2e 52 6f 6f 74 4b 65 79 20 3d 20 72 6f  ist.RootKey = ro
28b10 6f 74 4b 65 79 3b 0d 0a 0d 0a 20 20 20 20 20 20  otKey;....      
28b20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
28b30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28b40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28b50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28b60 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
28b70 20 20 20 20 20 20 20 20 20 69 66 20 28 66 72 61           if (fra
28b80 6d 65 77 6f 72 6b 4c 69 73 74 2e 4e 61 6d 65 73  meworkList.Names
28b90 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
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 66 72 61 6d 65 77            framew
28bc0 6f 72 6b 4c 69 73 74 2e 4e 61 6d 65 73 20 3d 20  orkList.Names = 
28bd0 6e 65 77 20 53 74 72 69 6e 67 4c 69 73 74 28 29  new StringList()
28be0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
28bf0 20 20 20 20 20 69 66 20 28 28 63 6f 6e 66 69 67       if ((config
28c00 75 72 61 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29  uration == null)
28c10 20 7c 7c 20 21 63 6f 6e 66 69 67 75 72 61 74 69   || !configurati
28c20 6f 6e 2e 4e 6f 44 65 73 6b 74 6f 70 29 0d 0a 20  on.NoDesktop).. 
28c30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28c40 20 20 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74     frameworkList
28c50 2e 4e 61 6d 65 73 2e 41 64 64 28 22 2e 4e 45 54  .Names.Add(".NET
28c60 46 72 61 6d 65 77 6f 72 6b 22 29 3b 0d 0a 0d 0a  Framework");....
28c70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28c80 69 66 20 28 28 63 6f 6e 66 69 67 75 72 61 74 69  if ((configurati
28c90 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20 21  on == null) || !
28ca0 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 4e 6f  configuration.No
28cb0 43 6f 6d 70 61 63 74 29 0d 0a 20 20 20 20 20 20  Compact)..      
28cc0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
28cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28ce0 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 4e   frameworkList.N
28cf0 61 6d 65 73 2e 41 64 64 28 22 2e 4e 45 54 43 6f  ames.Add(".NETCo
28d00 6d 70 61 63 74 46 72 61 6d 65 77 6f 72 6b 22 29  mpactFramework")
28d10 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
28d20 20 20 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b         framework
28d30 4c 69 73 74 2e 4e 61 6d 65 73 2e 41 64 64 28 22  List.Names.Add("
28d40 2e 4e 45 54 43 6f 6d 70 61 63 74 46 72 61 6d 65  .NETCompactFrame
28d50 77 6f 72 6b 22 29 3b 0d 0a 20 20 20 20 20 20 20  work");..       
28d60 20 20 20 20 20 20 20 20 20 20 20 20 20 66 72 61               fra
28d70 6d 65 77 6f 72 6b 4c 69 73 74 2e 4e 61 6d 65 73  meworkList.Names
28d80 2e 41 64 64 28 22 2e 4e 45 54 43 6f 6d 70 61 63  .Add(".NETCompac
28d90 74 46 72 61 6d 65 77 6f 72 6b 22 29 3b 0d 0a 20  tFramework");.. 
28da0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
28db0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
28dc0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
28dd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28de0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28df0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28e00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28e10 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
28e20 20 20 69 66 20 28 66 72 61 6d 65 77 6f 72 6b 4c    if (frameworkL
28e30 69 73 74 2e 56 65 72 73 69 6f 6e 73 20 3d 3d 20  ist.Versions == 
28e40 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
28e50 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
28e60 20 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 4c        frameworkL
28e70 69 73 74 2e 56 65 72 73 69 6f 6e 73 20 3d 20 6e  ist.Versions = n
28e80 65 77 20 56 65 72 73 69 6f 6e 4d 61 70 28 29 3b  ew VersionMap();
28e90 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
28ea0 20 20 20 20 69 66 20 28 28 63 6f 6e 66 69 67 75      if ((configu
28eb0 72 61 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 20  ration == null) 
28ec0 7c 7c 20 21 63 6f 6e 66 69 67 75 72 61 74 69 6f  || !configuratio
28ed0 6e 2e 4e 6f 44 65 73 6b 74 6f 70 29 0d 0a 20 20  n.NoDesktop)..  
28ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
28ef0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
28f00 20 20 20 20 20 56 65 72 73 69 6f 6e 4c 69 73 74       VersionList
28f10 20 64 65 73 6b 74 6f 70 56 65 72 73 69 6f 6e 4c   desktopVersionL
28f20 69 73 74 20 3d 20 6e 65 77 20 56 65 72 73 69 6f  ist = new Versio
28f30 6e 4c 69 73 74 28 29 3b 0d 0a 0d 0a 20 20 20 20  nList();....    
28f40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28f50 69 66 20 28 28 63 6f 6e 66 69 67 75 72 61 74 69  if ((configurati
28f60 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20 21  on == null) || !
28f70 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 4e 6f  configuration.No
28f80 4e 65 74 46 78 32 30 29 0d 0a 20 20 20 20 20 20  NetFx20)..      
28f90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28fa0 20 20 64 65 73 6b 74 6f 70 56 65 72 73 69 6f 6e    desktopVersion
28fb0 4c 69 73 74 2e 41 64 64 28 6e 65 77 20 56 65 72  List.Add(new Ver
28fc0 73 69 6f 6e 28 32 2c 20 30 2c 20 35 30 37 32 37  sion(2, 0, 50727
28fd0 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ));....         
28fe0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
28ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29000 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 54 68 65 20     // NOTE: The 
29010 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72 6b 20 33  .NET Framework 3
29020 2e 35 20 64 6f 65 73 20 6e 6f 74 20 68 61 76 65  .5 does not have
29030 20 69 74 73 20 6f 77 6e 0d 0a 20 20 20 20 20 20   its own..      
29040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
29050 20 20 20 20 20 20 20 64 69 72 65 63 74 6f 72 79         directory
29060 3b 20 68 6f 77 65 76 65 72 2c 20 69 74 20 73 74  ; however, it st
29070 69 6c 6c 20 6d 61 79 20 68 61 76 65 20 61 73 73  ill may have ass
29080 65 6d 62 6c 79 0d 0a 20 20 20 20 20 20 20 20 20  embly..         
29090 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
290a0 20 20 20 20 66 6f 6c 64 65 72 73 20 66 6f 72 20      folders for 
290b0 75 73 65 20 69 6e 20 56 69 73 75 61 6c 20 53 74  use in Visual St
290c0 75 64 69 6f 2c 20 65 74 63 2e 0d 0a 20 20 20 20  udio, etc...    
290d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
290e0 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
290f0 20 20 20 20 20 20 20 20 69 66 20 28 28 63 6f 6e          if ((con
29100 66 69 67 75 72 61 74 69 6f 6e 20 3d 3d 20 6e 75  figuration == nu
29110 6c 6c 29 20 7c 7c 20 21 63 6f 6e 66 69 67 75 72  ll) || !configur
29120 61 74 69 6f 6e 2e 4e 6f 4e 65 74 46 78 33 35 29  ation.NoNetFx35)
29130 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
29140 20 20 20 20 20 20 20 20 20 20 64 65 73 6b 74 6f            deskto
29150 70 56 65 72 73 69 6f 6e 4c 69 73 74 2e 41 64 64  pVersionList.Add
29160 28 6e 65 77 20 56 65 72 73 69 6f 6e 28 33 2c 20  (new Version(3, 
29170 35 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  5));....        
29180 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
29190 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 3d  (configuration =
291a0 3d 20 6e 75 6c 6c 29 20 7c 7c 20 21 63 6f 6e 66  = null) || !conf
291b0 69 67 75 72 61 74 69 6f 6e 2e 4e 6f 4e 65 74 46  iguration.NoNetF
291c0 78 34 30 29 0d 0a 20 20 20 20 20 20 20 20 20 20  x40)..          
291d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65                de
291e0 73 6b 74 6f 70 56 65 72 73 69 6f 6e 4c 69 73 74  sktopVersionList
291f0 2e 41 64 64 28 6e 65 77 20 56 65 72 73 69 6f 6e  .Add(new Version
29200 28 34 2c 20 30 2c 20 33 30 33 31 39 29 29 3b 0d  (4, 0, 30319));.
29210 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
29220 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
29230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
29240 2f 20 4e 4f 54 45 3a 20 54 68 65 20 2e 4e 45 54  / NOTE: The .NET
29250 20 46 72 61 6d 65 77 6f 72 6b 20 34 2e 35 20 64   Framework 4.5 d
29260 6f 65 73 20 6e 6f 74 20 68 61 76 65 20 69 74 73  oes not have its
29270 20 6f 77 6e 0d 0a 20 20 20 20 20 20 20 20 20 20   own..          
29280 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
29290 20 20 20 64 69 72 65 63 74 6f 72 79 3b 20 68 6f     directory; ho
292a0 77 65 76 65 72 2c 20 69 74 20 73 74 69 6c 6c 20  wever, it still 
292b0 6d 61 79 20 68 61 76 65 20 61 73 73 65 6d 62 6c  may have assembl
292c0 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  y..             
292d0 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
292e0 66 6f 6c 64 65 72 73 20 66 6f 72 20 75 73 65 20  folders for use 
292f0 69 6e 20 56 69 73 75 61 6c 20 53 74 75 64 69 6f  in Visual Studio
29300 2c 20 65 74 63 2e 0d 0a 20 20 20 20 20 20 20 20  , etc...        
29310 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
29320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29330 20 20 20 20 69 66 20 28 28 63 6f 6e 66 69 67 75      if ((configu
29340 72 61 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 20  ration == null) 
29350 7c 7c 20 21 63 6f 6e 66 69 67 75 72 61 74 69 6f  || !configuratio
29360 6e 2e 4e 6f 4e 65 74 46 78 34 35 29 0d 0a 20 20  n.NoNetFx45)..  
29370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29380 20 20 20 20 20 20 64 65 73 6b 74 6f 70 56 65 72        desktopVer
29390 73 69 6f 6e 4c 69 73 74 2e 41 64 64 28 6e 65 77  sionList.Add(new
293a0 20 56 65 72 73 69 6f 6e 28 34 2c 20 35 2c 20 35   Version(4, 5, 5
293b0 30 37 30 39 29 29 3b 0d 0a 0d 0a 20 20 20 20 20  0709));....     
293c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
293d0 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
293e0 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20         // NOTE: 
293f0 54 68 65 20 2e 4e 45 54 20 46 72 61 6d 65 77 6f  The .NET Framewo
29400 72 6b 20 34 2e 35 2e 31 20 64 6f 65 73 20 6e 6f  rk 4.5.1 does no
29410 74 20 68 61 76 65 20 69 74 73 20 6f 77 6e 0d 0a  t have its own..
29420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29430 20 20 20 20 2f 2f 20 20 20 20 20 20 20 64 69 72      //       dir
29440 65 63 74 6f 72 79 3b 20 68 6f 77 65 76 65 72 2c  ectory; however,
29450 20 69 74 20 73 74 69 6c 6c 20 6d 61 79 20 68 61   it still may ha
29460 76 65 20 61 73 73 65 6d 62 6c 79 0d 0a 20 20 20  ve assembly..   
29470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29480 20 2f 2f 20 20 20 20 20 20 20 66 6f 6c 64 65 72   //       folder
29490 73 20 66 6f 72 20 75 73 65 20 69 6e 20 56 69 73  s for use in Vis
294a0 75 61 6c 20 53 74 75 64 69 6f 2c 20 65 74 63 2e  ual Studio, etc.
294b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
294c0 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
294d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
294e0 20 28 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e   ((configuration
294f0 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20 21 63 6f   == null) || !co
29500 6e 66 69 67 75 72 61 74 69 6f 6e 2e 4e 6f 4e 65  nfiguration.NoNe
29510 74 46 78 34 35 31 29 0d 0a 20 20 20 20 20 20 20  tFx451)..       
29520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29530 20 64 65 73 6b 74 6f 70 56 65 72 73 69 6f 6e 4c   desktopVersionL
29540 69 73 74 2e 41 64 64 28 6e 65 77 20 56 65 72 73  ist.Add(new Vers
29550 69 6f 6e 28 34 2c 20 35 2c 20 31 29 29 3b 0d 0a  ion(4, 5, 1));..
29560 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
29570 20 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 4c        frameworkL
29580 69 73 74 2e 56 65 72 73 69 6f 6e 73 2e 41 64 64  ist.Versions.Add
29590 28 22 2e 4e 45 54 46 72 61 6d 65 77 6f 72 6b 22  (".NETFramework"
295a0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
295b0 20 20 20 20 20 20 20 20 20 20 20 64 65 73 6b 74             deskt
295c0 6f 70 56 65 72 73 69 6f 6e 4c 69 73 74 29 3b 0d  opVersionList);.
295d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
295e0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
295f0 20 20 20 20 20 20 69 66 20 28 28 63 6f 6e 66 69        if ((confi
29600 67 75 72 61 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c  guration == null
29610 29 20 7c 7c 20 21 63 6f 6e 66 69 67 75 72 61 74  ) || !configurat
29620 69 6f 6e 2e 4e 6f 43 6f 6d 70 61 63 74 29 0d 0a  ion.NoCompact)..
29630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29640 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
29650 20 20 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b         framework
29660 4c 69 73 74 2e 56 65 72 73 69 6f 6e 73 2e 41 64  List.Versions.Ad
29670 64 28 22 2e 4e 45 54 43 6f 6d 70 61 63 74 46 72  d(".NETCompactFr
29680 61 6d 65 77 6f 72 6b 22 2c 0d 0a 20 20 20 20 20  amework",..     
29690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
296a0 20 20 20 6e 65 77 20 56 65 72 73 69 6f 6e 4c 69     new VersionLi
296b0 73 74 28 6e 65 77 20 56 65 72 73 69 6f 6e 5b 5d  st(new Version[]
296c0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
296d0 20 20 20 20 20 20 20 20 20 20 20 20 6e 65 77 20              new 
296e0 56 65 72 73 69 6f 6e 28 32 2c 20 30 2c 20 30 2c  Version(2, 0, 0,
296f0 20 30 29 2c 20 6e 65 77 20 56 65 72 73 69 6f 6e   0), new Version
29700 28 33 2c 20 35 2c 20 30 2c 20 30 29 0d 0a 20 20  (3, 5, 0, 0)..  
29710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29720 20 20 7d 29 29 3b 0d 0a 20 20 20 20 20 20 20 20    }));..        
29730 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
29740 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
29750 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
29760 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29770 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29780 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29790 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
297a0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 66             if (f
297b0 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 50 6c 61  rameworkList.Pla
297c0 74 66 6f 72 6d 4e 61 6d 65 73 20 3d 3d 20 6e 75  tformNames == nu
297d0 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
297e0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
297f0 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73      frameworkLis
29800 74 2e 50 6c 61 74 66 6f 72 6d 4e 61 6d 65 73 20  t.PlatformNames 
29810 3d 20 6e 65 77 20 53 74 72 69 6e 67 4c 69 73 74  = new StringList
29820 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ();....         
29830 20 20 20 20 20 20 20 69 66 20 28 28 63 6f 6e 66         if ((conf
29840 69 67 75 72 61 74 69 6f 6e 20 3d 3d 20 6e 75 6c  iguration == nul
29850 6c 29 20 7c 7c 20 21 63 6f 6e 66 69 67 75 72 61  l) || !configura
29860 74 69 6f 6e 2e 4e 6f 44 65 73 6b 74 6f 70 29 0d  tion.NoDesktop).
29870 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
29880 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 4c 69       frameworkLi
29890 73 74 2e 50 6c 61 74 66 6f 72 6d 4e 61 6d 65 73  st.PlatformNames
298a0 2e 41 64 64 28 6e 75 6c 6c 29 3b 0d 0a 0d 0a 20  .Add(null);.... 
298b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
298c0 66 20 28 28 63 6f 6e 66 69 67 75 72 61 74 69 6f  f ((configuratio
298d0 6e 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20 21 63  n == null) || !c
298e0 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 4e 6f 43  onfiguration.NoC
298f0 6f 6d 70 61 63 74 29 0d 0a 20 20 20 20 20 20 20  ompact)..       
29900 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
29910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29920 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 50 6c  frameworkList.Pl
29930 61 74 66 6f 72 6d 4e 61 6d 65 73 2e 41 64 64 28  atformNames.Add(
29940 22 50 6f 63 6b 65 74 50 43 22 29 3b 0d 0a 20 20  "PocketPC");..  
29950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29960 20 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e    frameworkList.
29970 50 6c 61 74 66 6f 72 6d 4e 61 6d 65 73 2e 41 64  PlatformNames.Ad
29980 64 28 22 53 6d 61 72 74 70 68 6f 6e 65 22 29 3b  d("Smartphone");
29990 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
299a0 20 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 4c        frameworkL
299b0 69 73 74 2e 50 6c 61 74 66 6f 72 6d 4e 61 6d 65  ist.PlatformName
299c0 73 2e 41 64 64 28 22 57 69 6e 64 6f 77 73 43 45  s.Add("WindowsCE
299d0 22 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ");..           
299e0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
299f0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d      }..        }
29a00 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
29a10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29a20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29a30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29a40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29a50 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70  ///....        p
29a60 72 69 76 61 74 65 20 73 74 61 74 69 63 20 62 6f  rivate static bo
29a70 6f 6c 20 48 61 76 65 46 72 61 6d 65 77 6f 72 6b  ol HaveFramework
29a80 44 69 72 65 63 74 6f 72 79 28 0d 0a 20 20 20 20  Directory(..    
29a90 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65 67 69          MockRegi
29aa0 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79 2c  stryKey rootKey,
29ab0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74  ..            st
29ac0 72 69 6e 67 20 66 72 61 6d 65 77 6f 72 6b 4e 61  ring frameworkNa
29ad0 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me,..           
29ae0 20 56 65 72 73 69 6f 6e 20 66 72 61 6d 65 77 6f   Version framewo
29af0 72 6b 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20  rkVersion,..    
29b00 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 70          string p
29b10 6c 61 74 66 6f 72 6d 4e 61 6d 65 2c 0d 0a 20 20  latformName,..  
29b20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 70            bool p
29b30 65 72 55 73 65 72 2c 0d 0a 20 20 20 20 20 20 20  erUser,..       
29b40 20 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34 2c       bool wow64,
29b50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f  ..            bo
29b60 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20  ol whatIf,..    
29b70 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65 72          bool ver
29b80 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  bose,..         
29b90 20 20 20 72 65 66 20 73 74 72 69 6e 67 20 69 6e     ref string in
29ba0 73 74 61 6c 6c 44 69 72 65 63 74 6f 72 79 0d 0a  stallDirectory..
29bb0 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
29bc0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
29bd0 20 20 20 20 20 20 73 74 72 69 6e 67 20 6b 65 79        string key
29be0 4e 61 6d 65 20 3d 20 47 65 74 46 72 61 6d 65 77  Name = GetFramew
29bf0 6f 72 6b 4b 65 79 4e 61 6d 65 28 0d 0a 20 20 20  orkKeyName(..   
29c00 20 20 20 20 20 20 20 20 20 20 20 20 20 66 72 61               fra
29c10 6d 65 77 6f 72 6b 4e 61 6d 65 2c 20 66 72 61 6d  meworkName, fram
29c20 65 77 6f 72 6b 56 65 72 73 69 6f 6e 2c 20 70 6c  eworkVersion, pl
29c30 61 74 66 6f 72 6d 4e 61 6d 65 2c 20 70 65 72 55  atformName, perU
29c40 73 65 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ser,..          
29c50 20 20 20 20 20 20 77 6f 77 36 34 29 3b 0d 0a 0d        wow64);...
29c60 0a 20 20 20 20 20 20 20 20 20 20 20 20 75 73 69  .            usi
29c70 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73 74 72 79  ng (MockRegistry
29c80 4b 65 79 20 6b 65 79 20 3d 20 52 65 67 69 73 74  Key key = Regist
29c90 72 79 48 65 6c 70 65 72 2e 4f 70 65 6e 53 75 62  ryHelper.OpenSub
29ca0 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20  Key(..          
29cb0 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65            rootKe
29cc0 79 2c 20 6b 65 79 4e 61 6d 65 2c 20 66 61 6c 73  y, keyName, fals
29cd0 65 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f  e, whatIf, verbo
29ce0 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  se))..          
29cf0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
29d00 20 20 20 20 20 69 66 20 28 6b 65 79 20 3d 3d 20       if (key == 
29d10 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
29d20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
29d30 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20  n false;....    
29d40 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
29d50 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 20 21 3d 20  platformName != 
29d60 6e 75 6c 6c 29 20 2f 2f 20 4e 4f 54 45 3a 20 53  null) // NOTE: S
29d70 6b 69 70 20 6e 6f 6e 2d 64 65 73 6b 74 6f 70 2e  kip non-desktop.
29d80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
29d90 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75        return tru
29da0 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e;....          
29db0 20 20 20 20 20 20 73 74 72 69 6e 67 20 64 69 72        string dir
29dc0 65 63 74 6f 72 79 20 3d 20 47 65 74 46 72 61 6d  ectory = GetFram
29dd0 65 77 6f 72 6b 44 69 72 65 63 74 6f 72 79 28 0d  eworkDirectory(.
29de0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
29df0 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 66 72       rootKey, fr
29e00 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 2c 20  ameworkVersion, 
29e10 70 65 72 55 73 65 72 2c 20 77 6f 77 36 34 2c 20  perUser, wow64, 
29e20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20  whatIf,..       
29e30 20 20 20 20 20 20 20 20 20 20 20 20 20 76 65 72               ver
29e40 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  bose);....      
29e50 20 20 20 20 20 20 20 20 20 20 69 66 20 28 53 74            if (St
29e60 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70  ring.IsNullOrEmp
29e70 74 79 28 64 69 72 65 63 74 6f 72 79 29 29 0d 0a  ty(directory))..
29e80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29e90 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
29ea0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
29eb0 20 20 20 20 20 69 66 20 28 21 44 69 72 65 63 74       if (!Direct
29ec0 6f 72 79 2e 45 78 69 73 74 73 28 64 69 72 65 63  ory.Exists(direc
29ed0 74 6f 72 79 29 29 0d 0a 20 20 20 20 20 20 20 20  tory))..        
29ee0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
29ef0 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20  rn false;....   
29f00 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61               Tra
29f10 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72  ceOps.DebugAndTr
29f20 61 63 65 28 54 72 61 63 65 50 72 69 6f 72 69 74  ace(TracePriorit
29f30 79 2e 4c 6f 77 65 72 2c 0d 0a 20 20 20 20 20 20  y.Lower,..      
29f40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65                de
29f50 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61  bugCallback, tra
29f60 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69  ceCallback, Stri
29f70 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20  ng.Format(..    
29f80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29f90 22 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72 6b 20  ".NET Framework 
29fa0 7b 30 7d 20 66 6f 75 6e 64 20 76 69 61 20 64 69  {0} found via di
29fb0 72 65 63 74 6f 72 79 20 7b 31 7d 2e 22 2c 0d 0a  rectory {1}.",..
29fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29fd0 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 66      ForDisplay(f
29fe0 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 29  rameworkVersion)
29ff0 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 64 69 72  , ForDisplay(dir
2a000 65 63 74 6f 72 79 29 29 2c 0d 0a 20 20 20 20 20  ectory)),..     
2a010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
2a020 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
2a030 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2a040 20 20 69 6e 73 74 61 6c 6c 44 69 72 65 63 74 6f    installDirecto
2a050 72 79 20 3d 20 64 69 72 65 63 74 6f 72 79 3b 0d  ry = directory;.
2a060 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2a070 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20   return true;.. 
2a080 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
2a090 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
2a0a0 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
2a0b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a0c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a0d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a0e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
2a0f0 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74        private st
2a100 61 74 69 63 20 62 6f 6f 6c 20 48 61 76 65 46 72  atic bool HaveFr
2a110 61 6d 65 77 6f 72 6b 52 65 67 69 73 74 72 79 28  ameworkRegistry(
2a120 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 4d 6f  ..            Mo
2a130 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 72 6f  ckRegistryKey ro
2a140 6f 74 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20  otKey,..        
2a150 20 20 20 20 73 74 72 69 6e 67 20 66 72 61 6d 65      string frame
2a160 77 6f 72 6b 4e 61 6d 65 2c 0d 0a 20 20 20 20 20  workName,..     
2a170 20 20 20 20 20 20 20 56 65 72 73 69 6f 6e 20 66         Version f
2a180 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 2c  rameworkVersion,
2a190 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74  ..            st
2a1a0 72 69 6e 67 20 70 6c 61 74 66 6f 72 6d 4e 61 6d  ring platformNam
2a1b0 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
2a1c0 62 6f 6f 6c 20 70 65 72 55 73 65 72 2c 0d 0a 20  bool perUser,.. 
2a1d0 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
2a1e0 77 6f 77 36 34 2c 0d 0a 20 20 20 20 20 20 20 20  wow64,..        
2a1f0 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c      bool whatIf,
2a200 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f  ..            bo
2a210 6f 6c 20 76 65 72 62 6f 73 65 0d 0a 20 20 20 20  ol verbose..    
2a220 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
2a230 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
2a240 20 20 73 74 72 69 6e 67 20 6b 65 79 4e 61 6d 65    string keyName
2a250 20 3d 20 47 65 74 46 72 61 6d 65 77 6f 72 6b 4b   = GetFrameworkK
2a260 65 79 4e 61 6d 65 28 0d 0a 20 20 20 20 20 20 20  eyName(..       
2a270 20 20 20 20 20 20 20 20 20 66 72 61 6d 65 77 6f           framewo
2a280 72 6b 4e 61 6d 65 2c 20 66 72 61 6d 65 77 6f 72  rkName, framewor
2a290 6b 56 65 72 73 69 6f 6e 2c 20 70 6c 61 74 66 6f  kVersion, platfo
2a2a0 72 6d 4e 61 6d 65 2c 20 70 65 72 55 73 65 72 2c  rmName, perUser,
2a2b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2a2c0 20 20 77 6f 77 36 34 29 3b 0d 0a 0d 0a 20 20 20    wow64);....   
2a2d0 20 20 20 20 20 20 20 20 20 75 73 69 6e 67 20 28           using (
2a2e0 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20  MockRegistryKey 
2a2f0 6b 65 79 20 3d 20 52 65 67 69 73 74 72 79 48 65  key = RegistryHe
2a300 6c 70 65 72 2e 4f 70 65 6e 53 75 62 4b 65 79 28  lper.OpenSubKey(
2a310 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2a320 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 6b        rootKey, k
2a330 65 79 4e 61 6d 65 2c 20 66 61 6c 73 65 2c 20 77  eyName, false, w
2a340 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 29  hatIf, verbose))
2a350 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
2a360 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2a370 20 69 66 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c   if (key == null
2a380 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
2a390 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
2a3a0 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  lse;....        
2a3b0 20 20 20 20 20 20 20 20 69 66 20 28 70 6c 61 74          if (plat
2a3c0 66 6f 72 6d 4e 61 6d 65 20 21 3d 20 6e 75 6c 6c  formName != null
2a3d0 29 20 2f 2f 20 4e 4f 54 45 3a 20 53 6b 69 70 20  ) // NOTE: Skip 
2a3e0 6e 6f 6e 2d 64 65 73 6b 74 6f 70 2e 0d 0a 20 20  non-desktop...  
2a3f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a400 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a    return true;..
2a410 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2a420 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67    TraceOps.Debug
2a430 41 6e 64 54 72 61 63 65 28 54 72 61 63 65 50 72  AndTrace(TracePr
2a440 69 6f 72 69 74 79 2e 4c 6f 77 65 72 2c 0d 0a 20  iority.Lower,.. 
2a450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a460 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b     debugCallback
2a470 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c  , traceCallback,
2a480 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d   String.Format(.
2a490 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2a4a0 20 20 20 20 20 22 2e 4e 45 54 20 46 72 61 6d 65       ".NET Frame
2a4b0 77 6f 72 6b 20 7b 30 7d 20 66 6f 75 6e 64 20 76  work {0} found v
2a4c0 69 61 20 72 65 67 69 73 74 72 79 20 7b 31 7d 2e  ia registry {1}.
2a4d0 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
2a4e0 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c          ForDispl
2a4f0 61 79 28 66 72 61 6d 65 77 6f 72 6b 56 65 72 73  ay(frameworkVers
2a500 69 6f 6e 29 2c 20 46 6f 72 44 69 73 70 6c 61 79  ion), ForDisplay
2a510 28 6b 65 79 4e 61 6d 65 29 29 2c 0d 0a 20 20 20  (keyName)),..   
2a520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a530 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
2a540 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2a550 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b      return true;
2a560 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
2a570 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....  
2a580 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
2a590 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a5a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a5b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a5c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
2a5d0 0a 20 20 20 20 20 20 20 20 5b 4d 65 74 68 6f 64  .        [Method
2a5e0 49 6d 70 6c 28 4d 65 74 68 6f 64 49 6d 70 6c 4f  Impl(MethodImplO
2a5f0 70 74 69 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e 69 6e  ptions.NoInlinin
2a600 67 29 5d 0d 0a 20 20 20 20 20 20 20 20 70 72 69  g)]..        pri
2a610 76 61 74 65 20 73 74 61 74 69 63 20 62 6f 6f 6c  vate static bool
2a620 20 46 6f 72 45 61 63 68 46 72 61 6d 65 77 6f 72   ForEachFramewor
2a630 6b 43 6f 6e 66 69 67 28 0d 0a 20 20 20 20 20 20  kConfig(..      
2a640 20 20 20 20 20 20 4d 6f 63 6b 52 65 67 69 73 74        MockRegist
2a650 72 79 20 72 65 67 69 73 74 72 79 2c 0d 0a 20 20  ry registry,..  
2a660 20 20 20 20 20 20 20 20 20 20 46 72 61 6d 65 77            Framew
2a670 6f 72 6b 4c 69 73 74 20 66 72 61 6d 65 77 6f 72  orkList framewor
2a680 6b 4c 69 73 74 2c 0d 0a 20 20 20 20 20 20 20 20  kList,..        
2a690 20 20 20 20 46 72 61 6d 65 77 6f 72 6b 43 6f 6e      FrameworkCon
2a6a0 66 69 67 43 61 6c 6c 62 61 63 6b 20 63 61 6c 6c  figCallback call
2a6b0 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20  back,..         
2a6c0 20 20 20 73 74 72 69 6e 67 20 76 65 72 73 69 6f     string versio
2a6d0 6e 2c 20 2f 2a 20 4e 4f 54 45 3a 20 4f 70 74 69  n, /* NOTE: Opti
2a6e0 6f 6e 61 6c 2e 20 2a 2f 0d 0a 20 20 20 20 20 20  onal. */..      
2a6f0 20 20 20 20 20 20 73 74 72 69 6e 67 20 69 6e 76        string inv
2a700 61 72 69 61 6e 74 4e 61 6d 65 2c 0d 0a 20 20 20  ariantName,..   
2a710 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
2a720 6e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  name,..         
2a730 20 20 20 73 74 72 69 6e 67 20 64 65 73 63 72 69     string descri
2a740 70 74 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20  ption,..        
2a750 20 20 20 20 73 74 72 69 6e 67 20 74 79 70 65 4e      string typeN
2a760 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ame,..          
2a770 20 20 41 73 73 65 6d 62 6c 79 4e 61 6d 65 20 61    AssemblyName a
2a780 73 73 65 6d 62 6c 79 4e 61 6d 65 2c 0d 0a 20 20  ssemblyName,..  
2a790 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74            object
2a7a0 20 63 6c 69 65 6e 74 44 61 74 61 2c 0d 0a 20 20   clientData,..  
2a7b0 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 70            bool p
2a7c0 65 72 55 73 65 72 2c 0d 0a 20 20 20 20 20 20 20  erUser,..       
2a7d0 20 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34 2c       bool wow64,
2a7e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f  ..            bo
2a7f0 6f 6c 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e  ol throwOnMissin
2a800 67 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  g,..            
2a810 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20  bool whatIf,..  
2a820 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76            bool v
2a830 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20  erbose,..       
2a840 20 20 20 20 20 72 65 66 20 62 6f 6f 6c 20 73 61       ref bool sa
2a850 76 65 64 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ved,..          
2a860 20 20 72 65 66 20 73 74 72 69 6e 67 20 65 72 72    ref string err
2a870 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  or..            
2a880 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
2a890 20 20 20 20 20 20 20 20 20 20 69 66 20 28 72 65            if (re
2a8a0 67 69 73 74 72 79 20 3d 3d 20 6e 75 6c 6c 29 0d  gistry == null).
2a8b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
2a8c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a8d0 65 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64  error = "invalid
2a8e0 20 72 65 67 69 73 74 72 79 22 3b 0d 0a 20 20 20   registry";..   
2a8f0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
2a900 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20  urn false;..    
2a910 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
2a920 20 20 20 20 20 20 20 20 20 69 66 20 28 66 72 61           if (fra
2a930 6d 65 77 6f 72 6b 4c 69 73 74 20 3d 3d 20 6e 75  meworkList == nu
2a940 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
2a950 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
2a960 20 20 20 20 65 72 72 6f 72 20 3d 20 22 69 6e 76      error = "inv
2a970 61 6c 69 64 20 66 72 61 6d 65 77 6f 72 6b 20 6c  alid framework l
2a980 69 73 74 22 3b 0d 0a 20 20 20 20 20 20 20 20 20  ist";..         
2a990 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
2a9a0 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lse;..          
2a9b0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
2a9c0 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b     MockRegistryK
2a9d0 65 79 20 72 6f 6f 74 4b 65 79 20 3d 20 66 72 61  ey rootKey = fra
2a9e0 6d 65 77 6f 72 6b 4c 69 73 74 2e 52 6f 6f 74 4b  meworkList.RootK
2a9f0 65 79 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ey;....         
2aa00 20 20 20 69 66 20 28 72 6f 6f 74 4b 65 79 20 3d     if (rootKey =
2aa10 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
2aa20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
2aa30 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20          error = 
2aa40 22 69 6e 76 61 6c 69 64 20 72 6f 6f 74 20 6b 65  "invalid root ke
2aa50 79 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  y";..           
2aa60 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
2aa70 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
2aa80 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
2aa90 20 69 66 20 28 21 49 73 53 75 70 70 6f 72 74 65   if (!IsSupporte
2aaa0 64 52 6f 6f 74 4b 65 79 28 72 65 67 69 73 74 72  dRootKey(registr
2aab0 79 2c 20 72 6f 6f 74 4b 65 79 29 29 0d 0a 20 20  y, rootKey))..  
2aac0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
2aad0 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
2aae0 6f 72 20 3d 20 22 72 6f 6f 74 20 6b 65 79 20 6d  or = "root key m
2aaf0 75 73 74 20 62 65 20 70 65 72 2d 75 73 65 72 20  ust be per-user 
2ab00 6f 72 20 70 65 72 2d 6d 61 63 68 69 6e 65 22 3b  or per-machine";
2ab10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2ab20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
2ab30 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
2ab40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
2ab50 20 28 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e   (frameworkList.
2ab60 4e 61 6d 65 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  Names == null)..
2ab70 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
2ab80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
2ab90 72 72 6f 72 20 3d 20 22 6e 6f 20 66 72 61 6d 65  rror = "no frame
2aba0 77 6f 72 6b 20 6e 61 6d 65 73 20 66 6f 75 6e 64  work names found
2abb0 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ";..            
2abc0 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
2abd0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
2abe0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2abf0 69 66 20 28 66 72 61 6d 65 77 6f 72 6b 4c 69 73  if (frameworkLis
2ac00 74 2e 56 65 72 73 69 6f 6e 73 20 3d 3d 20 6e 75  t.Versions == nu
2ac10 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
2ac20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
2ac30 20 20 20 20 65 72 72 6f 72 20 3d 20 22 6e 6f 20      error = "no 
2ac40 66 72 61 6d 65 77 6f 72 6b 20 76 65 72 73 69 6f  framework versio
2ac50 6e 73 20 66 6f 75 6e 64 22 3b 0d 0a 20 20 20 20  ns found";..    
2ac60 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
2ac70 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20  rn false;..     
2ac80 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
2ac90 20 20 20 20 20 20 20 20 69 66 20 28 66 72 61 6d          if (fram
2aca0 65 77 6f 72 6b 4c 69 73 74 2e 50 6c 61 74 66 6f  eworkList.Platfo
2acb0 72 6d 4e 61 6d 65 73 20 3d 3d 20 6e 75 6c 6c 29  rmNames == null)
2acc0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
2acd0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2ace0 20 65 72 72 6f 72 20 3d 20 22 6e 6f 20 70 6c 61   error = "no pla
2acf0 74 66 6f 72 6d 20 6e 61 6d 65 73 20 66 6f 75 6e  tform names foun
2ad00 64 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  d";..           
2ad10 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
2ad20 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
2ad30 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
2ad40 20 69 66 20 28 66 72 61 6d 65 77 6f 72 6b 4c 69   if (frameworkLi
2ad50 73 74 2e 4e 61 6d 65 73 2e 43 6f 75 6e 74 20 21  st.Names.Count !
2ad60 3d 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e  = frameworkList.
2ad70 50 6c 61 74 66 6f 72 6d 4e 61 6d 65 73 2e 43 6f  PlatformNames.Co
2ad80 75 6e 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20  unt)..          
2ad90 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
2ada0 20 20 20 20 20 65 72 72 6f 72 20 3d 20 53 74 72       error = Str
2adb0 69 6e 67 2e 46 6f 72 6d 61 74 28 22 66 72 61 6d  ing.Format("fram
2adc0 65 77 6f 72 6b 20 6e 61 6d 65 20 63 6f 75 6e 74  ework name count
2add0 20 7b 30 7d 20 64 6f 65 73 20 6e 6f 74 20 22 20   {0} does not " 
2ade0 2b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  +..             
2adf0 20 20 20 20 20 20 20 22 6d 61 74 63 68 20 70 6c         "match pl
2ae00 61 74 66 6f 72 6d 20 6e 61 6d 65 20 63 6f 75 6e  atform name coun
2ae10 74 20 7b 31 7d 22 2c 20 66 72 61 6d 65 77 6f 72  t {1}", framewor
2ae20 6b 4c 69 73 74 2e 4e 61 6d 65 73 2e 43 6f 75 6e  kList.Names.Coun
2ae30 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t,..            
2ae40 20 20 20 20 20 20 20 20 66 72 61 6d 65 77 6f 72          framewor
2ae50 6b 4c 69 73 74 2e 50 6c 61 74 66 6f 72 6d 4e 61  kList.PlatformNa
2ae60 6d 65 73 2e 43 6f 75 6e 74 29 3b 0d 0a 0d 0a 20  mes.Count);.... 
2ae70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
2ae80 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20  eturn false;..  
2ae90 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
2aea0 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 20 28             for (
2aeb0 69 6e 74 20 69 6e 64 65 78 20 3d 20 30 3b 20 69  int index = 0; i
2aec0 6e 64 65 78 20 3c 20 66 72 61 6d 65 77 6f 72 6b  ndex < framework
2aed0 4c 69 73 74 2e 4e 61 6d 65 73 2e 43 6f 75 6e 74  List.Names.Count
2aee0 3b 20 69 6e 64 65 78 2b 2b 29 0d 0a 20 20 20 20  ; index++)..    
2aef0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
2af00 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
2af10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
2af20 2f 20 4e 4f 54 45 3a 20 47 72 61 62 20 74 68 65  / NOTE: Grab the
2af30 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 66 72 61   name of the fra
2af40 6d 65 77 6f 72 6b 20 28 65 2e 67 2e 20 22 2e 4e  mework (e.g. ".N
2af50 45 54 46 72 61 6d 65 77 6f 72 6b 22 29 0d 0a 20  ETFramework").. 
2af60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
2af70 2f 20 20 20 20 20 20 20 61 6e 64 20 74 68 65 20  /       and the 
2af80 6e 61 6d 65 20 6f 66 20 74 68 65 20 70 6c 61 74  name of the plat
2af90 66 6f 72 6d 20 28 65 2e 67 2e 20 22 57 69 6e 64  form (e.g. "Wind
2afa0 6f 77 73 43 45 22 29 2e 0d 0a 20 20 20 20 20 20  owsCE")...      
2afb0 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
2afc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
2afd0 72 69 6e 67 20 66 72 61 6d 65 77 6f 72 6b 4e 61  ring frameworkNa
2afe0 6d 65 20 3d 20 66 72 61 6d 65 77 6f 72 6b 4c 69  me = frameworkLi
2aff0 73 74 2e 4e 61 6d 65 73 5b 69 6e 64 65 78 5d 3b  st.Names[index];
2b000 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2b010 20 20 73 74 72 69 6e 67 20 70 6c 61 74 66 6f 72    string platfor
2b020 6d 4e 61 6d 65 20 3d 20 66 72 61 6d 65 77 6f 72  mName = framewor
2b030 6b 4c 69 73 74 2e 50 6c 61 74 66 6f 72 6d 4e 61  kList.PlatformNa
2b040 6d 65 73 5b 69 6e 64 65 78 5d 3b 0d 0a 0d 0a 20  mes[index];.... 
2b050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
2b060 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
2b070 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 53 6b 69 70     // NOTE: Skip
2b080 20 61 6c 6c 20 6e 6f 6e 2d 64 65 73 6b 74 6f 70   all non-desktop
2b090 20 66 72 61 6d 65 77 6f 72 6b 73 20 28 69 2e 65   frameworks (i.e
2b0a0 2e 20 69 66 20 74 68 65 20 70 6c 61 74 66 6f 72  . if the platfor
2b0b0 6d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  m..             
2b0c0 20 20 20 2f 2f 20 20 20 20 20 20 20 6e 61 6d 65     //       name
2b0d0 20 69 73 20 6e 6f 74 20 6e 75 6c 6c 29 2e 0d 0a   is not null)...
2b0e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b0f0 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
2b100 20 20 20 20 69 66 20 28 70 6c 61 74 66 6f 72 6d      if (platform
2b110 4e 61 6d 65 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20  Name != null).. 
2b120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b130 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 0d 0a     continue;....
2b140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b150 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
2b160 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 47 72 61      // NOTE: Gra
2b170 62 20 74 68 65 20 73 75 70 70 6f 72 74 65 64 20  b the supported 
2b180 76 65 72 73 69 6f 6e 73 20 6f 66 20 74 68 69 73  versions of this
2b190 20 70 61 72 74 69 63 75 6c 61 72 0d 0a 20 20 20   particular..   
2b1a0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
2b1b0 20 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 2e        framework.
2b1c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2b1d0 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
2b1e0 20 20 20 20 20 20 56 65 72 73 69 6f 6e 4c 69 73        VersionLis
2b1f0 74 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69  t frameworkVersi
2b200 6f 6e 4c 69 73 74 3b 0d 0a 0d 0a 20 20 20 20 20  onList;....     
2b210 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76             if (v
2b220 65 72 73 69 6f 6e 20 21 3d 20 6e 75 6c 6c 29 0d  ersion != null).
2b230 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2b240 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
2b250 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
2b260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b270 2f 2f 20 4e 4f 54 45 3a 20 4d 61 6e 75 61 6c 20  // NOTE: Manual 
2b280 6f 76 65 72 72 69 64 65 20 6f 66 20 74 68 65 20  override of the 
2b290 2a 4f 4e 45 2a 20 66 72 61 6d 65 77 6f 72 6b 20  *ONE* framework 
2b2a0 76 65 72 73 69 6f 6e 0d 0a 20 20 20 20 20 20 20  version..       
2b2b0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
2b2c0 20 20 20 20 20 20 74 6f 20 70 72 6f 63 65 73 73        to process
2b2d0 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
2b2e0 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
2b2f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66                 f
2b300 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 4c  rameworkVersionL
2b310 69 73 74 20 3d 20 6e 65 77 20 56 65 72 73 69 6f  ist = new Versio
2b320 6e 4c 69 73 74 28 29 3b 0d 0a 20 20 20 20 20 20  nList();..      
2b330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 72                fr
2b340 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 4c 69  ameworkVersionLi
2b350 73 74 2e 41 64 64 28 6e 65 77 20 56 65 72 73 69  st.Add(new Versi
2b360 6f 6e 28 76 65 72 73 69 6f 6e 29 29 3b 0d 0a 20  on(version));.. 
2b370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
2b380 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2b390 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20    else..        
2b3a0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
2b3b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
2b3c0 66 20 28 21 66 72 61 6d 65 77 6f 72 6b 4c 69 73  f (!frameworkLis
2b3d0 74 2e 56 65 72 73 69 6f 6e 73 2e 54 72 79 47 65  t.Versions.TryGe
2b3e0 74 56 61 6c 75 65 28 0d 0a 20 20 20 20 20 20 20  tValue(..       
2b3f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b400 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 4e 61       frameworkNa
2b410 6d 65 2c 20 6f 75 74 20 66 72 61 6d 65 77 6f 72  me, out framewor
2b420 6b 56 65 72 73 69 6f 6e 4c 69 73 74 29 20 7c 7c  kVersionList) ||
2b430 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2b440 20 20 20 20 20 20 20 20 20 20 28 66 72 61 6d 65            (frame
2b450 77 6f 72 6b 56 65 72 73 69 6f 6e 4c 69 73 74 20  workVersionList 
2b460 3d 3d 20 6e 75 6c 6c 29 29 0d 0a 20 20 20 20 20  == null))..     
2b470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
2b480 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2b490 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e            contin
2b4a0 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
2b4b0 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
2b4c0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
2b4d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2b4e0 20 66 6f 72 65 61 63 68 20 28 56 65 72 73 69 6f   foreach (Versio
2b4f0 6e 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69  n frameworkVersi
2b500 6f 6e 20 69 6e 20 66 72 61 6d 65 77 6f 72 6b 56  on in frameworkV
2b510 65 72 73 69 6f 6e 4c 69 73 74 29 0d 0a 20 20 20  ersionList)..   
2b520 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
2b530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b540 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62      TraceOps.Deb
2b550 75 67 41 6e 64 54 72 61 63 65 28 54 72 61 63 65  ugAndTrace(Trace
2b560 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 72 2c 0d  Priority.Lower,.
2b570 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2b580 20 20 20 20 20 20 20 20 20 64 65 62 75 67 43 61           debugCa
2b590 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c  llback, traceCal
2b5a0 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f  lback, String.Fo
2b5b0 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
2b5c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
2b5d0 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 20 3d 20  frameworkName = 
2b5e0 7b 30 7d 2c 20 66 72 61 6d 65 77 6f 72 6b 56 65  {0}, frameworkVe
2b5f0 72 73 69 6f 6e 20 3d 20 7b 31 7d 2c 20 22 20 2b  rsion = {1}, " +
2b600 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2b610 20 20 20 20 20 20 20 20 20 20 22 70 6c 61 74 66            "platf
2b620 6f 72 6d 4e 61 6d 65 20 3d 20 7b 32 7d 22 2c 20  ormName = {2}", 
2b630 46 6f 72 44 69 73 70 6c 61 79 28 66 72 61 6d 65  ForDisplay(frame
2b640 77 6f 72 6b 4e 61 6d 65 29 2c 0d 0a 20 20 20 20  workName),..    
2b650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b660 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 66      ForDisplay(f
2b670 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 29  rameworkVersion)
2b680 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
2b690 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69             ForDi
2b6a0 73 70 6c 61 79 28 70 6c 61 74 66 6f 72 6d 4e 61  splay(platformNa
2b6b0 6d 65 29 29 2c 20 74 72 61 63 65 43 61 74 65 67  me)), traceCateg
2b6c0 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
2b6d0 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72               str
2b6e0 69 6e 67 20 69 6e 73 74 61 6c 6c 44 69 72 65 63  ing installDirec
2b6f0 74 6f 72 79 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a  tory = null;....
2b700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b710 20 20 20 20 69 66 20 28 21 48 61 76 65 46 72 61      if (!HaveFra
2b720 6d 65 77 6f 72 6b 44 69 72 65 63 74 6f 72 79 28  meworkDirectory(
2b730 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2b740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f                ro
2b750 6f 74 4b 65 79 2c 20 66 72 61 6d 65 77 6f 72 6b  otKey, framework
2b760 4e 61 6d 65 2c 20 66 72 61 6d 65 77 6f 72 6b 56  Name, frameworkV
2b770 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20  ersion,..       
2b780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b790 20 20 20 20 20 70 6c 61 74 66 6f 72 6d 4e 61 6d       platformNam
2b7a0 65 2c 20 70 65 72 55 73 65 72 2c 20 77 6f 77 36  e, perUser, wow6
2b7b0 34 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f  4, whatIf, verbo
2b7c0 73 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se,..           
2b7d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b7e0 20 72 65 66 20 69 6e 73 74 61 6c 6c 44 69 72 65   ref installDire
2b7f0 63 74 6f 72 79 29 29 0d 0a 20 20 20 20 20 20 20  ctory))..       
2b800 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
2b810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b820 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73          TraceOps
2b830 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 54  .DebugAndTrace(T
2b840 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77  racePriority.Low
2b850 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
2b860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64                 d
2b870 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72  ebugCallback, tr
2b880 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72  aceCallback, Str
2b890 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
2b8a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b8b0 20 20 20 20 20 20 20 20 20 22 2e 4e 45 54 20 46           ".NET F
2b8c0 72 61 6d 65 77 6f 72 6b 20 7b 30 7d 20 64 69 72  ramework {0} dir
2b8d0 65 63 74 6f 72 79 20 6e 6f 74 20 66 6f 75 6e 64  ectory not found
2b8e0 2c 20 22 20 2b 0d 0a 20 20 20 20 20 20 20 20 20  , " +..         
2b8f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b900 20 20 20 22 73 6b 69 70 70 69 6e 67 2e 2e 2e 22     "skipping..."
2b910 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 66 72 61  , ForDisplay(fra
2b920 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 29 29 2c  meworkVersion)),
2b930 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2b940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
2b950 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d  aceCategory);...
2b960 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2b970 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75           continu
2b980 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
2b990 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
2b9a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b9b0 20 69 66 20 28 63 61 6c 6c 62 61 63 6b 20 3d 3d   if (callback ==
2b9c0 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
2b9d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b9e0 63 6f 6e 74 69 6e 75 65 3b 0d 0a 0d 0a 20 20 20  continue;....   
2b9f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ba00 20 73 74 72 69 6e 67 20 64 69 72 65 63 74 6f 72   string director
2ba10 79 20 3d 20 69 6e 73 74 61 6c 6c 44 69 72 65 63  y = installDirec
2ba20 74 6f 72 79 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  tory;....       
2ba30 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
2ba40 28 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72  (String.IsNullOr
2ba50 45 6d 70 74 79 28 64 69 72 65 63 74 6f 72 79 29  Empty(directory)
2ba60 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
2ba70 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
2ba80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ba90 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67    TraceOps.Debug
2baa0 41 6e 64 54 72 61 63 65 28 54 72 61 63 65 50 72  AndTrace(TracePr
2bab0 69 6f 72 69 74 79 2e 4c 6f 77 2c 0d 0a 20 20 20  iority.Low,..   
2bac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bad0 20 20 20 20 20 20 20 20 20 64 65 62 75 67 43 61           debugCa
2bae0 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c  llback, traceCal
2baf0 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f  lback, String.Fo
2bb00 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
2bb10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bb20 20 20 20 22 2e 4e 45 54 20 46 72 61 6d 65 77 6f     ".NET Framewo
2bb30 72 6b 20 7b 30 7d 20 64 69 72 65 63 74 6f 72 79  rk {0} directory
2bb40 20 69 73 20 69 6e 76 61 6c 69 64 2c 20 22 20 2b   is invalid, " +
2bb50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2bb60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 73                "s
2bb70 6b 69 70 70 69 6e 67 2e 2e 2e 22 2c 20 46 6f 72  kipping...", For
2bb80 44 69 73 70 6c 61 79 28 66 72 61 6d 65 77 6f 72  Display(framewor
2bb90 6b 56 65 72 73 69 6f 6e 29 29 2c 0d 0a 20 20 20  kVersion)),..   
2bba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bbb0 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
2bbc0 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
2bbd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bbe0 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20      continue;.. 
2bbf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bc00 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
2bc10 20 20 20 20 20 20 20 20 20 20 20 20 64 69 72 65              dire
2bc20 63 74 6f 72 79 20 3d 20 50 61 74 68 2e 43 6f 6d  ctory = Path.Com
2bc30 62 69 6e 65 28 64 69 72 65 63 74 6f 72 79 2c 20  bine(directory, 
2bc40 22 43 6f 6e 66 69 67 22 29 3b 0d 0a 0d 0a 20 20  "Config");....  
2bc50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bc60 20 20 69 66 20 28 21 44 69 72 65 63 74 6f 72 79    if (!Directory
2bc70 2e 45 78 69 73 74 73 28 64 69 72 65 63 74 6f 72  .Exists(director
2bc80 79 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  y))..           
2bc90 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
2bca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bcb0 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62      TraceOps.Deb
2bcc0 75 67 41 6e 64 54 72 61 63 65 28 54 72 61 63 65  ugAndTrace(Trace
2bcd0 50 72 69 6f 72 69 74 79 2e 4c 6f 77 2c 0d 0a 20  Priority.Low,.. 
2bce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bcf0 20 20 20 20 20 20 20 20 20 20 20 64 65 62 75 67             debug
2bd00 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43  Callback, traceC
2bd10 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e  allback, String.
2bd20 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
2bd30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bd40 20 20 20 20 20 22 2e 4e 45 54 20 46 72 61 6d 65       ".NET Frame
2bd50 77 6f 72 6b 20 7b 30 7d 20 64 69 72 65 63 74 6f  work {0} directo
2bd60 72 79 20 7b 31 7d 20 64 6f 65 73 20 6e 6f 74 20  ry {1} does not 
2bd70 22 20 2b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  " +..           
2bd80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bd90 20 22 65 78 69 73 74 2c 20 73 6b 69 70 70 69 6e   "exist, skippin
2bda0 67 2e 2e 2e 22 2c 20 46 6f 72 44 69 73 70 6c 61  g...", ForDispla
2bdb0 79 28 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69  y(frameworkVersi
2bdc0 6f 6e 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  on),..          
2bdd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bde0 20 20 46 6f 72 44 69 73 70 6c 61 79 28 64 69 72    ForDisplay(dir
2bdf0 65 63 74 6f 72 79 29 29 2c 20 74 72 61 63 65 43  ectory)), traceC
2be00 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20  ategory);....   
2be10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2be20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a       continue;..
2be30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2be40 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
2be50 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72               str
2be60 69 6e 67 20 66 69 6c 65 4e 61 6d 65 20 3d 20 50  ing fileName = P
2be70 61 74 68 2e 43 6f 6d 62 69 6e 65 28 64 69 72 65  ath.Combine(dire
2be80 63 74 6f 72 79 2c 20 22 6d 61 63 68 69 6e 65 2e  ctory, "machine.
2be90 63 6f 6e 66 69 67 22 29 3b 0d 0a 0d 0a 20 20 20  config");....   
2bea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2beb0 20 69 66 20 28 21 46 69 6c 65 2e 45 78 69 73 74   if (!File.Exist
2bec0 73 28 66 69 6c 65 4e 61 6d 65 29 29 0d 0a 20 20  s(fileName))..  
2bed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bee0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
2bef0 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61               Tra
2bf00 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72  ceOps.DebugAndTr
2bf10 61 63 65 28 54 72 61 63 65 50 72 69 6f 72 69 74  ace(TracePriorit
2bf20 79 2e 4c 6f 77 2c 0d 0a 20 20 20 20 20 20 20 20  y.Low,..        
2bf30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bf40 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63      debugCallbac
2bf50 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b  k, traceCallback
2bf60 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  , String.Format(
2bf70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2bf80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2e                ".
2bf90 4e 45 54 20 46 72 61 6d 65 77 6f 72 6b 20 7b 30  NET Framework {0
2bfa0 7d 20 66 69 6c 65 20 7b 31 7d 20 64 6f 65 73 20  } file {1} does 
2bfb0 6e 6f 74 20 65 78 69 73 74 2c 20 22 20 2b 0d 0a  not exist, " +..
2bfc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bfd0 20 20 20 20 20 20 20 20 20 20 20 20 22 73 6b 69              "ski
2bfe0 70 70 69 6e 67 2e 2e 2e 22 2c 20 46 6f 72 44 69  pping...", ForDi
2bff0 73 70 6c 61 79 28 66 72 61 6d 65 77 6f 72 6b 56  splay(frameworkV
2c000 65 72 73 69 6f 6e 29 2c 0d 0a 20 20 20 20 20 20  ersion),..      
2c010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c020 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79        ForDisplay
2c030 28 66 69 6c 65 4e 61 6d 65 29 29 2c 20 74 72 61  (fileName)), tra
2c040 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
2c050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c060 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65          continue
2c070 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
2c080 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
2c090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c0a0 62 6f 6f 6c 20 6c 6f 63 61 6c 53 61 76 65 64 20  bool localSaved 
2c0b0 3d 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20  = false;....    
2c0c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c0d0 69 66 20 28 21 63 61 6c 6c 62 61 63 6b 28 0d 0a  if (!callback(..
2c0e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c0f0 20 20 20 20 20 20 20 20 20 20 20 20 66 69 6c 65              file
2c100 4e 61 6d 65 2c 20 69 6e 76 61 72 69 61 6e 74 4e  Name, invariantN
2c110 61 6d 65 2c 20 6e 61 6d 65 2c 20 64 65 73 63 72  ame, name, descr
2c120 69 70 74 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20  iption,..       
2c130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c140 20 20 20 20 20 74 79 70 65 4e 61 6d 65 2c 20 61       typeName, a
2c150 73 73 65 6d 62 6c 79 4e 61 6d 65 2c 20 69 6e 73  ssemblyName, ins
2c160 74 61 6c 6c 44 69 72 65 63 74 6f 72 79 2c 0d 0a  tallDirectory,..
2c170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c180 20 20 20 20 20 20 20 20 20 20 20 20 63 6c 69 65              clie
2c190 6e 74 44 61 74 61 2c 20 70 65 72 55 73 65 72 2c  ntData, perUser,
2c1a0 20 77 6f 77 36 34 2c 20 74 68 72 6f 77 4f 6e 4d   wow64, throwOnM
2c1b0 69 73 73 69 6e 67 2c 0d 0a 20 20 20 20 20 20 20  issing,..       
2c1c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c1d0 20 20 20 20 20 77 68 61 74 49 66 2c 20 76 65 72       whatIf, ver
2c1e0 62 6f 73 65 2c 20 72 65 66 20 6c 6f 63 61 6c 53  bose, ref localS
2c1f0 61 76 65 64 2c 20 72 65 66 20 65 72 72 6f 72 29  aved, ref error)
2c200 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
2c210 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
2c220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c230 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
2c240 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2c250 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
2c260 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65              else
2c270 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2c280 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
2c290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c2a0 20 69 66 20 28 6c 6f 63 61 6c 53 61 76 65 64 20   if (localSaved 
2c2b0 26 26 20 21 73 61 76 65 64 29 0d 0a 20 20 20 20  && !saved)..    
2c2c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c2d0 20 20 20 20 20 20 20 20 73 61 76 65 64 20 3d 20          saved = 
2c2e0 74 72 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  true;....       
2c2f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c300 20 69 66 20 28 76 65 72 62 6f 73 65 29 0d 0a 20   if (verbose).. 
2c310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c320 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
2c330 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63  Ops.DebugAndTrac
2c340 65 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e  e(TracePriority.
2c350 4c 6f 77 65 73 74 2c 0d 0a 20 20 20 20 20 20 20  Lowest,..       
2c360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c370 20 20 20 20 20 20 20 20 20 64 65 62 75 67 43 61           debugCa
2c380 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c  llback, traceCal
2c390 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f  lback, String.Fo
2c3a0 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
2c3b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c3c0 20 20 20 20 20 20 20 22 6c 6f 63 61 6c 53 61 76         "localSav
2c3d0 65 64 20 3d 20 7b 30 7d 2c 20 73 61 76 65 64 20  ed = {0}, saved 
2c3e0 3d 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20  = {1}",..       
2c3f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c400 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70           ForDisp
2c410 6c 61 79 28 6c 6f 63 61 6c 53 61 76 65 64 29 2c  lay(localSaved),
2c420 20 46 6f 72 44 69 73 70 6c 61 79 28 73 61 76 65   ForDisplay(save
2c430 64 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  d)),..          
2c440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c450 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67        traceCateg
2c460 6f 72 79 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ory);..         
2c470 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
2c480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
2c490 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
2c4a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
2c4b0 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20  turn true;..    
2c4c0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
2c4d0 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
2c4e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c4f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c500 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c510 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
2c520 20 20 20 20 5b 4d 65 74 68 6f 64 49 6d 70 6c 28      [MethodImpl(
2c530 4d 65 74 68 6f 64 49 6d 70 6c 4f 70 74 69 6f 6e  MethodImplOption
2c540 73 2e 4e 6f 49 6e 6c 69 6e 69 6e 67 29 5d 0d 0a  s.NoInlining)]..
2c550 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
2c560 73 74 61 74 69 63 20 62 6f 6f 6c 20 46 6f 72 45  static bool ForE
2c570 61 63 68 46 72 61 6d 65 77 6f 72 6b 52 65 67 69  achFrameworkRegi
2c580 73 74 72 79 28 0d 0a 20 20 20 20 20 20 20 20 20  stry(..         
2c590 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 20     MockRegistry 
2c5a0 72 65 67 69 73 74 72 79 2c 0d 0a 20 20 20 20 20  registry,..     
2c5b0 20 20 20 20 20 20 20 46 72 61 6d 65 77 6f 72 6b         Framework
2c5c0 4c 69 73 74 20 66 72 61 6d 65 77 6f 72 6b 4c 69  List frameworkLi
2c5d0 73 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  st,..           
2c5e0 20 46 72 61 6d 65 77 6f 72 6b 52 65 67 69 73 74   FrameworkRegist
2c5f0 72 79 43 61 6c 6c 62 61 63 6b 20 63 61 6c 6c 62  ryCallback callb
2c600 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ack,..          
2c610 20 20 73 74 72 69 6e 67 20 76 65 72 73 69 6f 6e    string version
2c620 2c 20 2f 2a 20 4e 4f 54 45 3a 20 4f 70 74 69 6f  , /* NOTE: Optio
2c630 6e 61 6c 2e 20 2a 2f 0d 0a 20 20 20 20 20 20 20  nal. */..       
2c640 20 20 20 20 20 6f 62 6a 65 63 74 20 63 6c 69 65       object clie
2c650 6e 74 44 61 74 61 2c 0d 0a 20 20 20 20 20 20 20  ntData,..       
2c660 20 20 20 20 20 62 6f 6f 6c 20 70 65 72 55 73 65       bool perUse
2c670 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  r,..            
2c680 62 6f 6f 6c 20 77 6f 77 36 34 2c 0d 0a 20 20 20  bool wow64,..   
2c690 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 74 68           bool th
2c6a0 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 2c 0d 0a 20  rowOnMissing,.. 
2c6b0 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
2c6c0 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20  whatIf,..       
2c6d0 20 20 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73       bool verbos
2c6e0 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
2c6f0 72 65 66 20 73 74 72 69 6e 67 20 65 72 72 6f 72  ref string error
2c700 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d  ..            ).
2c710 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
2c720 20 20 20 20 20 20 20 20 69 66 20 28 72 65 67 69          if (regi
2c730 73 74 72 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  stry == null).. 
2c740 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
2c750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72                er
2c760 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64 20 72  ror = "invalid r
2c770 65 67 69 73 74 72 79 22 3b 0d 0a 20 20 20 20 20  egistry";..     
2c780 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
2c790 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  n false;..      
2c7a0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
2c7b0 20 20 20 20 20 20 20 69 66 20 28 66 72 61 6d 65         if (frame
2c7c0 77 6f 72 6b 4c 69 73 74 20 3d 3d 20 6e 75 6c 6c  workList == null
2c7d0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
2c7e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2c7f0 20 20 65 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c    error = "inval
2c800 69 64 20 66 72 61 6d 65 77 6f 72 6b 20 6c 69 73  id framework lis
2c810 74 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  t";..           
2c820 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
2c830 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
2c840 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
2c850 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79   MockRegistryKey
2c860 20 72 6f 6f 74 4b 65 79 20 3d 20 66 72 61 6d 65   rootKey = frame
2c870 77 6f 72 6b 4c 69 73 74 2e 52 6f 6f 74 4b 65 79  workList.RootKey
2c880 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
2c890 20 69 66 20 28 72 6f 6f 74 4b 65 79 20 3d 3d 20   if (rootKey == 
2c8a0 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
2c8b0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
2c8c0 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 69        error = "i
2c8d0 6e 76 61 6c 69 64 20 72 6f 6f 74 20 6b 65 79 22  nvalid root key"
2c8e0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
2c8f0 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
2c900 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
2c910 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
2c920 66 20 28 21 49 73 53 75 70 70 6f 72 74 65 64 52  f (!IsSupportedR
2c930 6f 6f 74 4b 65 79 28 72 65 67 69 73 74 72 79 2c  ootKey(registry,
2c940 20 72 6f 6f 74 4b 65 79 29 29 0d 0a 20 20 20 20   rootKey))..    
2c950 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
2c960 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72             error
2c970 20 3d 20 22 72 6f 6f 74 20 6b 65 79 20 6d 75 73   = "root key mus
2c980 74 20 62 65 20 70 65 72 2d 75 73 65 72 20 6f 72  t be per-user or
2c990 20 70 65 72 2d 6d 61 63 68 69 6e 65 22 3b 0d 0a   per-machine";..
2c9a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c9b0 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20  return false;.. 
2c9c0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
2c9d0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
2c9e0 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 4e 61  frameworkList.Na
2c9f0 6d 65 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  mes == null)..  
2ca00 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
2ca10 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
2ca20 6f 72 20 3d 20 22 6e 6f 20 66 72 61 6d 65 77 6f  or = "no framewo
2ca30 72 6b 20 6e 61 6d 65 73 20 66 6f 75 6e 64 22 3b  rk names found";
2ca40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2ca50 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
2ca60 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
2ca70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
2ca80 20 28 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e   (frameworkList.
2ca90 56 65 72 73 69 6f 6e 73 20 3d 3d 20 6e 75 6c 6c  Versions == null
2caa0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
2cab0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2cac0 20 20 65 72 72 6f 72 20 3d 20 22 6e 6f 20 66 72    error = "no fr
2cad0 61 6d 65 77 6f 72 6b 20 76 65 72 73 69 6f 6e 73  amework versions
2cae0 20 66 6f 75 6e 64 22 3b 0d 0a 20 20 20 20 20 20   found";..      
2caf0 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
2cb00 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20   false;..       
2cb10 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
2cb20 20 20 20 20 20 20 69 66 20 28 66 72 61 6d 65 77        if (framew
2cb30 6f 72 6b 4c 69 73 74 2e 50 6c 61 74 66 6f 72 6d  orkList.Platform
2cb40 4e 61 6d 65 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  Names == null)..
2cb50 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
2cb60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
2cb70 72 72 6f 72 20 3d 20 22 6e 6f 20 70 6c 61 74 66  rror = "no platf
2cb80 6f 72 6d 20 6e 61 6d 65 73 20 66 6f 75 6e 64 22  orm names found"
2cb90 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
2cba0 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
2cbb0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
2cbc0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
2cbd0 66 20 28 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74  f (frameworkList
2cbe0 2e 4e 61 6d 65 73 2e 43 6f 75 6e 74 20 21 3d 20  .Names.Count != 
2cbf0 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 50 6c  frameworkList.Pl
2cc00 61 74 66 6f 72 6d 4e 61 6d 65 73 2e 43 6f 75 6e  atformNames.Coun
2cc10 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t)..            
2cc20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
2cc30 20 20 20 65 72 72 6f 72 20 3d 20 53 74 72 69 6e     error = Strin
2cc40 67 2e 46 6f 72 6d 61 74 28 22 66 72 61 6d 65 77  g.Format("framew
2cc50 6f 72 6b 20 6e 61 6d 65 20 63 6f 75 6e 74 20 7b  ork name count {
2cc60 30 7d 20 64 6f 65 73 20 6e 6f 74 20 22 20 2b 0d  0} does not " +.
2cc70 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2cc80 20 20 20 20 20 22 6d 61 74 63 68 20 70 6c 61 74       "match plat
2cc90 66 6f 72 6d 20 6e 61 6d 65 20 63 6f 75 6e 74 20  form name count 
2cca0 7b 31 7d 22 2c 20 66 72 61 6d 65 77 6f 72 6b 4c  {1}", frameworkL
2ccb0 69 73 74 2e 4e 61 6d 65 73 2e 43 6f 75 6e 74 2c  ist.Names.Count,
2ccc0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2ccd0 20 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 4c        frameworkL
2cce0 69 73 74 2e 50 6c 61 74 66 6f 72 6d 4e 61 6d 65  ist.PlatformName
2ccf0 73 2e 43 6f 75 6e 74 29 3b 0d 0a 0d 0a 20 20 20  s.Count);....   
2cd00 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
2cd10 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20  urn false;..    
2cd20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
2cd30 20 20 20 20 20 20 20 20 20 66 6f 72 20 28 69 6e           for (in
2cd40 74 20 69 6e 64 65 78 20 3d 20 30 3b 20 69 6e 64  t index = 0; ind
2cd50 65 78 20 3c 20 66 72 61 6d 65 77 6f 72 6b 4c 69  ex < frameworkLi
2cd60 73 74 2e 4e 61 6d 65 73 2e 43 6f 75 6e 74 3b 20  st.Names.Count; 
2cd70 69 6e 64 65 78 2b 2b 29 0d 0a 20 20 20 20 20 20  index++)..      
2cd80 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
2cd90 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
2cda0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
2cdb0 4e 4f 54 45 3a 20 47 72 61 62 20 74 68 65 20 6e  NOTE: Grab the n
2cdc0 61 6d 65 20 6f 66 20 74 68 65 20 66 72 61 6d 65  ame of the frame
2cdd0 77 6f 72 6b 20 28 65 2e 67 2e 20 22 2e 4e 45 54  work (e.g. ".NET
2cde0 46 72 61 6d 65 77 6f 72 6b 22 29 0d 0a 20 20 20  Framework")..   
2cdf0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
2ce00 20 20 20 20 20 20 61 6e 64 20 74 68 65 20 6e 61        and the na
2ce10 6d 65 20 6f 66 20 74 68 65 20 70 6c 61 74 66 6f  me of the platfo
2ce20 72 6d 20 28 65 2e 67 2e 20 22 57 69 6e 64 6f 77  rm (e.g. "Window
2ce30 73 43 45 22 29 2e 0d 0a 20 20 20 20 20 20 20 20  sCE")...        
2ce40 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
2ce50 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
2ce60 6e 67 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65  ng frameworkName
2ce70 20 3d 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74   = frameworkList
2ce80 2e 4e 61 6d 65 73 5b 69 6e 64 65 78 5d 3b 0d 0a  .Names[index];..
2ce90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cea0 73 74 72 69 6e 67 20 70 6c 61 74 66 6f 72 6d 4e  string platformN
2ceb0 61 6d 65 20 3d 20 66 72 61 6d 65 77 6f 72 6b 4c  ame = frameworkL
2cec0 69 73 74 2e 50 6c 61 74 66 6f 72 6d 4e 61 6d 65  ist.PlatformName
2ced0 73 5b 69 6e 64 65 78 5d 3b 0d 0a 0d 0a 20 20 20  s[index];....   
2cee0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
2cef0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2cf00 20 2f 2f 20 4e 4f 54 45 3a 20 47 72 61 62 20 74   // NOTE: Grab t
2cf10 68 65 20 73 75 70 70 6f 72 74 65 64 20 76 65 72  he supported ver
2cf20 73 69 6f 6e 73 20 6f 66 20 74 68 69 73 20 70 61  sions of this pa
2cf30 72 74 69 63 75 6c 61 72 0d 0a 20 20 20 20 20 20  rticular..      
2cf40 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
2cf50 20 20 20 66 72 61 6d 65 77 6f 72 6b 2e 0d 0a 20     framework... 
2cf60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
2cf70 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
2cf80 20 20 20 56 65 72 73 69 6f 6e 4c 69 73 74 20 66     VersionList f
2cf90 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 4c  rameworkVersionL
2cfa0 69 73 74 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ist;....        
2cfb0 20 20 20 20 20 20 20 20 69 66 20 28 76 65 72 73          if (vers
2cfc0 69 6f 6e 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20  ion != null)..  
2cfd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
2cfe0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2cff0 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
2d000 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
2d010 4e 4f 54 45 3a 20 4d 61 6e 75 61 6c 20 6f 76 65  NOTE: Manual ove
2d020 72 72 69 64 65 20 6f 66 20 74 68 65 20 2a 4f 4e  rride of the *ON
2d030 45 2a 20 66 72 61 6d 65 77 6f 72 6b 20 76 65 72  E* framework ver
2d040 73 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20 20 20  sion..          
2d050 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
2d060 20 20 20 74 6f 20 70 72 6f 63 65 73 73 2e 0d 0a     to process...
2d070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d080 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
2d090 20 20 20 20 20 20 20 20 20 20 20 20 66 72 61 6d              fram
2d0a0 65 77 6f 72 6b 56 65 72 73 69 6f 6e 4c 69 73 74  eworkVersionList
2d0b0 20 3d 20 6e 65 77 20 56 65 72 73 69 6f 6e 4c 69   = new VersionLi
2d0c0 73 74 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  st();..         
2d0d0 20 20 20 20 20 20 20 20 20 20 20 66 72 61 6d 65             frame
2d0e0 77 6f 72 6b 56 65 72 73 69 6f 6e 4c 69 73 74 2e  workVersionList.
2d0f0 41 64 64 28 6e 65 77 20 56 65 72 73 69 6f 6e 28  Add(new Version(
2d100 76 65 72 73 69 6f 6e 29 29 3b 0d 0a 20 20 20 20  version));..    
2d110 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
2d120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
2d130 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  lse..           
2d140 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
2d150 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
2d160 21 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 56  !frameworkList.V
2d170 65 72 73 69 6f 6e 73 2e 54 72 79 47 65 74 56 61  ersions.TryGetVa
2d180 6c 75 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  lue(..          
2d190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d1a0 20 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c    frameworkName,
2d1b0 20 6f 75 74 20 66 72 61 6d 65 77 6f 72 6b 56 65   out frameworkVe
2d1c0 72 73 69 6f 6e 4c 69 73 74 29 20 7c 7c 0d 0a 20  rsionList) ||.. 
2d1d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d1e0 20 20 20 20 20 20 20 28 66 72 61 6d 65 77 6f 72         (framewor
2d1f0 6b 56 65 72 73 69 6f 6e 4c 69 73 74 20 3d 3d 20  kVersionList == 
2d200 6e 75 6c 6c 29 29 0d 0a 20 20 20 20 20 20 20 20  null))..        
2d210 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
2d220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d230 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b         continue;
2d240 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2d250 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
2d260 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
2d270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 6f                fo
2d280 72 65 61 63 68 20 28 56 65 72 73 69 6f 6e 20 66  reach (Version f
2d290 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 20  rameworkVersion 
2d2a0 69 6e 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73  in frameworkVers
2d2b0 69 6f 6e 4c 69 73 74 29 0d 0a 20 20 20 20 20 20  ionList)..      
2d2c0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
2d2d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d2e0 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41   TraceOps.DebugA
2d2f0 6e 64 54 72 61 63 65 28 54 72 61 63 65 50 72 69  ndTrace(TracePri
2d300 6f 72 69 74 79 2e 4c 6f 77 65 72 2c 0d 0a 20 20  ority.Lower,..  
2d310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d320 20 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62        debugCallb
2d330 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61  ack, traceCallba
2d340 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ck, String.Forma
2d350 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
2d360 20 20 20 20 20 20 20 20 20 20 20 20 22 66 72 61              "fra
2d370 6d 65 77 6f 72 6b 4e 61 6d 65 20 3d 20 7b 30 7d  meworkName = {0}
2d380 2c 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69  , frameworkVersi
2d390 6f 6e 20 3d 20 7b 31 7d 2c 20 22 20 2b 0d 0a 20  on = {1}, " +.. 
2d3a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d3b0 20 20 20 20 20 20 20 22 70 6c 61 74 66 6f 72 6d         "platform
2d3c0 4e 61 6d 65 20 3d 20 7b 32 7d 22 2c 20 46 6f 72  Name = {2}", For
2d3d0 44 69 73 70 6c 61 79 28 66 72 61 6d 65 77 6f 72  Display(framewor
2d3e0 6b 4e 61 6d 65 29 2c 0d 0a 20 20 20 20 20 20 20  kName),..       
2d3f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d400 20 46 6f 72 44 69 73 70 6c 61 79 28 66 72 61 6d   ForDisplay(fram
2d410 65 77 6f 72 6b 56 65 72 73 69 6f 6e 29 2c 0d 0a  eworkVersion),..
2d420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d430 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c          ForDispl
2d440 61 79 28 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 29  ay(platformName)
2d450 29 2c 20 74 72 61 63 65 43 61 74 65 67 6f 72 79  ), traceCategory
2d460 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
2d470 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21 48            if (!H
2d480 61 76 65 46 72 61 6d 65 77 6f 72 6b 52 65 67 69  aveFrameworkRegi
2d490 73 74 72 79 28 0d 0a 20 20 20 20 20 20 20 20 20  stry(..         
2d4a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d4b0 20 20 20 72 6f 6f 74 4b 65 79 2c 20 66 72 61 6d     rootKey, fram
2d4c0 65 77 6f 72 6b 4e 61 6d 65 2c 20 66 72 61 6d 65  eworkName, frame
2d4d0 77 6f 72 6b 56 65 72 73 69 6f 6e 2c 0d 0a 20 20  workVersion,..  
2d4e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d4f0 20 20 20 20 20 20 20 20 20 20 70 6c 61 74 66 6f            platfo
2d500 72 6d 4e 61 6d 65 2c 20 70 65 72 55 73 65 72 2c  rmName, perUser,
2d510 20 77 6f 77 36 34 2c 20 77 68 61 74 49 66 2c 20   wow64, whatIf, 
2d520 76 65 72 62 6f 73 65 29 29 0d 0a 20 20 20 20 20  verbose))..     
2d530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
2d540 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2d550 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f            TraceO
2d560 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65  ps.DebugAndTrace
2d570 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c  (TracePriority.L
2d580 6f 77 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ow,..           
2d590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d5a0 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20   debugCallback, 
2d5b0 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53  traceCallback, S
2d5c0 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
2d5d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d5e0 20 20 20 20 20 20 20 20 20 20 20 22 2e 4e 45 54             ".NET
2d5f0 20 46 72 61 6d 65 77 6f 72 6b 20 7b 30 7d 20 72   Framework {0} r
2d600 65 67 69 73 74 72 79 20 6e 6f 74 20 66 6f 75 6e  egistry not foun
2d610 64 2c 20 22 20 2b 0d 0a 20 20 20 20 20 20 20 20  d, " +..        
2d620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d630 20 20 20 20 22 73 6b 69 70 70 69 6e 67 2e 2e 2e      "skipping...
2d640 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 66 72  ", ForDisplay(fr
2d650 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 29 29  ameworkVersion))
2d660 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
2d670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
2d680 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
2d690 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2d6a0 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e            contin
2d6b0 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
2d6c0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
2d6d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d6e0 20 20 69 66 20 28 63 61 6c 6c 62 61 63 6b 20 3d    if (callback =
2d6f0 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
2d700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d710 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 0d 0a 20 20   continue;....  
2d720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d730 20 20 69 66 20 28 21 63 61 6c 6c 62 61 63 6b 28    if (!callback(
2d740 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2d750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f                ro
2d760 6f 74 4b 65 79 2c 20 66 72 61 6d 65 77 6f 72 6b  otKey, framework
2d770 4e 61 6d 65 2c 20 66 72 61 6d 65 77 6f 72 6b 56  Name, frameworkV
2d780 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20  ersion,..       
2d790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d7a0 20 20 20 20 20 70 6c 61 74 66 6f 72 6d 4e 61 6d       platformNam
2d7b0 65 2c 20 6e 75 6c 6c 2c 20 63 6c 69 65 6e 74 44  e, null, clientD
2d7c0 61 74 61 2c 20 70 65 72 55 73 65 72 2c 0d 0a 20  ata, perUser,.. 
2d7d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d7e0 20 20 20 20 20 20 20 20 20 20 20 77 6f 77 36 34             wow64
2d7f0 2c 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67  , throwOnMissing
2d800 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73  , whatIf, verbos
2d810 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
2d820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d830 72 65 66 20 65 72 72 6f 72 29 29 0d 0a 20 20 20  ref error))..   
2d840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d850 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
2d860 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
2d870 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20  rn false;..     
2d880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
2d890 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2d8a0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
2d8b0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
2d8c0 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a    return true;..
2d8d0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
2d8e0 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
2d8f0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
2d900 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d910 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d920 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d930 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d940 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67  ....        #reg
2d950 69 6f 6e 20 50 65 72 2d 56 69 73 75 61 6c 20 53  ion Per-Visual S
2d960 74 75 64 69 6f 20 56 65 72 73 69 6f 6e 20 48 61  tudio Version Ha
2d970 6e 64 6c 69 6e 67 0d 0a 20 20 20 20 20 20 20 20  ndling..        
2d980 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 76  private static v
2d990 6f 69 64 20 49 6e 69 74 69 61 6c 69 7a 65 56 73  oid InitializeVs
2d9a0 4c 69 73 74 28 0d 0a 20 20 20 20 20 20 20 20 20  List(..         
2d9b0 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b     MockRegistryK
2d9c0 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20  ey rootKey,..   
2d9d0 20 20 20 20 20 20 20 20 20 43 6f 6e 66 69 67 75           Configu
2d9e0 72 61 74 69 6f 6e 20 63 6f 6e 66 69 67 75 72 61  ration configura
2d9f0 74 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20  tion,..         
2da00 20 20 20 72 65 66 20 56 73 4c 69 73 74 20 76 73     ref VsList vs
2da10 4c 69 73 74 0d 0a 20 20 20 20 20 20 20 20 20 20  List..          
2da20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a    )..        {..
2da30 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
2da40 76 73 4c 69 73 74 20 3d 3d 20 6e 75 6c 6c 29 0d  vsList == null).
2da50 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2da60 20 76 73 4c 69 73 74 20 3d 20 6e 65 77 20 56 73   vsList = new Vs
2da70 4c 69 73 74 28 29 3b 0d 0a 0d 0a 20 20 20 20 20  List();....     
2da80 20 20 20 20 20 20 20 69 66 20 28 76 73 4c 69 73         if (vsLis
2da90 74 2e 52 6f 6f 74 4b 65 79 20 3d 3d 20 6e 75 6c  t.RootKey == nul
2daa0 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
2dab0 20 20 20 20 76 73 4c 69 73 74 2e 52 6f 6f 74 4b      vsList.RootK
2dac0 65 79 20 3d 20 72 6f 6f 74 4b 65 79 3b 0d 0a 0d  ey = rootKey;...
2dad0 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
2dae0 28 76 73 4c 69 73 74 2e 56 65 72 73 69 6f 6e 73  (vsList.Versions
2daf0 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
2db00 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
2db10 20 20 20 20 20 20 20 20 20 20 76 73 4c 69 73 74            vsList
2db20 2e 56 65 72 73 69 6f 6e 73 20 3d 20 6e 65 77 20  .Versions = new 
2db30 56 65 72 73 69 6f 6e 4c 69 73 74 28 29 3b 0d 0a  VersionList();..
2db40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2db50 20 20 69 66 20 28 28 63 6f 6e 66 69 67 75 72 61    if ((configura
2db60 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c  tion == null) ||
2db70 20 21 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e   !configuration.
2db80 4e 6f 56 73 32 30 30 35 29 0d 0a 20 20 20 20 20  NoVs2005)..     
2db90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 76                 v
2dba0 73 4c 69 73 74 2e 56 65 72 73 69 6f 6e 73 2e 41  sList.Versions.A
2dbb0 64 64 28 6e 65 77 20 56 65 72 73 69 6f 6e 28 38  dd(new Version(8
2dbc0 2c 20 30 29 29 3b 20 2f 2f 20 32 30 30 35 0d 0a  , 0)); // 2005..
2dbd0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2dbe0 20 20 69 66 20 28 28 63 6f 6e 66 69 67 75 72 61    if ((configura
2dbf0 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c  tion == null) ||
2dc00 20 21 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e   !configuration.
2dc10 4e 6f 56 73 32 30 30 38 29 0d 0a 20 20 20 20 20  NoVs2008)..     
2dc20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 76                 v
2dc30 73 4c 69 73 74 2e 56 65 72 73 69 6f 6e 73 2e 41  sList.Versions.A
2dc40 64 64 28 6e 65 77 20 56 65 72 73 69 6f 6e 28 39  dd(new Version(9
2dc50 2c 20 30 29 29 3b 20 2f 2f 20 32 30 30 38 0d 0a  , 0)); // 2008..
2dc60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2dc70 20 20 69 66 20 28 28 63 6f 6e 66 69 67 75 72 61    if ((configura
2dc80 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c  tion == null) ||
2dc90 20 21 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e   !configuration.
2dca0 4e 6f 56 73 32 30 31 30 29 0d 0a 20 20 20 20 20  NoVs2010)..     
2dcb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 76                 v
2dcc0 73 4c 69 73 74 2e 56 65 72 73 69 6f 6e 73 2e 41  sList.Versions.A
2dcd0 64 64 28 6e 65 77 20 56 65 72 73 69 6f 6e 28 31  dd(new Version(1
2dce0 30 2c 20 30 29 29 3b 2f 2f 20 32 30 31 30 0d 0a  0, 0));// 2010..
2dcf0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2dd00 20 20 69 66 20 28 28 63 6f 6e 66 69 67 75 72 61    if ((configura
2dd10 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c  tion == null) ||
2dd20 20 21 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e   !configuration.
2dd30 4e 6f 56 73 32 30 31 32 29 0d 0a 20 20 20 20 20  NoVs2012)..     
2dd40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 76                 v
2dd50 73 4c 69 73 74 2e 56 65 72 73 69 6f 6e 73 2e 41  sList.Versions.A
2dd60 64 64 28 6e 65 77 20 56 65 72 73 69 6f 6e 28 31  dd(new Version(1
2dd70 31 2c 20 30 29 29 3b 2f 2f 20 32 30 31 32 0d 0a  1, 0));// 2012..
2dd80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2dd90 20 20 69 66 20 28 28 63 6f 6e 66 69 67 75 72 61    if ((configura
2dda0 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c  tion == null) ||
2ddb0 20 21 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e   !configuration.
2ddc0 4e 6f 56 73 32 30 31 33 29 0d 0a 20 20 20 20 20  NoVs2013)..     
2ddd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 76                 v
2dde0 73 4c 69 73 74 2e 56 65 72 73 69 6f 6e 73 2e 41  sList.Versions.A
2ddf0 64 64 28 6e 65 77 20 56 65 72 73 69 6f 6e 28 31  dd(new Version(1
2de00 32 2c 20 30 29 29 3b 2f 2f 20 32 30 31 33 0d 0a  2, 0));// 2013..
2de10 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
2de20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
2de30 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
2de40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2de50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2de60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2de70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
2de80 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
2de90 74 61 74 69 63 20 62 6f 6f 6c 20 48 61 76 65 56  tatic bool HaveV
2dea0 73 56 65 72 73 69 6f 6e 44 69 72 65 63 74 6f 72  sVersionDirector
2deb0 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y(..            
2dec0 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20  MockRegistryKey 
2ded0 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20 20 20 20  rootKey,..      
2dee0 20 20 20 20 20 20 56 65 72 73 69 6f 6e 20 76 73        Version vs
2def0 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20  Version,..      
2df00 20 20 20 20 20 20 73 74 72 69 6e 67 20 73 75 66        string suf
2df10 66 69 78 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  fix,..          
2df20 20 20 62 6f 6f 6c 20 70 65 72 55 73 65 72 2c 0d    bool perUser,.
2df30 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f  .            boo
2df40 6c 20 77 6f 77 36 34 2c 0d 0a 20 20 20 20 20 20  l wow64,..      
2df50 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49        bool whatI
2df60 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  f,..            
2df70 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c 0d 0a 20  bool verbose,.. 
2df80 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20 73             ref s
2df90 74 72 69 6e 67 20 69 6e 73 74 61 6c 6c 44 69 72  tring installDir
2dfa0 65 63 74 6f 72 79 0d 0a 20 20 20 20 20 20 20 20  ectory..        
2dfb0 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b      )..        {
2dfc0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
2dfd0 20 28 76 73 56 65 72 73 69 6f 6e 20 3d 3d 20 6e   (vsVersion == n
2dfe0 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
2dff0 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
2e000 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  se;....         
2e010 20 20 20 73 74 72 69 6e 67 20 6b 65 79 4e 61 6d     string keyNam
2e020 65 20 3d 20 47 65 74 56 73 4b 65 79 4e 61 6d 65  e = GetVsKeyName
2e030 28 76 73 56 65 72 73 69 6f 6e 2c 20 73 75 66 66  (vsVersion, suff
2e040 69 78 2c 20 70 65 72 55 73 65 72 2c 20 77 6f 77  ix, perUser, wow
2e050 36 34 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  64);....        
2e060 20 20 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52      using (MockR
2e070 65 67 69 73 74 72 79 4b 65 79 20 6b 65 79 20 3d  egistryKey key =
2e080 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e   RegistryHelper.
2e090 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20  OpenSubKey(..   
2e0a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e0b0 20 72 6f 6f 74 4b 65 79 2c 20 6b 65 79 4e 61 6d   rootKey, keyNam
2e0c0 65 2c 20 66 61 6c 73 65 2c 20 77 68 61 74 49 66  e, false, whatIf
2e0d0 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a 20 20 20  , verbose))..   
2e0e0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
2e0f0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
2e100 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  key == null)..  
2e110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e120 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
2e130 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
2e140 20 20 20 6f 62 6a 65 63 74 20 76 61 6c 75 65 20     object value 
2e150 3d 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72  = RegistryHelper
2e160 2e 47 65 74 56 61 6c 75 65 28 0d 0a 20 20 20 20  .GetValue(..    
2e170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e180 6b 65 79 2c 20 22 49 6e 73 74 61 6c 6c 44 69 72  key, "InstallDir
2e190 22 2c 20 6e 75 6c 6c 2c 20 77 68 61 74 49 66 2c  ", null, whatIf,
2e1a0 20 76 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20   verbose);....  
2e1b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
2e1c0 20 28 21 28 76 61 6c 75 65 20 69 73 20 73 74 72   (!(value is str
2e1d0 69 6e 67 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ing))..         
2e1e0 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
2e1f0 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20  n false;....    
2e200 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
2e210 6e 67 20 64 69 72 65 63 74 6f 72 79 20 3d 20 28  ng directory = (
2e220 73 74 72 69 6e 67 29 76 61 6c 75 65 3b 0d 0a 0d  string)value;...
2e230 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2e240 20 69 66 20 28 53 74 72 69 6e 67 2e 49 73 4e 75   if (String.IsNu
2e250 6c 6c 4f 72 45 6d 70 74 79 28 64 69 72 65 63 74  llOrEmpty(direct
2e260 6f 72 79 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ory))..         
2e270 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
2e280 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20  n false;....    
2e290 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
2e2a0 21 44 69 72 65 63 74 6f 72 79 2e 45 78 69 73 74  !Directory.Exist
2e2b0 73 28 64 69 72 65 63 74 6f 72 79 29 29 0d 0a 20  s(directory)).. 
2e2c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e2d0 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
2e2e0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2e2f0 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62      TraceOps.Deb
2e300 75 67 41 6e 64 54 72 61 63 65 28 54 72 61 63 65  ugAndTrace(Trace
2e310 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 72 2c 0d  Priority.Lower,.
2e320 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2e330 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61       debugCallba
2e340 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63  ck, traceCallbac
2e350 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  k, String.Format
2e360 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
2e370 20 20 20 20 20 20 20 22 56 69 73 75 61 6c 20 53         "Visual S
2e380 74 75 64 69 6f 20 7b 30 7d 20 66 6f 75 6e 64 20  tudio {0} found 
2e390 69 6e 20 64 69 72 65 63 74 6f 72 79 20 7b 31 7d  in directory {1}
2e3a0 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  .",..           
2e3b0 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70           ForDisp
2e3c0 6c 61 79 28 76 73 56 65 72 73 69 6f 6e 29 2c 20  lay(vsVersion), 
2e3d0 46 6f 72 44 69 73 70 6c 61 79 28 64 69 72 65 63  ForDisplay(direc
2e3e0 74 6f 72 79 29 29 2c 0d 0a 20 20 20 20 20 20 20  tory)),..       
2e3f0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
2e400 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
2e410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e420 69 6e 73 74 61 6c 6c 44 69 72 65 63 74 6f 72 79  installDirectory
2e430 20 3d 20 64 69 72 65 63 74 6f 72 79 3b 0d 0a 20   = directory;.. 
2e440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
2e450 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20  eturn true;..   
2e460 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
2e470 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
2e480 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
2e490 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e4a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e4b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e4c0 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
2e4d0 20 20 20 20 5b 4d 65 74 68 6f 64 49 6d 70 6c 28      [MethodImpl(
2e4e0 4d 65 74 68 6f 64 49 6d 70 6c 4f 70 74 69 6f 6e  MethodImplOption
2e4f0 73 2e 4e 6f 49 6e 6c 69 6e 69 6e 67 29 5d 0d 0a  s.NoInlining)]..
2e500 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
2e510 73 74 61 74 69 63 20 62 6f 6f 6c 20 46 6f 72 45  static bool ForE
2e520 61 63 68 56 73 56 65 72 73 69 6f 6e 52 65 67 69  achVsVersionRegi
2e530 73 74 72 79 28 0d 0a 20 20 20 20 20 20 20 20 20  stry(..         
2e540 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 20     MockRegistry 
2e550 72 65 67 69 73 74 72 79 2c 0d 0a 20 20 20 20 20  registry,..     
2e560 20 20 20 20 20 20 20 56 73 4c 69 73 74 20 76 73         VsList vs
2e570 4c 69 73 74 2c 0d 0a 20 20 20 20 20 20 20 20 20  List,..         
2e580 20 20 20 56 69 73 75 61 6c 53 74 75 64 69 6f 52     VisualStudioR
2e590 65 67 69 73 74 72 79 43 61 6c 6c 62 61 63 6b 20  egistryCallback 
2e5a0 63 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20  callback,..     
2e5b0 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 73 75         string su
2e5c0 66 66 69 78 2c 0d 0a 20 20 20 20 20 20 20 20 20  ffix,..         
2e5d0 20 20 20 50 61 63 6b 61 67 65 20 70 61 63 6b 61     Package packa
2e5e0 67 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ge,..           
2e5f0 20 6f 62 6a 65 63 74 20 63 6c 69 65 6e 74 44 61   object clientDa
2e600 74 61 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ta,..           
2e610 20 62 6f 6f 6c 20 70 65 72 55 73 65 72 2c 0d 0a   bool perUser,..
2e620 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
2e630 20 77 6f 77 36 34 2c 0d 0a 20 20 20 20 20 20 20   wow64,..       
2e640 20 20 20 20 20 62 6f 6f 6c 20 74 68 72 6f 77 4f       bool throwO
2e650 6e 4d 69 73 73 69 6e 67 2c 0d 0a 20 20 20 20 20  nMissing,..     
2e660 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74         bool what
2e670 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  If,..           
2e680 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c 0d 0a   bool verbose,..
2e690 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20              ref 
2e6a0 73 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20  string error..  
2e6b0 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
2e6c0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
2e6d0 20 20 20 20 69 66 20 28 72 65 67 69 73 74 72 79      if (registry
2e6e0 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
2e6f0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
2e700 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20            error 
2e710 3d 20 22 69 6e 76 61 6c 69 64 20 72 65 67 69 73  = "invalid regis
2e720 74 72 79 22 3b 0d 0a 20 20 20 20 20 20 20 20 20  try";..         
2e730 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
2e740 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lse;..          
2e750 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
2e760 20 20 20 69 66 20 28 76 73 4c 69 73 74 20 3d 3d     if (vsList ==
2e770 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
2e780 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
2e790 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22         error = "
2e7a0 69 6e 76 61 6c 69 64 20 56 53 20 6c 69 73 74 22  invalid VS list"
2e7b0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
2e7c0 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
2e7d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
2e7e0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 4d  ...            M
2e7f0 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 72  ockRegistryKey r
2e800 6f 6f 74 4b 65 79 20 3d 20 76 73 4c 69 73 74 2e  ootKey = vsList.
2e810 52 6f 6f 74 4b 65 79 3b 0d 0a 0d 0a 20 20 20 20  RootKey;....    
2e820 20 20 20 20 20 20 20 20 69 66 20 28 72 6f 6f 74          if (root
2e830 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  Key == null)..  
2e840 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
2e850 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
2e860 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64 20 72 6f  or = "invalid ro
2e870 6f 74 20 6b 65 79 22 3b 0d 0a 20 20 20 20 20 20  ot key";..      
2e880 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
2e890 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20   false;..       
2e8a0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
2e8b0 20 20 20 20 20 20 69 66 20 28 21 49 73 53 75 70        if (!IsSup
2e8c0 70 6f 72 74 65 64 52 6f 6f 74 4b 65 79 28 72 65  portedRootKey(re
2e8d0 67 69 73 74 72 79 2c 20 72 6f 6f 74 4b 65 79 29  gistry, rootKey)
2e8e0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
2e8f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2e900 20 20 65 72 72 6f 72 20 3d 20 22 72 6f 6f 74 20    error = "root 
2e910 6b 65 79 20 6d 75 73 74 20 62 65 20 70 65 72 2d  key must be per-
2e920 75 73 65 72 20 6f 72 20 70 65 72 2d 6d 61 63 68  user or per-mach
2e930 69 6e 65 22 3b 0d 0a 20 20 20 20 20 20 20 20 20  ine";..         
2e940 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
2e950 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lse;..          
2e960 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
2e970 20 20 20 69 66 20 28 76 73 4c 69 73 74 2e 56 65     if (vsList.Ve
2e980 72 73 69 6f 6e 73 20 3d 3d 20 6e 75 6c 6c 29 0d  rsions == null).
2e990 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
2e9a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e9b0 65 72 72 6f 72 20 3d 20 22 6e 6f 20 56 53 20 76  error = "no VS v
2e9c0 65 72 73 69 6f 6e 73 20 66 6f 75 6e 64 22 3b 0d  ersions found";.
2e9d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2e9e0 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
2e9f0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
2ea00 0a 20 20 20 20 20 20 20 20 20 20 20 20 66 6f 72  .            for
2ea10 65 61 63 68 20 28 56 65 72 73 69 6f 6e 20 76 73  each (Version vs
2ea20 56 65 72 73 69 6f 6e 20 69 6e 20 76 73 4c 69 73  Version in vsLis
2ea30 74 2e 56 65 72 73 69 6f 6e 73 29 0d 0a 20 20 20  t.Versions)..   
2ea40 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
2ea50 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
2ea60 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61  eOps.DebugAndTra
2ea70 63 65 28 54 72 61 63 65 50 72 69 6f 72 69 74 79  ce(TracePriority
2ea80 2e 4c 6f 77 65 72 2c 0d 0a 20 20 20 20 20 20 20  .Lower,..       
2ea90 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65 62               deb
2eaa0 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63  ugCallback, trac
2eab0 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e  eCallback, Strin
2eac0 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
2ead0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
2eae0 76 73 56 65 72 73 69 6f 6e 20 3d 20 7b 30 7d 22  vsVersion = {0}"
2eaf0 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 76 73 56  , ForDisplay(vsV
2eb00 65 72 73 69 6f 6e 29 29 2c 0d 0a 20 20 20 20 20  ersion)),..     
2eb10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
2eb20 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
2eb30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2eb40 20 20 73 74 72 69 6e 67 20 69 6e 73 74 61 6c 6c    string install
2eb50 44 69 72 65 63 74 6f 72 79 20 3d 20 6e 75 6c 6c  Directory = null
2eb60 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
2eb70 20 20 20 20 20 69 66 20 28 21 48 61 76 65 56 73       if (!HaveVs
2eb80 56 65 72 73 69 6f 6e 44 69 72 65 63 74 6f 72 79  VersionDirectory
2eb90 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
2eba0 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b             rootK
2ebb0 65 79 2c 20 76 73 56 65 72 73 69 6f 6e 2c 20 73  ey, vsVersion, s
2ebc0 75 66 66 69 78 2c 20 70 65 72 55 73 65 72 2c 20  uffix, perUser, 
2ebd0 77 6f 77 36 34 2c 20 77 68 61 74 49 66 2c 0d 0a  wow64, whatIf,..
2ebe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ebf0 20 20 20 20 20 20 20 20 76 65 72 62 6f 73 65 2c          verbose,
2ec00 20 72 65 66 20 69 6e 73 74 61 6c 6c 44 69 72 65   ref installDire
2ec10 63 74 6f 72 79 29 29 0d 0a 20 20 20 20 20 20 20  ctory))..       
2ec20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
2ec30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ec40 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e  TraceOps.DebugAn
2ec50 64 54 72 61 63 65 28 54 72 61 63 65 50 72 69 6f  dTrace(TracePrio
2ec60 72 69 74 79 2e 4c 6f 77 2c 0d 0a 20 20 20 20 20  rity.Low,..     
2ec70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ec80 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b     debugCallback
2ec90 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c  , traceCallback,
2eca0 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d   String.Format(.
2ecb0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2ecc0 20 20 20 20 20 20 20 20 20 22 56 69 73 75 61 6c           "Visual
2ecd0 20 53 74 75 64 69 6f 20 7b 30 7d 20 6e 6f 74 20   Studio {0} not 
2ece0 66 6f 75 6e 64 2c 20 73 6b 69 70 70 69 6e 67 2e  found, skipping.
2ecf0 2e 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ..",..          
2ed00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f                Fo
2ed10 72 44 69 73 70 6c 61 79 28 76 73 56 65 72 73 69  rDisplay(vsVersi
2ed20 6f 6e 29 29 2c 20 74 72 61 63 65 43 61 74 65 67  on)), traceCateg
2ed30 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
2ed40 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
2ed50 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20  tinue;..        
2ed60 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
2ed70 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
2ed80 28 63 61 6c 6c 62 61 63 6b 20 3d 3d 20 6e 75 6c  (callback == nul
2ed90 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
2eda0 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65          continue
2edb0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
2edc0 20 20 20 20 20 69 66 20 28 21 63 61 6c 6c 62 61       if (!callba
2edd0 63 6b 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ck(..           
2ede0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f               roo
2edf0 74 4b 65 79 2c 20 76 73 56 65 72 73 69 6f 6e 2c  tKey, vsVersion,
2ee00 20 73 75 66 66 69 78 2c 20 70 61 63 6b 61 67 65   suffix, package
2ee10 2c 20 69 6e 73 74 61 6c 6c 44 69 72 65 63 74 6f  , installDirecto
2ee20 72 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ry,..           
2ee30 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6c 69               cli
2ee40 65 6e 74 44 61 74 61 2c 20 70 65 72 55 73 65 72  entData, perUser
2ee50 2c 20 77 6f 77 36 34 2c 20 74 68 72 6f 77 4f 6e  , wow64, throwOn
2ee60 4d 69 73 73 69 6e 67 2c 20 77 68 61 74 49 66 2c  Missing, whatIf,
2ee70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2ee80 20 20 20 20 20 20 20 20 20 20 76 65 72 62 6f 73            verbos
2ee90 65 2c 20 72 65 66 20 65 72 72 6f 72 29 29 0d 0a  e, ref error))..
2eea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2eeb0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
2eec0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
2eed0 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lse;..          
2eee0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
2eef0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
2ef00 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75        return tru
2ef10 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20  e;..        }.. 
2ef20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f         #endregio
2ef30 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  n....        ///
2ef40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ef50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ef60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ef70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ef80 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
2ef90 23 72 65 67 69 6f 6e 20 43 6f 6e 66 69 67 75 72  #region Configur
2efa0 61 74 69 6f 6e 20 46 69 6c 65 20 48 61 6e 64 6c  ation File Handl
2efb0 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 5b 4d 65  ing..        [Me
2efc0 74 68 6f 64 49 6d 70 6c 28 4d 65 74 68 6f 64 49  thodImpl(MethodI
2efd0 6d 70 6c 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e 6c  mplOptions.NoInl
2efe0 69 6e 69 6e 67 29 5d 0d 0a 20 20 20 20 20 20 20  ining)]..       
2eff0 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20   private static 
2f000 62 6f 6f 6c 20 41 64 64 44 62 50 72 6f 76 69 64  bool AddDbProvid
2f010 65 72 46 61 63 74 6f 72 79 28 0d 0a 20 20 20 20  erFactory(..    
2f020 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 66          string f
2f030 69 6c 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20  ileName,..      
2f040 20 20 20 20 20 20 73 74 72 69 6e 67 20 69 6e 76        string inv
2f050 61 72 69 61 6e 74 4e 61 6d 65 2c 0d 0a 20 20 20  ariantName,..   
2f060 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
2f070 6e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  name,..         
2f080 20 20 20 73 74 72 69 6e 67 20 64 65 73 63 72 69     string descri
2f090 70 74 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20  ption,..        
2f0a0 20 20 20 20 73 74 72 69 6e 67 20 74 79 70 65 4e      string typeN
2f0b0 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ame,..          
2f0c0 20 20 41 73 73 65 6d 62 6c 79 4e 61 6d 65 20 61    AssemblyName a
2f0d0 73 73 65 6d 62 6c 79 4e 61 6d 65 2c 0d 0a 20 20  ssemblyName,..  
2f0e0 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77            bool w
2f0f0 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20  hatIf,..        
2f100 20 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65      bool verbose
2f110 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  ,..            r
2f120 65 66 20 62 6f 6f 6c 20 73 61 76 65 64 2c 0d 0a  ef bool saved,..
2f130 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20              ref 
2f140 73 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20  string error..  
2f150 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
2f160 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
2f170 20 20 20 20 62 6f 6f 6c 20 64 69 72 74 79 20 3d      bool dirty =
2f180 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20   false;..       
2f190 20 20 20 20 20 58 6d 6c 44 6f 63 75 6d 65 6e 74       XmlDocument
2f1a0 20 64 6f 63 75 6d 65 6e 74 20 3d 20 6e 65 77 20   document = new 
2f1b0 58 6d 6c 44 6f 63 75 6d 65 6e 74 28 29 3b 0d 0a  XmlDocument();..
2f1c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 64 6f  ..            do
2f1d0 63 75 6d 65 6e 74 2e 50 72 65 73 65 72 76 65 57  cument.PreserveW
2f1e0 68 69 74 65 73 70 61 63 65 20 3d 20 74 72 75 65  hitespace = true
2f1f0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 64  ;..            d
2f200 6f 63 75 6d 65 6e 74 2e 4c 6f 61 64 28 66 69 6c  ocument.Load(fil
2f210 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20  eName);....     
2f220 20 20 20 20 20 20 20 58 6d 6c 45 6c 65 6d 65 6e         XmlElemen
2f230 74 20 61 64 64 45 6c 65 6d 65 6e 74 20 3d 20 64  t addElement = d
2f240 6f 63 75 6d 65 6e 74 2e 53 65 6c 65 63 74 53 69  ocument.SelectSi
2f250 6e 67 6c 65 4e 6f 64 65 28 0d 0a 20 20 20 20 20  ngleNode(..     
2f260 20 20 20 20 20 20 20 20 20 20 20 53 74 72 69 6e             Strin
2f270 67 2e 46 6f 72 6d 61 74 28 58 50 61 74 68 46 6f  g.Format(XPathFo
2f280 72 41 64 64 45 6c 65 6d 65 6e 74 2c 20 69 6e 76  rAddElement, inv
2f290 61 72 69 61 6e 74 4e 61 6d 65 29 29 20 61 73 20  ariantName)) as 
2f2a0 58 6d 6c 45 6c 65 6d 65 6e 74 3b 0d 0a 0d 0a 20  XmlElement;.... 
2f2b0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 61             if (a
2f2c0 64 64 45 6c 65 6d 65 6e 74 20 3d 3d 20 6e 75 6c  ddElement == nul
2f2d0 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
2f2e0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
2f2f0 20 20 20 73 74 72 69 6e 67 5b 5d 20 65 6c 65 6d     string[] elem
2f300 65 6e 74 4e 61 6d 65 73 20 3d 20 7b 0d 0a 20 20  entNames = {..  
2f310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f320 20 20 22 73 79 73 74 65 6d 2e 64 61 74 61 22 2c    "system.data",
2f330 20 22 44 62 50 72 6f 76 69 64 65 72 46 61 63 74   "DbProviderFact
2f340 6f 72 69 65 73 22 0d 0a 20 20 20 20 20 20 20 20  ories"..        
2f350 20 20 20 20 20 20 20 20 7d 3b 0d 0a 0d 0a 20 20          };....  
2f360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 58 6d                Xm
2f370 6c 45 6c 65 6d 65 6e 74 20 70 72 65 76 69 6f 75  lElement previou
2f380 73 45 6c 65 6d 65 6e 74 20 3d 0d 0a 20 20 20 20  sElement =..    
2f390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f3a0 64 6f 63 75 6d 65 6e 74 2e 44 6f 63 75 6d 65 6e  document.Documen
2f3b0 74 45 6c 65 6d 65 6e 74 3b 20 2f 2a 20 63 6f 6e  tElement; /* con
2f3c0 66 69 67 75 72 61 74 69 6f 6e 20 2a 2f 0d 0a 0d  figuration */...
2f3d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2f3e0 20 66 6f 72 65 61 63 68 20 28 73 74 72 69 6e 67   foreach (string
2f3f0 20 65 6c 65 6d 65 6e 74 4e 61 6d 65 20 69 6e 20   elementName in 
2f400 65 6c 65 6d 65 6e 74 4e 61 6d 65 73 29 0d 0a 20  elementNames).. 
2f410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
2f420 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2f430 20 20 20 20 20 20 61 64 64 45 6c 65 6d 65 6e 74        addElement
2f440 20 3d 20 70 72 65 76 69 6f 75 73 45 6c 65 6d 65   = previousEleme
2f450 6e 74 2e 53 65 6c 65 63 74 53 69 6e 67 6c 65 4e  nt.SelectSingleN
2f460 6f 64 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ode(..          
2f470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c                el
2f480 65 6d 65 6e 74 4e 61 6d 65 29 20 61 73 20 58 6d  ementName) as Xm
2f490 6c 45 6c 65 6d 65 6e 74 3b 0d 0a 0d 0a 20 20 20  lElement;....   
2f4a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f4b0 20 69 66 20 28 61 64 64 45 6c 65 6d 65 6e 74 20   if (addElement 
2f4c0 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
2f4d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
2f4e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2f4f0 20 20 20 20 20 20 20 20 20 61 64 64 45 6c 65 6d           addElem
2f500 65 6e 74 20 3d 20 64 6f 63 75 6d 65 6e 74 2e 43  ent = document.C
2f510 72 65 61 74 65 45 6c 65 6d 65 6e 74 28 0d 0a 20  reateElement(.. 
2f520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f530 20 20 20 20 20 20 20 20 20 20 20 65 6c 65 6d 65             eleme
2f540 6e 74 4e 61 6d 65 2c 20 53 74 72 69 6e 67 2e 45  ntName, String.E
2f550 6d 70 74 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  mpty);....      
2f560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f570 20 20 70 72 65 76 69 6f 75 73 45 6c 65 6d 65 6e    previousElemen
2f580 74 2e 41 70 70 65 6e 64 43 68 69 6c 64 28 61 64  t.AppendChild(ad
2f590 64 45 6c 65 6d 65 6e 74 29 3b 0d 0a 20 20 20 20  dElement);..    
2f5a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f5b0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
2f5c0 20 20 20 20 20 20 20 20 20 70 72 65 76 69 6f 75           previou
2f5d0 73 45 6c 65 6d 65 6e 74 20 3d 20 61 64 64 45 6c  sElement = addEl
2f5e0 65 6d 65 6e 74 3b 0d 0a 20 20 20 20 20 20 20 20  ement;..        
2f5f0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
2f600 20 20 20 20 20 20 20 20 20 20 20 20 20 61 64 64               add
2f610 45 6c 65 6d 65 6e 74 20 3d 20 64 6f 63 75 6d 65  Element = docume
2f620 6e 74 2e 43 72 65 61 74 65 45 6c 65 6d 65 6e 74  nt.CreateElement
2f630 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
2f640 20 20 20 20 20 20 20 22 61 64 64 22 2c 20 53 74         "add", St
2f650 72 69 6e 67 2e 45 6d 70 74 79 29 3b 0d 0a 0d 0a  ring.Empty);....
2f660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f670 70 72 65 76 69 6f 75 73 45 6c 65 6d 65 6e 74 2e  previousElement.
2f680 41 70 70 65 6e 64 43 68 69 6c 64 28 61 64 64 45  AppendChild(addE
2f690 6c 65 6d 65 6e 74 29 3b 0d 0a 0d 0a 20 20 20 20  lement);....    
2f6a0 20 20 20 20 20 20 20 20 20 20 20 20 64 69 72 74              dirt
2f6b0 79 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20  y = true;..     
2f6c0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
2f6d0 20 20 20 20 20 20 20 20 69 66 20 28 21 53 74 72          if (!Str
2f6e0 69 6e 67 2e 45 71 75 61 6c 73 28 61 64 64 45 6c  ing.Equals(addEl
2f6f0 65 6d 65 6e 74 2e 47 65 74 41 74 74 72 69 62 75  ement.GetAttribu
2f700 74 65 28 22 6e 61 6d 65 22 29 2c 0d 0a 20 20 20  te("name"),..   
2f710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f720 20 6e 61 6d 65 2c 20 53 74 72 69 6e 67 43 6f 6d   name, StringCom
2f730 70 61 72 69 73 6f 6e 2e 4f 72 64 69 6e 61 6c 29  parison.Ordinal)
2f740 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
2f750 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2f760 20 20 61 64 64 45 6c 65 6d 65 6e 74 2e 53 65 74    addElement.Set
2f770 41 74 74 72 69 62 75 74 65 28 22 6e 61 6d 65 22  Attribute("name"
2f780 2c 20 6e 61 6d 65 29 3b 0d 0a 20 20 20 20 20 20  , name);..      
2f790 20 20 20 20 20 20 20 20 20 20 64 69 72 74 79 20            dirty 
2f7a0 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20  = true;..       
2f7b0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
2f7c0 20 20 20 20 20 20 69 66 20 28 21 53 74 72 69 6e        if (!Strin
2f7d0 67 2e 45 71 75 61 6c 73 28 61 64 64 45 6c 65 6d  g.Equals(addElem
2f7e0 65 6e 74 2e 47 65 74 41 74 74 72 69 62 75 74 65  ent.GetAttribute
2f7f0 28 22 69 6e 76 61 72 69 61 6e 74 22 29 2c 0d 0a  ("invariant"),..
2f800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f810 20 20 20 20 69 6e 76 61 72 69 61 6e 74 4e 61 6d      invariantNam
2f820 65 2c 20 53 74 72 69 6e 67 43 6f 6d 70 61 72 69  e, StringCompari
2f830 73 6f 6e 2e 4f 72 64 69 6e 61 6c 29 29 0d 0a 20  son.Ordinal)).. 
2f840 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
2f850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61 64                ad
2f860 64 45 6c 65 6d 65 6e 74 2e 53 65 74 41 74 74 72  dElement.SetAttr
2f870 69 62 75 74 65 28 22 69 6e 76 61 72 69 61 6e 74  ibute("invariant
2f880 22 2c 20 69 6e 76 61 72 69 61 6e 74 4e 61 6d 65  ", invariantName
2f890 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
2f8a0 20 20 20 20 64 69 72 74 79 20 3d 20 74 72 75 65      dirty = true
2f8b0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
2f8c0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2f8d0 69 66 20 28 21 53 74 72 69 6e 67 2e 45 71 75 61  if (!String.Equa
2f8e0 6c 73 28 61 64 64 45 6c 65 6d 65 6e 74 2e 47 65  ls(addElement.Ge
2f8f0 74 41 74 74 72 69 62 75 74 65 28 22 64 65 73 63  tAttribute("desc
2f900 72 69 70 74 69 6f 6e 22 29 2c 0d 0a 20 20 20 20  ription"),..    
2f910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f920 64 65 73 63 72 69 70 74 69 6f 6e 2c 20 53 74 72  description, Str
2f930 69 6e 67 43 6f 6d 70 61 72 69 73 6f 6e 2e 4f 72  ingComparison.Or
2f940 64 69 6e 61 6c 29 29 0d 0a 20 20 20 20 20 20 20  dinal))..       
2f950 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
2f960 20 20 20 20 20 20 20 20 61 64 64 45 6c 65 6d 65          addEleme
2f970 6e 74 2e 53 65 74 41 74 74 72 69 62 75 74 65 28  nt.SetAttribute(
2f980 22 64 65 73 63 72 69 70 74 69 6f 6e 22 2c 20 64  "description", d
2f990 65 73 63 72 69 70 74 69 6f 6e 29 3b 0d 0a 20 20  escription);..  
2f9a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 69                di
2f9b0 72 74 79 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20  rty = true;..   
2f9c0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
2f9d0 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
2f9e0 20 66 75 6c 6c 54 79 70 65 4e 61 6d 65 20 3d 20   fullTypeName = 
2f9f0 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 22 7b  String.Format("{
2fa00 30 7d 2c 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20  0}, {1}",..     
2fa10 20 20 20 20 20 20 20 20 20 20 20 74 79 70 65 4e             typeN
2fa20 61 6d 65 2c 20 61 73 73 65 6d 62 6c 79 4e 61 6d  ame, assemblyNam
2fa30 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  e);....         
2fa40 20 20 20 69 66 20 28 21 53 74 72 69 6e 67 2e 45     if (!String.E
2fa50 71 75 61 6c 73 28 61 64 64 45 6c 65 6d 65 6e 74  quals(addElement
2fa60 2e 47 65 74 41 74 74 72 69 62 75 74 65 28 22 74  .GetAttribute("t
2fa70 79 70 65 22 29 2c 0d 0a 20 20 20 20 20 20 20 20  ype"),..        
2fa80 20 20 20 20 20 20 20 20 20 20 20 20 66 75 6c 6c              full
2fa90 54 79 70 65 4e 61 6d 65 2c 20 53 74 72 69 6e 67  TypeName, String
2faa0 43 6f 6d 70 61 72 69 73 6f 6e 2e 4f 72 64 69 6e  Comparison.Ordin
2fab0 61 6c 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  al))..          
2fac0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
2fad0 20 20 20 20 20 61 64 64 45 6c 65 6d 65 6e 74 2e       addElement.
2fae0 53 65 74 41 74 74 72 69 62 75 74 65 28 22 74 79  SetAttribute("ty
2faf0 70 65 22 2c 20 66 75 6c 6c 54 79 70 65 4e 61 6d  pe", fullTypeNam
2fb00 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e);..           
2fb10 20 20 20 20 20 64 69 72 74 79 20 3d 20 74 72 75       dirty = tru
2fb20 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
2fb30 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
2fb40 20 69 66 20 28 64 69 72 74 79 20 7c 7c 20 77 68   if (dirty || wh
2fb50 61 74 49 66 29 0d 0a 20 20 20 20 20 20 20 20 20  atIf)..         
2fb60 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
2fb70 20 20 20 20 20 20 69 66 20 28 76 65 72 62 6f 73        if (verbos
2fb80 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e)..            
2fb90 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73          TraceOps
2fba0 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 54  .DebugAndTrace(T
2fbb0 72 61 63 65 50 72 69 6f 72 69 74 79 2e 48 69 67  racePriority.Hig
2fbc0 68 65 73 74 2c 0d 0a 20 20 20 20 20 20 20 20 20  hest,..         
2fbd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64                 d
2fbe0 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72  ebugCallback, tr
2fbf0 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72  aceCallback, Str
2fc00 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
2fc10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fc20 20 20 20 20 20 22 61 64 64 45 6c 65 6d 65 6e 74       "addElement
2fc30 20 3d 20 7b 30 7d 22 2c 20 46 6f 72 44 69 73 70   = {0}", ForDisp
2fc40 6c 61 79 28 61 64 64 45 6c 65 6d 65 6e 74 29 29  lay(addElement))
2fc50 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
2fc60 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
2fc70 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  Category);....  
2fc80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
2fc90 20 28 21 77 68 61 74 49 66 29 0d 0a 20 20 20 20   (!whatIf)..    
2fca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fcb0 64 6f 63 75 6d 65 6e 74 2e 53 61 76 65 28 66 69  document.Save(fi
2fcc0 6c 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20  leName);....    
2fcd0 20 20 20 20 20 20 20 20 20 20 20 20 66 69 6c 65              file
2fce0 73 4d 6f 64 69 66 69 65 64 2b 2b 3b 0d 0a 0d 0a  sModified++;....
2fcf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fd00 73 61 76 65 64 20 3d 20 74 72 75 65 3b 0d 0a 20  saved = true;.. 
2fd10 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
2fd20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
2fd30 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20  rn true;..      
2fd40 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f    }....        /
2fd50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2fd60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2fd70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2fd80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2fd90 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
2fda0 20 20 5b 4d 65 74 68 6f 64 49 6d 70 6c 28 4d 65    [MethodImpl(Me
2fdb0 74 68 6f 64 49 6d 70 6c 4f 70 74 69 6f 6e 73 2e  thodImplOptions.
2fdc0 4e 6f 49 6e 6c 69 6e 69 6e 67 29 5d 0d 0a 20 20  NoInlining)]..  
2fdd0 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74        private st
2fde0 61 74 69 63 20 62 6f 6f 6c 20 52 65 6d 6f 76 65  atic bool Remove
2fdf0 44 62 50 72 6f 76 69 64 65 72 46 61 63 74 6f 72  DbProviderFactor
2fe00 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y(..            
2fe10 73 74 72 69 6e 67 20 66 69 6c 65 4e 61 6d 65 2c  string fileName,
2fe20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74  ..            st
2fe30 72 69 6e 67 20 69 6e 76 61 72 69 61 6e 74 4e 61  ring invariantNa
2fe40 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me,..           
2fe50 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20   bool whatIf,.. 
2fe60 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
2fe70 76 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20  verbose,..      
2fe80 20 20 20 20 20 20 72 65 66 20 62 6f 6f 6c 20 73        ref bool s
2fe90 61 76 65 64 2c 0d 0a 20 20 20 20 20 20 20 20 20  aved,..         
2fea0 20 20 20 72 65 66 20 73 74 72 69 6e 67 20 65 72     ref string er
2feb0 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ror..           
2fec0 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20   )..        {.. 
2fed0 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
2fee0 64 69 72 74 79 20 3d 20 66 61 6c 73 65 3b 0d 0a  dirty = false;..
2fef0 20 20 20 20 20 20 20 20 20 20 20 20 58 6d 6c 44              XmlD
2ff00 6f 63 75 6d 65 6e 74 20 64 6f 63 75 6d 65 6e 74  ocument document
2ff10 20 3d 20 6e 65 77 20 58 6d 6c 44 6f 63 75 6d 65   = new XmlDocume
2ff20 6e 74 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  nt();....       
2ff30 20 20 20 20 20 64 6f 63 75 6d 65 6e 74 2e 50 72       document.Pr
2ff40 65 73 65 72 76 65 57 68 69 74 65 73 70 61 63 65  eserveWhitespace
2ff50 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20   = true;..      
2ff60 20 20 20 20 20 20 64 6f 63 75 6d 65 6e 74 2e 4c        document.L
2ff70 6f 61 64 28 66 69 6c 65 4e 61 6d 65 29 3b 0d 0a  oad(fileName);..
2ff80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 58 6d  ..            Xm
2ff90 6c 45 6c 65 6d 65 6e 74 20 61 64 64 45 6c 65 6d  lElement addElem
2ffa0 65 6e 74 20 3d 20 64 6f 63 75 6d 65 6e 74 2e 53  ent = document.S
2ffb0 65 6c 65 63 74 53 69 6e 67 6c 65 4e 6f 64 65 28  electSingleNode(
2ffc0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2ffd0 20 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28    String.Format(
2ffe0 58 50 61 74 68 46 6f 72 41 64 64 45 6c 65 6d 65  XPathForAddEleme
2fff0 6e 74 2c 20 69 6e 76 61 72 69 61 6e 74 4e 61 6d  nt, invariantNam
30000 65 29 29 20 61 73 20 58 6d 6c 45 6c 65 6d 65 6e  e)) as XmlElemen
30010 74 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  t;....          
30020 20 20 69 66 20 28 61 64 64 45 6c 65 6d 65 6e 74    if (addElement
30030 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   != null)..     
30040 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
30050 20 20 20 20 20 20 20 20 20 20 61 64 64 45 6c 65            addEle
30060 6d 65 6e 74 2e 50 61 72 65 6e 74 4e 6f 64 65 2e  ment.ParentNode.
30070 52 65 6d 6f 76 65 43 68 69 6c 64 28 61 64 64 45  RemoveChild(addE
30080 6c 65 6d 65 6e 74 29 3b 0d 0a 20 20 20 20 20 20  lement);..      
30090 20 20 20 20 20 20 20 20 20 20 64 69 72 74 79 20            dirty 
300a0 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20  = true;..       
300b0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
300c0 20 20 20 20 20 20 58 6d 6c 45 6c 65 6d 65 6e 74        XmlElement
300d0 20 72 65 6d 6f 76 65 45 6c 65 6d 65 6e 74 20 3d   removeElement =
300e0 20 64 6f 63 75 6d 65 6e 74 2e 53 65 6c 65 63 74   document.Select
300f0 53 69 6e 67 6c 65 4e 6f 64 65 28 0d 0a 20 20 20  SingleNode(..   
30100 20 20 20 20 20 20 20 20 20 20 20 20 20 53 74 72               Str
30110 69 6e 67 2e 46 6f 72 6d 61 74 28 58 50 61 74 68  ing.Format(XPath
30120 46 6f 72 52 65 6d 6f 76 65 45 6c 65 6d 65 6e 74  ForRemoveElement
30130 2c 20 69 6e 76 61 72 69 61 6e 74 4e 61 6d 65 29  , invariantName)
30140 29 20 61 73 20 58 6d 6c 45 6c 65 6d 65 6e 74 3b  ) as XmlElement;
30150 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
30160 69 66 20 28 72 65 6d 6f 76 65 45 6c 65 6d 65 6e  if (removeElemen
30170 74 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  t != null)..    
30180 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
30190 20 20 20 20 20 20 20 20 20 20 20 72 65 6d 6f 76             remov
301a0 65 45 6c 65 6d 65 6e 74 2e 50 61 72 65 6e 74 4e  eElement.ParentN
301b0 6f 64 65 2e 52 65 6d 6f 76 65 43 68 69 6c 64 28  ode.RemoveChild(
301c0 72 65 6d 6f 76 65 45 6c 65 6d 65 6e 74 29 3b 0d  removeElement);.
301d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
301e0 20 64 69 72 74 79 20 3d 20 74 72 75 65 3b 0d 0a   dirty = true;..
301f0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
30200 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
30210 28 64 69 72 74 79 20 7c 7c 20 77 68 61 74 49 66  (dirty || whatIf
30220 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
30230 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
30240 20 20 69 66 20 28 76 65 72 62 6f 73 65 29 0d 0a    if (verbose)..
30250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30260 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62      TraceOps.Deb
30270 75 67 41 6e 64 54 72 61 63 65 28 54 72 61 63 65  ugAndTrace(Trace
30280 50 72 69 6f 72 69 74 79 2e 48 69 67 68 65 73 74  Priority.Highest
30290 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
302a0 20 20 20 20 20 20 20 20 20 20 20 64 65 62 75 67             debug
302b0 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43  Callback, traceC
302c0 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e  allback, String.
302d0 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
302e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
302f0 20 22 61 64 64 45 6c 65 6d 65 6e 74 20 3d 20 7b   "addElement = {
30300 30 7d 2c 20 72 65 6d 6f 76 65 45 6c 65 6d 65 6e  0}, removeElemen
30310 74 20 3d 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20  t = {1}",..     
30320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30330 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 61 64     ForDisplay(ad
30340 64 45 6c 65 6d 65 6e 74 29 2c 20 46 6f 72 44 69  dElement), ForDi
30350 73 70 6c 61 79 28 72 65 6d 6f 76 65 45 6c 65 6d  splay(removeElem
30360 65 6e 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20  ent)),..        
30370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30380 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
30390 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
303a0 20 20 20 69 66 20 28 21 77 68 61 74 49 66 29 0d     if (!whatIf).
303b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
303c0 20 20 20 20 20 64 6f 63 75 6d 65 6e 74 2e 53 61       document.Sa
303d0 76 65 28 66 69 6c 65 4e 61 6d 65 29 3b 0d 0a 0d  ve(fileName);...
303e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
303f0 20 66 69 6c 65 73 4d 6f 64 69 66 69 65 64 2b 2b   filesModified++
30400 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
30410 20 20 20 20 20 73 61 76 65 64 20 3d 20 74 72 75       saved = tru
30420 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
30430 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
30440 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20   return true;.. 
30450 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
30460 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
30470 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30480 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30490 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
304a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
304b0 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
304c0 74 61 74 69 63 20 62 6f 6f 6c 20 50 72 6f 63 65  tatic bool Proce
304d0 73 73 44 62 50 72 6f 76 69 64 65 72 46 61 63 74  ssDbProviderFact
304e0 6f 72 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ory(..          
304f0 20 20 73 74 72 69 6e 67 20 66 69 6c 65 4e 61 6d    string fileNam
30500 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
30510 73 74 72 69 6e 67 20 69 6e 76 61 72 69 61 6e 74  string invariant
30520 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  Name,..         
30530 20 20 20 73 74 72 69 6e 67 20 6e 61 6d 65 2c 0d     string name,.
30540 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72  .            str
30550 69 6e 67 20 64 65 73 63 72 69 70 74 69 6f 6e 2c  ing description,
30560 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74  ..            st
30570 72 69 6e 67 20 74 79 70 65 4e 61 6d 65 2c 0d 0a  ring typeName,..
30580 20 20 20 20 20 20 20 20 20 20 20 20 41 73 73 65              Asse
30590 6d 62 6c 79 4e 61 6d 65 20 61 73 73 65 6d 62 6c  mblyName assembl
305a0 79 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20  yName,..        
305b0 20 20 20 20 73 74 72 69 6e 67 20 64 69 72 65 63      string direc
305c0 74 6f 72 79 2c 0d 0a 20 20 20 20 20 20 20 20 20  tory,..         
305d0 20 20 20 6f 62 6a 65 63 74 20 63 6c 69 65 6e 74     object client
305e0 44 61 74 61 2c 0d 0a 20 20 20 20 20 20 20 20 20  Data,..         
305f0 20 20 20 62 6f 6f 6c 20 70 65 72 55 73 65 72 2c     bool perUser,
30600 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f  ..            bo
30610 6f 6c 20 77 6f 77 36 34 2c 0d 0a 20 20 20 20 20  ol wow64,..     
30620 20 20 20 20 20 20 20 62 6f 6f 6c 20 74 68 72 6f         bool thro
30630 77 4f 6e 4d 69 73 73 69 6e 67 2c 0d 0a 20 20 20  wOnMissing,..   
30640 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68           bool wh
30650 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20  atIf,..         
30660 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c     bool verbose,
30670 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
30680 66 20 62 6f 6f 6c 20 73 61 76 65 64 2c 0d 0a 20  f bool saved,.. 
30690 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20 73             ref s
306a0 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20  tring error..   
306b0 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
306c0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
306d0 20 20 20 41 6e 79 50 61 69 72 3c 73 74 72 69 6e     AnyPair<strin
306e0 67 2c 20 62 6f 6f 6c 3e 20 70 61 69 72 20 3d 20  g, bool> pair = 
306f0 63 6c 69 65 6e 74 44 61 74 61 20 61 73 20 41 6e  clientData as An
30700 79 50 61 69 72 3c 73 74 72 69 6e 67 2c 20 62 6f  yPair<string, bo
30710 6f 6c 3e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ol>;....        
30720 20 20 20 20 69 66 20 28 70 61 69 72 20 3d 3d 20      if (pair == 
30730 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
30740 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
30750 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 69        error = "i
30760 6e 76 61 6c 69 64 20 66 72 61 6d 65 77 6f 72 6b  nvalid framework
30770 20 63 6f 6e 66 69 67 20 63 61 6c 6c 62 61 63 6b   config callback
30780 20 64 61 74 61 22 3b 0d 0a 20 20 20 20 20 20 20   data";..       
30790 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
307a0 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20  false;..        
307b0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
307c0 20 20 20 20 20 69 66 20 28 70 61 69 72 2e 59 29       if (pair.Y)
307d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
307e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
307f0 20 72 65 74 75 72 6e 20 52 65 6d 6f 76 65 44 62   return RemoveDb
30800 50 72 6f 76 69 64 65 72 46 61 63 74 6f 72 79 28  ProviderFactory(
30810 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
30820 20 20 20 20 20 20 66 69 6c 65 4e 61 6d 65 2c 20        fileName, 
30830 69 6e 76 61 72 69 61 6e 74 4e 61 6d 65 2c 20 77  invariantName, w
30840 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 2c 20  hatIf, verbose, 
30850 72 65 66 20 73 61 76 65 64 2c 0d 0a 20 20 20 20  ref saved,..    
30860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30870 72 65 66 20 65 72 72 6f 72 29 20 26 26 0d 0a 20  ref error) &&.. 
30880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 41                 A
30890 64 64 44 62 50 72 6f 76 69 64 65 72 46 61 63 74  ddDbProviderFact
308a0 6f 72 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ory(..          
308b0 20 20 20 20 20 20 20 20 20 20 66 69 6c 65 4e 61            fileNa
308c0 6d 65 2c 20 69 6e 76 61 72 69 61 6e 74 4e 61 6d  me, invariantNam
308d0 65 2c 20 6e 61 6d 65 2c 20 64 65 73 63 72 69 70  e, name, descrip
308e0 74 69 6f 6e 2c 20 74 79 70 65 4e 61 6d 65 2c 0d  tion, typeName,.
308f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
30900 20 20 20 20 20 61 73 73 65 6d 62 6c 79 4e 61 6d       assemblyNam
30910 65 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f  e, whatIf, verbo
30920 73 65 2c 20 72 65 66 20 73 61 76 65 64 2c 20 72  se, ref saved, r
30930 65 66 20 65 72 72 6f 72 29 3b 0d 0a 20 20 20 20  ef error);..    
30940 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
30950 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20         else..   
30960 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
30970 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
30980 72 6e 20 52 65 6d 6f 76 65 44 62 50 72 6f 76 69  rn RemoveDbProvi
30990 64 65 72 46 61 63 74 6f 72 79 28 0d 0a 20 20 20  derFactory(..   
309a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
309b0 20 66 69 6c 65 4e 61 6d 65 2c 20 69 6e 76 61 72   fileName, invar
309c0 69 61 6e 74 4e 61 6d 65 2c 20 77 68 61 74 49 66  iantName, whatIf
309d0 2c 20 76 65 72 62 6f 73 65 2c 20 72 65 66 20 73  , verbose, ref s
309e0 61 76 65 64 2c 0d 0a 20 20 20 20 20 20 20 20 20  aved,..         
309f0 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20 65             ref e
30a00 72 72 6f 72 29 3b 0d 0a 20 20 20 20 20 20 20 20  rror);..        
30a10 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d      }..        }
30a20 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65  ..        #endre
30a30 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20  gion....        
30a40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30a50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30a60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30a70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30a80 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
30a90 20 20 20 23 72 65 67 69 6f 6e 20 41 73 73 65 6d     #region Assem
30aa0 62 6c 79 20 46 6f 6c 64 65 72 73 20 48 61 6e 64  bly Folders Hand
30ab0 6c 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 70 72  ling..        pr
30ac0 69 76 61 74 65 20 73 74 61 74 69 63 20 73 74 72  ivate static str
30ad0 69 6e 67 20 47 65 74 41 73 73 65 6d 62 6c 79 46  ing GetAssemblyF
30ae0 6f 6c 64 65 72 73 4b 65 79 4e 61 6d 65 28 0d 0a  oldersKeyName(..
30af0 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
30b00 6e 67 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65  ng frameworkName
30b10 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 56  ,..            V
30b20 65 72 73 69 6f 6e 20 66 72 61 6d 65 77 6f 72 6b  ersion framework
30b30 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20  Version,..      
30b40 20 20 20 20 20 20 73 74 72 69 6e 67 20 70 6c 61        string pla
30b50 74 66 6f 72 6d 4e 61 6d 65 2c 0d 0a 20 20 20 20  tformName,..    
30b60 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 70 65 72          bool per
30b70 55 73 65 72 2c 0d 0a 20 20 20 20 20 20 20 20 20  User,..         
30b80 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34 0d 0a 20     bool wow64.. 
30b90 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
30ba0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
30bb0 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
30bc0 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 54 68       // NOTE: Th
30bd0 69 73 20 72 65 67 69 73 74 72 79 20 6b 65 79 20  is registry key 
30be0 61 70 70 65 61 72 73 20 74 6f 20 61 6c 77 61 79  appears to alway
30bf0 73 20 62 65 20 33 32 2d 62 69 74 20 6f 6e 6c 79  s be 32-bit only
30c00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
30c10 20 20 20 20 20 20 20 28 69 2e 65 2e 20 70 72 6f         (i.e. pro
30c20 62 61 62 6c 79 20 62 65 63 61 75 73 65 20 69 74  bably because it
30c30 20 69 73 20 6f 6e 6c 79 20 75 73 65 64 20 62 79   is only used by
30c40 20 56 69 73 75 61 6c 0d 0a 20 20 20 20 20 20 20   Visual..       
30c50 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 53 74       //       St
30c60 75 64 69 6f 2c 20 77 68 69 63 68 20 69 73 20 63  udio, which is c
30c70 75 72 72 65 6e 74 6c 79 20 61 6c 77 61 79 73 20  urrently always 
30c80 33 32 2d 62 69 74 20 6f 6e 6c 79 29 2e 0d 0a 20  32-bit only)... 
30c90 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
30ca0 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
30cb0 67 20 66 6f 72 6d 61 74 20 3d 20 21 53 74 72 69  g format = !Stri
30cc0 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79  ng.IsNullOrEmpty
30cd0 28 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 29 20 3f  (platformName) ?
30ce0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
30cf0 20 20 22 7b 30 7d 5c 5c 4d 69 63 72 6f 73 6f 66    "{0}\\Microsof
30d00 74 5c 5c 7b 31 7d 5c 5c 76 7b 32 7d 5c 5c 7b 33  t\\{1}\\v{2}\\{3
30d10 7d 5c 5c 41 73 73 65 6d 62 6c 79 46 6f 6c 64 65  }\\AssemblyFolde
30d20 72 73 45 78 22 20 3a 0d 0a 20 20 20 20 20 20 20  rsEx" :..       
30d30 20 20 20 20 20 20 20 20 20 22 7b 30 7d 5c 5c 4d           "{0}\\M
30d40 69 63 72 6f 73 6f 66 74 5c 5c 7b 31 7d 5c 5c 76  icrosoft\\{1}\\v
30d50 7b 32 7d 5c 5c 41 73 73 65 6d 62 6c 79 46 6f 6c  {2}\\AssemblyFol
30d60 64 65 72 73 45 78 22 3b 0d 0a 0d 0a 20 20 20 20  dersEx";....    
30d70 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 53          return S
30d80 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 66 6f 72  tring.Format(for
30d90 6d 61 74 2c 20 47 65 74 52 6f 6f 74 4b 65 79 4e  mat, GetRootKeyN
30da0 61 6d 65 28 70 65 72 55 73 65 72 2c 20 77 6f 77  ame(perUser, wow
30db0 36 34 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  64),..          
30dc0 20 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 4e        frameworkN
30dd0 61 6d 65 2c 20 66 72 61 6d 65 77 6f 72 6b 56 65  ame, frameworkVe
30de0 72 73 69 6f 6e 2c 20 70 6c 61 74 66 6f 72 6d 4e  rsion, platformN
30df0 61 6d 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d  ame);..        }
30e00 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
30e10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30e20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30e30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30e40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30e50 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70  ///....        p
30e60 72 69 76 61 74 65 20 73 74 61 74 69 63 20 62 6f  rivate static bo
30e70 6f 6c 20 41 64 64 54 6f 41 73 73 65 6d 62 6c 79  ol AddToAssembly
30e80 46 6f 6c 64 65 72 73 28 0d 0a 20 20 20 20 20 20  Folders(..      
30e90 20 20 20 20 20 20 4d 6f 63 6b 52 65 67 69 73 74        MockRegist
30ea0 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a  ryKey rootKey,..
30eb0 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
30ec0 6e 67 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65  ng frameworkName
30ed0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 56  ,..            V
30ee0 65 72 73 69 6f 6e 20 66 72 61 6d 65 77 6f 72 6b  ersion framework
30ef0 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20  Version,..      
30f00 20 20 20 20 20 20 73 74 72 69 6e 67 20 70 6c 61        string pla
30f10 74 66 6f 72 6d 4e 61 6d 65 2c 0d 0a 20 20 20 20  tformName,..    
30f20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 73          string s
30f30 75 62 4b 65 79 4e 61 6d 65 2c 0d 0a 20 20 20 20  ubKeyName,..    
30f40 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 64          string d
30f50 69 72 65 63 74 6f 72 79 2c 0d 0a 20 20 20 20 20  irectory,..     
30f60 20 20 20 20 20 20 20 62 6f 6f 6c 20 70 65 72 55         bool perU
30f70 73 65 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ser,..          
30f80 20 20 62 6f 6f 6c 20 77 6f 77 36 34 2c 0d 0a 20    bool wow64,.. 
30f90 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
30fa0 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20  whatIf,..       
30fb0 20 20 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73       bool verbos
30fc0 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
30fd0 72 65 66 20 73 74 72 69 6e 67 20 65 72 72 6f 72  ref string error
30fe0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d  ..            ).
30ff0 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
31000 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6b          string k
31010 65 79 4e 61 6d 65 20 3d 20 47 65 74 41 73 73 65  eyName = GetAsse
31020 6d 62 6c 79 46 6f 6c 64 65 72 73 4b 65 79 4e 61  mblyFoldersKeyNa
31030 6d 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me(..           
31040 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 4e 61       frameworkNa
31050 6d 65 2c 20 66 72 61 6d 65 77 6f 72 6b 56 65 72  me, frameworkVer
31060 73 69 6f 6e 2c 20 70 6c 61 74 66 6f 72 6d 4e 61  sion, platformNa
31070 6d 65 2c 20 70 65 72 55 73 65 72 2c 0d 0a 20 20  me, perUser,..  
31080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 77 6f                wo
31090 77 36 34 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  w64);....       
310a0 20 20 20 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b       using (Mock
310b0 52 65 67 69 73 74 72 79 4b 65 79 20 6b 65 79 20  RegistryKey key 
310c0 3d 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72  = RegistryHelper
310d0 2e 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20  .OpenSubKey(..  
310e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
310f0 20 20 72 6f 6f 74 4b 65 79 2c 20 6b 65 79 4e 61    rootKey, keyNa
31100 6d 65 2c 20 74 72 75 65 2c 20 77 68 61 74 49 66  me, true, whatIf
31110 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a 20 20 20  , verbose))..   
31120 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
31130 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
31140 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  key == null)..  
31150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
31160 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
31170 20 20 20 20 20 65 72 72 6f 72 20 3d 20 53 74 72       error = Str
31180 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
31190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
311a0 20 20 20 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20       "could not 
311b0 6f 70 65 6e 20 72 65 67 69 73 74 72 79 20 6b 65  open registry ke
311c0 79 3a 20 7b 30 7d 5c 5c 7b 31 7d 22 2c 0d 0a 20  y: {0}\\{1}",.. 
311d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
311e0 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20         rootKey, 
311f0 6b 65 79 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20  keyName);....   
31200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31210 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
31220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31230 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
31240 20 20 20 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b       using (Mock
31250 52 65 67 69 73 74 72 79 4b 65 79 20 73 75 62 4b  RegistryKey subK
31260 65 79 20 3d 20 52 65 67 69 73 74 72 79 48 65 6c  ey = RegistryHel
31270 70 65 72 2e 43 72 65 61 74 65 53 75 62 4b 65 79  per.CreateSubKey
31280 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
31290 20 20 20 20 20 20 20 20 20 20 20 6b 65 79 2c 20             key, 
312a0 73 75 62 4b 65 79 4e 61 6d 65 2c 20 77 68 61 74  subKeyName, what
312b0 49 66 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a 20  If, verbose)).. 
312c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
312d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
312e0 20 20 20 20 20 20 69 66 20 28 73 75 62 4b 65 79        if (subKey
312f0 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
31300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
31310 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
31320 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20            error 
31330 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  = String.Format(
31340 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
31350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 63                "c
31360 6f 75 6c 64 20 6e 6f 74 20 63 72 65 61 74 65 20  ould not create 
31370 72 65 67 69 73 74 72 79 20 6b 65 79 3a 20 7b 30  registry key: {0
31380 7d 5c 5c 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20  }\\{1}",..      
31390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
313a0 20 20 20 20 20 20 6b 65 79 2c 20 73 75 62 4b 65        key, subKe
313b0 79 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20  yName);....     
313c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
313d0 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
313e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
313f0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
31400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52                 R
31410 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 53 65  egistryHelper.Se
31420 74 56 61 6c 75 65 28 0d 0a 20 20 20 20 20 20 20  tValue(..       
31430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31440 20 73 75 62 4b 65 79 2c 20 6e 75 6c 6c 2c 20 64   subKey, null, d
31450 69 72 65 63 74 6f 72 79 2c 20 77 68 61 74 49 66  irectory, whatIf
31460 2c 20 76 65 72 62 6f 73 65 29 3b 0d 0a 20 20 20  , verbose);..   
31470 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
31480 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
31490 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
314a0 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20 20  urn true;..     
314b0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
314c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
314d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
314e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
314f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31500 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
31510 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69     private stati
31520 63 20 62 6f 6f 6c 20 52 65 6d 6f 76 65 46 72 6f  c bool RemoveFro
31530 6d 41 73 73 65 6d 62 6c 79 46 6f 6c 64 65 72 73  mAssemblyFolders
31540 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 4d  (..            M
31550 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 72  ockRegistryKey r
31560 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20  ootKey,..       
31570 20 20 20 20 20 73 74 72 69 6e 67 20 66 72 61 6d       string fram
31580 65 77 6f 72 6b 4e 61 6d 65 2c 0d 0a 20 20 20 20  eworkName,..    
31590 20 20 20 20 20 20 20 20 56 65 72 73 69 6f 6e 20          Version 
315a0 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e  frameworkVersion
315b0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  ,..            s
315c0 74 72 69 6e 67 20 70 6c 61 74 66 6f 72 6d 4e 61  tring platformNa
315d0 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me,..           
315e0 20 73 74 72 69 6e 67 20 73 75 62 4b 65 79 4e 61   string subKeyNa
315f0 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me,..           
31600 20 62 6f 6f 6c 20 70 65 72 55 73 65 72 2c 0d 0a   bool perUser,..
31610 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
31620 20 77 6f 77 36 34 2c 0d 0a 20 20 20 20 20 20 20   wow64,..       
31630 20 20 20 20 20 62 6f 6f 6c 20 74 68 72 6f 77 4f       bool throwO
31640 6e 4d 69 73 73 69 6e 67 2c 0d 0a 20 20 20 20 20  nMissing,..     
31650 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74         bool what
31660 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  If,..           
31670 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c 0d 0a   bool verbose,..
31680 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20              ref 
31690 73 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20  string error..  
316a0 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
316b0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
316c0 20 20 20 20 73 74 72 69 6e 67 20 6b 65 79 4e 61      string keyNa
316d0 6d 65 20 3d 20 47 65 74 41 73 73 65 6d 62 6c 79  me = GetAssembly
316e0 46 6f 6c 64 65 72 73 4b 65 79 4e 61 6d 65 28 0d  FoldersKeyName(.
316f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
31700 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c 20   frameworkName, 
31710 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e  frameworkVersion
31720 2c 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 2c 20  , platformName, 
31730 70 65 72 55 73 65 72 2c 0d 0a 20 20 20 20 20 20  perUser,..      
31740 20 20 20 20 20 20 20 20 20 20 77 6f 77 36 34 29            wow64)
31750 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
31760 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69   using (MockRegi
31770 73 74 72 79 4b 65 79 20 6b 65 79 20 3d 20 52 65  stryKey key = Re
31780 67 69 73 74 72 79 48 65 6c 70 65 72 2e 4f 70 65  gistryHelper.Ope
31790 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20  nSubKey(..      
317a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f                ro
317b0 6f 74 4b 65 79 2c 20 6b 65 79 4e 61 6d 65 2c 20  otKey, keyName, 
317c0 74 72 75 65 2c 20 77 68 61 74 49 66 2c 20 76 65  true, whatIf, ve
317d0 72 62 6f 73 65 29 29 0d 0a 20 20 20 20 20 20 20  rbose))..       
317e0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
317f0 20 20 20 20 20 20 20 20 69 66 20 28 6b 65 79 20          if (key 
31800 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
31810 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
31820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31830 20 65 72 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e   error = String.
31840 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
31850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31860 20 22 63 6f 75 6c 64 20 6e 6f 74 20 6f 70 65 6e   "could not open
31870 20 72 65 67 69 73 74 72 79 20 6b 65 79 3a 20 7b   registry key: {
31880 30 7d 5c 5c 7b 31 7d 22 2c 0d 0a 20 20 20 20 20  0}\\{1}",..     
31890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
318a0 20 20 20 72 6f 6f 74 4b 65 79 2c 20 6b 65 79 4e     rootKey, keyN
318b0 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ame);....       
318c0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
318d0 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20  urn false;..    
318e0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
318f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
31900 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e   RegistryHelper.
31910 44 65 6c 65 74 65 53 75 62 4b 65 79 28 0d 0a 20  DeleteSubKey(.. 
31920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31930 20 20 20 6b 65 79 2c 20 73 75 62 4b 65 79 4e 61     key, subKeyNa
31940 6d 65 2c 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69  me, throwOnMissi
31950 6e 67 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62  ng, whatIf, verb
31960 6f 73 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ose);..         
31970 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
31980 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b      return true;
31990 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }.... 
319a0 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
319b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
319c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
319d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
319e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
319f0 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
31a00 65 20 73 74 61 74 69 63 20 62 6f 6f 6c 20 50 72  e static bool Pr
31a10 6f 63 65 73 73 41 73 73 65 6d 62 6c 79 46 6f 6c  ocessAssemblyFol
31a20 64 65 72 73 28 0d 0a 20 20 20 20 20 20 20 20 20  ders(..         
31a30 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b     MockRegistryK
31a40 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20  ey rootKey,..   
31a50 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
31a60 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c 0d 0a  frameworkName,..
31a70 20 20 20 20 20 20 20 20 20 20 20 20 56 65 72 73              Vers
31a80 69 6f 6e 20 66 72 61 6d 65 77 6f 72 6b 56 65 72  ion frameworkVer
31a90 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20  sion,..         
31aa0 20 20 20 73 74 72 69 6e 67 20 70 6c 61 74 66 6f     string platfo
31ab0 72 6d 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20  rmName,..       
31ac0 20 20 20 20 20 73 74 72 69 6e 67 20 64 69 72 65       string dire
31ad0 63 74 6f 72 79 2c 0d 0a 20 20 20 20 20 20 20 20  ctory,..        
31ae0 20 20 20 20 6f 62 6a 65 63 74 20 63 6c 69 65 6e      object clien
31af0 74 44 61 74 61 2c 0d 0a 20 20 20 20 20 20 20 20  tData,..        
31b00 20 20 20 20 62 6f 6f 6c 20 70 65 72 55 73 65 72      bool perUser
31b10 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  ,..            b
31b20 6f 6f 6c 20 77 6f 77 36 34 2c 0d 0a 20 20 20 20  ool wow64,..    
31b30 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 74 68 72          bool thr
31b40 6f 77 4f 6e 4d 69 73 73 69 6e 67 2c 0d 0a 20 20  owOnMissing,..  
31b50 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77            bool w
31b60 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20  hatIf,..        
31b70 20 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65      bool verbose
31b80 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  ,..            r
31b90 65 66 20 73 74 72 69 6e 67 20 65 72 72 6f 72 0d  ef string error.
31ba0 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a  .            )..
31bb0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
31bc0 20 20 20 20 20 20 20 41 6e 79 50 61 69 72 3c 73         AnyPair<s
31bd0 74 72 69 6e 67 2c 20 62 6f 6f 6c 3e 20 70 61 69  tring, bool> pai
31be0 72 20 3d 20 63 6c 69 65 6e 74 44 61 74 61 20 61  r = clientData a
31bf0 73 20 41 6e 79 50 61 69 72 3c 73 74 72 69 6e 67  s AnyPair<string
31c00 2c 20 62 6f 6f 6c 3e 3b 0d 0a 0d 0a 20 20 20 20  , bool>;....    
31c10 20 20 20 20 20 20 20 20 69 66 20 28 70 61 69 72          if (pair
31c20 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
31c30 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
31c40 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20            error 
31c50 3d 20 22 69 6e 76 61 6c 69 64 20 66 72 61 6d 65  = "invalid frame
31c60 77 6f 72 6b 20 63 61 6c 6c 62 61 63 6b 20 64 61  work callback da
31c70 74 61 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ta";..          
31c80 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
31c90 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se;..           
31ca0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
31cb0 20 20 69 66 20 28 70 61 69 72 2e 59 29 0d 0a 20    if (pair.Y).. 
31cc0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
31cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
31ce0 74 75 72 6e 20 52 65 6d 6f 76 65 46 72 6f 6d 41  turn RemoveFromA
31cf0 73 73 65 6d 62 6c 79 46 6f 6c 64 65 72 73 28 0d  ssemblyFolders(.
31d00 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
31d10 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 66 72       rootKey, fr
31d20 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c 20 66 72 61  ameworkName, fra
31d30 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 2c 20 70  meworkVersion, p
31d40 6c 61 74 66 6f 72 6d 4e 61 6d 65 2c 0d 0a 20 20  latformName,..  
31d50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31d60 20 20 4c 65 67 61 63 79 50 72 6f 6a 65 63 74 4e    LegacyProjectN
31d70 61 6d 65 2c 20 70 65 72 55 73 65 72 2c 20 77 6f  ame, perUser, wo
31d80 77 36 34 2c 20 66 61 6c 73 65 2c 20 77 68 61 74  w64, false, what
31d90 49 66 2c 20 76 65 72 62 6f 73 65 2c 0d 0a 20 20  If, verbose,..  
31da0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31db0 20 20 72 65 66 20 65 72 72 6f 72 29 20 26 26 0d    ref error) &&.
31dc0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
31dd0 20 41 64 64 54 6f 41 73 73 65 6d 62 6c 79 46 6f   AddToAssemblyFo
31de0 6c 64 65 72 73 28 0d 0a 20 20 20 20 20 20 20 20  lders(..        
31df0 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74              root
31e00 4b 65 79 2c 20 66 72 61 6d 65 77 6f 72 6b 4e 61  Key, frameworkNa
31e10 6d 65 2c 20 66 72 61 6d 65 77 6f 72 6b 56 65 72  me, frameworkVer
31e20 73 69 6f 6e 2c 20 70 6c 61 74 66 6f 72 6d 4e 61  sion, platformNa
31e30 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me,..           
31e40 20 20 20 20 20 20 20 20 20 50 72 6f 6a 65 63 74           Project
31e50 4e 61 6d 65 2c 20 70 61 69 72 2e 58 2c 20 70 65  Name, pair.X, pe
31e60 72 55 73 65 72 2c 20 77 6f 77 36 34 2c 20 77 68  rUser, wow64, wh
31e70 61 74 49 66 2c 20 76 65 72 62 6f 73 65 2c 0d 0a  atIf, verbose,..
31e80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31e90 20 20 20 20 72 65 66 20 65 72 72 6f 72 29 3b 0d      ref error);.
31ea0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
31eb0 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65              else
31ec0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
31ed0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
31ee0 20 72 65 74 75 72 6e 20 52 65 6d 6f 76 65 46 72   return RemoveFr
31ef0 6f 6d 41 73 73 65 6d 62 6c 79 46 6f 6c 64 65 72  omAssemblyFolder
31f00 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  s(..            
31f10 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c          rootKey,
31f20 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c 20   frameworkName, 
31f30 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e  frameworkVersion
31f40 2c 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 2c 0d  , platformName,.
31f50 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
31f60 20 20 20 20 20 50 72 6f 6a 65 63 74 4e 61 6d 65       ProjectName
31f70 2c 20 70 65 72 55 73 65 72 2c 20 77 6f 77 36 34  , perUser, wow64
31f80 2c 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67  , throwOnMissing
31f90 2c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20  , whatIf,..     
31fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 76                 v
31fb0 65 72 62 6f 73 65 2c 20 72 65 66 20 65 72 72 6f  erbose, ref erro
31fc0 72 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  r);..           
31fd0 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20   }..        }.. 
31fe0 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f         #endregio
31ff0 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  n....        ///
32000 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32010 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32020 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32030 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32040 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
32050 23 72 65 67 69 6f 6e 20 56 69 73 75 61 6c 20 53  #region Visual S
32060 74 75 64 69 6f 20 48 61 6e 64 6c 69 6e 67 0d 0a  tudio Handling..
32070 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
32080 73 74 61 74 69 63 20 73 74 72 69 6e 67 20 47 65  static string Ge
32090 74 56 73 52 6f 6f 74 4b 65 79 4e 61 6d 65 28 0d  tVsRootKeyName(.
320a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f  .            boo
320b0 6c 20 70 65 72 55 73 65 72 2c 0d 0a 20 20 20 20  l perUser,..    
320c0 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 6f 77          bool wow
320d0 36 34 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  64..            
320e0 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
320f0 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
32100 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 22   String.Format("
32110 7b 30 7d 5c 5c 4d 69 63 72 6f 73 6f 66 74 5c 5c  {0}\\Microsoft\\
32120 56 69 73 75 61 6c 53 74 75 64 69 6f 22 2c 0d 0a  VisualStudio",..
32130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32140 47 65 74 52 6f 6f 74 4b 65 79 4e 61 6d 65 28 70  GetRootKeyName(p
32150 65 72 55 73 65 72 2c 20 77 6f 77 36 34 29 29 3b  erUser, wow64));
32160 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }.... 
32170 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 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 0d 0a  //////////////..
321c0 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
321d0 65 20 73 74 61 74 69 63 20 73 74 72 69 6e 67 20  e static string 
321e0 47 65 74 56 73 4b 65 79 4e 61 6d 65 28 0d 0a 20  GetVsKeyName(.. 
321f0 20 20 20 20 20 20 20 20 20 20 20 56 65 72 73 69             Versi
32200 6f 6e 20 76 73 56 65 72 73 69 6f 6e 2c 0d 0a 20  on vsVersion,.. 
32210 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
32220 67 20 73 75 66 66 69 78 2c 0d 0a 20 20 20 20 20  g suffix,..     
32230 20 20 20 20 20 20 20 62 6f 6f 6c 20 70 65 72 55         bool perU
32240 73 65 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ser,..          
32250 20 20 62 6f 6f 6c 20 77 6f 77 36 34 0d 0a 20 20    bool wow64..  
32260 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
32270 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
32280 20 20 20 20 69 66 20 28 76 73 56 65 72 73 69 6f      if (vsVersio
32290 6e 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  n == null)..    
322a0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
322b0 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20  rn null;....    
322c0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 53          return S
322d0 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
322e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
322f0 7b 30 7d 5c 5c 7b 31 7d 7b 32 7d 22 2c 20 47 65  {0}\\{1}{2}", Ge
32300 74 56 73 52 6f 6f 74 4b 65 79 4e 61 6d 65 28 70  tVsRootKeyName(p
32310 65 72 55 73 65 72 2c 20 77 6f 77 36 34 29 2c 20  erUser, wow64), 
32320 76 73 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20  vsVersion,..    
32330 20 20 20 20 20 20 20 20 20 20 20 20 73 75 66 66              suff
32340 69 78 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  ix);..        }.
32350 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
32360 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32370 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32380 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32390 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
323a0 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72  //....        #r
323b0 65 67 69 6f 6e 20 56 69 73 75 61 6c 20 53 74 75  egion Visual Stu
323c0 64 69 6f 20 44 61 74 61 20 53 6f 75 72 63 65 20  dio Data Source 
323d0 48 61 6e 64 6c 69 6e 67 0d 0a 20 20 20 20 20 20  Handling..      
323e0 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63    private static
323f0 20 62 6f 6f 6c 20 41 64 64 56 73 44 61 74 61 53   bool AddVsDataS
32400 6f 75 72 63 65 28 0d 0a 20 20 20 20 20 20 20 20  ource(..        
32410 20 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79      MockRegistry
32420 4b 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20  Key rootKey,..  
32430 20 20 20 20 20 20 20 20 20 20 56 65 72 73 69 6f            Versio
32440 6e 20 76 73 56 65 72 73 69 6f 6e 2c 0d 0a 20 20  n vsVersion,..  
32450 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
32460 20 73 75 66 66 69 78 2c 0d 0a 20 20 20 20 20 20   suffix,..      
32470 20 20 20 20 20 20 50 61 63 6b 61 67 65 20 70 61        Package pa
32480 63 6b 61 67 65 2c 0d 0a 20 20 20 20 20 20 20 20  ckage,..        
32490 20 20 20 20 62 6f 6f 6c 20 70 65 72 55 73 65 72      bool perUser
324a0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  ,..            b
324b0 6f 6f 6c 20 77 6f 77 36 34 2c 0d 0a 20 20 20 20  ool wow64,..    
324c0 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61          bool wha
324d0 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  tIf,..          
324e0 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c 0d    bool verbose,.
324f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66  .            ref
32500 20 73 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20   string error.. 
32510 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
32520 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
32530 20 20 20 20 20 69 66 20 28 76 73 56 65 72 73 69       if (vsVersi
32540 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  on == null)..   
32550 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
32560 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
32570 72 20 3d 20 22 69 6e 76 61 6c 69 64 20 56 53 20  r = "invalid VS 
32580 76 65 72 73 69 6f 6e 22 3b 0d 0a 20 20 20 20 20  version";..     
32590 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
325a0 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  n false;..      
325b0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
325c0 20 20 20 20 20 20 20 69 66 20 28 70 61 63 6b 61         if (packa
325d0 67 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ge == null)..   
325e0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
325f0 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
32600 72 20 3d 20 22 69 6e 76 61 6c 69 64 20 56 53 20  r = "invalid VS 
32610 70 61 63 6b 61 67 65 22 3b 0d 0a 20 20 20 20 20  package";..     
32620 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
32630 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  n false;..      
32640 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
32650 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6b 65         string ke
32660 79 4e 61 6d 65 20 3d 20 47 65 74 56 73 4b 65 79  yName = GetVsKey
32670 4e 61 6d 65 28 76 73 56 65 72 73 69 6f 6e 2c 20  Name(vsVersion, 
32680 73 75 66 66 69 78 2c 20 70 65 72 55 73 65 72 2c  suffix, perUser,
32690 20 77 6f 77 36 34 29 3b 0d 0a 0d 0a 20 20 20 20   wow64);....    
326a0 20 20 20 20 20 20 20 20 75 73 69 6e 67 20 28 4d          using (M
326b0 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 6b  ockRegistryKey k
326c0 65 79 20 3d 20 52 65 67 69 73 74 72 79 48 65 6c  ey = RegistryHel
326d0 70 65 72 2e 4f 70 65 6e 53 75 62 4b 65 79 28 0d  per.OpenSubKey(.
326e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
326f0 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 6b 65       rootKey, ke
32700 79 4e 61 6d 65 2c 20 66 61 6c 73 65 2c 20 77 68  yName, false, wh
32710 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 29 0d  atIf, verbose)).
32720 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
32730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32740 69 66 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29  if (key == null)
32750 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
32760 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
32770 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d           error =
32780 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d   String.Format(.
32790 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
327a0 20 20 20 20 20 20 20 20 20 22 63 6f 75 6c 64 20           "could 
327b0 6e 6f 74 20 6f 70 65 6e 20 72 65 67 69 73 74 72  not open registr
327c0 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c 7b 31 7d 22  y key: {0}\\{1}"
327d0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
327e0 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b             rootK
327f0 65 79 2c 20 6b 65 79 4e 61 6d 65 29 3b 0d 0a 0d  ey, keyName);...
32800 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
32810 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
32820 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
32830 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
32840 20 20 20 20 20 20 20 20 20 75 73 69 6e 67 20 28           using (
32850 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20  MockRegistryKey 
32860 73 75 62 4b 65 79 20 3d 20 52 65 67 69 73 74 72  subKey = Registr
32870 79 48 65 6c 70 65 72 2e 4f 70 65 6e 53 75 62 4b  yHelper.OpenSubK
32880 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ey(..           
32890 20 20 20 20 20 20 20 20 20 20 20 20 20 6b 65 79               key
328a0 2c 20 22 44 61 74 61 53 6f 75 72 63 65 73 22 2c  , "DataSources",
328b0 20 74 72 75 65 2c 20 77 68 61 74 49 66 2c 20 76   true, whatIf, v
328c0 65 72 62 6f 73 65 29 29 0d 0a 20 20 20 20 20 20  erbose))..      
328d0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
328e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
328f0 20 69 66 20 28 73 75 62 4b 65 79 20 3d 3d 20 6e   if (subKey == n
32900 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
32910 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
32920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32930 20 20 20 20 20 65 72 72 6f 72 20 3d 20 53 74 72       error = Str
32940 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
32950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32960 20 20 20 20 20 20 20 20 20 22 63 6f 75 6c 64 20           "could 
32970 6e 6f 74 20 6f 70 65 6e 20 72 65 67 69 73 74 72  not open registr
32980 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c 44 61 74 61  y key: {0}\\Data
32990 53 6f 75 72 63 65 73 22 2c 0d 0a 20 20 20 20 20  Sources",..     
329a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
329b0 20 20 20 20 20 20 20 6b 65 79 29 3b 0d 0a 0d 0a         key);....
329c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
329d0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
329e0 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alse;..         
329f0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
32a00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32a10 20 20 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52      using (MockR
32a20 65 67 69 73 74 72 79 4b 65 79 20 64 61 74 61 53  egistryKey dataS
32a30 6f 75 72 63 65 4b 65 79 20 3d 0d 0a 20 20 20 20  ourceKey =..    
32a40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32a50 20 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79          Registry
32a60 48 65 6c 70 65 72 2e 43 72 65 61 74 65 53 75 62  Helper.CreateSub
32a70 4b 65 79 28 73 75 62 4b 65 79 2c 0d 0a 20 20 20  Key(subKey,..   
32a80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32a90 20 20 20 20 20 20 20 20 20 70 61 63 6b 61 67 65           package
32aa0 2e 44 61 74 61 53 6f 75 72 63 65 49 64 2e 54 6f  .DataSourceId.To
32ab0 53 74 72 69 6e 67 28 56 73 49 64 46 6f 72 6d 61  String(VsIdForma
32ac0 74 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  t),..           
32ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32ae0 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65   whatIf, verbose
32af0 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
32b00 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
32b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32b20 20 20 20 69 66 20 28 64 61 74 61 53 6f 75 72 63     if (dataSourc
32b30 65 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  eKey == null).. 
32b40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32b50 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
32b60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32b70 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 53 74        error = St
32b80 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
32b90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 63                "c
32bb0 6f 75 6c 64 20 6e 6f 74 20 63 72 65 61 74 65 20  ould not create 
32bc0 72 65 67 69 73 74 72 79 20 6b 65 79 3a 20 7b 30  registry key: {0
32bd0 7d 5c 5c 7b 31 7d 22 2c 20 6b 65 79 2c 0d 0a 20  }\\{1}", key,.. 
32be0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32bf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70                 p
32c00 61 63 6b 61 67 65 2e 44 61 74 61 53 6f 75 72 63  ackage.DataSourc
32c10 65 49 64 2e 54 6f 53 74 72 69 6e 67 28 56 73 49  eId.ToString(VsI
32c20 64 46 6f 72 6d 61 74 29 29 3b 0d 0a 0d 0a 20 20  dFormat));....  
32c30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32c40 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
32c50 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20   false;..       
32c60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32c70 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
32c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65                Re
32c90 67 69 73 74 72 79 48 65 6c 70 65 72 2e 53 65 74  gistryHelper.Set
32ca0 56 61 6c 75 65 28 0d 0a 20 20 20 20 20 20 20 20  Value(..        
32cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32cc0 20 20 20 20 64 61 74 61 53 6f 75 72 63 65 4b 65      dataSourceKe
32cd0 79 2c 20 6e 75 6c 6c 2c 20 53 74 72 69 6e 67 2e  y, null, String.
32ce0 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
32cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32d00 20 20 20 20 20 22 7b 30 7d 20 44 61 74 61 62 61       "{0} Databa
32d10 73 65 20 46 69 6c 65 22 2c 20 50 72 6f 6a 65 63  se File", Projec
32d20 74 4e 61 6d 65 29 2c 20 77 68 61 74 49 66 2c 0d  tName), whatIf,.
32d30 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
32d40 20 20 20 20 20 20 20 20 20 20 20 20 20 76 65 72               ver
32d50 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  bose);....      
32d60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32d70 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
32d80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
32d90 20 4e 4f 54 45 3a 20 54 68 69 73 20 76 61 6c 75   NOTE: This valu
32da0 65 20 69 73 20 6e 65 77 20 61 73 20 6f 66 20 31  e is new as of 1
32db0 2e 30 2e 38 33 2e 30 2e 0d 0a 20 20 20 20 20 20  .0.83.0...      
32dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32dd0 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
32de0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65                Re
32df0 67 69 73 74 72 79 48 65 6c 70 65 72 2e 53 65 74  gistryHelper.Set
32e00 56 61 6c 75 65 28 0d 0a 20 20 20 20 20 20 20 20  Value(..        
32e10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32e20 20 20 20 20 64 61 74 61 53 6f 75 72 63 65 4b 65      dataSourceKe
32e30 79 2c 20 22 44 65 66 61 75 6c 74 50 72 6f 76 69  y, "DefaultProvi
32e40 64 65 72 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  der",..         
32e50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32e60 20 20 20 70 61 63 6b 61 67 65 2e 44 61 74 61 50     package.DataP
32e70 72 6f 76 69 64 65 72 49 64 2e 54 6f 53 74 72 69  roviderId.ToStri
32e80 6e 67 28 56 73 49 64 46 6f 72 6d 61 74 29 2c 0d  ng(VsIdFormat),.
32e90 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
32ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 77 68 61               wha
32eb0 74 49 66 2c 20 76 65 72 62 6f 73 65 29 3b 0d 0a  tIf, verbose);..
32ec0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
32ed0 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74            Regist
32ee0 72 79 48 65 6c 70 65 72 2e 43 72 65 61 74 65 53  ryHelper.CreateS
32ef0 75 62 4b 65 79 28 64 61 74 61 53 6f 75 72 63 65  ubKey(dataSource
32f00 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  Key,..          
32f10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32f20 20 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28    String.Format(
32f30 22 53 75 70 70 6f 72 74 69 6e 67 50 72 6f 76 69  "SupportingProvi
32f40 64 65 72 73 5c 5c 7b 30 7d 22 2c 0d 0a 20 20 20  ders\\{0}",..   
32f50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32f60 20 20 20 20 20 20 20 20 20 70 61 63 6b 61 67 65           package
32f70 2e 44 61 74 61 50 72 6f 76 69 64 65 72 49 64 2e  .DataProviderId.
32f80 54 6f 53 74 72 69 6e 67 28 56 73 49 64 46 6f 72  ToString(VsIdFor
32f90 6d 61 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20  mat)),..        
32fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32fb0 20 20 20 20 77 68 61 74 49 66 2c 20 76 65 72 62      whatIf, verb
32fc0 6f 73 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ose);..         
32fd0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
32fe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
32ff0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
33000 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
33010 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20  turn true;..    
33020 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
33030 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
33040 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33050 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33060 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33070 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
33080 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74      private stat
33090 69 63 20 62 6f 6f 6c 20 52 65 6d 6f 76 65 56 73  ic bool RemoveVs
330a0 44 61 74 61 53 6f 75 72 63 65 28 0d 0a 20 20 20  DataSource(..   
330b0 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65 67           MockReg
330c0 69 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79  istryKey rootKey
330d0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 56  ,..            V
330e0 65 72 73 69 6f 6e 20 76 73 56 65 72 73 69 6f 6e  ersion vsVersion
330f0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  ,..            s
33100 74 72 69 6e 67 20 73 75 66 66 69 78 2c 0d 0a 20  tring suffix,.. 
33110 20 20 20 20 20 20 20 20 20 20 20 50 61 63 6b 61             Packa
33120 67 65 20 70 61 63 6b 61 67 65 2c 0d 0a 20 20 20  ge package,..   
33130 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 70 65           bool pe
33140 72 55 73 65 72 2c 0d 0a 20 20 20 20 20 20 20 20  rUser,..        
33150 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34 2c 0d      bool wow64,.
33160 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f  .            boo
33170 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20  l whatIf,..     
33180 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65 72 62         bool verb
33190 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ose,..          
331a0 20 20 72 65 66 20 73 74 72 69 6e 67 20 65 72 72    ref string err
331b0 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  or..            
331c0 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
331d0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76 73            if (vs
331e0 56 65 72 73 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29  Version == null)
331f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
33200 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
33210 20 65 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69   error = "invali
33220 64 20 56 53 20 76 65 72 73 69 6f 6e 22 3b 0d 0a  d VS version";..
33230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33240 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20  return false;.. 
33250 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
33260 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
33270 70 61 63 6b 61 67 65 20 3d 3d 20 6e 75 6c 6c 29  package == null)
33280 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
33290 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
332a0 20 65 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69   error = "invali
332b0 64 20 56 53 20 70 61 63 6b 61 67 65 22 3b 0d 0a  d VS package";..
332c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
332d0 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20  return false;.. 
332e0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
332f0 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
33300 6e 67 20 6b 65 79 4e 61 6d 65 20 3d 20 47 65 74  ng keyName = Get
33310 56 73 4b 65 79 4e 61 6d 65 28 76 73 56 65 72 73  VsKeyName(vsVers
33320 69 6f 6e 2c 20 73 75 66 66 69 78 2c 20 70 65 72  ion, suffix, per
33330 55 73 65 72 2c 20 77 6f 77 36 34 29 3b 0d 0a 0d  User, wow64);...
33340 0a 20 20 20 20 20 20 20 20 20 20 20 20 75 73 69  .            usi
33350 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73 74 72 79  ng (MockRegistry
33360 4b 65 79 20 6b 65 79 20 3d 20 52 65 67 69 73 74  Key key = Regist
33370 72 79 48 65 6c 70 65 72 2e 4f 70 65 6e 53 75 62  ryHelper.OpenSub
33380 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20  Key(..          
33390 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65            rootKe
333a0 79 2c 20 6b 65 79 4e 61 6d 65 2c 20 66 61 6c 73  y, keyName, fals
333b0 65 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f  e, whatIf, verbo
333c0 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  se))..          
333d0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
333e0 20 20 20 20 20 69 66 20 28 6b 65 79 20 3d 3d 20       if (key == 
333f0 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
33400 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
33410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72                er
33420 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72  ror = String.For
33430 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
33440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 63                "c
33450 6f 75 6c 64 20 6e 6f 74 20 6f 70 65 6e 20 72 65  ould not open re
33460 67 69 73 74 72 79 20 6b 65 79 3a 20 7b 30 7d 5c  gistry key: {0}\
33470 5c 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20  \{1}",..        
33480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33490 72 6f 6f 74 4b 65 79 2c 20 6b 65 79 4e 61 6d 65  rootKey, keyName
334a0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
334b0 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
334c0 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20   false;..       
334d0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
334e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 75 73                us
334f0 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73 74 72  ing (MockRegistr
33500 79 4b 65 79 20 73 75 62 4b 65 79 20 3d 20 52 65  yKey subKey = Re
33510 67 69 73 74 72 79 48 65 6c 70 65 72 2e 4f 70 65  gistryHelper.Ope
33520 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20  nSubKey(..      
33530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33540 20 20 6b 65 79 2c 20 22 44 61 74 61 53 6f 75 72    key, "DataSour
33550 63 65 73 22 2c 20 74 72 75 65 2c 20 77 68 61 74  ces", true, what
33560 49 66 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a 20  If, verbose)).. 
33570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
33580 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
33590 20 20 20 20 20 20 69 66 20 28 73 75 62 4b 65 79        if (subKey
335a0 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
335b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
335c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
335d0 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20            error 
335e0 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  = String.Format(
335f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
33600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 63                "c
33610 6f 75 6c 64 20 6e 6f 74 20 6f 70 65 6e 20 72 65  ould not open re
33620 67 69 73 74 72 79 20 6b 65 79 3a 20 7b 30 7d 5c  gistry key: {0}\
33630 5c 44 61 74 61 53 6f 75 72 63 65 73 22 2c 0d 0a  \DataSources",..
33640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33650 20 20 20 20 20 20 20 20 20 20 20 20 6b 65 79 29              key)
33660 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
33670 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
33680 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20  urn false;..    
33690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
336a0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
336b0 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74 72           Registr
336c0 79 48 65 6c 70 65 72 2e 44 65 6c 65 74 65 53 75  yHelper.DeleteSu
336d0 62 4b 65 79 54 72 65 65 28 0d 0a 20 20 20 20 20  bKeyTree(..     
336e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
336f0 20 20 20 73 75 62 4b 65 79 2c 20 70 61 63 6b 61     subKey, packa
33700 67 65 2e 44 61 74 61 53 6f 75 72 63 65 49 64 2e  ge.DataSourceId.
33710 54 6f 53 74 72 69 6e 67 28 56 73 49 64 46 6f 72  ToString(VsIdFor
33720 6d 61 74 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  mat),..         
33730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 77                 w
33740 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 3b  hatIf, verbose);
33750 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
33760 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
33770 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
33780 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a    return true;..
33790 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
337a0 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
337b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
337c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
337d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
337e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
337f0 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
33800 73 74 61 74 69 63 20 62 6f 6f 6c 20 50 72 6f 63  static bool Proc
33810 65 73 73 56 73 44 61 74 61 53 6f 75 72 63 65 28  essVsDataSource(
33820 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 4d 6f  ..            Mo
33830 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 72 6f  ckRegistryKey ro
33840 6f 74 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20  otKey,..        
33850 20 20 20 20 56 65 72 73 69 6f 6e 20 76 73 56 65      Version vsVe
33860 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20  rsion,..        
33870 20 20 20 20 73 74 72 69 6e 67 20 73 75 66 66 69      string suffi
33880 78 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  x,..            
33890 50 61 63 6b 61 67 65 20 70 61 63 6b 61 67 65 2c  Package package,
338a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74  ..            st
338b0 72 69 6e 67 20 64 69 72 65 63 74 6f 72 79 2c 0d  ring directory,.
338c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a  .            obj
338d0 65 63 74 20 63 6c 69 65 6e 74 44 61 74 61 2c 0d  ect clientData,.
338e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f  .            boo
338f0 6c 20 70 65 72 55 73 65 72 2c 0d 0a 20 20 20 20  l perUser,..    
33900 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 6f 77          bool wow
33910 36 34 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  64,..           
33920 20 62 6f 6f 6c 20 74 68 72 6f 77 4f 6e 4d 69 73   bool throwOnMis
33930 73 69 6e 67 2c 0d 0a 20 20 20 20 20 20 20 20 20  sing,..         
33940 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d     bool whatIf,.
33950 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f  .            boo
33960 6c 20 76 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20  l verbose,..    
33970 20 20 20 20 20 20 20 20 72 65 66 20 73 74 72 69          ref stri
33980 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20 20 20 20  ng error..      
33990 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
339a0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
339b0 69 66 20 28 70 61 63 6b 61 67 65 20 3d 3d 20 6e  if (package == n
339c0 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
339d0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
339e0 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 69 6e       error = "in
339f0 76 61 6c 69 64 20 56 53 20 70 61 63 6b 61 67 65  valid VS package
33a00 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ";..            
33a10 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
33a20 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
33a30 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
33a40 41 6e 79 50 61 69 72 3c 73 74 72 69 6e 67 2c 20  AnyPair<string, 
33a50 62 6f 6f 6c 3e 20 70 61 69 72 20 3d 20 63 6c 69  bool> pair = cli
33a60 65 6e 74 44 61 74 61 20 61 73 20 41 6e 79 50 61  entData as AnyPa
33a70 69 72 3c 73 74 72 69 6e 67 2c 20 62 6f 6f 6c 3e  ir<string, bool>
33a80 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
33a90 20 69 66 20 28 70 61 69 72 20 3d 3d 20 6e 75 6c   if (pair == nul
33aa0 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
33ab0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
33ac0 20 20 20 65 72 72 6f 72 20 3d 20 22 69 6e 76 61     error = "inva
33ad0 6c 69 64 20 56 53 20 63 61 6c 6c 62 61 63 6b 20  lid VS callback 
33ae0 64 61 74 61 22 3b 0d 0a 20 20 20 20 20 20 20 20  data";..        
33af0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
33b00 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alse;..         
33b10 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
33b20 20 20 20 20 69 66 20 28 70 61 69 72 2e 59 29 0d      if (pair.Y).
33b30 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
33b40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33b50 72 65 74 75 72 6e 20 41 64 64 56 73 44 61 74 61  return AddVsData
33b60 53 6f 75 72 63 65 28 0d 0a 20 20 20 20 20 20 20  Source(..       
33b70 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f               roo
33b80 74 4b 65 79 2c 20 76 73 56 65 72 73 69 6f 6e 2c  tKey, vsVersion,
33b90 20 73 75 66 66 69 78 2c 20 70 61 63 6b 61 67 65   suffix, package
33ba0 2c 20 70 65 72 55 73 65 72 2c 20 77 6f 77 36 34  , perUser, wow64
33bb0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
33bc0 20 20 20 20 20 20 20 77 68 61 74 49 66 2c 20 76         whatIf, v
33bd0 65 72 62 6f 73 65 2c 20 72 65 66 20 65 72 72 6f  erbose, ref erro
33be0 72 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  r);..           
33bf0 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
33c00 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20  else..          
33c10 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
33c20 20 20 20 20 20 72 65 74 75 72 6e 20 52 65 6d 6f       return Remo
33c30 76 65 56 73 44 61 74 61 53 6f 75 72 63 65 28 0d  veVsDataSource(.
33c40 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
33c50 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 76 73       rootKey, vs
33c60 56 65 72 73 69 6f 6e 2c 20 73 75 66 66 69 78 2c  Version, suffix,
33c70 20 70 61 63 6b 61 67 65 2c 20 70 65 72 55 73 65   package, perUse
33c80 72 2c 20 77 6f 77 36 34 2c 0d 0a 20 20 20 20 20  r, wow64,..     
33c90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 77                 w
33ca0 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 2c 20  hatIf, verbose, 
33cb0 72 65 66 20 65 72 72 6f 72 29 3b 0d 0a 20 20 20  ref error);..   
33cc0 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
33cd0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23      }..        #
33ce0 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20  endregion....   
33cf0 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
33d00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33d10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33d20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33d30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
33d40 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20          #region 
33d50 56 69 73 75 61 6c 20 53 74 75 64 69 6f 20 44 61  Visual Studio Da
33d60 74 61 20 50 72 6f 76 69 64 65 72 20 48 61 6e 64  ta Provider Hand
33d70 6c 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 70 72  ling..        pr
33d80 69 76 61 74 65 20 73 74 61 74 69 63 20 62 6f 6f  ivate static boo
33d90 6c 20 41 64 64 56 73 44 61 74 61 50 72 6f 76 69  l AddVsDataProvi
33da0 64 65 72 28 0d 0a 20 20 20 20 20 20 20 20 20 20  der(..          
33db0 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65    MockRegistryKe
33dc0 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20 20  y rootKey,..    
33dd0 20 20 20 20 20 20 20 20 56 65 72 73 69 6f 6e 20          Version 
33de0 76 73 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20  vsVersion,..    
33df0 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 73          string s
33e00 75 66 66 69 78 2c 0d 0a 20 20 20 20 20 20 20 20  uffix,..        
33e10 20 20 20 20 50 61 63 6b 61 67 65 20 70 61 63 6b      Package pack
33e20 61 67 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  age,..          
33e30 20 20 73 74 72 69 6e 67 20 66 69 6c 65 4e 61 6d    string fileNam
33e40 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
33e50 62 6f 6f 6c 20 70 65 72 55 73 65 72 2c 0d 0a 20  bool perUser,.. 
33e60 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
33e70 77 6f 77 36 34 2c 0d 0a 20 20 20 20 20 20 20 20  wow64,..        
33e80 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c      bool whatIf,
33e90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f  ..            bo
33ea0 6f 6c 20 76 65 72 62 6f 73 65 2c 0d 0a 20 20 20  ol verbose,..   
33eb0 20 20 20 20 20 20 20 20 20 72 65 66 20 73 74 72           ref str
33ec0 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20 20 20  ing error..     
33ed0 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
33ee0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
33ef0 20 69 66 20 28 76 73 56 65 72 73 69 6f 6e 20 3d   if (vsVersion =
33f00 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
33f10 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
33f20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20          error = 
33f30 22 69 6e 76 61 6c 69 64 20 56 53 20 76 65 72 73  "invalid VS vers
33f40 69 6f 6e 22 3b 0d 0a 20 20 20 20 20 20 20 20 20  ion";..         
33f50 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
33f60 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lse;..          
33f70 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
33f80 20 20 20 69 66 20 28 70 61 63 6b 61 67 65 20 3d     if (package =
33f90 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
33fa0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
33fb0 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20          error = 
33fc0 22 69 6e 76 61 6c 69 64 20 56 53 20 70 61 63 6b  "invalid VS pack
33fd0 61 67 65 22 3b 0d 0a 20 20 20 20 20 20 20 20 20  age";..         
33fe0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
33ff0 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lse;..          
34000 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
34010 20 20 20 73 74 72 69 6e 67 20 6b 65 79 4e 61 6d     string keyNam
34020 65 20 3d 20 47 65 74 56 73 4b 65 79 4e 61 6d 65  e = GetVsKeyName
34030 28 76 73 56 65 72 73 69 6f 6e 2c 20 73 75 66 66  (vsVersion, suff
34040 69 78 2c 20 70 65 72 55 73 65 72 2c 20 77 6f 77  ix, perUser, wow
34050 36 34 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  64);....        
34060 20 20 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52      using (MockR
34070 65 67 69 73 74 72 79 4b 65 79 20 6b 65 79 20 3d  egistryKey key =
34080 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e   RegistryHelper.
34090 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20  OpenSubKey(..   
340a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
340b0 20 72 6f 6f 74 4b 65 79 2c 20 6b 65 79 4e 61 6d   rootKey, keyNam
340c0 65 2c 20 66 61 6c 73 65 2c 20 77 68 61 74 49 66  e, false, whatIf
340d0 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a 20 20 20  , verbose))..   
340e0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
340f0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
34100 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  key == null)..  
34110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
34120 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
34130 20 20 20 20 20 65 72 72 6f 72 20 3d 20 53 74 72       error = Str
34140 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
34150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34160 20 20 20 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20       "could not 
34170 6f 70 65 6e 20 72 65 67 69 73 74 72 79 20 6b 65  open registry ke
34180 79 3a 20 7b 30 7d 5c 5c 7b 31 7d 22 2c 0d 0a 20  y: {0}\\{1}",.. 
34190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
341a0 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20         rootKey, 
341b0 6b 65 79 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20  keyName);....   
341c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
341d0 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
341e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
341f0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
34200 20 20 20 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b       using (Mock
34210 52 65 67 69 73 74 72 79 4b 65 79 20 73 75 62 4b  RegistryKey subK
34220 65 79 20 3d 20 52 65 67 69 73 74 72 79 48 65 6c  ey = RegistryHel
34230 70 65 72 2e 4f 70 65 6e 53 75 62 4b 65 79 28 0d  per.OpenSubKey(.
34240 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
34250 20 20 20 20 20 20 20 20 20 6b 65 79 2c 20 22 44           key, "D
34260 61 74 61 50 72 6f 76 69 64 65 72 73 22 2c 20 74  ataProviders", t
34270 72 75 65 2c 20 77 68 61 74 49 66 2c 20 76 65 72  rue, whatIf, ver
34280 62 6f 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20  bose))..        
34290 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
342a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
342b0 66 20 28 73 75 62 4b 65 79 20 3d 3d 20 6e 75 6c  f (subKey == nul
342c0 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
342d0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
342e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
342f0 20 20 20 65 72 72 6f 72 20 3d 20 53 74 72 69 6e     error = Strin
34300 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
34310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34320 20 20 20 20 20 20 20 22 63 6f 75 6c 64 20 6e 6f         "could no
34330 74 20 6f 70 65 6e 20 72 65 67 69 73 74 72 79 20  t open registry 
34340 6b 65 79 3a 20 7b 30 7d 5c 5c 44 61 74 61 50 72  key: {0}\\DataPr
34350 6f 76 69 64 65 72 73 22 2c 0d 0a 20 20 20 20 20  oviders",..     
34360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34370 20 20 20 20 20 20 20 6b 65 79 29 3b 0d 0a 0d 0a         key);....
34380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34390 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
343a0 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alse;..         
343b0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
343c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
343d0 20 20 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52      using (MockR
343e0 65 67 69 73 74 72 79 4b 65 79 20 64 61 74 61 50  egistryKey dataP
343f0 72 6f 76 69 64 65 72 4b 65 79 20 3d 0d 0a 20 20  roviderKey =..  
34400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34410 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74            Regist
34420 72 79 48 65 6c 70 65 72 2e 43 72 65 61 74 65 53  ryHelper.CreateS
34430 75 62 4b 65 79 28 73 75 62 4b 65 79 2c 0d 0a 20  ubKey(subKey,.. 
34440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34450 20 20 20 20 20 20 20 20 20 20 20 70 61 63 6b 61             packa
34460 67 65 2e 44 61 74 61 50 72 6f 76 69 64 65 72 49  ge.DataProviderI
34470 64 2e 54 6f 53 74 72 69 6e 67 28 56 73 49 64 46  d.ToString(VsIdF
34480 6f 72 6d 61 74 29 2c 0d 0a 20 20 20 20 20 20 20  ormat),..       
34490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
344a0 20 20 20 20 20 77 68 61 74 49 66 2c 20 76 65 72       whatIf, ver
344b0 62 6f 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20  bose))..        
344c0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
344d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
344e0 20 20 20 20 20 20 20 69 66 20 28 64 61 74 61 50         if (dataP
344f0 72 6f 76 69 64 65 72 4b 65 79 20 3d 3d 20 6e 75  roviderKey == nu
34500 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
34510 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
34520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34530 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
34540 72 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61  r = String.Forma
34550 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
34560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34570 20 20 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20 63      "could not c
34580 72 65 61 74 65 20 72 65 67 69 73 74 72 79 20 6b  reate registry k
34590 65 79 3a 20 7b 30 7d 5c 5c 7b 31 7d 22 2c 20 6b  ey: {0}\\{1}", k
345a0 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ey,..           
345b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
345c0 20 20 20 20 20 70 61 63 6b 61 67 65 2e 44 61 74       package.Dat
345d0 61 50 72 6f 76 69 64 65 72 49 64 2e 54 6f 53 74  aProviderId.ToSt
345e0 72 69 6e 67 28 56 73 49 64 46 6f 72 6d 61 74 29  ring(VsIdFormat)
345f0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
34600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34610 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
34620 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
34630 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
34640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34650 20 20 20 20 20 20 52 65 67 69 73 74 72 79 48 65        RegistryHe
34660 6c 70 65 72 2e 53 65 74 56 61 6c 75 65 28 0d 0a  lper.SetValue(..
34670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34680 20 20 20 20 20 20 20 20 20 20 20 20 64 61 74 61              data
34690 50 72 6f 76 69 64 65 72 4b 65 79 2c 20 6e 75 6c  ProviderKey, nul
346a0 6c 2c 20 44 65 73 63 72 69 70 74 69 6f 6e 2c 20  l, Description, 
346b0 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20  whatIf,..       
346c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
346d0 20 20 20 20 20 76 65 72 62 6f 73 65 29 3b 0d 0a       verbose);..
346e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
346f0 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
34700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34710 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 54        // NOTE: T
34720 68 69 73 20 76 61 6c 75 65 20 69 73 20 6e 65 77  his value is new
34730 20 61 73 20 6f 66 20 31 2e 30 2e 38 33 2e 30 2e   as of 1.0.83.0.
34740 20 20 48 6f 77 65 76 65 72 2c 0d 0a 20 20 20 20    However,..    
34750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34760 20 20 20 20 2f 2f 20 20 20 20 20 20 20 69 74 20      //       it 
34770 73 68 6f 75 6c 64 20 6f 6e 6c 79 20 62 65 20 73  should only be s
34780 65 74 20 69 66 20 74 68 65 20 70 61 63 6b 61 67  et if the packag
34790 65 20 61 73 73 65 6d 62 6c 79 0d 0a 20 20 20 20  e assembly..    
347a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
347b0 20 20 20 20 2f 2f 20 20 20 20 20 20 20 61 6e 64      //       and
347c0 20 61 6c 6c 20 74 68 65 20 61 73 73 65 6d 62 6c   all the assembl
347d0 69 65 73 20 69 74 20 72 65 66 65 72 73 20 74 6f  ies it refers to
347e0 20 61 72 65 20 62 65 69 6e 67 0d 0a 20 20 20 20   are being..    
347f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34800 20 20 20 20 2f 2f 20 20 20 20 20 20 20 70 6c 61      //       pla
34810 63 65 64 20 69 6e 74 6f 20 74 68 65 20 67 6c 6f  ced into the glo
34820 62 61 6c 20 61 73 73 65 6d 62 6c 79 20 63 61 63  bal assembly cac
34830 68 65 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  he...           
34840 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
34850 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
34860 20 20 20 20 20 20 20 20 20 69 66 20 28 70 61 63           if (pac
34870 6b 61 67 65 2e 47 6c 6f 62 61 6c 41 73 73 65 6d  kage.GlobalAssem
34880 62 6c 79 43 61 63 68 65 29 0d 0a 20 20 20 20 20  blyCache)..     
34890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
348a0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
348b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
348c0 20 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72    RegistryHelper
348d0 2e 53 65 74 56 61 6c 75 65 28 0d 0a 20 20 20 20  .SetValue(..    
348e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
348f0 20 20 20 20 20 20 20 20 20 20 20 20 64 61 74 61              data
34900 50 72 6f 76 69 64 65 72 4b 65 79 2c 20 22 41 73  ProviderKey, "As
34910 73 65 6d 62 6c 79 22 2c 0d 0a 20 20 20 20 20 20  sembly",..      
34920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34930 20 20 20 20 20 20 20 20 20 20 70 61 63 6b 61 67            packag
34940 65 2e 44 65 73 69 67 6e 65 72 41 73 73 65 6d 62  e.DesignerAssemb
34950 6c 79 4e 61 6d 65 2e 54 6f 53 74 72 69 6e 67 28  lyName.ToString(
34960 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
34970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34980 20 20 20 20 77 68 61 74 49 66 2c 20 76 65 72 62      whatIf, verb
34990 6f 73 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ose);..         
349a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
349b0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
349c0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
349d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
349e0 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a          // NOTE:
349f0 20 54 68 69 73 20 76 61 6c 75 65 20 69 73 20 6e   This value is n
34a00 65 77 20 61 73 20 6f 66 20 31 2e 30 2e 38 33 2e  ew as of 1.0.83.
34a10 30 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  0...            
34a20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
34a30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34a40 20 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79          Registry
34a50 48 65 6c 70 65 72 2e 53 65 74 56 61 6c 75 65 28  Helper.SetValue(
34a60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
34a70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 61                da
34a80 74 61 50 72 6f 76 69 64 65 72 4b 65 79 2c 20 22  taProviderKey, "
34a90 41 73 73 6f 63 69 61 74 65 64 53 6f 75 72 63 65  AssociatedSource
34aa0 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
34ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34ac0 70 61 63 6b 61 67 65 2e 44 61 74 61 53 6f 75 72  package.DataSour
34ad0 63 65 49 64 2e 54 6f 53 74 72 69 6e 67 28 56 73  ceId.ToString(Vs
34ae0 49 64 46 6f 72 6d 61 74 29 2c 0d 0a 20 20 20 20  IdFormat),..    
34af0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34b00 20 20 20 20 20 20 20 20 77 68 61 74 49 66 2c 20          whatIf, 
34b10 76 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20  verbose);....   
34b20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34b30 20 20 20 20 20 52 65 67 69 73 74 72 79 48 65 6c       RegistryHel
34b40 70 65 72 2e 53 65 74 56 61 6c 75 65 28 0d 0a 20  per.SetValue(.. 
34b50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34b60 20 20 20 20 20 20 20 20 20 20 20 64 61 74 61 50             dataP
34b70 72 6f 76 69 64 65 72 4b 65 79 2c 20 22 49 6e 76  roviderKey, "Inv
34b80 61 72 69 61 6e 74 4e 61 6d 65 22 2c 0d 0a 20 20  ariantName",..  
34b90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34ba0 20 20 20 20 20 20 20 20 20 20 70 61 63 6b 61 67            packag
34bb0 65 2e 49 6e 76 61 72 69 61 6e 74 4e 61 6d 65 2c  e.InvariantName,
34bc0 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65   whatIf, verbose
34bd0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
34be0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65                Re
34bf0 67 69 73 74 72 79 48 65 6c 70 65 72 2e 53 65 74  gistryHelper.Set
34c00 56 61 6c 75 65 28 0d 0a 20 20 20 20 20 20 20 20  Value(..        
34c10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34c20 20 20 20 20 64 61 74 61 50 72 6f 76 69 64 65 72      dataProvider
34c30 4b 65 79 2c 20 22 54 65 63 68 6e 6f 6c 6f 67 79  Key, "Technology
34c40 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
34c50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34c60 70 61 63 6b 61 67 65 2e 41 64 6f 4e 65 74 54 65  package.AdoNetTe
34c70 63 68 6e 6f 6c 6f 67 79 49 64 2e 54 6f 53 74 72  chnologyId.ToStr
34c80 69 6e 67 28 56 73 49 64 46 6f 72 6d 61 74 29 2c  ing(VsIdFormat),
34c90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
34ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 77 68                wh
34cb0 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 3b 0d  atIf, verbose);.
34cc0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
34cd0 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73             Regis
34ce0 74 72 79 48 65 6c 70 65 72 2e 53 65 74 56 61 6c  tryHelper.SetVal
34cf0 75 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue(..           
34d00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34d10 20 64 61 74 61 50 72 6f 76 69 64 65 72 4b 65 79   dataProviderKey
34d20 2c 20 22 43 6f 64 65 42 61 73 65 22 2c 20 66 69  , "CodeBase", fi
34d30 6c 65 4e 61 6d 65 2c 20 77 68 61 74 49 66 2c 0d  leName, whatIf,.
34d40 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
34d50 20 20 20 20 20 20 20 20 20 20 20 20 20 76 65 72               ver
34d60 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  bose);....      
34d70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34d80 20 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72    RegistryHelper
34d90 2e 53 65 74 56 61 6c 75 65 28 0d 0a 20 20 20 20  .SetValue(..    
34da0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34db0 20 20 20 20 20 20 20 20 64 61 74 61 50 72 6f 76          dataProv
34dc0 69 64 65 72 4b 65 79 2c 20 22 46 61 63 74 6f 72  iderKey, "Factor
34dd0 79 53 65 72 76 69 63 65 22 2c 0d 0a 20 20 20 20  yService",..    
34de0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34df0 20 20 20 20 20 20 20 20 70 61 63 6b 61 67 65 2e          package.
34e00 53 65 72 76 69 63 65 49 64 2e 54 6f 53 74 72 69  ServiceId.ToStri
34e10 6e 67 28 56 73 49 64 46 6f 72 6d 61 74 29 2c 20  ng(VsIdFormat), 
34e20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20  whatIf,..       
34e30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34e40 20 20 20 20 20 76 65 72 62 6f 73 65 29 3b 0d 0a       verbose);..
34e50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
34e60 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74            Regist
34e70 72 79 48 65 6c 70 65 72 2e 43 72 65 61 74 65 53  ryHelper.CreateS
34e80 75 62 4b 65 79 28 64 61 74 61 50 72 6f 76 69 64  ubKey(dataProvid
34e90 65 72 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20  erKey,..        
34ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34eb0 20 20 20 20 22 53 75 70 70 6f 72 74 65 64 4f 62      "SupportedOb
34ec0 6a 65 63 74 73 5c 5c 44 61 74 61 43 6f 6e 6e 65  jects\\DataConne
34ed0 63 74 69 6f 6e 55 49 43 6f 6e 74 72 6f 6c 22 2c  ctionUIControl",
34ee0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
34ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 77 68                wh
34f00 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 3b 0d  atIf, verbose);.
34f10 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
34f20 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73             Regis
34f30 74 72 79 48 65 6c 70 65 72 2e 43 72 65 61 74 65  tryHelper.Create
34f40 53 75 62 4b 65 79 28 64 61 74 61 50 72 6f 76 69  SubKey(dataProvi
34f50 64 65 72 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20  derKey,..       
34f60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34f70 20 20 20 20 20 22 53 75 70 70 6f 72 74 65 64 4f       "SupportedO
34f80 62 6a 65 63 74 73 5c 5c 44 61 74 61 43 6f 6e 6e  bjects\\DataConn
34f90 65 63 74 69 6f 6e 50 72 6f 70 65 72 74 69 65 73  ectionProperties
34fa0 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
34fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34fc0 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29  whatIf, verbose)
34fd0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
34fe0 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67               Reg
34ff0 69 73 74 72 79 48 65 6c 70 65 72 2e 43 72 65 61  istryHelper.Crea
35000 74 65 53 75 62 4b 65 79 28 64 61 74 61 50 72 6f  teSubKey(dataPro
35010 76 69 64 65 72 4b 65 79 2c 0d 0a 20 20 20 20 20  viderKey,..     
35020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35030 20 20 20 20 20 20 20 22 53 75 70 70 6f 72 74 65         "Supporte
35040 64 4f 62 6a 65 63 74 73 5c 5c 44 61 74 61 43 6f  dObjects\\DataCo
35050 6e 6e 65 63 74 69 6f 6e 53 75 70 70 6f 72 74 22  nnectionSupport"
35060 2c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20  , whatIf,..     
35070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35080 20 20 20 20 20 20 20 76 65 72 62 6f 73 65 29 3b         verbose);
35090 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
350a0 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69              Regi
350b0 73 74 72 79 48 65 6c 70 65 72 2e 43 72 65 61 74  stryHelper.Creat
350c0 65 53 75 62 4b 65 79 28 64 61 74 61 50 72 6f 76  eSubKey(dataProv
350d0 69 64 65 72 4b 65 79 2c 0d 0a 20 20 20 20 20 20  iderKey,..      
350e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
350f0 20 20 20 20 20 20 22 53 75 70 70 6f 72 74 65 64        "Supported
35100 4f 62 6a 65 63 74 73 5c 5c 44 61 74 61 4f 62 6a  Objects\\DataObj
35110 65 63 74 53 75 70 70 6f 72 74 22 2c 20 77 68 61  ectSupport", wha
35120 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  tIf,..          
35130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35140 20 20 76 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20    verbose);.... 
35150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35160 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79 48         RegistryH
35170 65 6c 70 65 72 2e 43 72 65 61 74 65 53 75 62 4b  elper.CreateSubK
35180 65 79 28 64 61 74 61 50 72 6f 76 69 64 65 72 4b  ey(dataProviderK
35190 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ey,..           
351a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
351b0 20 22 53 75 70 70 6f 72 74 65 64 4f 62 6a 65 63   "SupportedObjec
351c0 74 73 5c 5c 44 61 74 61 56 69 65 77 53 75 70 70  ts\\DataViewSupp
351d0 6f 72 74 22 2c 20 77 68 61 74 49 66 2c 0d 0a 20  ort", whatIf,.. 
351e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
351f0 20 20 20 20 20 20 20 20 20 20 20 76 65 72 62 6f             verbo
35200 73 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  se);..          
35210 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
35220 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
35230 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
35240 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
35250 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20 20  urn true;..     
35260 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
35270 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35280 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35290 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
352a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
352b0 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
352c0 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69     private stati
352d0 63 20 62 6f 6f 6c 20 52 65 6d 6f 76 65 56 73 44  c bool RemoveVsD
352e0 61 74 61 50 72 6f 76 69 64 65 72 28 0d 0a 20 20  ataProvider(..  
352f0 20 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65            MockRe
35300 67 69 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65  gistryKey rootKe
35310 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y,..            
35320 56 65 72 73 69 6f 6e 20 76 73 56 65 72 73 69 6f  Version vsVersio
35330 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n,..            
35340 73 74 72 69 6e 67 20 73 75 66 66 69 78 2c 0d 0a  string suffix,..
35350 20 20 20 20 20 20 20 20 20 20 20 20 50 61 63 6b              Pack
35360 61 67 65 20 70 61 63 6b 61 67 65 2c 0d 0a 20 20  age package,..  
35370 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 70            bool p
35380 65 72 55 73 65 72 2c 0d 0a 20 20 20 20 20 20 20  erUser,..       
35390 20 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34 2c       bool wow64,
353a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f  ..            bo
353b0 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20  ol whatIf,..    
353c0 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65 72          bool ver
353d0 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  bose,..         
353e0 20 20 20 72 65 66 20 73 74 72 69 6e 67 20 65 72     ref string er
353f0 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ror..           
35400 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20   )..        {.. 
35410 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76             if (v
35420 73 56 65 72 73 69 6f 6e 20 3d 3d 20 6e 75 6c 6c  sVersion == null
35430 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
35440 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
35450 20 20 65 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c    error = "inval
35460 69 64 20 56 53 20 76 65 72 73 69 6f 6e 22 3b 0d  id VS version";.
35470 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
35480 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
35490 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
354a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72  .            str
354b0 69 6e 67 20 6b 65 79 4e 61 6d 65 20 3d 20 47 65  ing keyName = Ge
354c0 74 56 73 4b 65 79 4e 61 6d 65 28 76 73 56 65 72  tVsKeyName(vsVer
354d0 73 69 6f 6e 2c 20 73 75 66 66 69 78 2c 20 70 65  sion, suffix, pe
354e0 72 55 73 65 72 2c 20 77 6f 77 36 34 29 3b 0d 0a  rUser, wow64);..
354f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 75 73  ..            us
35500 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73 74 72  ing (MockRegistr
35510 79 4b 65 79 20 6b 65 79 20 3d 20 52 65 67 69 73  yKey key = Regis
35520 74 72 79 48 65 6c 70 65 72 2e 4f 70 65 6e 53 75  tryHelper.OpenSu
35530 62 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20  bKey(..         
35540 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b             rootK
35550 65 79 2c 20 6b 65 79 4e 61 6d 65 2c 20 66 61 6c  ey, keyName, fal
35560 73 65 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62  se, whatIf, verb
35570 6f 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ose))..         
35580 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
35590 20 20 20 20 20 20 69 66 20 28 6b 65 79 20 3d 3d        if (key ==
355a0 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
355b0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
355c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
355d0 72 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46 6f  rror = String.Fo
355e0 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
355f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
35600 63 6f 75 6c 64 20 6e 6f 74 20 6f 70 65 6e 20 72  could not open r
35610 65 67 69 73 74 72 79 20 6b 65 79 3a 20 7b 30 7d  egistry key: {0}
35620 5c 5c 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20  \\{1}",..       
35630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35640 20 72 6f 6f 74 4b 65 79 2c 20 6b 65 79 4e 61 6d   rootKey, keyNam
35650 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  e);....         
35660 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
35670 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  n false;..      
35680 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
35690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 75                 u
356a0 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73 74  sing (MockRegist
356b0 72 79 4b 65 79 20 73 75 62 4b 65 79 20 3d 20 52  ryKey subKey = R
356c0 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 4f 70  egistryHelper.Op
356d0 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20  enSubKey(..     
356e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
356f0 20 20 20 6b 65 79 2c 20 22 44 61 74 61 50 72 6f     key, "DataPro
35700 76 69 64 65 72 73 22 2c 20 74 72 75 65 2c 20 77  viders", true, w
35710 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 29  hatIf, verbose))
35720 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
35730 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
35740 20 20 20 20 20 20 20 20 20 69 66 20 28 73 75 62           if (sub
35750 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  Key == null)..  
35760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35770 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
35780 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
35790 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d  or = String.Form
357a0 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
357b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
357c0 20 22 63 6f 75 6c 64 20 6e 6f 74 20 6f 70 65 6e   "could not open
357d0 20 72 65 67 69 73 74 72 79 20 6b 65 79 3a 20 7b   registry key: {
357e0 30 7d 5c 5c 44 61 74 61 50 72 6f 76 69 64 65 72  0}\\DataProvider
357f0 73 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s",..           
35800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35810 20 6b 65 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20   key);....      
35820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35830 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
35840 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
35850 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
35860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65                Re
35870 67 69 73 74 72 79 48 65 6c 70 65 72 2e 44 65 6c  gistryHelper.Del
35880 65 74 65 53 75 62 4b 65 79 54 72 65 65 28 0d 0a  eteSubKeyTree(..
35890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
358a0 20 20 20 20 20 20 20 20 73 75 62 4b 65 79 2c 20          subKey, 
358b0 70 61 63 6b 61 67 65 2e 44 61 74 61 50 72 6f 76  package.DataProv
358c0 69 64 65 72 49 64 2e 54 6f 53 74 72 69 6e 67 28  iderId.ToString(
358d0 56 73 49 64 46 6f 72 6d 61 74 29 2c 0d 0a 20 20  VsIdFormat),..  
358e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
358f0 20 20 20 20 20 20 77 68 61 74 49 66 2c 20 76 65        whatIf, ve
35900 72 62 6f 73 65 29 3b 0d 0a 20 20 20 20 20 20 20  rbose);..       
35910 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
35920 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
35930 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
35940 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d  true;..        }
35950 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
35960 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35970 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35980 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35990 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
359a0 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70  ///....        p
359b0 72 69 76 61 74 65 20 73 74 61 74 69 63 20 62 6f  rivate static bo
359c0 6f 6c 20 50 72 6f 63 65 73 73 56 73 44 61 74 61  ol ProcessVsData
359d0 50 72 6f 76 69 64 65 72 28 0d 0a 20 20 20 20 20  Provider(..     
359e0 20 20 20 20 20 20 20 4d 6f 63 6b 52 65 67 69 73         MockRegis
359f0 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79 2c 0d  tryKey rootKey,.
35a00 0a 20 20 20 20 20 20 20 20 20 20 20 20 56 65 72  .            Ver
35a10 73 69 6f 6e 20 76 73 56 65 72 73 69 6f 6e 2c 0d  sion vsVersion,.
35a20 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72  .            str
35a30 69 6e 67 20 73 75 66 66 69 78 2c 0d 0a 20 20 20  ing suffix,..   
35a40 20 20 20 20 20 20 20 20 20 50 61 63 6b 61 67 65           Package
35a50 20 70 61 63 6b 61 67 65 2c 0d 0a 20 20 20 20 20   package,..     
35a60 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 64 69         string di
35a70 72 65 63 74 6f 72 79 2c 0d 0a 20 20 20 20 20 20  rectory,..      
35a80 20 20 20 20 20 20 6f 62 6a 65 63 74 20 63 6c 69        object cli
35a90 65 6e 74 44 61 74 61 2c 0d 0a 20 20 20 20 20 20  entData,..      
35aa0 20 20 20 20 20 20 62 6f 6f 6c 20 70 65 72 55 73        bool perUs
35ab0 65 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  er,..           
35ac0 20 62 6f 6f 6c 20 77 6f 77 36 34 2c 0d 0a 20 20   bool wow64,..  
35ad0 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 74            bool t
35ae0 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 2c 0d 0a  hrowOnMissing,..
35af0 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
35b00 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20   whatIf,..      
35b10 20 20 20 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f        bool verbo
35b20 73 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se,..           
35b30 20 72 65 66 20 73 74 72 69 6e 67 20 65 72 72 6f   ref string erro
35b40 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29  r..            )
35b50 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
35b60 20 20 20 20 20 20 20 20 20 41 6e 79 50 61 69 72           AnyPair
35b70 3c 73 74 72 69 6e 67 2c 20 62 6f 6f 6c 3e 20 70  <string, bool> p
35b80 61 69 72 20 3d 20 63 6c 69 65 6e 74 44 61 74 61  air = clientData
35b90 20 61 73 20 41 6e 79 50 61 69 72 3c 73 74 72 69   as AnyPair<stri
35ba0 6e 67 2c 20 62 6f 6f 6c 3e 3b 0d 0a 0d 0a 20 20  ng, bool>;....  
35bb0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 70 61            if (pa
35bc0 69 72 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ir == null)..   
35bd0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
35be0 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
35bf0 72 20 3d 20 22 69 6e 76 61 6c 69 64 20 56 53 20  r = "invalid VS 
35c00 63 61 6c 6c 62 61 63 6b 20 64 61 74 61 22 3b 0d  callback data";.
35c10 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
35c20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
35c30 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
35c40 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
35c50 28 70 61 69 72 2e 59 29 0d 0a 20 20 20 20 20 20  (pair.Y)..      
35c60 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
35c70 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
35c80 41 64 64 56 73 44 61 74 61 50 72 6f 76 69 64 65  AddVsDataProvide
35c90 72 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  r(..            
35ca0 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c          rootKey,
35cb0 20 76 73 56 65 72 73 69 6f 6e 2c 20 73 75 66 66   vsVersion, suff
35cc0 69 78 2c 20 70 61 63 6b 61 67 65 2c 20 70 61 69  ix, package, pai
35cd0 72 2e 58 2c 20 70 65 72 55 73 65 72 2c 0d 0a 20  r.X, perUser,.. 
35ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35cf0 20 20 20 77 6f 77 36 34 2c 20 77 68 61 74 49 66     wow64, whatIf
35d00 2c 20 76 65 72 62 6f 73 65 2c 20 72 65 66 20 65  , verbose, ref e
35d10 72 72 6f 72 29 3b 0d 0a 20 20 20 20 20 20 20 20  rror);..        
35d20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
35d30 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20     else..       
35d40 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
35d50 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 52          return R
35d60 65 6d 6f 76 65 56 73 44 61 74 61 50 72 6f 76 69  emoveVsDataProvi
35d70 64 65 72 28 0d 0a 20 20 20 20 20 20 20 20 20 20  der(..          
35d80 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65            rootKe
35d90 79 2c 20 76 73 56 65 72 73 69 6f 6e 2c 20 73 75  y, vsVersion, su
35da0 66 66 69 78 2c 20 70 61 63 6b 61 67 65 2c 20 70  ffix, package, p
35db0 65 72 55 73 65 72 2c 20 77 6f 77 36 34 2c 0d 0a  erUser, wow64,..
35dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35dd0 20 20 20 20 77 68 61 74 49 66 2c 20 76 65 72 62      whatIf, verb
35de0 6f 73 65 2c 20 72 65 66 20 65 72 72 6f 72 29 3b  ose, ref error);
35df0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
35e00 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..    
35e10 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
35e20 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
35e30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35e40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35e50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35e60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35e70 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65  /....        #re
35e80 67 69 6f 6e 20 56 69 73 75 61 6c 20 53 74 75 64  gion Visual Stud
35e90 69 6f 20 50 61 63 6b 61 67 65 20 48 61 6e 64 6c  io Package Handl
35ea0 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 70 72 69  ing..        pri
35eb0 76 61 74 65 20 73 74 61 74 69 63 20 76 6f 69 64  vate static void
35ec0 20 49 6e 69 74 69 61 6c 69 7a 65 56 73 50 61 63   InitializeVsPac
35ed0 6b 61 67 65 28 0d 0a 20 20 20 20 20 20 20 20 20  kage(..         
35ee0 20 20 20 73 74 72 69 6e 67 20 69 6e 76 61 72 69     string invari
35ef0 61 6e 74 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20  antName,..      
35f00 20 20 20 20 20 20 73 74 72 69 6e 67 20 66 61 63        string fac
35f10 74 6f 72 79 54 79 70 65 4e 61 6d 65 2c 0d 0a 20  toryTypeName,.. 
35f20 20 20 20 20 20 20 20 20 20 20 20 41 73 73 65 6d             Assem
35f30 62 6c 79 4e 61 6d 65 20 70 72 6f 76 69 64 65 72  blyName provider
35f40 41 73 73 65 6d 62 6c 79 4e 61 6d 65 2c 0d 0a 20  AssemblyName,.. 
35f50 20 20 20 20 20 20 20 20 20 20 20 41 73 73 65 6d             Assem
35f60 62 6c 79 4e 61 6d 65 20 64 65 73 69 67 6e 65 72  blyName designer
35f70 41 73 73 65 6d 62 6c 79 4e 61 6d 65 2c 0d 0a 20  AssemblyName,.. 
35f80 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
35f90 67 6c 6f 62 61 6c 41 73 73 65 6d 62 6c 79 43 61  globalAssemblyCa
35fa0 63 68 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  che,..          
35fb0 20 20 72 65 66 20 50 61 63 6b 61 67 65 20 70 61    ref Package pa
35fc0 63 6b 61 67 65 0d 0a 20 20 20 20 20 20 20 20 20  ckage..         
35fd0 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d     )..        {.
35fe0 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
35ff0 28 70 61 63 6b 61 67 65 20 3d 3d 20 6e 75 6c 6c  (package == null
36000 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
36010 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
36020 20 20 70 61 63 6b 61 67 65 20 3d 20 6e 65 77 20    package = new 
36030 50 61 63 6b 61 67 65 28 29 3b 0d 0a 0d 0a 20 20  Package();....  
36040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70 61                pa
36050 63 6b 61 67 65 2e 49 6e 76 61 72 69 61 6e 74 4e  ckage.InvariantN
36060 61 6d 65 20 3d 20 69 6e 76 61 72 69 61 6e 74 4e  ame = invariantN
36070 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ame;..          
36080 20 20 20 20 20 20 70 61 63 6b 61 67 65 2e 46 61        package.Fa
36090 63 74 6f 72 79 54 79 70 65 4e 61 6d 65 20 3d 20  ctoryTypeName = 
360a0 66 61 63 74 6f 72 79 54 79 70 65 4e 61 6d 65 3b  factoryTypeName;
360b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
360c0 20 20 70 61 63 6b 61 67 65 2e 50 72 6f 76 69 64    package.Provid
360d0 65 72 41 73 73 65 6d 62 6c 79 4e 61 6d 65 20 3d  erAssemblyName =
360e0 20 70 72 6f 76 69 64 65 72 41 73 73 65 6d 62 6c   providerAssembl
360f0 79 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20  yName;..        
36100 20 20 20 20 20 20 20 20 70 61 63 6b 61 67 65 2e          package.
36110 44 65 73 69 67 6e 65 72 41 73 73 65 6d 62 6c 79  DesignerAssembly
36120 4e 61 6d 65 20 3d 20 64 65 73 69 67 6e 65 72 41  Name = designerA
36130 73 73 65 6d 62 6c 79 4e 61 6d 65 3b 0d 0a 20 20  ssemblyName;..  
36140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70 61                pa
36150 63 6b 61 67 65 2e 47 6c 6f 62 61 6c 41 73 73 65  ckage.GlobalAsse
36160 6d 62 6c 79 43 61 63 68 65 20 3d 20 67 6c 6f 62  mblyCache = glob
36170 61 6c 41 73 73 65 6d 62 6c 79 43 61 63 68 65 3b  alAssemblyCache;
36180 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
36190 20 20 20 20 70 61 63 6b 61 67 65 2e 41 64 6f 4e      package.AdoN
361a0 65 74 54 65 63 68 6e 6f 6c 6f 67 79 49 64 20 3d  etTechnologyId =
361b0 20 6e 65 77 20 47 75 69 64 28 0d 0a 20 20 20 20   new Guid(..    
361c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
361d0 22 37 37 41 42 39 41 39 44 2d 37 38 42 39 2d 34  "77AB9A9D-78B9-4
361e0 42 41 37 2d 39 31 41 43 2d 38 37 33 46 35 33 33  BA7-91AC-873F533
361f0 38 46 31 44 32 22 29 3b 0d 0a 0d 0a 20 20 20 20  8F1D2");....    
36200 20 20 20 20 20 20 20 20 20 20 20 20 70 61 63 6b              pack
36210 61 67 65 2e 50 61 63 6b 61 67 65 49 64 20 3d 20  age.PackageId = 
36220 6e 65 77 20 47 75 69 64 28 0d 0a 20 20 20 20 20  new Guid(..     
36230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
36240 44 43 42 45 36 43 38 44 2d 30 45 35 37 2d 34 30  DCBE6C8D-0E57-40
36250 39 39 2d 41 31 38 33 2d 39 38 46 46 37 34 43 36  99-A183-98FF74C6
36260 34 44 39 43 22 29 3b 0d 0a 0d 0a 20 20 20 20 20  4D9C");....     
36270 20 20 20 20 20 20 20 20 20 20 20 70 61 63 6b 61             packa
36280 67 65 2e 53 65 72 76 69 63 65 49 64 20 3d 20 6e  ge.ServiceId = n
36290 65 77 20 47 75 69 64 28 0d 0a 20 20 20 20 20 20  ew Guid(..      
362a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 44                "D
362b0 43 42 45 36 43 38 44 2d 30 45 35 37 2d 34 30 39  CBE6C8D-0E57-409
362c0 39 2d 41 31 38 33 2d 39 38 46 46 37 34 43 36 34  9-A183-98FF74C64
362d0 44 39 44 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  D9D");....      
362e0 20 20 20 20 20 20 20 20 20 20 70 61 63 6b 61 67            packag
362f0 65 2e 44 61 74 61 53 6f 75 72 63 65 49 64 20 3d  e.DataSourceId =
36300 20 6e 65 77 20 47 75 69 64 28 0d 0a 20 20 20 20   new Guid(..    
36310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36320 22 30 45 42 41 41 42 36 45 2d 43 41 38 30 2d 34  "0EBAAB6E-CA80-4
36330 42 34 41 2d 38 44 44 46 2d 43 42 45 36 42 46 30  B4A-8DDF-CBE6BF0
36340 35 38 43 37 31 22 29 3b 0d 0a 0d 0a 20 20 20 20  58C71");....    
36350 20 20 20 20 20 20 20 20 20 20 20 20 70 61 63 6b              pack
36360 61 67 65 2e 44 61 74 61 50 72 6f 76 69 64 65 72  age.DataProvider
36370 49 64 20 3d 20 6e 65 77 20 47 75 69 64 28 0d 0a  Id = new Guid(..
36380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36390 20 20 20 20 22 30 45 42 41 41 42 36 45 2d 43 41      "0EBAAB6E-CA
363a0 38 30 2d 34 42 34 41 2d 38 44 44 46 2d 43 42 45  80-4B4A-8DDF-CBE
363b0 36 42 46 30 35 38 43 37 30 22 29 3b 0d 0a 20 20  6BF058C70");..  
363c0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
363d0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
363e0 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
363f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36400 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36410 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36420 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
36430 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61       private sta
36440 74 69 63 20 62 6f 6f 6c 20 41 64 64 56 73 50 61  tic bool AddVsPa
36450 63 6b 61 67 65 28 0d 0a 20 20 20 20 20 20 20 20  ckage(..        
36460 20 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79      MockRegistry
36470 4b 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20  Key rootKey,..  
36480 20 20 20 20 20 20 20 20 20 20 56 65 72 73 69 6f            Versio
36490 6e 20 76 73 56 65 72 73 69 6f 6e 2c 0d 0a 20 20  n vsVersion,..  
364a0 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
364b0 20 73 75 66 66 69 78 2c 0d 0a 20 20 20 20 20 20   suffix,..      
364c0 20 20 20 20 20 20 50 61 63 6b 61 67 65 20 70 61        Package pa
364d0 63 6b 61 67 65 2c 0d 0a 20 20 20 20 20 20 20 20  ckage,..        
364e0 20 20 20 20 73 74 72 69 6e 67 20 66 69 6c 65 4e      string fileN
364f0 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ame,..          
36500 20 20 62 6f 6f 6c 20 70 65 72 55 73 65 72 2c 0d    bool perUser,.
36510 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f  .            boo
36520 6c 20 77 6f 77 36 34 2c 0d 0a 20 20 20 20 20 20  l wow64,..      
36530 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49        bool whatI
36540 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  f,..            
36550 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c 0d 0a 20  bool verbose,.. 
36560 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20 73             ref s
36570 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20  tring error..   
36580 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
36590 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
365a0 20 20 20 69 66 20 28 76 73 56 65 72 73 69 6f 6e     if (vsVersion
365b0 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
365c0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
365d0 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20            error 
365e0 3d 20 22 69 6e 76 61 6c 69 64 20 56 53 20 76 65  = "invalid VS ve
365f0 72 73 69 6f 6e 22 3b 0d 0a 20 20 20 20 20 20 20  rsion";..       
36600 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
36610 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20  false;..        
36620 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
36630 20 20 20 20 20 69 66 20 28 70 61 63 6b 61 67 65       if (package
36640 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
36650 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
36660 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20            error 
36670 3d 20 22 69 6e 76 61 6c 69 64 20 56 53 20 70 61  = "invalid VS pa
36680 63 6b 61 67 65 22 3b 0d 0a 20 20 20 20 20 20 20  ckage";..       
36690 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
366a0 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20  false;..        
366b0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
366c0 20 20 20 20 20 73 74 72 69 6e 67 20 6b 65 79 4e       string keyN
366d0 61 6d 65 20 3d 20 47 65 74 56 73 4b 65 79 4e 61  ame = GetVsKeyNa
366e0 6d 65 28 76 73 56 65 72 73 69 6f 6e 2c 20 73 75  me(vsVersion, su
366f0 66 66 69 78 2c 20 70 65 72 55 73 65 72 2c 20 77  ffix, perUser, w
36700 6f 77 36 34 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  ow64);....      
36710 20 20 20 20 20 20 75 73 69 6e 67 20 28 4d 6f 63        using (Moc
36720 6b 52 65 67 69 73 74 72 79 4b 65 79 20 6b 65 79  kRegistryKey key
36730 20 3d 20 52 65 67 69 73 74 72 79 48 65 6c 70 65   = RegistryHelpe
36740 72 2e 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20  r.OpenSubKey(.. 
36750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36760 20 20 20 72 6f 6f 74 4b 65 79 2c 20 6b 65 79 4e     rootKey, keyN
36770 61 6d 65 2c 20 66 61 6c 73 65 2c 20 77 68 61 74  ame, false, what
36780 49 66 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a 20  If, verbose)).. 
36790 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
367a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
367b0 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a   (key == null)..
367c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
367d0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
367e0 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 53         error = S
367f0 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
36800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36810 20 20 20 20 20 20 20 22 63 6f 75 6c 64 20 6e 6f         "could no
36820 74 20 6f 70 65 6e 20 72 65 67 69 73 74 72 79 20  t open registry 
36830 6b 65 79 3a 20 7b 30 7d 5c 5c 7b 31 7d 22 2c 0d  key: {0}\\{1}",.
36840 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
36850 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79           rootKey
36860 2c 20 6b 65 79 4e 61 6d 65 29 3b 0d 0a 0d 0a 20  , keyName);.... 
36870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36880 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
36890 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
368a0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
368b0 20 20 20 20 20 20 20 75 73 69 6e 67 20 28 4d 6f         using (Mo
368c0 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 73 75  ckRegistryKey su
368d0 62 4b 65 79 20 3d 20 52 65 67 69 73 74 72 79 48  bKey = RegistryH
368e0 65 6c 70 65 72 2e 4f 70 65 6e 53 75 62 4b 65 79  elper.OpenSubKey
368f0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
36900 20 20 20 20 20 20 20 20 20 20 20 6b 65 79 2c 20             key, 
36910 22 50 61 63 6b 61 67 65 73 22 2c 20 74 72 75 65  "Packages", true
36920 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73  , whatIf, verbos
36930 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e))..           
36940 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
36950 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
36960 73 75 62 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d  subKey == null).
36970 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
36980 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
36990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
369a0 65 72 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46  error = String.F
369b0 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
369c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
369d0 20 20 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20 6f      "could not o
369e0 70 65 6e 20 72 65 67 69 73 74 72 79 20 6b 65 79  pen registry key
369f0 3a 20 7b 30 7d 5c 5c 50 61 63 6b 61 67 65 73 22  : {0}\\Packages"
36a00 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
36a10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6b                 k
36a20 65 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ey);....        
36a30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36a40 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20  return false;.. 
36a50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36a60 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
36a70 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
36a80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36a90 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 2a 57 41      // NOTE: *WA
36aa0 52 4e 49 4e 47 2a 20 43 68 61 6e 67 69 6e 67 20  RNING* Changing 
36ab0 61 6e 79 20 6f 66 20 74 68 65 73 65 20 76 61 6c  any of these val
36ac0 75 65 73 20 77 69 6c 6c 20 6c 69 6b 65 6c 79 0d  ues will likely.
36ad0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
36ae0 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 72 65       //       re
36af0 71 75 69 72 65 20 61 20 6e 65 77 20 22 70 61 63  quire a new "pac
36b00 6b 61 67 65 20 6c 6f 61 64 20 6b 65 79 22 20 28  kage load key" (
36b10 50 4c 4b 29 20 74 6f 20 62 65 0d 0a 20 20 20 20  PLK) to be..    
36b20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36b30 2f 2f 20 20 20 20 20 20 20 67 65 6e 65 72 61 74  //       generat
36b40 65 64 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 70  ed in order to p
36b50 72 6f 70 65 72 6c 79 20 73 75 70 70 6f 72 74 20  roperly support 
36b60 6c 6f 61 64 69 6e 67 20 74 68 65 0d 0a 20 20 20  loading the..   
36b70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36b80 20 2f 2f 20 20 20 20 20 20 20 70 61 63 6b 61 67   //       packag
36b90 65 20 69 6e 74 6f 20 56 69 73 75 61 6c 20 53 74  e into Visual St
36ba0 75 64 69 6f 20 32 30 30 38 20 61 6e 64 20 65 61  udio 2008 and ea
36bb0 72 6c 69 65 72 20 77 69 74 68 6f 75 74 0d 0a 20  rlier without.. 
36bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36bd0 20 20 20 2f 2f 20 20 20 20 20 20 20 74 68 65 20     //       the 
36be0 6d 61 74 63 68 69 6e 67 20 56 69 73 75 61 6c 20  matching Visual 
36bf0 53 74 75 64 69 6f 20 53 44 4b 20 62 65 69 6e 67  Studio SDK being
36c00 20 69 6e 73 74 61 6c 6c 65 64 2e 0d 0a 20 20 20   installed...   
36c10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36c20 20 2f 2f 20 20 20 20 20 20 20 50 6c 65 61 73 65   //       Please
36c30 20 72 65 66 65 72 20 74 6f 20 74 68 65 20 22 53   refer to the "S
36c40 51 4c 69 74 65 2e 44 65 73 69 67 6e 65 72 5c 70  QLite.Designer\p
36c50 6c 6b 2e 74 78 74 22 20 66 69 6c 65 0d 0a 20 20  lk.txt" file..  
36c60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36c70 20 20 2f 2f 20 20 20 20 20 20 20 66 6f 72 20 74    //       for t
36c80 68 65 20 65 78 69 73 74 69 6e 67 20 6f 66 66 69  he existing offi
36c90 63 69 61 6c 20 76 61 6c 75 65 73 20 61 6e 64 20  cial values and 
36ca0 75 70 64 61 74 65 20 74 68 65 6d 20 69 66 0d 0a  update them if..
36cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36cc0 20 20 20 20 2f 2f 20 20 20 20 20 20 20 6e 65 63      //       nec
36cd0 65 73 73 61 72 79 2e 20 20 41 6c 73 6f 2c 20 74  essary.  Also, t
36ce0 68 65 20 6e 65 77 6c 79 20 67 65 6e 65 72 61 74  he newly generat
36cf0 65 64 20 70 61 63 6b 61 67 65 20 6c 6f 61 64 0d  ed package load.
36d00 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
36d10 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 6b 65       //       ke
36d20 79 20 69 74 73 65 6c 66 2c 20 77 68 69 63 68 20  y itself, which 
36d30 69 73 20 61 20 31 32 38 20 63 68 61 72 61 63 74  is a 128 charact
36d40 65 72 20 61 6c 70 68 61 6e 75 6d 65 72 69 63 0d  er alphanumeric.
36d50 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
36d60 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 73 74       //       st
36d70 72 69 6e 67 2c 20 6d 75 73 74 20 62 65 20 70 6c  ring, must be pl
36d80 61 63 65 64 20 69 6e 20 74 68 65 20 72 65 73 6f  aced in the reso
36d90 75 72 63 65 20 73 74 72 69 6e 67 20 6e 61 6d 65  urce string name
36da0 64 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  d..             
36db0 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
36dc0 22 34 30 30 22 20 69 6e 20 74 68 65 20 22 53 51  "400" in the "SQ
36dd0 4c 69 74 65 2e 44 65 73 69 67 6e 65 72 5c 56 53  Lite.Designer\VS
36de0 50 61 63 6b 61 67 65 2e 72 65 73 78 22 20 66 69  Package.resx" fi
36df0 6c 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  le..            
36e00 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
36e10 20 61 6e 64 20 74 68 65 6e 20 74 68 65 20 64 65   and then the de
36e20 73 69 67 6e 65 72 20 61 73 73 65 6d 62 6c 79 20  signer assembly 
36e30 69 74 73 65 6c 66 20 6d 75 73 74 20 62 65 0d 0a  itself must be..
36e40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36e50 20 20 20 20 2f 2f 20 20 20 20 20 20 20 72 65 63      //       rec
36e60 6f 6d 70 69 6c 65 64 2e 20 20 41 73 20 6f 66 20  ompiled.  As of 
36e70 74 68 69 73 20 77 72 69 74 69 6e 67 20 28 69 6e  this writing (in
36e80 20 46 65 62 72 75 61 72 79 20 32 30 31 32 29 2c   February 2012),
36e90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
36ea0 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 74        //       t
36eb0 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 55 52 4c  he following URL
36ec0 20 69 73 20 74 68 65 20 70 72 6f 70 65 72 20 70   is the proper p
36ed0 6c 61 63 65 20 74 6f 20 67 65 6e 65 72 61 74 65  lace to generate
36ee0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
36ef0 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 70        //       p
36f00 61 63 6b 61 67 65 20 6c 6f 61 64 20 6b 65 79 73  ackage load keys
36f10 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  :..             
36f20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
36f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
36f40 2f 20 20 20 20 20 20 20 68 74 74 70 3a 2f 2f 6d  /       http://m
36f50 73 64 6e 2e 6d 69 63 72 6f 73 6f 66 74 2e 63 6f  sdn.microsoft.co
36f60 6d 2f 65 6e 2d 75 73 2f 76 73 74 75 64 69 6f 2f  m/en-us/vstudio/
36f70 63 63 36 35 35 37 39 35 0d 0a 20 20 20 20 20 20  cc655795..      
36f80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
36f90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
36fa0 20 20 20 20 20 20 75 73 69 6e 67 20 28 4d 6f 63        using (Moc
36fb0 6b 52 65 67 69 73 74 72 79 4b 65 79 20 70 61 63  kRegistryKey pac
36fc0 6b 61 67 65 4b 65 79 20 3d 0d 0a 20 20 20 20 20  kageKey =..     
36fd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36fe0 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79 48         RegistryH
36ff0 65 6c 70 65 72 2e 43 72 65 61 74 65 53 75 62 4b  elper.CreateSubK
37000 65 79 28 73 75 62 4b 65 79 2c 0d 0a 20 20 20 20  ey(subKey,..    
37010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37020 20 20 20 20 20 20 20 20 70 61 63 6b 61 67 65 2e          package.
37030 50 61 63 6b 61 67 65 49 64 2e 54 6f 53 74 72 69  PackageId.ToStri
37040 6e 67 28 56 73 49 64 46 6f 72 6d 61 74 29 2c 20  ng(VsIdFormat), 
37050 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20  whatIf,..       
37060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37070 20 20 20 20 20 76 65 72 62 6f 73 65 29 29 0d 0a       verbose))..
37080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37090 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
370a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
370b0 66 20 28 70 61 63 6b 61 67 65 4b 65 79 20 3d 3d  f (packageKey ==
370c0 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
370d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
370e0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
370f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
37100 72 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46 6f  rror = String.Fo
37110 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
37120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37130 20 20 20 20 20 20 20 22 63 6f 75 6c 64 20 6e 6f         "could no
37140 74 20 63 72 65 61 74 65 20 72 65 67 69 73 74 72  t create registr
37150 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c 7b 31 7d 22  y key: {0}\\{1}"
37160 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
37170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37180 20 20 20 6b 65 79 2c 20 70 61 63 6b 61 67 65 2e     key, package.
37190 50 61 63 6b 61 67 65 49 64 2e 54 6f 53 74 72 69  PackageId.ToStri
371a0 6e 67 28 56 73 49 64 46 6f 72 6d 61 74 29 29 3b  ng(VsIdFormat));
371b0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
371c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
371d0 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20  return false;.. 
371e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
371f0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
37200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37210 20 20 20 20 52 65 67 69 73 74 72 79 48 65 6c 70      RegistryHelp
37220 65 72 2e 53 65 74 56 61 6c 75 65 28 70 61 63 6b  er.SetValue(pack
37230 61 67 65 4b 65 79 2c 20 6e 75 6c 6c 2c 0d 0a 20  ageKey, null,.. 
37240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37250 20 20 20 20 20 20 20 20 20 20 20 53 74 72 69 6e             Strin
37260 67 2e 46 6f 72 6d 61 74 28 22 7b 30 7d 20 44 65  g.Format("{0} De
37270 73 69 67 6e 65 72 20 50 61 63 6b 61 67 65 22 2c  signer Package",
37280 20 50 72 6f 6a 65 63 74 4e 61 6d 65 29 2c 0d 0a   ProjectName),..
37290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
372a0 20 20 20 20 20 20 20 20 20 20 20 20 77 68 61 74              what
372b0 49 66 2c 20 76 65 72 62 6f 73 65 29 3b 0d 0a 0d  If, verbose);...
372c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
372d0 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74 72           Registr
372e0 79 48 65 6c 70 65 72 2e 53 65 74 56 61 6c 75 65  yHelper.SetValue
372f0 28 70 61 63 6b 61 67 65 4b 65 79 2c 20 22 43 6c  (packageKey, "Cl
37300 61 73 73 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  ass",..         
37310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37320 20 20 20 22 53 51 4c 69 74 65 2e 44 65 73 69 67     "SQLite.Desig
37330 6e 65 72 2e 53 51 4c 69 74 65 50 61 63 6b 61 67  ner.SQLitePackag
37340 65 22 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62  e", whatIf, verb
37350 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ose);....       
37360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37370 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e   RegistryHelper.
37380 53 65 74 56 61 6c 75 65 28 70 61 63 6b 61 67 65  SetValue(package
37390 4b 65 79 2c 20 22 43 6f 64 65 42 61 73 65 22 2c  Key, "CodeBase",
373a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
373b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 69                fi
373c0 6c 65 4e 61 6d 65 2c 20 77 68 61 74 49 66 2c 20  leName, whatIf, 
373d0 76 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20  verbose);....   
373e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
373f0 20 20 20 20 20 52 65 67 69 73 74 72 79 48 65 6c       RegistryHel
37400 70 65 72 2e 53 65 74 56 61 6c 75 65 28 70 61 63  per.SetValue(pac
37410 6b 61 67 65 4b 65 79 2c 20 22 49 44 22 2c 20 34  kageKey, "ID", 4
37420 30 30 2c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20  00, whatIf,..   
37430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37440 20 20 20 20 20 20 20 20 20 76 65 72 62 6f 73 65           verbose
37450 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
37460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
37470 72 69 6e 67 20 64 69 72 65 63 74 6f 72 79 20 3d  ring directory =
37480 20 47 65 74 53 79 73 74 65 6d 44 69 72 65 63 74   GetSystemDirect
37490 6f 72 79 28 77 6f 77 36 34 29 3b 0d 0a 0d 0a 20  ory(wow64);.... 
374a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
374b0 20 20 20 20 20 20 20 69 66 20 28 64 69 72 65 63         if (direc
374c0 74 6f 72 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  tory == null).. 
374d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
374e0 20 20 20 20 20 20 20 20 20 20 20 64 69 72 65 63             direc
374f0 74 6f 72 79 20 3d 20 53 74 72 69 6e 67 2e 45 6d  tory = String.Em
37500 70 74 79 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  pty;....        
37510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37520 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 53  RegistryHelper.S
37530 65 74 56 61 6c 75 65 28 70 61 63 6b 61 67 65 4b  etValue(packageK
37540 65 79 2c 20 22 49 6e 70 72 6f 63 53 65 72 76 65  ey, "InprocServe
37550 72 33 32 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  r32",..         
37560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37570 20 20 20 50 61 74 68 2e 43 6f 6d 62 69 6e 65 28     Path.Combine(
37580 64 69 72 65 63 74 6f 72 79 2c 20 22 6d 73 63 6f  directory, "msco
37590 72 65 65 2e 64 6c 6c 22 29 2c 0d 0a 20 20 20 20  ree.dll"),..    
375a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
375b0 20 20 20 20 20 20 20 20 77 68 61 74 49 66 2c 20          whatIf, 
375c0 76 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20  verbose);....   
375d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
375e0 20 20 20 20 20 52 65 67 69 73 74 72 79 48 65 6c       RegistryHel
375f0 70 65 72 2e 53 65 74 56 61 6c 75 65 28 70 61 63  per.SetValue(pac
37600 6b 61 67 65 4b 65 79 2c 20 22 43 6f 6d 70 61 6e  kageKey, "Compan
37610 79 4e 61 6d 65 22 2c 0d 0a 20 20 20 20 20 20 20  yName",..       
37620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37630 20 20 20 20 20 22 68 74 74 70 3a 2f 2f 73 79 73       "http://sys
37640 74 65 6d 2e 64 61 74 61 2e 73 71 6c 69 74 65 2e  tem.data.sqlite.
37650 6f 72 67 2f 22 2c 20 77 68 61 74 49 66 2c 20 76  org/", whatIf, v
37660 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20  erbose);....    
37670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37680 20 20 20 20 52 65 67 69 73 74 72 79 48 65 6c 70      RegistryHelp
37690 65 72 2e 53 65 74 56 61 6c 75 65 28 70 61 63 6b  er.SetValue(pack
376a0 61 67 65 4b 65 79 2c 20 22 4d 69 6e 45 64 69 74  ageKey, "MinEdit
376b0 69 6f 6e 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  ion",..         
376c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
376d0 20 20 20 22 73 74 61 6e 64 61 72 64 22 2c 20 77     "standard", w
376e0 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 3b  hatIf, verbose);
376f0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
37700 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69              Regi
37710 73 74 72 79 48 65 6c 70 65 72 2e 53 65 74 56 61  stryHelper.SetVa
37720 6c 75 65 28 70 61 63 6b 61 67 65 4b 65 79 2c 20  lue(packageKey, 
37730 22 50 72 6f 64 75 63 74 4e 61 6d 65 22 2c 0d 0a  "ProductName",..
37740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37750 20 20 20 20 20 20 20 20 20 20 20 20 53 74 72 69              Stri
37760 6e 67 2e 46 6f 72 6d 61 74 28 22 7b 30 7d 20 44  ng.Format("{0} D
37770 65 73 69 67 6e 65 72 20 50 61 63 6b 61 67 65 22  esigner Package"
37780 2c 20 50 72 6f 6a 65 63 74 4e 61 6d 65 29 2c 0d  , ProjectName),.
37790 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
377a0 20 20 20 20 20 20 20 20 20 20 20 20 20 77 68 61               wha
377b0 74 49 66 2c 20 76 65 72 62 6f 73 65 29 3b 0d 0a  tIf, verbose);..
377c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
377d0 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74            Regist
377e0 72 79 48 65 6c 70 65 72 2e 53 65 74 56 61 6c 75  ryHelper.SetValu
377f0 65 28 70 61 63 6b 61 67 65 4b 65 79 2c 20 22 50  e(packageKey, "P
37800 72 6f 64 75 63 74 56 65 72 73 69 6f 6e 22 2c 0d  roductVersion",.
37810 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
37820 20 20 20 20 20 20 20 20 20 20 20 20 20 22 31 2e               "1.
37830 30 22 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62  0", whatIf, verb
37840 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ose);....       
37850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37860 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69   using (MockRegi
37870 73 74 72 79 4b 65 79 20 74 6f 6f 6c 62 6f 78 4b  stryKey toolboxK
37880 65 79 20 3d 0d 0a 20 20 20 20 20 20 20 20 20 20  ey =..          
37890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
378a0 20 20 20 20 20 20 52 65 67 69 73 74 72 79 48 65        RegistryHe
378b0 6c 70 65 72 2e 43 72 65 61 74 65 53 75 62 4b 65  lper.CreateSubKe
378c0 79 28 70 61 63 6b 61 67 65 4b 65 79 2c 0d 0a 20  y(packageKey,.. 
378d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
378e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
378f0 54 6f 6f 6c 62 6f 78 22 2c 20 77 68 61 74 49 66  Toolbox", whatIf
37900 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a 20 20 20  , verbose))..   
37910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37920 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
37930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37940 20 20 20 20 69 66 20 28 74 6f 6f 6c 62 6f 78 4b      if (toolboxK
37950 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ey == null)..   
37960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37970 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
37980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37990 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
379a0 72 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61  r = String.Forma
379b0 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
379c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
379d0 20 20 20 20 20 20 20 20 22 63 6f 75 6c 64 20 6e          "could n
379e0 6f 74 20 63 72 65 61 74 65 20 72 65 67 69 73 74  ot create regist
379f0 72 79 20 6b 65 79 3a 20 22 20 2b 0d 0a 20 20 20  ry key: " +..   
37a00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37a10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37a20 20 22 7b 30 7d 5c 5c 54 6f 6f 6c 62 6f 78 22 2c   "{0}\\Toolbox",
37a30 20 70 61 63 6b 61 67 65 4b 65 79 29 3b 0d 0a 0d   packageKey);...
37a40 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
37a50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37a60 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
37a70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37a80 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
37a90 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
37aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67               Reg
37ab0 69 73 74 72 79 48 65 6c 70 65 72 2e 53 65 74 56  istryHelper.SetV
37ac0 61 6c 75 65 28 0d 0a 20 20 20 20 20 20 20 20 20  alue(..         
37ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37ae0 20 20 20 20 20 20 20 74 6f 6f 6c 62 6f 78 4b 65         toolboxKe
37af0 79 2c 20 22 44 65 66 61 75 6c 74 20 49 74 65 6d  y, "Default Item
37b00 73 22 2c 20 33 2c 20 77 68 61 74 49 66 2c 0d 0a  s", 3, whatIf,..
37b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37b20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37b30 76 65 72 62 6f 73 65 29 3b 0d 0a 20 20 20 20 20  verbose);..     
37b40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37b50 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
37b60 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
37b70 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
37b80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
37b90 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67    using (MockReg
37ba0 69 73 74 72 79 4b 65 79 20 73 75 62 4b 65 79 20  istryKey subKey 
37bb0 3d 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72  = RegistryHelper
37bc0 2e 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20  .OpenSubKey(..  
37bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37be0 20 20 20 20 20 20 6b 65 79 2c 20 22 4d 65 6e 75        key, "Menu
37bf0 73 22 2c 20 74 72 75 65 2c 20 77 68 61 74 49 66  s", true, whatIf
37c00 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a 20 20 20  , verbose))..   
37c10 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
37c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37c30 20 20 20 20 69 66 20 28 73 75 62 4b 65 79 20 3d      if (subKey =
37c40 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
37c50 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
37c60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37c70 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20          error = 
37c80 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
37c90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37ca0 20 20 20 20 20 20 20 20 20 20 20 20 22 63 6f 75              "cou
37cb0 6c 64 20 6e 6f 74 20 6f 70 65 6e 20 72 65 67 69  ld not open regi
37cc0 73 74 72 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c 4d  stry key: {0}\\M
37cd0 65 6e 75 73 22 2c 0d 0a 20 20 20 20 20 20 20 20  enus",..        
37ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37cf0 20 20 20 20 6b 65 79 29 3b 0d 0a 0d 0a 20 20 20      key);....   
37d00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37d10 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
37d20 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
37d30 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
37d40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37d50 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e   RegistryHelper.
37d60 53 65 74 56 61 6c 75 65 28 0d 0a 20 20 20 20 20  SetValue(..     
37d70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37d80 20 20 20 73 75 62 4b 65 79 2c 20 70 61 63 6b 61     subKey, packa
37d90 67 65 2e 50 61 63 6b 61 67 65 49 64 2e 54 6f 53  ge.PackageId.ToS
37da0 74 72 69 6e 67 28 56 73 49 64 46 6f 72 6d 61 74  tring(VsIdFormat
37db0 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
37dc0 20 20 20 20 20 20 20 20 20 20 20 20 22 2c 20 31              ", 1
37dd0 30 30 30 2c 20 33 22 2c 20 77 68 61 74 49 66 2c  000, 3", whatIf,
37de0 20 76 65 72 62 6f 73 65 29 3b 0d 0a 20 20 20 20   verbose);..    
37df0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
37e00 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
37e10 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69   using (MockRegi
37e20 73 74 72 79 4b 65 79 20 73 75 62 4b 65 79 20 3d  stryKey subKey =
37e30 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e   RegistryHelper.
37e40 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20  OpenSubKey(..   
37e50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37e60 20 20 20 20 20 6b 65 79 2c 20 22 53 65 72 76 69       key, "Servi
37e70 63 65 73 22 2c 20 74 72 75 65 2c 20 77 68 61 74  ces", true, what
37e80 49 66 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a 20  If, verbose)).. 
37e90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
37ea0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
37eb0 20 20 20 20 20 20 69 66 20 28 73 75 62 4b 65 79        if (subKey
37ec0 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
37ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
37ee0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
37ef0 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20            error 
37f00 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  = String.Format(
37f10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
37f20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 63                "c
37f30 6f 75 6c 64 20 6e 6f 74 20 6f 70 65 6e 20 72 65  ould not open re
37f40 67 69 73 74 72 79 20 6b 65 79 3a 20 7b 30 7d 5c  gistry key: {0}\
37f50 5c 53 65 72 76 69 63 65 73 22 2c 0d 0a 20 20 20  \Services",..   
37f60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37f70 20 20 20 20 20 20 20 20 20 6b 65 79 29 3b 0d 0a           key);..
37f80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
37f90 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
37fa0 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20   false;..       
37fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
37fc0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
37fd0 20 20 20 20 20 20 75 73 69 6e 67 20 28 4d 6f 63        using (Moc
37fe0 6b 52 65 67 69 73 74 72 79 4b 65 79 20 73 65 72  kRegistryKey ser
37ff0 76 69 63 65 4b 65 79 20 3d 0d 0a 20 20 20 20 20  viceKey =..     
38000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38010 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79 48         RegistryH
38020 65 6c 70 65 72 2e 43 72 65 61 74 65 53 75 62 4b  elper.CreateSubK
38030 65 79 28 73 75 62 4b 65 79 2c 0d 0a 20 20 20 20  ey(subKey,..    
38040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38050 20 20 20 20 20 20 20 20 70 61 63 6b 61 67 65 2e          package.
38060 53 65 72 76 69 63 65 49 64 2e 54 6f 53 74 72 69  ServiceId.ToStri
38070 6e 67 28 56 73 49 64 46 6f 72 6d 61 74 29 2c 20  ng(VsIdFormat), 
38080 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20  whatIf,..       
38090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
380a0 20 20 20 20 20 76 65 72 62 6f 73 65 29 29 0d 0a       verbose))..
380b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
380c0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
380d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
380e0 66 20 28 73 65 72 76 69 63 65 4b 65 79 20 3d 3d  f (serviceKey ==
380f0 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
38100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38110 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
38120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
38130 72 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46 6f  rror = String.Fo
38140 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
38150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38160 20 20 20 20 20 20 20 22 63 6f 75 6c 64 20 6e 6f         "could no
38170 74 20 63 72 65 61 74 65 20 72 65 67 69 73 74 72  t create registr
38180 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c 7b 31 7d 22  y key: {0}\\{1}"
38190 2c 0d 0a 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 20                  
381b0 20 20 20 6b 65 79 2c 20 70 61 63 6b 61 67 65 2e     key, package.
381c0 53 65 72 76 69 63 65 49 64 2e 54 6f 53 74 72 69  ServiceId.ToStri
381d0 6e 67 28 56 73 49 64 46 6f 72 6d 61 74 29 29 3b  ng(VsIdFormat));
381e0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
381f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38200 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20  return false;.. 
38210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38220 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
38230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38240 20 20 20 20 52 65 67 69 73 74 72 79 48 65 6c 70      RegistryHelp
38250 65 72 2e 53 65 74 56 61 6c 75 65 28 73 65 72 76  er.SetValue(serv
38260 69 63 65 4b 65 79 2c 20 6e 75 6c 6c 2c 0d 0a 20  iceKey, null,.. 
38270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38280 20 20 20 20 20 20 20 20 20 20 20 70 61 63 6b 61             packa
38290 67 65 2e 50 61 63 6b 61 67 65 49 64 2e 54 6f 53  ge.PackageId.ToS
382a0 74 72 69 6e 67 28 56 73 49 64 46 6f 72 6d 61 74  tring(VsIdFormat
382b0 29 2c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20  ), whatIf,..    
382c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
382d0 20 20 20 20 20 20 20 20 76 65 72 62 6f 73 65 29          verbose)
382e0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
382f0 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67               Reg
38300 69 73 74 72 79 48 65 6c 70 65 72 2e 53 65 74 56  istryHelper.SetV
38310 61 6c 75 65 28 73 65 72 76 69 63 65 4b 65 79 2c  alue(serviceKey,
38320 20 22 4e 61 6d 65 22 2c 0d 0a 20 20 20 20 20 20   "Name",..      
38330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38340 20 20 20 20 20 20 53 74 72 69 6e 67 2e 46 6f 72        String.For
38350 6d 61 74 28 22 7b 30 7d 20 44 65 73 69 67 6e 65  mat("{0} Designe
38360 72 20 53 65 72 76 69 63 65 22 2c 20 50 72 6f 6a  r Service", Proj
38370 65 63 74 4e 61 6d 65 29 2c 0d 0a 20 20 20 20 20  ectName),..     
38380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38390 20 20 20 20 20 20 20 77 68 61 74 49 66 2c 20 76         whatIf, v
383a0 65 72 62 6f 73 65 29 3b 0d 0a 20 20 20 20 20 20  erbose);..      
383b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
383c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
383d0 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
383e0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
383f0 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20   return true;.. 
38400 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
38410 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
38420 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
38430 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
38440 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
38450 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
38460 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
38470 74 61 74 69 63 20 62 6f 6f 6c 20 52 65 6d 6f 76  tatic bool Remov
38480 65 56 73 50 61 63 6b 61 67 65 28 0d 0a 20 20 20  eVsPackage(..   
38490 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65 67           MockReg
384a0 69 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79  istryKey rootKey
384b0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 56  ,..            V
384c0 65 72 73 69 6f 6e 20 76 73 56 65 72 73 69 6f 6e  ersion vsVersion
384d0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  ,..            s
384e0 74 72 69 6e 67 20 73 75 66 66 69 78 2c 0d 0a 20  tring suffix,.. 
384f0 20 20 20 20 20 20 20 20 20 20 20 50 61 63 6b 61             Packa
38500 67 65 20 70 61 63 6b 61 67 65 2c 0d 0a 20 20 20  ge package,..   
38510 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 70 65           bool pe
38520 72 55 73 65 72 2c 0d 0a 20 20 20 20 20 20 20 20  rUser,..        
38530 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34 2c 0d      bool wow64,.
38540 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f  .            boo
38550 6c 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67  l throwOnMissing
38560 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  ,..            b
38570 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20  ool whatIf,..   
38580 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65           bool ve
38590 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20 20  rbose,..        
385a0 20 20 20 20 72 65 66 20 73 74 72 69 6e 67 20 65      ref string e
385b0 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20  rror..          
385c0 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a    )..        {..
385d0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
385e0 76 73 56 65 72 73 69 6f 6e 20 3d 3d 20 6e 75 6c  vsVersion == nul
385f0 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
38600 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
38610 20 20 20 65 72 72 6f 72 20 3d 20 22 69 6e 76 61     error = "inva
38620 6c 69 64 20 56 53 20 76 65 72 73 69 6f 6e 22 3b  lid VS version";
38630 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
38640 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
38650 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
38660 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
38670 20 28 70 61 63 6b 61 67 65 20 3d 3d 20 6e 75 6c   (package == nul
38680 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
38690 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
386a0 20 20 20 65 72 72 6f 72 20 3d 20 22 69 6e 76 61     error = "inva
386b0 6c 69 64 20 56 53 20 70 61 63 6b 61 67 65 22 3b  lid VS package";
386c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
386d0 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
386e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
386f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74  ..            st
38700 72 69 6e 67 20 6b 65 79 4e 61 6d 65 20 3d 20 47  ring keyName = G
38710 65 74 56 73 4b 65 79 4e 61 6d 65 28 76 73 56 65  etVsKeyName(vsVe
38720 72 73 69 6f 6e 2c 20 73 75 66 66 69 78 2c 20 70  rsion, suffix, p
38730 65 72 55 73 65 72 2c 20 77 6f 77 36 34 29 3b 0d  erUser, wow64);.
38740 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 75  ...            u
38750 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73 74  sing (MockRegist
38760 72 79 4b 65 79 20 6b 65 79 20 3d 20 52 65 67 69  ryKey key = Regi
38770 73 74 72 79 48 65 6c 70 65 72 2e 4f 70 65 6e 53  stryHelper.OpenS
38780 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20  ubKey(..        
38790 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74              root
387a0 4b 65 79 2c 20 6b 65 79 4e 61 6d 65 2c 20 66 61  Key, keyName, fa
387b0 6c 73 65 2c 20 77 68 61 74 49 66 2c 20 76 65 72  lse, whatIf, ver
387c0 62 6f 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20  bose))..        
387d0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
387e0 20 20 20 20 20 20 20 69 66 20 28 6b 65 79 20 3d         if (key =
387f0 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
38800 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
38810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38820 65 72 72 6f 72 20 3d 20 53