System.Data.SQLite
Hex Artifact Content
Not logged in

Artifact 1dc2364f6eec8e75f95a5a11fda4b6528f09d0b1:


0000: 2f 2a 0d 0a 20 2a 20 49 6e 73 74 61 6c 6c 65 72  /*.. * Installer
0010: 2e 63 73 20 2d 2d 0d 0a 20 2a 0d 0a 20 2a 20 57  .cs --.. *.. * W
0020: 72 69 74 74 65 6e 20 62 79 20 4a 6f 65 20 4d 69  ritten by Joe Mi
0030: 73 74 61 63 68 6b 69 6e 2e 0d 0a 20 2a 20 52 65  stachkin... * Re
0040: 6c 65 61 73 65 64 20 74 6f 20 74 68 65 20 70 75  leased to the pu
0050: 62 6c 69 63 20 64 6f 6d 61 69 6e 2c 20 75 73 65  blic domain, use
0060: 20 61 74 20 79 6f 75 72 20 6f 77 6e 20 72 69 73   at your own ris
0070: 6b 21 0d 0a 20 2a 2f 0d 0a 0d 0a 75 73 69 6e 67  k!.. */....using
0080: 20 53 79 73 74 65 6d 3b 0d 0a 75 73 69 6e 67 20   System;..using 
0090: 53 79 73 74 65 6d 2e 43 6f 6c 6c 65 63 74 69 6f  System.Collectio
00a0: 6e 73 2e 47 65 6e 65 72 69 63 3b 0d 0a 75 73 69  ns.Generic;..usi
00b0: 6e 67 20 53 79 73 74 65 6d 2e 44 69 61 67 6e 6f  ng System.Diagno
00c0: 73 74 69 63 73 3b 0d 0a 75 73 69 6e 67 20 53 79  stics;..using Sy
00d0: 73 74 65 6d 2e 45 6e 74 65 72 70 72 69 73 65 53  stem.EnterpriseS
00e0: 65 72 76 69 63 65 73 2e 49 6e 74 65 72 6e 61 6c  ervices.Internal
00f0: 3b 0d 0a 75 73 69 6e 67 20 53 79 73 74 65 6d 2e  ;..using System.
0100: 49 4f 3b 0d 0a 75 73 69 6e 67 20 53 79 73 74 65  IO;..using Syste
0110: 6d 2e 52 65 66 6c 65 63 74 69 6f 6e 3b 0d 0a 75  m.Reflection;..u
0120: 73 69 6e 67 20 53 79 73 74 65 6d 2e 52 75 6e 74  sing System.Runt
0130: 69 6d 65 2e 43 6f 6d 70 69 6c 65 72 53 65 72 76  ime.CompilerServ
0140: 69 63 65 73 3b 0d 0a 0d 0a 23 69 66 20 57 49 4e  ices;....#if WIN
0150: 44 4f 57 53 0d 0a 75 73 69 6e 67 20 53 79 73 74  DOWS..using Syst
0160: 65 6d 2e 52 75 6e 74 69 6d 65 2e 49 6e 74 65 72  em.Runtime.Inter
0170: 6f 70 53 65 72 76 69 63 65 73 3b 0d 0a 23 65 6e  opServices;..#en
0180: 64 69 66 0d 0a 0d 0a 75 73 69 6e 67 20 53 79 73  dif....using Sys
0190: 74 65 6d 2e 53 65 63 75 72 69 74 79 3b 0d 0a 0d  tem.Security;...
01a0: 0a 23 69 66 20 4e 45 54 5f 32 30 20 7c 7c 20 4e  .#if NET_20 || N
01b0: 45 54 5f 33 35 0d 0a 75 73 69 6e 67 20 53 79 73  ET_35..using Sys
01c0: 74 65 6d 2e 53 65 63 75 72 69 74 79 2e 50 65 72  tem.Security.Per
01d0: 6d 69 73 73 69 6f 6e 73 3b 0d 0a 23 65 6e 64 69  missions;..#endi
01e0: 66 0d 0a 0d 0a 75 73 69 6e 67 20 53 79 73 74 65  f....using Syste
01f0: 6d 2e 54 65 78 74 3b 0d 0a 75 73 69 6e 67 20 53  m.Text;..using S
0200: 79 73 74 65 6d 2e 54 68 72 65 61 64 69 6e 67 3b  ystem.Threading;
0210: 0d 0a 75 73 69 6e 67 20 53 79 73 74 65 6d 2e 57  ..using System.W
0220: 69 6e 64 6f 77 73 2e 46 6f 72 6d 73 3b 0d 0a 75  indows.Forms;..u
0230: 73 69 6e 67 20 53 79 73 74 65 6d 2e 58 6d 6c 3b  sing System.Xml;
0240: 0d 0a 75 73 69 6e 67 20 4d 69 63 72 6f 73 6f 66  ..using Microsof
0250: 74 2e 57 69 6e 33 32 3b 0d 0a 0d 0a 6e 61 6d 65  t.Win32;....name
0260: 73 70 61 63 65 20 53 79 73 74 65 6d 2e 44 61 74  space System.Dat
0270: 61 2e 53 51 4c 69 74 65 0d 0a 7b 0d 0a 20 20 20  a.SQLite..{..   
0280: 20 23 72 65 67 69 6f 6e 20 50 75 62 6c 69 63 20   #region Public 
0290: 44 65 6c 65 67 61 74 65 73 0d 0a 20 20 20 20 69  Delegates..    i
02a0: 6e 74 65 72 6e 61 6c 20 64 65 6c 65 67 61 74 65  nternal delegate
02b0: 20 76 6f 69 64 20 54 72 61 63 65 43 61 6c 6c 62   void TraceCallb
02c0: 61 63 6b 28 0d 0a 20 20 20 20 20 20 20 20 73 74  ack(..        st
02d0: 72 69 6e 67 20 6d 65 73 73 61 67 65 2c 20 2f 2a  ring message, /*
02e0: 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20   in */..        
02f0: 73 74 72 69 6e 67 20 63 61 74 65 67 6f 72 79 20  string category 
0300: 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 29 3b  /* in */..    );
0310: 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f  ....    ////////
0320: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0330: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0340: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0350: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0360: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72  ///....    inter
0370: 6e 61 6c 20 64 65 6c 65 67 61 74 65 20 62 6f 6f  nal delegate boo
0380: 6c 20 46 72 61 6d 65 77 6f 72 6b 43 6f 6e 66 69  l FrameworkConfi
0390: 67 43 61 6c 6c 62 61 63 6b 28 0d 0a 20 20 20 20  gCallback(..    
03a0: 20 20 20 20 73 74 72 69 6e 67 20 66 69 6c 65 4e      string fileN
03b0: 61 6d 65 2c 20 20 20 20 20 20 20 20 20 20 20 2f  ame,           /
03c0: 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20  * in */..       
03d0: 20 73 74 72 69 6e 67 20 69 6e 76 61 72 69 61 6e   string invarian
03e0: 74 4e 61 6d 65 2c 20 20 20 20 20 20 2f 2a 20 69  tName,      /* i
03f0: 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 73 74  n */..        st
0400: 72 69 6e 67 20 6e 61 6d 65 2c 20 20 20 20 20 20  ring name,      
0410: 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 20 2a           /* in *
0420: 2f 0d 0a 20 20 20 20 20 20 20 20 73 74 72 69 6e  /..        strin
0430: 67 20 64 65 73 63 72 69 70 74 69 6f 6e 2c 20 20  g description,  
0440: 20 20 20 20 20 20 2f 2a 20 69 6e 20 2a 2f 0d 0a        /* in */..
0450: 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 74          string t
0460: 79 70 65 4e 61 6d 65 2c 20 20 20 20 20 20 20 20  ypeName,        
0470: 20 20 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20     /* in */..   
0480: 20 20 20 20 20 41 73 73 65 6d 62 6c 79 4e 61 6d       AssemblyNam
0490: 65 20 61 73 73 65 6d 62 6c 79 4e 61 6d 65 2c 20  e assemblyName, 
04a0: 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20  /* in */..      
04b0: 20 20 73 74 72 69 6e 67 20 64 69 72 65 63 74 6f    string directo
04c0: 72 79 2c 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ry,          /* 
04d0: 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 6f  in */..        o
04e0: 62 6a 65 63 74 20 63 6c 69 65 6e 74 44 61 74 61  bject clientData
04f0: 2c 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 20  ,         /* in 
0500: 2a 2f 0d 0a 20 20 20 20 20 20 20 20 62 6f 6f 6c  */..        bool
0510: 20 70 65 72 55 73 65 72 2c 20 20 20 20 20 20 20   perUser,       
0520: 20 20 20 20 20 20 20 2f 2a 20 69 6e 20 2a 2f 0d         /* in */.
0530: 0a 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 6f  .        bool wo
0540: 77 36 34 2c 20 20 20 20 20 20 20 20 20 20 20 20  w64,            
0550: 20 20 20 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20      /* in */..  
0560: 20 20 20 20 20 20 62 6f 6f 6c 20 74 68 72 6f 77        bool throw
0570: 4f 6e 4d 69 73 73 69 6e 67 2c 20 20 20 20 20 20  OnMissing,      
0580: 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20   /* in */..     
0590: 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 20     bool whatIf, 
05a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
05b0: 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20   in */..        
05c0: 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c 20 20 20  bool verbose,   
05d0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e             /* in
05e0: 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 72 65 66   */..        ref
05f0: 20 62 6f 6f 6c 20 73 61 76 65 64 2c 20 20 20 20   bool saved,    
0600: 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 20 2a          /* out *
0610: 2f 0d 0a 20 20 20 20 20 20 20 20 72 65 66 20 73  /..        ref s
0620: 74 72 69 6e 67 20 65 72 72 6f 72 20 20 20 20 20  tring error     
0630: 20 20 20 20 20 20 2f 2a 20 6f 75 74 20 2a 2f 0d        /* out */.
0640: 0a 20 20 20 20 29 3b 0d 0a 0d 0a 20 20 20 20 2f  .    );....    /
0650: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0660: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0670: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0680: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0690: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
06a0: 20 20 69 6e 74 65 72 6e 61 6c 20 64 65 6c 65 67    internal deleg
06b0: 61 74 65 20 62 6f 6f 6c 20 46 72 61 6d 65 77 6f  ate bool Framewo
06c0: 72 6b 52 65 67 69 73 74 72 79 43 61 6c 6c 62 61  rkRegistryCallba
06d0: 63 6b 28 0d 0a 20 20 20 20 20 20 20 20 49 6e 73  ck(..        Ins
06e0: 74 61 6c 6c 65 72 2e 4d 6f 63 6b 52 65 67 69 73  taller.MockRegis
06f0: 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79 2c 20  tryKey rootKey, 
0700: 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20  /* in */..      
0710: 20 20 73 74 72 69 6e 67 20 66 72 61 6d 65 77 6f    string framewo
0720: 72 6b 4e 61 6d 65 2c 20 20 20 20 20 20 20 20 20  rkName,         
0730: 20 20 20 20 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20       /* in */.. 
0740: 20 20 20 20 20 20 20 56 65 72 73 69 6f 6e 20 66         Version f
0750: 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 2c  rameworkVersion,
0760: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 20            /* in 
0770: 2a 2f 0d 0a 20 20 20 20 20 20 20 20 73 74 72 69  */..        stri
0780: 6e 67 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 2c  ng platformName,
0790: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
07a0: 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20  * in */..       
07b0: 20 73 74 72 69 6e 67 20 64 69 72 65 63 74 6f 72   string director
07c0: 79 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20  y,              
07d0: 20 20 20 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20      /* in */..  
07e0: 20 20 20 20 20 20 6f 62 6a 65 63 74 20 63 6c 69        object cli
07f0: 65 6e 74 44 61 74 61 2c 20 20 20 20 20 20 20 20  entData,        
0800: 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 20 2a           /* in *
0810: 2f 0d 0a 20 20 20 20 20 20 20 20 62 6f 6f 6c 20  /..        bool 
0820: 70 65 72 55 73 65 72 2c 20 20 20 20 20 20 20 20  perUser,        
0830: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
0840: 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20   in */..        
0850: 62 6f 6f 6c 20 77 6f 77 36 34 2c 20 20 20 20 20  bool wow64,     
0860: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0870: 20 20 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20     /* in */..   
0880: 20 20 20 20 20 62 6f 6f 6c 20 74 68 72 6f 77 4f       bool throwO
0890: 6e 4d 69 73 73 69 6e 67 2c 20 20 20 20 20 20 20  nMissing,       
08a0: 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 20 2a 2f          /* in */
08b0: 0d 0a 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77  ..        bool w
08c0: 68 61 74 49 66 2c 20 20 20 20 20 20 20 20 20 20  hatIf,          
08d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
08e0: 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 62  in */..        b
08f0: 6f 6f 6c 20 76 65 72 62 6f 73 65 2c 20 20 20 20  ool verbose,    
0900: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0910: 20 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20    /* in */..    
0920: 20 20 20 20 72 65 66 20 73 74 72 69 6e 67 20 65      ref string e
0930: 72 72 6f 72 20 20 20 20 20 20 20 20 20 20 20 20  rror            
0940: 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 20 2a 2f         /* out */
0950: 0d 0a 20 20 20 20 29 3b 0d 0a 0d 0a 20 20 20 20  ..    );....    
0960: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0970: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0980: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0990: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
09a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
09b0: 20 20 20 69 6e 74 65 72 6e 61 6c 20 64 65 6c 65     internal dele
09c0: 67 61 74 65 20 62 6f 6f 6c 20 56 69 73 75 61 6c  gate bool Visual
09d0: 53 74 75 64 69 6f 52 65 67 69 73 74 72 79 43 61  StudioRegistryCa
09e0: 6c 6c 62 61 63 6b 28 0d 0a 20 20 20 20 20 20 20  llback(..       
09f0: 20 49 6e 73 74 61 6c 6c 65 72 2e 4d 6f 63 6b 52   Installer.MockR
0a00: 65 67 69 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b  egistryKey rootK
0a10: 65 79 2c 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20  ey, /* in */..  
0a20: 20 20 20 20 20 20 56 65 72 73 69 6f 6e 20 76 73        Version vs
0a30: 56 65 72 73 69 6f 6e 2c 20 20 20 20 20 20 20 20  Version,        
0a40: 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 20 2a           /* in *
0a50: 2f 0d 0a 20 20 20 20 20 20 20 20 73 74 72 69 6e  /..        strin
0a60: 67 20 73 75 66 66 69 78 2c 20 20 20 20 20 20 20  g suffix,       
0a70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
0a80: 20 69 6e 2c 20 6f 70 74 69 6f 6e 61 6c 20 2a 2f   in, optional */
0a90: 0d 0a 20 20 20 20 20 20 20 20 49 6e 73 74 61 6c  ..        Instal
0aa0: 6c 65 72 2e 50 61 63 6b 61 67 65 20 70 61 63 6b  ler.Package pack
0ab0: 61 67 65 2c 20 20 20 20 20 20 20 20 20 2f 2a 20  age,         /* 
0ac0: 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 73  in */..        s
0ad0: 74 72 69 6e 67 20 64 69 72 65 63 74 6f 72 79 2c  tring directory,
0ae0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0af0: 20 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20    /* in */..    
0b00: 20 20 20 20 6f 62 6a 65 63 74 20 63 6c 69 65 6e      object clien
0b10: 74 44 61 74 61 2c 20 20 20 20 20 20 20 20 20 20  tData,          
0b20: 20 20 20 20 20 20 20 2f 2a 20 69 6e 20 2a 2f 0d         /* in */.
0b30: 0a 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 70 65  .        bool pe
0b40: 72 55 73 65 72 2c 20 20 20 20 20 20 20 20 20 20  rUser,          
0b50: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69              /* i
0b60: 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 62 6f  n */..        bo
0b70: 6f 6c 20 77 6f 77 36 34 2c 20 20 20 20 20 20 20  ol wow64,       
0b80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0b90: 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20   /* in */..     
0ba0: 20 20 20 62 6f 6f 6c 20 74 68 72 6f 77 4f 6e 4d     bool throwOnM
0bb0: 69 73 73 69 6e 67 2c 20 20 20 20 20 20 20 20 20  issing,         
0bc0: 20 20 20 20 20 20 2f 2a 20 69 6e 20 2a 2f 0d 0a        /* in */..
0bd0: 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61          bool wha
0be0: 74 49 66 2c 20 20 20 20 20 20 20 20 20 20 20 20  tIf,            
0bf0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e             /* in
0c00: 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 62 6f 6f   */..        boo
0c10: 6c 20 76 65 72 62 6f 73 65 2c 20 20 20 20 20 20  l verbose,      
0c20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0c30: 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20  /* in */..      
0c40: 20 20 72 65 66 20 73 74 72 69 6e 67 20 65 72 72    ref string err
0c50: 6f 72 20 20 20 20 20 20 20 20 20 20 20 20 20 20  or              
0c60: 20 20 20 20 20 2f 2a 20 6f 75 74 20 2a 2f 0d 0a       /* out */..
0c70: 20 20 20 20 29 3b 0d 0a 20 20 20 20 23 65 6e 64      );..    #end
0c80: 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 2f 2f  region....    //
0c90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0ca0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0cb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0cc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0cd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
0ce0: 20 23 72 65 67 69 6f 6e 20 50 75 62 6c 69 63 20   #region Public 
0cf0: 45 6e 75 6d 65 72 61 74 69 6f 6e 73 0d 0a 20 20  Enumerations..  
0d00: 20 20 5b 46 6c 61 67 73 28 29 5d 0d 0a 20 20 20    [Flags()]..   
0d10: 20 70 75 62 6c 69 63 20 65 6e 75 6d 20 49 6e 73   public enum Ins
0d20: 74 61 6c 6c 46 6c 61 67 73 0d 0a 20 20 20 20 7b  tallFlags..    {
0d30: 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f  ..        #regio
0d40: 6e 20 4e 6f 72 6d 61 6c 20 56 61 6c 75 65 73 0d  n Normal Values.
0d50: 0a 20 20 20 20 20 20 20 20 4e 6f 6e 65 20 3d 20  .        None = 
0d60: 30 78 30 2c 0d 0a 20 20 20 20 20 20 20 20 43 6f  0x0,..        Co
0d70: 72 65 47 6c 6f 62 61 6c 41 73 73 65 6d 62 6c 79  reGlobalAssembly
0d80: 43 61 63 68 65 20 3d 20 30 78 31 2c 0d 0a 20 20  Cache = 0x1,..  
0d90: 20 20 20 20 20 20 4c 69 6e 71 47 6c 6f 62 61 6c        LinqGlobal
0da0: 41 73 73 65 6d 62 6c 79 43 61 63 68 65 20 3d 20  AssemblyCache = 
0db0: 30 78 32 2c 0d 0a 20 20 20 20 20 20 20 20 45 66  0x2,..        Ef
0dc0: 36 47 6c 6f 62 61 6c 41 73 73 65 6d 62 6c 79 43  6GlobalAssemblyC
0dd0: 61 63 68 65 20 3d 20 30 78 34 2c 0d 0a 20 20 20  ache = 0x4,..   
0de0: 20 20 20 20 20 41 73 73 65 6d 62 6c 79 46 6f 6c       AssemblyFol
0df0: 64 65 72 73 20 3d 20 30 78 38 2c 0d 0a 20 20 20  ders = 0x8,..   
0e00: 20 20 20 20 20 44 62 50 72 6f 76 69 64 65 72 46       DbProviderF
0e10: 61 63 74 6f 72 79 20 3d 20 30 78 31 30 2c 0d 0a  actory = 0x10,..
0e20: 20 20 20 20 20 20 20 20 56 73 50 61 63 6b 61 67          VsPackag
0e30: 65 20 3d 20 30 78 32 30 2c 0d 0a 20 20 20 20 20  e = 0x20,..     
0e40: 20 20 20 56 73 50 61 63 6b 61 67 65 47 6c 6f 62     VsPackageGlob
0e50: 61 6c 41 73 73 65 6d 62 6c 79 43 61 63 68 65 20  alAssemblyCache 
0e60: 3d 20 30 78 34 30 2c 0d 0a 20 20 20 20 20 20 20  = 0x40,..       
0e70: 20 56 73 44 61 74 61 53 6f 75 72 63 65 20 3d 20   VsDataSource = 
0e80: 30 78 38 30 2c 0d 0a 20 20 20 20 20 20 20 20 56  0x80,..        V
0e90: 73 44 61 74 61 50 72 6f 76 69 64 65 72 20 3d 20  sDataProvider = 
0ea0: 30 78 31 30 30 2c 0d 0a 20 20 20 20 20 20 20 20  0x100,..        
0eb0: 56 73 44 65 76 45 6e 76 53 65 74 75 70 20 3d 20  VsDevEnvSetup = 
0ec0: 30 78 32 30 30 2c 0d 0a 20 20 20 20 20 20 20 20  0x200,..        
0ed0: 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20  #endregion....  
0ee0: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
0ef0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0f00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0f10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0f20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
0f30: 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e  .        #region
0f40: 20 43 6f 6d 70 6f 73 69 74 65 20 56 61 6c 75 65   Composite Value
0f50: 73 0d 0a 20 20 20 20 20 20 20 20 46 72 61 6d 65  s..        Frame
0f60: 77 6f 72 6b 47 6c 6f 62 61 6c 41 73 73 65 6d 62  workGlobalAssemb
0f70: 6c 79 43 61 63 68 65 20 3d 20 43 6f 72 65 47 6c  lyCache = CoreGl
0f80: 6f 62 61 6c 41 73 73 65 6d 62 6c 79 43 61 63 68  obalAssemblyCach
0f90: 65 20 7c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e |..           
0fa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0fb0: 20 20 20 20 20 20 20 20 20 20 20 20 4c 69 6e 71              Linq
0fc0: 47 6c 6f 62 61 6c 41 73 73 65 6d 62 6c 79 43 61  GlobalAssemblyCa
0fd0: 63 68 65 20 7c 0d 0a 20 20 20 20 20 20 20 20 20  che |..         
0fe0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0ff0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 45 66                Ef
1000: 36 47 6c 6f 62 61 6c 41 73 73 65 6d 62 6c 79 43  6GlobalAssemblyC
1010: 61 63 68 65 2c 0d 0a 0d 0a 20 20 20 20 20 20 20  ache,....       
1020: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
1030: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1040: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1050: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1060: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
1070: 20 20 20 20 46 72 61 6d 65 77 6f 72 6b 20 3d 20      Framework = 
1080: 46 72 61 6d 65 77 6f 72 6b 47 6c 6f 62 61 6c 41  FrameworkGlobalA
1090: 73 73 65 6d 62 6c 79 43 61 63 68 65 20 7c 20 41  ssemblyCache | A
10a0: 73 73 65 6d 62 6c 79 46 6f 6c 64 65 72 73 20 7c  ssemblyFolders |
10b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
10c0: 20 20 20 20 20 20 44 62 50 72 6f 76 69 64 65 72        DbProvider
10d0: 46 61 63 74 6f 72 79 2c 0d 0a 0d 0a 20 20 20 20  Factory,....    
10e0: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
10f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1100: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1110: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1120: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
1130: 20 20 20 20 20 20 20 56 73 20 3d 20 56 73 50 61         Vs = VsPa
1140: 63 6b 61 67 65 20 7c 20 56 73 50 61 63 6b 61 67  ckage | VsPackag
1150: 65 47 6c 6f 62 61 6c 41 73 73 65 6d 62 6c 79 43  eGlobalAssemblyC
1160: 61 63 68 65 20 7c 20 56 73 44 61 74 61 53 6f 75  ache | VsDataSou
1170: 72 63 65 20 7c 0d 0a 20 20 20 20 20 20 20 20 20  rce |..         
1180: 20 20 20 20 56 73 44 61 74 61 50 72 6f 76 69 64      VsDataProvid
1190: 65 72 20 7c 20 56 73 44 65 76 45 6e 76 53 65 74  er | VsDevEnvSet
11a0: 75 70 2c 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f  up,....        /
11b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11f0: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
1200: 20 20 41 6c 6c 47 6c 6f 62 61 6c 41 73 73 65 6d    AllGlobalAssem
1210: 62 6c 79 43 61 63 68 65 20 3d 20 46 72 61 6d 65  blyCache = Frame
1220: 77 6f 72 6b 47 6c 6f 62 61 6c 41 73 73 65 6d 62  workGlobalAssemb
1230: 6c 79 43 61 63 68 65 20 7c 0d 0a 20 20 20 20 20  lyCache |..     
1240: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1250: 20 20 20 20 20 20 20 20 20 20 20 20 56 73 50 61              VsPa
1260: 63 6b 61 67 65 47 6c 6f 62 61 6c 41 73 73 65 6d  ckageGlobalAssem
1270: 62 6c 79 43 61 63 68 65 2c 0d 0a 0d 0a 20 20 20  blyCache,....   
1280: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
1290: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
12d0: 20 20 20 20 20 20 20 20 41 6c 6c 20 3d 20 46 72          All = Fr
12e0: 61 6d 65 77 6f 72 6b 20 7c 20 56 73 2c 0d 0a 0d  amework | Vs,...
12f0: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
1300: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1310: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1320: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1330: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1340: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 41 6c 6c 45  ....        AllE
1350: 78 63 65 70 74 47 6c 6f 62 61 6c 41 73 73 65 6d  xceptGlobalAssem
1360: 62 6c 79 43 61 63 68 65 20 3d 20 41 6c 6c 20 26  blyCache = All &
1370: 20 7e 41 6c 6c 47 6c 6f 62 61 6c 41 73 73 65 6d   ~AllGlobalAssem
1380: 62 6c 79 43 61 63 68 65 2c 0d 0a 20 20 20 20 20  blyCache,..     
1390: 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
13a0: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
13b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
13c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
13d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
13e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
13f0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67  ....        #reg
1400: 69 6f 6e 20 53 75 67 67 65 73 74 65 64 20 44 65  ion Suggested De
1410: 66 61 75 6c 74 20 56 61 6c 75 65 73 0d 0a 20 20  fault Values..  
1420: 20 20 20 20 20 20 44 65 66 61 75 6c 74 20 3d 20        Default = 
1430: 41 6c 6c 0d 0a 20 20 20 20 20 20 20 20 23 65 6e  All..        #en
1440: 64 72 65 67 69 6f 6e 0d 0a 20 20 20 20 7d 0d 0a  dregion..    }..
1450: 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ..    //////////
1460: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1470: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1480: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1490: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14a0: 2f 0d 0a 0d 0a 20 20 20 20 5b 46 6c 61 67 73 28  /....    [Flags(
14b0: 29 5d 0d 0a 20 20 20 20 70 75 62 6c 69 63 20 65  )]..    public e
14c0: 6e 75 6d 20 50 72 6f 76 69 64 65 72 46 6c 61 67  num ProviderFlag
14d0: 73 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  s..    {..      
14e0: 20 20 23 72 65 67 69 6f 6e 20 4e 6f 72 6d 61 6c    #region Normal
14f0: 20 56 61 6c 75 65 73 0d 0a 20 20 20 20 20 20 20   Values..       
1500: 20 4e 6f 6e 65 20 3d 20 30 78 30 2c 0d 0a 20 20   None = 0x0,..  
1510: 20 20 20 20 20 20 53 79 73 74 65 6d 45 66 36 4d        SystemEf6M
1520: 75 73 74 42 65 47 6c 6f 62 61 6c 20 3d 20 30 78  ustBeGlobal = 0x
1530: 31 2c 0d 0a 20 20 20 20 20 20 20 20 44 69 64 4c  1,..        DidL
1540: 69 6e 71 46 6f 72 63 65 54 72 61 63 65 20 3d 20  inqForceTrace = 
1550: 30 78 32 2c 0d 0a 20 20 20 20 20 20 20 20 44 69  0x2,..        Di
1560: 64 45 66 36 46 6f 72 63 65 54 72 61 63 65 20 3d  dEf6ForceTrace =
1570: 20 30 78 34 2c 0d 0a 20 20 20 20 20 20 20 20 44   0x4,..        D
1580: 69 64 45 66 36 52 65 73 6f 6c 76 65 54 72 61 63  idEf6ResolveTrac
1590: 65 20 3d 20 30 78 38 2c 0d 0a 20 20 20 20 20 20  e = 0x8,..      
15a0: 20 20 46 6f 72 63 65 4c 69 6e 71 45 6e 61 62 6c    ForceLinqEnabl
15b0: 65 64 20 3d 20 30 78 31 30 2c 0d 0a 20 20 20 20  ed = 0x10,..    
15c0: 20 20 20 20 46 6f 72 63 65 4c 69 6e 71 44 69 73      ForceLinqDis
15d0: 61 62 6c 65 64 20 3d 20 30 78 32 30 2c 0d 0a 20  abled = 0x20,.. 
15e0: 20 20 20 20 20 20 20 46 6f 72 63 65 45 66 36 45         ForceEf6E
15f0: 6e 61 62 6c 65 64 20 3d 20 30 78 34 30 2c 0d 0a  nabled = 0x40,..
1600: 20 20 20 20 20 20 20 20 46 6f 72 63 65 45 66 36          ForceEf6
1610: 44 69 73 61 62 6c 65 64 20 3d 20 30 78 38 30 2c  Disabled = 0x80,
1620: 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65  ..        #endre
1630: 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20  gion....        
1640: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1650: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1660: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1670: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1680: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
1690: 20 20 20 23 72 65 67 69 6f 6e 20 53 75 67 67 65     #region Sugge
16a0: 73 74 65 64 20 44 65 66 61 75 6c 74 20 56 61 6c  sted Default Val
16b0: 75 65 73 0d 0a 20 20 20 20 20 20 20 20 44 65 66  ues..        Def
16c0: 61 75 6c 74 20 3d 20 4e 6f 6e 65 0d 0a 20 20 20  ault = None..   
16d0: 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d       #endregion.
16e0: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f  .    }....    //
16f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1700: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1710: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1720: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1730: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
1740: 20 5b 46 6c 61 67 73 28 29 5d 0d 0a 20 20 20 20   [Flags()]..    
1750: 70 75 62 6c 69 63 20 65 6e 75 6d 20 54 72 61 63  public enum Trac
1760: 65 50 72 69 6f 72 69 74 79 0d 0a 20 20 20 20 7b  ePriority..    {
1770: 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f  ..        #regio
1780: 6e 20 4e 6f 72 6d 61 6c 20 56 61 6c 75 65 73 0d  n Normal Values.
1790: 0a 20 20 20 20 20 20 20 20 4e 6f 6e 65 20 3d 20  .        None = 
17a0: 30 78 30 2c 0d 0a 20 20 20 20 20 20 20 20 4c 6f  0x0,..        Lo
17b0: 77 65 73 74 20 3d 20 30 78 31 2c 0d 0a 20 20 20  west = 0x1,..   
17c0: 20 20 20 20 20 4c 6f 77 65 72 20 3d 20 30 78 32       Lower = 0x2
17d0: 2c 0d 0a 20 20 20 20 20 20 20 20 4c 6f 77 20 3d  ,..        Low =
17e0: 20 30 78 34 2c 0d 0a 20 20 20 20 20 20 20 20 4d   0x4,..        M
17f0: 65 64 69 75 6d 4c 6f 77 20 3d 20 30 78 38 2c 0d  ediumLow = 0x8,.
1800: 0a 20 20 20 20 20 20 20 20 4d 65 64 69 75 6d 20  .        Medium 
1810: 3d 20 30 78 31 30 2c 0d 0a 20 20 20 20 20 20 20  = 0x10,..       
1820: 20 4d 65 64 69 75 6d 48 69 67 68 20 3d 20 30 78   MediumHigh = 0x
1830: 32 30 2c 0d 0a 20 20 20 20 20 20 20 20 48 69 67  20,..        Hig
1840: 68 20 3d 20 30 78 34 30 2c 0d 0a 20 20 20 20 20  h = 0x40,..     
1850: 20 20 20 48 69 67 68 65 72 20 3d 20 30 78 38 30     Higher = 0x80
1860: 2c 0d 0a 20 20 20 20 20 20 20 20 48 69 67 68 65  ,..        Highe
1870: 73 74 20 3d 20 30 78 31 30 30 2c 0d 0a 20 20 20  st = 0x100,..   
1880: 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d       #endregion.
1890: 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
18a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18e0: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72  //....        #r
18f0: 65 67 69 6f 6e 20 53 75 67 67 65 73 74 65 64 20  egion Suggested 
1900: 44 65 66 61 75 6c 74 20 46 6c 61 67 73 0d 0a 20  Default Flags.. 
1910: 20 20 20 20 20 20 20 44 65 66 61 75 6c 74 20 3d         Default =
1920: 20 4d 65 64 69 75 6d 0d 0a 20 20 20 20 20 20 20   Medium..       
1930: 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 20 20 20   #endregion..   
1940: 20 7d 0d 0a 20 20 20 20 23 65 6e 64 72 65 67 69   }..    #endregi
1950: 6f 6e 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f  on....    //////
1960: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1970: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1980: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1990: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19a0: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 23 72 65  /////....    #re
19b0: 67 69 6f 6e 20 49 6e 73 74 61 6c 6c 65 72 20 43  gion Installer C
19c0: 6c 61 73 73 0d 0a 23 69 66 20 4e 45 54 5f 34 30  lass..#if NET_40
19d0: 20 7c 7c 20 4e 45 54 5f 34 35 20 7c 7c 20 4e 45   || NET_45 || NE
19e0: 54 5f 34 35 31 20 7c 7c 20 4e 45 54 5f 34 35 32  T_451 || NET_452
19f0: 20 7c 7c 20 4e 45 54 5f 34 36 20 7c 7c 20 4e 45   || NET_46 || NE
1a00: 54 5f 34 36 31 20 7c 7c 20 4e 45 54 5f 34 36 32  T_461 || NET_462
1a10: 20 7c 7c 20 4e 45 54 5f 34 37 20 7c 7c 20 4e 45   || NET_47 || NE
1a20: 54 5f 34 37 31 0d 0a 20 20 20 20 5b 53 65 63 75  T_471..    [Secu
1a30: 72 69 74 79 43 72 69 74 69 63 61 6c 28 29 5d 0d  rityCritical()].
1a40: 0a 23 65 6c 73 65 0d 0a 20 20 20 20 5b 53 65 63  .#else..    [Sec
1a50: 75 72 69 74 79 50 65 72 6d 69 73 73 69 6f 6e 28  urityPermission(
1a60: 53 65 63 75 72 69 74 79 41 63 74 69 6f 6e 2e 4c  SecurityAction.L
1a70: 69 6e 6b 44 65 6d 61 6e 64 2c 20 55 6e 6d 61 6e  inkDemand, Unman
1a80: 61 67 65 64 43 6f 64 65 20 3d 20 74 72 75 65 29  agedCode = true)
1a90: 5d 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 69  ]..#endif..    i
1aa0: 6e 74 65 72 6e 61 6c 20 73 74 61 74 69 63 20 63  nternal static c
1ab0: 6c 61 73 73 20 49 6e 73 74 61 6c 6c 65 72 0d 0a  lass Installer..
1ac0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 23      {..        #
1ad0: 72 65 67 69 6f 6e 20 55 6e 73 61 66 65 20 4e 61  region Unsafe Na
1ae0: 74 69 76 65 20 4d 65 74 68 6f 64 73 20 43 6c 61  tive Methods Cla
1af0: 73 73 0d 0a 20 20 20 20 20 20 20 20 5b 53 75 70  ss..        [Sup
1b00: 70 72 65 73 73 55 6e 6d 61 6e 61 67 65 64 43 6f  pressUnmanagedCo
1b10: 64 65 53 65 63 75 72 69 74 79 28 29 5d 0d 0a 20  deSecurity()].. 
1b20: 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
1b30: 65 61 6c 65 64 20 63 6c 61 73 73 20 55 6e 73 61  ealed class Unsa
1b40: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 0d  feNativeMethods.
1b50: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 23 69 66 20  .        {..#if 
1b60: 57 49 4e 44 4f 57 53 0d 0a 20 20 20 20 20 20 20  WINDOWS..       
1b70: 20 20 20 20 20 23 72 65 67 69 6f 6e 20 4e 61 74       #region Nat
1b80: 69 76 65 20 57 69 6e 33 32 20 43 6f 6e 73 74 61  ive Win32 Consta
1b90: 6e 74 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20  nts..           
1ba0: 20 70 72 69 76 61 74 65 20 63 6f 6e 73 74 20 69   private const i
1bb0: 6e 74 20 4d 41 58 5f 50 41 54 48 20 3d 20 32 36  nt MAX_PATH = 26
1bc0: 30 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  0;....          
1bd0: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
1be0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1bf0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c10: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
1c20: 20 20 20 20 20 70 72 69 76 61 74 65 20 63 6f 6e       private con
1c30: 73 74 20 69 6e 74 20 43 53 49 44 4c 5f 53 59 53  st int CSIDL_SYS
1c40: 54 45 4d 58 38 36 20 3d 20 30 78 30 30 32 39 3b  TEMX86 = 0x0029;
1c50: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1c60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ca0: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
1cb0: 20 20 20 70 72 69 76 61 74 65 20 63 6f 6e 73 74     private const
1cc0: 20 69 6e 74 20 53 48 47 46 50 5f 54 59 50 45 5f   int SHGFP_TYPE_
1cd0: 43 55 52 52 45 4e 54 20 3d 20 30 3b 0d 0a 0d 0a  CURRENT = 0;....
1ce0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
1cf0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
1d30: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
1d40: 72 69 76 61 74 65 20 63 6f 6e 73 74 20 69 6e 74  rivate const int
1d50: 20 53 5f 4f 4b 20 3d 20 30 3b 20 2f 2a 20 48 52   S_OK = 0; /* HR
1d60: 45 53 55 4c 54 20 2a 2f 0d 0a 20 20 20 20 20 20  ESULT */..      
1d70: 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
1d80: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1d90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1da0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1db0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1dc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1dd0: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
1de0: 20 20 20 23 72 65 67 69 6f 6e 20 4e 61 74 69 76     #region Nativ
1df0: 65 20 57 69 6e 64 6f 77 73 20 4d 65 74 68 6f 64  e Windows Method
1e00: 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b  s..            [
1e10: 44 6c 6c 49 6d 70 6f 72 74 28 22 73 68 66 6f 6c  DllImport("shfol
1e20: 64 65 72 2e 64 6c 6c 22 2c 0d 0a 20 20 20 20 20  der.dll",..     
1e30: 20 20 20 20 20 20 20 20 20 20 20 43 61 6c 6c 69             Calli
1e40: 6e 67 43 6f 6e 76 65 6e 74 69 6f 6e 20 3d 20 43  ngConvention = C
1e50: 61 6c 6c 69 6e 67 43 6f 6e 76 65 6e 74 69 6f 6e  allingConvention
1e60: 2e 57 69 6e 61 70 69 2c 0d 0a 20 20 20 20 20 20  .Winapi,..      
1e70: 20 20 20 20 20 20 20 20 20 20 43 68 61 72 53 65            CharSe
1e80: 74 20 3d 20 43 68 61 72 53 65 74 2e 41 75 74 6f  t = CharSet.Auto
1e90: 2c 20 42 65 73 74 46 69 74 4d 61 70 70 69 6e 67  , BestFitMapping
1ea0: 20 3d 20 66 61 6c 73 65 2c 0d 0a 20 20 20 20 20   = false,..     
1eb0: 20 20 20 20 20 20 20 20 20 20 20 54 68 72 6f 77             Throw
1ec0: 4f 6e 55 6e 6d 61 70 70 61 62 6c 65 43 68 61 72  OnUnmappableChar
1ed0: 20 3d 20 74 72 75 65 2c 20 53 65 74 4c 61 73 74   = true, SetLast
1ee0: 45 72 72 6f 72 20 3d 20 74 72 75 65 29 5d 0d 0a  Error = true)]..
1ef0: 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76              priv
1f00: 61 74 65 20 73 74 61 74 69 63 20 65 78 74 65 72  ate static exter
1f10: 6e 20 69 6e 74 20 53 48 47 65 74 46 6f 6c 64 65  n int SHGetFolde
1f20: 72 50 61 74 68 28 0d 0a 20 20 20 20 20 20 20 20  rPath(..        
1f30: 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 68          IntPtr h
1f40: 57 6e 64 4f 77 6e 65 72 2c 20 69 6e 74 20 6e 46  WndOwner, int nF
1f50: 6f 6c 64 65 72 2c 20 49 6e 74 50 74 72 20 68 54  older, IntPtr hT
1f60: 6f 6b 65 6e 2c 20 75 69 6e 74 20 66 6c 61 67 73  oken, uint flags
1f70: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
1f80: 20 20 20 49 6e 74 50 74 72 20 62 75 66 66 65 72     IntPtr buffer
1f90: 20 2f 2a 20 3e 3d 20 4d 41 58 5f 50 41 54 48 20   /* >= MAX_PATH 
1fa0: 2a 2f 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  */);..          
1fb0: 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a    #endregion....
1fc0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
1fd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fe0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ff0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2000: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
2010: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  ...            #
2020: 72 65 67 69 6f 6e 20 50 75 62 6c 69 63 20 57 72  region Public Wr
2030: 61 70 70 65 72 20 4d 65 74 68 6f 64 73 0d 0a 20  apper Methods.. 
2040: 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
2050: 63 20 73 74 61 74 69 63 20 73 74 72 69 6e 67 20  c static string 
2060: 47 65 74 53 79 73 74 65 6d 44 69 72 65 63 74 6f  GetSystemDirecto
2070: 72 79 28 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ry()..          
2080: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
2090: 20 20 20 20 20 49 6e 74 50 74 72 20 62 75 66 66       IntPtr buff
20a0: 65 72 20 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f  er = IntPtr.Zero
20b0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
20c0: 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20       try..      
20d0: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
20e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20f0: 20 62 75 66 66 65 72 20 3d 20 4d 61 72 73 68 61   buffer = Marsha
2100: 6c 2e 41 6c 6c 6f 63 43 6f 54 61 73 6b 4d 65 6d  l.AllocCoTaskMem
2110: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
2120: 20 20 20 20 20 20 20 20 20 20 20 73 69 7a 65 6f             sizeo
2130: 66 28 63 68 61 72 29 20 2a 20 28 4d 41 58 5f 50  f(char) * (MAX_P
2140: 41 54 48 20 2b 20 31 29 29 3b 0d 0a 0d 0a 20 20  ATH + 1));....  
2150: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2160: 20 20 69 66 20 28 62 75 66 66 65 72 20 21 3d 20    if (buffer != 
2170: 49 6e 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20 20  IntPtr.Zero)..  
2180: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2190: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
21a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
21b0: 28 53 48 47 65 74 46 6f 6c 64 65 72 50 61 74 68  (SHGetFolderPath
21c0: 28 49 6e 74 50 74 72 2e 5a 65 72 6f 2c 0d 0a 20  (IntPtr.Zero,.. 
21d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43                 C
21f0: 53 49 44 4c 5f 53 59 53 54 45 4d 58 38 36 2c 20  SIDL_SYSTEMX86, 
2200: 49 6e 74 50 74 72 2e 5a 65 72 6f 2c 0d 0a 20 20  IntPtr.Zero,..  
2210: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2220: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 48                SH
2230: 47 46 50 5f 54 59 50 45 5f 43 55 52 52 45 4e 54  GFP_TYPE_CURRENT
2240: 2c 20 62 75 66 66 65 72 29 20 3d 3d 20 53 5f 4f  , buffer) == S_O
2250: 4b 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  K)..            
2260: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
2270: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2280: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
2290: 6e 20 4d 61 72 73 68 61 6c 2e 50 74 72 54 6f 53  n Marshal.PtrToS
22a0: 74 72 69 6e 67 41 75 74 6f 28 62 75 66 66 65 72  tringAuto(buffer
22b0: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
22c0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
22d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22e0: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
22f0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
2300: 20 20 20 20 20 20 20 20 20 63 61 74 63 68 20 28           catch (
2310: 45 78 63 65 70 74 69 6f 6e 20 65 29 0d 0a 20 20  Exception e)..  
2320: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
2330: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2340: 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
2350: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
2360: 54 4f 44 4f 3a 20 49 73 20 74 68 69 73 20 74 68  TODO: Is this th
2370: 65 20 72 69 67 68 74 20 65 72 72 6f 72 20 68 61  e right error ha
2380: 6e 64 6c 69 6e 67 20 73 6f 6c 75 74 69 6f 6e 0d  ndling solution.
2390: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
23a0: 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 74 6f       //       to
23b0: 20 75 73 65 20 61 74 20 74 68 69 73 20 70 6f 69   use at this poi
23c0: 6e 74 3f 0d 0a 20 20 20 20 20 20 20 20 20 20 20  nt?..           
23d0: 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
23e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23f0: 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41   TraceOps.DebugA
2400: 6e 64 54 72 61 63 65 28 54 72 61 63 65 50 72 69  ndTrace(TracePri
2410: 6f 72 69 74 79 2e 4d 65 64 69 75 6d 48 69 67 68  ority.MediumHigh
2420: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
2430: 20 20 20 20 20 20 20 20 20 20 20 64 65 62 75 67             debug
2440: 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43  Callback, traceC
2450: 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e  allback, String.
2460: 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
2470: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2480: 20 22 43 6f 75 6c 64 20 6e 6f 74 20 67 65 74 20   "Could not get 
2490: 73 79 73 74 65 6d 20 64 69 72 65 63 74 6f 72 79  system directory
24a0: 3a 20 7b 30 7d 22 2c 20 65 29 2c 0d 0a 20 20 20  : {0}", e),..   
24b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24c0: 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f       traceCatego
24d0: 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
24e0: 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f              thro
24f0: 77 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  w;..            
2500: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
2510: 20 20 20 20 20 20 20 66 69 6e 61 6c 6c 79 0d 0a         finally..
2520: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2530: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
2540: 20 20 20 20 20 20 20 69 66 20 28 62 75 66 66 65         if (buffe
2550: 72 20 21 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f  r != IntPtr.Zero
2560: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
2570: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
2580: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2590: 20 20 4d 61 72 73 68 61 6c 2e 46 72 65 65 43 6f    Marshal.FreeCo
25a0: 54 61 73 6b 4d 65 6d 28 62 75 66 66 65 72 29 3b  TaskMem(buffer);
25b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
25c0: 20 20 20 20 20 20 20 20 20 20 62 75 66 66 65 72            buffer
25d0: 20 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d   = IntPtr.Zero;.
25e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
25f0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
2600: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
2610: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
2620: 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20  urn null;..     
2630: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
2640: 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
2650: 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20  ..#endif..      
2660: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e    }..        #en
2670: 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20  dregion....     
2680: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
2690: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
26d0: 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50 72        #region Pr
26e0: 69 76 61 74 65 20 48 65 6c 70 65 72 20 43 6c 61  ivate Helper Cla
26f0: 73 73 65 73 0d 0a 20 20 20 20 20 20 20 20 23 72  sses..        #r
2700: 65 67 69 6f 6e 20 4f 62 6a 65 63 74 48 65 6c 70  egion ObjectHelp
2710: 65 72 20 43 6c 61 73 73 0d 0a 20 20 20 20 20 20  er Class..      
2720: 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63    private static
2730: 20 63 6c 61 73 73 20 4f 62 6a 65 63 74 48 65 6c   class ObjectHel
2740: 70 65 72 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  per..        {..
2750: 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
2760: 69 63 20 73 74 61 74 69 63 20 62 6f 6f 6c 20 41  ic static bool A
2770: 72 65 45 71 75 61 6c 28 0d 0a 20 20 20 20 20 20  reEqual(..      
2780: 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74            object
2790: 20 76 61 6c 75 65 31 2c 0d 0a 20 20 20 20 20 20   value1,..      
27a0: 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74            object
27b0: 20 76 61 6c 75 65 32 0d 0a 20 20 20 20 20 20 20   value2..       
27c0: 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
27d0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
27e0: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 28             if ((
27f0: 76 61 6c 75 65 31 20 3d 3d 20 6e 75 6c 6c 29 20  value1 == null) 
2800: 7c 7c 20 28 76 61 6c 75 65 32 20 3d 3d 20 6e 75  || (value2 == nu
2810: 6c 6c 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ll))..          
2820: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
2830: 20 28 28 76 61 6c 75 65 31 20 3d 3d 20 6e 75 6c   ((value1 == nul
2840: 6c 29 20 26 26 20 28 76 61 6c 75 65 32 20 3d 3d  l) && (value2 ==
2850: 20 6e 75 6c 6c 29 29 3b 0d 0a 0d 0a 20 20 20 20   null));....    
2860: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
2870: 4f 62 6a 65 63 74 2e 52 65 66 65 72 65 6e 63 65  Object.Reference
2880: 45 71 75 61 6c 73 28 76 61 6c 75 65 31 2c 20 76  Equals(value1, v
2890: 61 6c 75 65 32 29 29 0d 0a 20 20 20 20 20 20 20  alue2))..       
28a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
28b0: 75 72 6e 20 74 72 75 65 3b 0d 0a 0d 0a 20 20 20  urn true;....   
28c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
28d0: 75 72 6e 20 76 61 6c 75 65 31 2e 45 71 75 61 6c  urn value1.Equal
28e0: 73 28 76 61 6c 75 65 32 29 3b 0d 0a 20 20 20 20  s(value2);..    
28f0: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
2900: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65     }..        #e
2910: 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20  ndregion....    
2920: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
2930: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2940: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2950: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2960: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
2970: 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 41         #region A
2980: 6e 79 50 61 69 72 20 43 6c 61 73 73 0d 0a 20 20  nyPair Class..  
2990: 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 65        private se
29a0: 61 6c 65 64 20 63 6c 61 73 73 20 41 6e 79 50 61  aled class AnyPa
29b0: 69 72 3c 54 31 2c 20 54 32 3e 20 3a 0d 0a 20 20  ir<T1, T2> :..  
29c0: 20 20 20 20 20 20 20 20 20 20 49 43 6f 6d 70 61            ICompa
29d0: 72 65 72 3c 41 6e 79 50 61 69 72 3c 54 31 2c 20  rer<AnyPair<T1, 
29e0: 54 32 3e 3e 2c 0d 0a 20 20 20 20 20 20 20 20 20  T2>>,..         
29f0: 20 20 20 49 43 6f 6d 70 61 72 61 62 6c 65 3c 41     IComparable<A
2a00: 6e 79 50 61 69 72 3c 54 31 2c 20 54 32 3e 3e 2c  nyPair<T1, T2>>,
2a10: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 49 43  ..            IC
2a20: 6f 6d 70 61 72 61 62 6c 65 2c 0d 0a 20 20 20 20  omparable,..    
2a30: 20 20 20 20 20 20 20 20 49 45 71 75 61 74 61 62          IEquatab
2a40: 6c 65 3c 41 6e 79 50 61 69 72 3c 54 31 2c 20 54  le<AnyPair<T1, T
2a50: 32 3e 3e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  2>>,..          
2a60: 20 20 49 45 71 75 61 6c 69 74 79 43 6f 6d 70 61    IEqualityCompa
2a70: 72 65 72 3c 41 6e 79 50 61 69 72 3c 54 31 2c 20  rer<AnyPair<T1, 
2a80: 54 32 3e 3e 2c 0d 0a 20 20 20 20 20 20 20 20 20  T2>>,..         
2a90: 20 20 20 49 43 6c 6f 6e 65 61 62 6c 65 0d 0a 20     ICloneable.. 
2aa0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
2ab0: 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50 75        #region Pu
2ac0: 62 6c 69 63 20 43 6f 6e 73 74 72 75 63 74 6f 72  blic Constructor
2ad0: 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  s..            /
2ae0: 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  /..            /
2af0: 2f 20 57 41 52 4e 49 4e 47 3a 20 54 68 69 73 20  / WARNING: This 
2b00: 63 6f 6e 73 74 72 75 63 74 6f 72 20 70 72 6f 64  constructor prod
2b10: 75 63 65 73 20 61 6e 20 69 6d 6d 75 74 61 62 6c  uces an immutabl
2b20: 65 20 22 65 6d 70 74 79 22 20 70 61 69 72 0d 0a  e "empty" pair..
2b30: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
2b40: 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 2e 0d          object..
2b50: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d  .            //.
2b60: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
2b70: 6c 69 63 20 41 6e 79 50 61 69 72 28 29 0d 0a 20  lic AnyPair().. 
2b80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3a                 :
2b90: 20 62 61 73 65 28 29 0d 0a 20 20 20 20 20 20 20   base()..       
2ba0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
2bb0: 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f          // do no
2bc0: 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20  thing...        
2bd0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
2be0: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
2bf0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c20: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
2c30: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 41          public A
2c40: 6e 79 50 61 69 72 28 54 31 20 78 29 0d 0a 20 20  nyPair(T1 x)..  
2c50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3a 20                : 
2c60: 74 68 69 73 28 29 0d 0a 20 20 20 20 20 20 20 20  this()..        
2c70: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
2c80: 20 20 20 20 20 20 20 74 68 69 73 2e 78 20 3d 20         this.x = 
2c90: 78 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  x;..            
2ca0: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
2cb0: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
2cc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2cd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ce0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2cf0: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
2d00: 20 20 20 20 70 75 62 6c 69 63 20 41 6e 79 50 61      public AnyPa
2d10: 69 72 28 54 31 20 78 2c 20 54 32 20 79 29 0d 0a  ir(T1 x, T2 y)..
2d20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d30: 3a 20 74 68 69 73 28 78 29 0d 0a 20 20 20 20 20  : this(x)..     
2d40: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
2d50: 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 79            this.y
2d60: 20 3d 20 79 3b 0d 0a 20 20 20 20 20 20 20 20 20   = y;..         
2d70: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
2d80: 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a    #endregion....
2d90: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
2da0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2db0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2dc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2dd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
2de0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  ...            #
2df0: 72 65 67 69 6f 6e 20 50 75 62 6c 69 63 20 50 72  region Public Pr
2e00: 6f 70 65 72 74 69 65 73 0d 0a 20 20 20 20 20 20  operties..      
2e10: 20 20 20 20 20 20 70 72 69 76 61 74 65 20 54 31        private T1
2e20: 20 78 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20   x;..           
2e30: 20 70 75 62 6c 69 63 20 54 31 20 58 0d 0a 20 20   public T1 X..  
2e40: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
2e50: 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74               get
2e60: 20 7b 20 72 65 74 75 72 6e 20 78 3b 20 7d 0d 0a   { return x; }..
2e70: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
2e80: 0a 20 20 20 20 20 20 20 20 20 20 20 20 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 2f 2f  ////////////////
2ec0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ed0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2ee0: 70 72 69 76 61 74 65 20 54 32 20 79 3b 0d 0a 20  private T2 y;.. 
2ef0: 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
2f00: 63 20 54 32 20 59 0d 0a 20 20 20 20 20 20 20 20  c T2 Y..        
2f10: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
2f20: 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74         get { ret
2f30: 75 72 6e 20 79 3b 20 7d 0d 0a 20 20 20 20 20 20  urn y; }..      
2f40: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
2f50: 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d       #endregion.
2f60: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
2f70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2fa0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2fb0: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
2fc0: 20 20 23 72 65 67 69 6f 6e 20 53 79 73 74 65 6d    #region System
2fd0: 2e 4f 62 6a 65 63 74 20 4f 76 65 72 72 69 64 65  .Object Override
2fe0: 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  s..            p
2ff0: 75 62 6c 69 63 20 6f 76 65 72 72 69 64 65 20 62  ublic override b
3000: 6f 6f 6c 20 45 71 75 61 6c 73 28 0d 0a 20 20 20  ool Equals(..   
3010: 20 20 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a               obj
3020: 65 63 74 20 6f 62 6a 0d 0a 20 20 20 20 20 20 20  ect obj..       
3030: 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
3040: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
3050: 20 20 20 20 20 20 20 20 20 20 20 41 6e 79 50 61             AnyPa
3060: 69 72 3c 54 31 2c 20 54 32 3e 20 61 6e 79 50 61  ir<T1, T2> anyPa
3070: 69 72 20 3d 20 6f 62 6a 20 61 73 20 41 6e 79 50  ir = obj as AnyP
3080: 61 69 72 3c 54 31 2c 20 54 32 3e 3b 0d 0a 0d 0a  air<T1, T2>;....
3090: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30a0: 69 66 20 28 61 6e 79 50 61 69 72 20 21 3d 20 6e  if (anyPair != n
30b0: 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
30c0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
30d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
30e0: 28 21 4f 62 6a 65 63 74 48 65 6c 70 65 72 2e 41  (!ObjectHelper.A
30f0: 72 65 45 71 75 61 6c 28 58 2c 20 61 6e 79 50 61  reEqual(X, anyPa
3100: 69 72 2e 58 29 29 0d 0a 20 20 20 20 20 20 20 20  ir.X))..        
3110: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3120: 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d  return false;...
3130: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
3140: 20 20 20 20 20 69 66 20 28 21 4f 62 6a 65 63 74       if (!Object
3150: 48 65 6c 70 65 72 2e 41 72 65 45 71 75 61 6c 28  Helper.AreEqual(
3160: 59 2c 20 61 6e 79 50 61 69 72 2e 59 29 29 0d 0a  Y, anyPair.Y))..
3170: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3180: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
3190: 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  alse;....       
31a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
31b0: 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20 20  urn true;..     
31c0: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
31d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31e0: 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20  return false;.. 
31f0: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
3200: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
3210: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3220: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3230: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3240: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
3250: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
3260: 75 62 6c 69 63 20 6f 76 65 72 72 69 64 65 20 73  ublic override s
3270: 74 72 69 6e 67 20 54 6f 53 74 72 69 6e 67 28 29  tring ToString()
3280: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
3290: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
32a0: 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
32b0: 20 20 20 20 20 2f 2f 20 54 4f 44 4f 3a 20 54 68       // TODO: Th
32c0: 65 20 64 65 6c 69 6d 69 74 65 72 20 68 65 72 65  e delimiter here
32d0: 20 69 73 20 68 61 72 64 2d 63 6f 64 65 64 20 74   is hard-coded t
32e0: 6f 20 61 20 73 70 61 63 65 2e 20 20 54 68 69 73  o a space.  This
32f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
3300: 20 20 2f 2f 20 20 20 20 20 20 20 6d 61 79 20 6e    //       may n
3310: 65 65 64 20 74 6f 20 62 65 20 63 68 61 6e 67 65  eed to be change
3320: 64 2c 20 65 2e 67 2e 20 69 66 20 74 68 65 20 75  d, e.g. if the u
3330: 73 65 2d 63 61 73 65 73 20 66 6f 72 0d 0a 20 20  se-cases for..  
3340: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
3350: 20 20 20 20 20 20 20 74 68 69 73 20 63 6c 61 73         this clas
3360: 73 20 63 68 61 6e 67 65 2e 0d 0a 20 20 20 20 20  s change...     
3370: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
3380: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
3390: 65 74 75 72 6e 20 53 74 72 69 6e 67 2e 46 6f 72  eturn String.For
33a0: 6d 61 74 28 22 7b 30 7d 20 7b 31 7d 22 2c 20 58  mat("{0} {1}", X
33b0: 2c 20 59 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  , Y);..         
33c0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
33d0: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
33e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3400: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3410: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
3420: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 6f 76         public ov
3430: 65 72 72 69 64 65 20 69 6e 74 20 47 65 74 48 61  erride int GetHa
3440: 73 68 43 6f 64 65 28 29 0d 0a 20 20 20 20 20 20  shCode()..      
3450: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
3460: 20 20 20 20 20 20 20 20 20 69 6e 74 20 72 65 73           int res
3470: 75 6c 74 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20  ult = 0;..      
3480: 20 20 20 20 20 20 20 20 20 20 54 31 20 78 20 3d            T1 x =
3490: 20 58 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20   X;....         
34a0: 20 20 20 20 20 20 20 69 66 20 28 78 20 21 3d 20         if (x != 
34b0: 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
34c0: 20 20 20 20 20 20 20 20 20 20 20 72 65 73 75 6c             resul
34d0: 74 20 5e 3d 20 78 2e 47 65 74 48 61 73 68 43 6f  t ^= x.GetHashCo
34e0: 64 65 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  de();....       
34f0: 20 20 20 20 20 20 20 20 20 54 32 20 79 20 3d 20           T2 y = 
3500: 59 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  Y;....          
3510: 20 20 20 20 20 20 69 66 20 28 79 20 21 3d 20 6e        if (y != n
3520: 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
3530: 20 20 20 20 20 20 20 20 20 20 72 65 73 75 6c 74            result
3540: 20 5e 3d 20 79 2e 47 65 74 48 61 73 68 43 6f 64   ^= y.GetHashCod
3550: 65 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  e();....        
3560: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 72          return r
3570: 65 73 75 6c 74 3b 0d 0a 20 20 20 20 20 20 20 20  esult;..        
3580: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
3590: 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
35a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
35b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35f0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
3600: 23 72 65 67 69 6f 6e 20 49 43 6f 6d 70 61 72 65  #region ICompare
3610: 72 3c 41 6e 79 50 61 69 72 3c 54 31 2c 54 32 3e  r<AnyPair<T1,T2>
3620: 3e 20 4d 65 6d 62 65 72 73 0d 0a 20 20 20 20 20  > Members..     
3630: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 69 6e         public in
3640: 74 20 43 6f 6d 70 61 72 65 28 0d 0a 20 20 20 20  t Compare(..    
3650: 20 20 20 20 20 20 20 20 20 20 20 20 41 6e 79 50              AnyP
3660: 61 69 72 3c 54 31 2c 20 54 32 3e 20 78 2c 0d 0a  air<T1, T2> x,..
3670: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3680: 41 6e 79 50 61 69 72 3c 54 31 2c 20 54 32 3e 20  AnyPair<T1, T2> 
3690: 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  y..             
36a0: 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20     )..          
36b0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
36c0: 20 20 20 20 20 69 66 20 28 28 78 20 3d 3d 20 6e       if ((x == n
36d0: 75 6c 6c 29 20 26 26 20 28 79 20 3d 3d 20 6e 75  ull) && (y == nu
36e0: 6c 6c 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ll))..          
36f0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
3700: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
3710: 75 72 6e 20 30 3b 0d 0a 20 20 20 20 20 20 20 20  urn 0;..        
3720: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
3730: 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20             else 
3740: 69 66 20 28 78 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  if (x == null)..
3750: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3760: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
3770: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 2d 31         return -1
3780: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
3790: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
37a0: 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 79        else if (y
37b0: 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
37c0: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
37d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37e0: 20 20 72 65 74 75 72 6e 20 31 3b 0d 0a 20 20 20    return 1;..   
37f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
3800: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3810: 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20  else..          
3820: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
3830: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74               int
3840: 20 72 65 73 75 6c 74 20 3d 20 43 6f 6d 70 61 72   result = Compar
3850: 65 72 3c 54 31 3e 2e 44 65 66 61 75 6c 74 2e 43  er<T1>.Default.C
3860: 6f 6d 70 61 72 65 28 78 2e 58 2c 20 79 2e 58 29  ompare(x.X, y.X)
3870: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
3880: 20 20 20 20 20 20 20 20 20 69 66 20 28 72 65 73           if (res
3890: 75 6c 74 20 21 3d 20 30 29 0d 0a 20 20 20 20 20  ult != 0)..     
38a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38b0: 20 20 20 72 65 74 75 72 6e 20 72 65 73 75 6c 74     return result
38c0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
38d0: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
38e0: 43 6f 6d 70 61 72 65 72 3c 54 32 3e 2e 44 65 66  Comparer<T2>.Def
38f0: 61 75 6c 74 2e 43 6f 6d 70 61 72 65 28 78 2e 59  ault.Compare(x.Y
3900: 2c 20 79 2e 59 29 3b 0d 0a 20 20 20 20 20 20 20  , y.Y);..       
3910: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
3920: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
3930: 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f         #endregio
3940: 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n....           
3950: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
3960: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3970: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3980: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3990: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
39a0: 20 20 20 20 23 72 65 67 69 6f 6e 20 49 43 6f 6d      #region ICom
39b0: 70 61 72 61 62 6c 65 3c 41 6e 79 50 61 69 72 3c  parable<AnyPair<
39c0: 54 31 2c 54 32 3e 3e 20 4d 65 6d 62 65 72 73 0d  T1,T2>> Members.
39d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
39e0: 6c 69 63 20 69 6e 74 20 43 6f 6d 70 61 72 65 54  lic int CompareT
39f0: 6f 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  o(..            
3a00: 20 20 20 20 41 6e 79 50 61 69 72 3c 54 31 2c 20      AnyPair<T1, 
3a10: 54 32 3e 20 6f 74 68 65 72 0d 0a 20 20 20 20 20  T2> other..     
3a20: 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
3a30: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
3a40: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
3a50: 75 72 6e 20 43 6f 6d 70 61 72 65 28 74 68 69 73  urn Compare(this
3a60: 2c 20 6f 74 68 65 72 29 3b 0d 0a 20 20 20 20 20  , other);..     
3a70: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
3a80: 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
3a90: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
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 2f  ////////////////
3ac0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3ad0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3ae0: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
3af0: 20 20 20 23 72 65 67 69 6f 6e 20 49 43 6f 6d 70     #region IComp
3b00: 61 72 61 62 6c 65 20 4d 65 6d 62 65 72 73 0d 0a  arable Members..
3b10: 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
3b20: 69 63 20 69 6e 74 20 43 6f 6d 70 61 72 65 54 6f  ic int CompareTo
3b30: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
3b40: 20 20 20 6f 62 6a 65 63 74 20 6f 62 6a 0d 0a 20     object obj.. 
3b50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29                 )
3b60: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
3b70: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
3b80: 20 41 6e 79 50 61 69 72 3c 54 31 2c 20 54 32 3e   AnyPair<T1, T2>
3b90: 20 61 6e 79 50 61 69 72 20 3d 20 6f 62 6a 20 61   anyPair = obj a
3ba0: 73 20 41 6e 79 50 61 69 72 3c 54 31 2c 20 54 32  s AnyPair<T1, T2
3bb0: 3e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  >;....          
3bc0: 20 20 20 20 20 20 69 66 20 28 61 6e 79 50 61 69        if (anyPai
3bd0: 72 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  r == null)..    
3be0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3bf0: 74 68 72 6f 77 20 6e 65 77 20 41 72 67 75 6d 65  throw new Argume
3c00: 6e 74 45 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a  ntException();..
3c10: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
3c20: 20 20 72 65 74 75 72 6e 20 43 6f 6d 70 61 72 65    return Compare
3c30: 54 6f 28 61 6e 79 50 61 69 72 29 3b 0d 0a 20 20  To(anyPair);..  
3c40: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
3c50: 20 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67           #endreg
3c60: 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ion....         
3c70: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
3c80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3c90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3ca0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3cb0: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
3cc0: 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 49 45        #region IE
3cd0: 71 75 61 74 61 62 6c 65 3c 41 6e 79 50 61 69 72  quatable<AnyPair
3ce0: 3c 54 31 2c 54 32 3e 3e 20 4d 65 6d 62 65 72 73  <T1,T2>> Members
3cf0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
3d00: 62 6c 69 63 20 62 6f 6f 6c 20 45 71 75 61 6c 73  blic bool Equals
3d10: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
3d20: 20 20 20 41 6e 79 50 61 69 72 3c 54 31 2c 20 54     AnyPair<T1, T
3d30: 32 3e 20 6f 74 68 65 72 0d 0a 20 20 20 20 20 20  2> other..      
3d40: 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
3d50: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
3d60: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
3d70: 72 6e 20 43 6f 6d 70 61 72 65 54 6f 28 6f 74 68  rn CompareTo(oth
3d80: 65 72 29 20 3d 3d 20 30 3b 0d 0a 20 20 20 20 20  er) == 0;..     
3d90: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
3da0: 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
3db0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
3dc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3dd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3de0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3df0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3e00: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
3e10: 20 20 20 23 72 65 67 69 6f 6e 20 49 45 71 75 61     #region IEqua
3e20: 6c 69 74 79 43 6f 6d 70 61 72 65 72 3c 41 6e 79  lityComparer<Any
3e30: 50 61 69 72 3c 54 31 2c 54 32 3e 3e 20 4d 65 6d  Pair<T1,T2>> Mem
3e40: 62 65 72 73 0d 0a 20 20 20 20 20 20 20 20 20 20  bers..          
3e50: 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 45 71    public bool Eq
3e60: 75 61 6c 73 28 0d 0a 20 20 20 20 20 20 20 20 20  uals(..         
3e70: 20 20 20 20 20 20 20 41 6e 79 50 61 69 72 3c 54         AnyPair<T
3e80: 31 2c 20 54 32 3e 20 78 2c 0d 0a 20 20 20 20 20  1, T2> x,..     
3e90: 20 20 20 20 20 20 20 20 20 20 20 41 6e 79 50 61             AnyPa
3ea0: 69 72 3c 54 31 2c 20 54 32 3e 20 79 0d 0a 20 20  ir<T1, T2> y..  
3eb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d                ).
3ec0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
3ed0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3ee0: 72 65 74 75 72 6e 20 4f 62 6a 65 63 74 48 65 6c  return ObjectHel
3ef0: 70 65 72 2e 41 72 65 45 71 75 61 6c 28 78 2c 20  per.AreEqual(x, 
3f00: 79 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  y);..           
3f10: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
3f20: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
3f30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3f40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3f50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3f60: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
3f70: 20 20 20 20 20 70 75 62 6c 69 63 20 69 6e 74 20       public int 
3f80: 47 65 74 48 61 73 68 43 6f 64 65 28 0d 0a 20 20  GetHashCode(..  
3f90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 41 6e                An
3fa0: 79 50 61 69 72 3c 54 31 2c 20 54 32 3e 20 6f 62  yPair<T1, T2> ob
3fb0: 6a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  j..             
3fc0: 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20     )..          
3fd0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
3fe0: 20 20 20 20 20 72 65 74 75 72 6e 20 28 6f 62 6a       return (obj
3ff0: 20 21 3d 20 6e 75 6c 6c 29 20 3f 20 6f 62 6a 2e   != null) ? obj.
4000: 47 65 74 48 61 73 68 43 6f 64 65 28 29 20 3a 20  GetHashCode() : 
4010: 30 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  0;..            
4020: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  }..            #
4030: 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20  endregion....   
4040: 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
4050: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4060: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4070: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4080: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
4090: 20 20 20 20 20 20 20 20 20 20 20 20 23 72 65 67              #reg
40a0: 69 6f 6e 20 49 43 6c 6f 6e 65 61 62 6c 65 20 4d  ion ICloneable M
40b0: 65 6d 62 65 72 73 0d 0a 20 20 20 20 20 20 20 20  embers..        
40c0: 20 20 20 20 70 75 62 6c 69 63 20 6f 62 6a 65 63      public objec
40d0: 74 20 43 6c 6f 6e 65 28 29 0d 0a 20 20 20 20 20  t Clone()..     
40e0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
40f0: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
4100: 20 6e 65 77 20 41 6e 79 50 61 69 72 3c 54 31 2c   new AnyPair<T1,
4110: 20 54 32 3e 28 58 2c 20 59 29 3b 0d 0a 20 20 20   T2>(X, Y);..   
4120: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
4130: 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
4140: 6f 6e 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20  on..        }.. 
4150: 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f         #endregio
4160: 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  n....        ///
4170: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4180: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4190: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
41a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
41b0: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
41c0: 23 72 65 67 69 6f 6e 20 54 72 61 63 65 4f 70 73  #region TraceOps
41d0: 20 43 6c 61 73 73 0d 0a 20 20 20 20 20 20 20 20   Class..        
41e0: 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 63  private static c
41f0: 6c 61 73 73 20 54 72 61 63 65 4f 70 73 0d 0a 20  lass TraceOps.. 
4200: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
4210: 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50 72        #region Pr
4220: 69 76 61 74 65 20 43 6f 6e 73 74 61 6e 74 73 0d  ivate Constants.
4230: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69  .            pri
4240: 76 61 74 65 20 63 6f 6e 73 74 20 73 74 72 69 6e  vate const strin
4250: 67 20 44 65 66 61 75 6c 74 44 65 62 75 67 46 6f  g DefaultDebugFo
4260: 72 6d 61 74 20 3d 20 22 23 7b 30 3a 30 30 30 7d  rmat = "#{0:000}
4270: 20 40 20 7b 31 7d 3a 20 7b 32 7d 22 3b 0d 0a 20   @ {1}: {2}";.. 
4280: 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
4290: 74 65 20 63 6f 6e 73 74 20 73 74 72 69 6e 67 20  te const string 
42a0: 44 65 66 61 75 6c 74 54 72 61 63 65 46 6f 72 6d  DefaultTraceForm
42b0: 61 74 20 3d 20 22 23 7b 30 3a 30 30 30 7d 20 40  at = "#{0:000} @
42c0: 20 7b 31 7d 3a 20 7b 32 7d 22 3b 0d 0a 0d 0a 20   {1}: {2}";.... 
42d0: 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
42e0: 74 65 20 63 6f 6e 73 74 20 73 74 72 69 6e 67 20  te const string 
42f0: 49 73 6f 38 36 30 31 44 61 74 65 54 69 6d 65 4f  Iso8601DateTimeO
4300: 75 74 70 75 74 46 6f 72 6d 61 74 20 3d 0d 0a 20  utputFormat =.. 
4310: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
4320: 79 79 79 79 2e 4d 4d 2e 64 64 54 48 48 3a 6d 6d  yyyy.MM.ddTHH:mm
4330: 3a 73 73 2e 66 66 66 66 66 66 66 22 3b 0d 0a 20  :ss.fffffff";.. 
4340: 20 20 20 20 20 20 20 20 20 20 20 23 65 6e 64 72             #endr
4350: 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20  egion....       
4360: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
4370: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4380: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4390: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
43a0: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
43b0: 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20          #region 
43c0: 50 72 69 76 61 74 65 20 53 74 61 74 69 63 20 44  Private Static D
43d0: 61 74 61 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ata..           
43e0: 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20   private static 
43f0: 6f 62 6a 65 63 74 20 73 79 6e 63 52 6f 6f 74 20  object syncRoot 
4400: 3d 20 6e 65 77 20 6f 62 6a 65 63 74 28 29 3b 0d  = new object();.
4410: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69  .            pri
4420: 76 61 74 65 20 73 74 61 74 69 63 20 6c 6f 6e 67  vate static long
4430: 20 6e 65 78 74 44 65 62 75 67 49 64 3b 0d 0a 20   nextDebugId;.. 
4440: 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
4450: 74 65 20 73 74 61 74 69 63 20 6c 6f 6e 67 20 6e  te static long n
4460: 65 78 74 54 72 61 63 65 49 64 3b 0d 0a 20 20 20  extTraceId;..   
4470: 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65           private
4480: 20 73 74 61 74 69 63 20 49 4c 69 73 74 3c 54 72   static IList<Tr
4490: 61 63 65 4c 69 73 74 65 6e 65 72 3e 20 64 65 62  aceListener> deb
44a0: 75 67 4c 69 73 74 65 6e 65 72 73 3b 0d 0a 20 20  ugListeners;..  
44b0: 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
44c0: 65 20 73 74 61 74 69 63 20 54 72 61 63 65 50 72  e static TracePr
44d0: 69 6f 72 69 74 79 20 64 65 62 75 67 50 72 69 6f  iority debugPrio
44e0: 72 69 74 79 20 3d 20 54 72 61 63 65 50 72 69 6f  rity = TracePrio
44f0: 72 69 74 79 2e 44 65 66 61 75 6c 74 3b 0d 0a 20  rity.Default;.. 
4500: 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
4510: 74 65 20 73 74 61 74 69 63 20 54 72 61 63 65 50  te static TraceP
4520: 72 69 6f 72 69 74 79 20 74 72 61 63 65 50 72 69  riority tracePri
4530: 6f 72 69 74 79 20 3d 20 54 72 61 63 65 50 72 69  ority = TracePri
4540: 6f 72 69 74 79 2e 44 65 66 61 75 6c 74 3b 0d 0a  ority.Default;..
4550: 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76              priv
4560: 61 74 65 20 73 74 61 74 69 63 20 73 74 72 69 6e  ate static strin
4570: 67 20 64 65 62 75 67 46 6f 72 6d 61 74 20 3d 20  g debugFormat = 
4580: 44 65 66 61 75 6c 74 44 65 62 75 67 46 6f 72 6d  DefaultDebugForm
4590: 61 74 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at;..           
45a0: 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20   private static 
45b0: 73 74 72 69 6e 67 20 74 72 61 63 65 46 6f 72 6d  string traceForm
45c0: 61 74 20 3d 20 44 65 66 61 75 6c 74 54 72 61 63  at = DefaultTrac
45d0: 65 46 6f 72 6d 61 74 3b 0d 0a 20 20 20 20 20 20  eFormat;..      
45e0: 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
45f0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
4600: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4610: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4620: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4630: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4640: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
4650: 20 20 20 23 72 65 67 69 6f 6e 20 50 75 62 6c 69     #region Publi
4660: 63 20 53 74 61 74 69 63 20 50 72 6f 70 65 72 74  c Static Propert
4670: 69 65 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ies..           
4680: 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 54   public static T
4690: 72 61 63 65 50 72 69 6f 72 69 74 79 20 44 65 62  racePriority Deb
46a0: 75 67 50 72 69 6f 72 69 74 79 0d 0a 20 20 20 20  ugPriority..    
46b0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
46c0: 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b             get {
46d0: 20 6c 6f 63 6b 20 28 73 79 6e 63 52 6f 6f 74 29   lock (syncRoot)
46e0: 20 7b 20 72 65 74 75 72 6e 20 64 65 62 75 67 50   { return debugP
46f0: 72 69 6f 72 69 74 79 3b 20 7d 20 7d 0d 0a 20 20  riority; } }..  
4700: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65                se
4710: 74 20 7b 20 6c 6f 63 6b 20 28 73 79 6e 63 52 6f  t { lock (syncRo
4720: 6f 74 29 20 7b 20 64 65 62 75 67 50 72 69 6f 72  ot) { debugPrior
4730: 69 74 79 20 3d 20 76 61 6c 75 65 3b 20 7d 20 7d  ity = value; } }
4740: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
4750: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
4760: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4770: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4780: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4790: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
47a0: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
47b0: 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20    public static 
47c0: 54 72 61 63 65 50 72 69 6f 72 69 74 79 20 54 72  TracePriority Tr
47d0: 61 63 65 50 72 69 6f 72 69 74 79 0d 0a 20 20 20  acePriority..   
47e0: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
47f0: 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20              get 
4800: 7b 20 6c 6f 63 6b 20 28 73 79 6e 63 52 6f 6f 74  { lock (syncRoot
4810: 29 20 7b 20 72 65 74 75 72 6e 20 74 72 61 63 65  ) { return trace
4820: 50 72 69 6f 72 69 74 79 3b 20 7d 20 7d 0d 0a 20  Priority; } }.. 
4830: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
4840: 65 74 20 7b 20 6c 6f 63 6b 20 28 73 79 6e 63 52  et { lock (syncR
4850: 6f 6f 74 29 20 7b 20 74 72 61 63 65 50 72 69 6f  oot) { tracePrio
4860: 72 69 74 79 20 3d 20 76 61 6c 75 65 3b 20 7d 20  rity = value; } 
4870: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
4880: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
4890: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
48a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
48b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
48c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
48d0: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
48e0: 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63     public static
48f0: 20 73 74 72 69 6e 67 20 44 65 62 75 67 46 6f 72   string DebugFor
4900: 6d 61 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20  mat..           
4910: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
4920: 20 20 20 20 67 65 74 20 7b 20 6c 6f 63 6b 20 28      get { lock (
4930: 73 79 6e 63 52 6f 6f 74 29 20 7b 20 72 65 74 75  syncRoot) { retu
4940: 72 6e 20 64 65 62 75 67 46 6f 72 6d 61 74 3b 20  rn debugFormat; 
4950: 7d 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  } }..           
4960: 20 20 20 20 20 73 65 74 20 7b 20 6c 6f 63 6b 20       set { lock 
4970: 28 73 79 6e 63 52 6f 6f 74 29 20 7b 20 64 65 62  (syncRoot) { deb
4980: 75 67 46 6f 72 6d 61 74 20 3d 20 76 61 6c 75 65  ugFormat = value
4990: 3b 20 7d 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  ; } }..         
49a0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
49b0: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
49c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
49d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
49e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
49f0: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
4a00: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74         public st
4a10: 61 74 69 63 20 73 74 72 69 6e 67 20 54 72 61 63  atic string Trac
4a20: 65 46 6f 72 6d 61 74 0d 0a 20 20 20 20 20 20 20  eFormat..       
4a30: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
4a40: 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 6c 6f          get { lo
4a50: 63 6b 20 28 73 79 6e 63 52 6f 6f 74 29 20 7b 20  ck (syncRoot) { 
4a60: 72 65 74 75 72 6e 20 74 72 61 63 65 46 6f 72 6d  return traceForm
4a70: 61 74 3b 20 7d 20 7d 0d 0a 20 20 20 20 20 20 20  at; } }..       
4a80: 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 6c           set { l
4a90: 6f 63 6b 20 28 73 79 6e 63 52 6f 6f 74 29 20 7b  ock (syncRoot) {
4aa0: 20 74 72 61 63 65 46 6f 72 6d 61 74 20 3d 20 76   traceFormat = v
4ab0: 61 6c 75 65 3b 20 7d 20 7d 0d 0a 20 20 20 20 20  alue; } }..     
4ac0: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
4ad0: 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
4ae0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4b20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4b30: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
4b40: 20 20 20 23 72 65 67 69 6f 6e 20 49 6e 74 65 72     #region Inter
4b50: 61 63 74 69 76 65 20 53 75 70 70 6f 72 74 20 4d  active Support M
4b60: 65 74 68 6f 64 73 0d 0a 20 20 20 20 20 20 20 20  ethods..        
4b70: 20 20 20 20 5b 4d 65 74 68 6f 64 49 6d 70 6c 28      [MethodImpl(
4b80: 4d 65 74 68 6f 64 49 6d 70 6c 4f 70 74 69 6f 6e  MethodImplOption
4b90: 73 2e 4e 6f 49 6e 6c 69 6e 69 6e 67 29 5d 0d 0a  s.NoInlining)]..
4ba0: 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
4bb0: 69 63 20 73 74 61 74 69 63 20 44 69 61 6c 6f 67  ic static Dialog
4bc0: 52 65 73 75 6c 74 20 53 68 6f 77 4d 65 73 73 61  Result ShowMessa
4bd0: 67 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ge(..           
4be0: 20 20 20 20 20 54 72 61 63 65 50 72 69 6f 72 69       TracePriori
4bf0: 74 79 20 74 72 61 63 65 50 72 69 6f 72 69 74 79  ty tracePriority
4c00: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
4c10: 20 20 20 54 72 61 63 65 43 61 6c 6c 62 61 63 6b     TraceCallback
4c20: 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d   debugCallback,.
4c30: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
4c40: 20 54 72 61 63 65 43 61 6c 6c 62 61 63 6b 20 74   TraceCallback t
4c50: 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20  raceCallback,.. 
4c60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 41                 A
4c70: 73 73 65 6d 62 6c 79 20 61 73 73 65 6d 62 6c 79  ssembly assembly
4c80: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
4c90: 20 20 20 73 74 72 69 6e 67 20 6d 65 73 73 61 67     string messag
4ca0: 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
4cb0: 20 20 20 20 73 74 72 69 6e 67 20 63 61 74 65 67      string categ
4cc0: 6f 72 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ory,..          
4cd0: 20 20 20 20 20 20 4d 65 73 73 61 67 65 42 6f 78        MessageBox
4ce0: 42 75 74 74 6f 6e 73 20 62 75 74 74 6f 6e 73 2c  Buttons buttons,
4cf0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
4d00: 20 20 4d 65 73 73 61 67 65 42 6f 78 49 63 6f 6e    MessageBoxIcon
4d10: 20 69 63 6f 6e 0d 0a 20 20 20 20 20 20 20 20 20   icon..         
4d20: 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
4d30: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
4d40: 20 20 20 20 20 20 20 20 20 44 69 61 6c 6f 67 52           DialogR
4d50: 65 73 75 6c 74 20 72 65 73 75 6c 74 20 3d 20 44  esult result = D
4d60: 69 61 6c 6f 67 52 65 73 75 6c 74 2e 4f 4b 3b 0d  ialogResult.OK;.
4d70: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
4d80: 20 20 20 44 65 62 75 67 41 6e 64 54 72 61 63 65     DebugAndTrace
4d90: 28 74 72 61 63 65 50 72 69 6f 72 69 74 79 2c 0d  (tracePriority,.
4da0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
4db0: 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61       debugCallba
4dc0: 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63  ck, traceCallbac
4dd0: 6b 2c 20 6d 65 73 73 61 67 65 2c 20 63 61 74 65  k, message, cate
4de0: 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
4df0: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 53 79            if (Sy
4e00: 73 74 65 6d 49 6e 66 6f 72 6d 61 74 69 6f 6e 2e  stemInformation.
4e10: 55 73 65 72 49 6e 74 65 72 61 63 74 69 76 65 29  UserInteractive)
4e20: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
4e30: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
4e40: 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
4e50: 74 69 74 6c 65 20 3d 20 47 65 74 41 73 73 65 6d  title = GetAssem
4e60: 62 6c 79 54 69 74 6c 65 28 61 73 73 65 6d 62 6c  blyTitle(assembl
4e70: 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
4e80: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 74             if (t
4e90: 69 74 6c 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  itle == null).. 
4ea0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4eb0: 20 20 20 20 20 20 20 74 69 74 6c 65 20 3d 20 41         title = A
4ec0: 70 70 6c 69 63 61 74 69 6f 6e 2e 50 72 6f 64 75  pplication.Produ
4ed0: 63 74 4e 61 6d 65 3b 0d 0a 0d 0a 20 20 20 20 20  ctName;....     
4ee0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
4ef0: 65 73 75 6c 74 20 3d 20 4d 65 73 73 61 67 65 42  esult = MessageB
4f00: 6f 78 2e 53 68 6f 77 28 6d 65 73 73 61 67 65 2c  ox.Show(message,
4f10: 20 74 69 74 6c 65 2c 20 62 75 74 74 6f 6e 73 2c   title, buttons,
4f20: 20 69 63 6f 6e 29 3b 0d 0a 0d 0a 20 20 20 20 20   icon);....     
4f30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 44                 D
4f40: 65 62 75 67 41 6e 64 54 72 61 63 65 28 74 72 61  ebugAndTrace(tra
4f50: 63 65 50 72 69 6f 72 69 74 79 2c 0d 0a 20 20 20  cePriority,..   
4f60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4f70: 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61       debugCallba
4f80: 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63  ck, traceCallbac
4f90: 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  k, String.Format
4fa0: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
4fb0: 20 20 20 20 20 20 20 20 20 20 20 22 55 73 65 72             "User
4fc0: 20 63 68 6f 69 63 65 20 6f 66 20 7b 30 7d 2e 22   choice of {0}."
4fd0: 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 72 65 73  , ForDisplay(res
4fe0: 75 6c 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20  ult)),..        
4ff0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5000: 63 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  category);....  
5010: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5020: 20 20 72 65 74 75 72 6e 20 72 65 73 75 6c 74 3b    return result;
5030: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
5040: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
5050: 20 20 20 20 20 20 20 44 65 62 75 67 41 6e 64 54         DebugAndT
5060: 72 61 63 65 28 74 72 61 63 65 50 72 69 6f 72 69  race(tracePriori
5070: 74 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ty,..           
5080: 20 20 20 20 20 20 20 20 20 64 65 62 75 67 43 61           debugCa
5090: 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c  llback, traceCal
50a0: 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f  lback, String.Fo
50b0: 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
50c0: 20 20 20 20 20 20 20 20 20 20 20 22 44 65 66 61             "Defa
50d0: 75 6c 74 20 63 68 6f 69 63 65 20 6f 66 20 7b 30  ult choice of {0
50e0: 7d 2e 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28  }.", ForDisplay(
50f0: 72 65 73 75 6c 74 29 29 2c 0d 0a 20 20 20 20 20  result)),..     
5100: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
5110: 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20  ategory);....   
5120: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
5130: 75 72 6e 20 72 65 73 75 6c 74 3b 0d 0a 20 20 20  urn result;..   
5140: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
5150: 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
5160: 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  on....          
5170: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
5180: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5190: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
51a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
51b0: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
51c0: 20 20 20 20 20 23 72 65 67 69 6f 6e 20 54 72 61       #region Tra
51d0: 63 69 6e 67 20 53 75 70 70 6f 72 74 20 4d 65 74  cing Support Met
51e0: 68 6f 64 73 0d 0a 20 20 20 20 20 20 20 20 20 20  hods..          
51f0: 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20    public static 
5200: 76 6f 69 64 20 53 65 74 75 70 44 65 62 75 67 4c  void SetupDebugL
5210: 69 73 74 65 6e 65 72 73 28 29 0d 0a 20 20 20 20  isteners()..    
5220: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
5230: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 64             if (d
5240: 65 62 75 67 4c 69 73 74 65 6e 65 72 73 20 3d 3d  ebugListeners ==
5250: 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
5260: 20 20 20 20 20 20 20 20 20 20 20 20 64 65 62 75              debu
5270: 67 4c 69 73 74 65 6e 65 72 73 20 3d 20 6e 65 77  gListeners = new
5280: 20 4c 69 73 74 3c 54 72 61 63 65 4c 69 73 74 65   List<TraceListe
5290: 6e 65 72 3e 28 29 3b 0d 0a 0d 0a 20 20 20 20 20  ner>();....     
52a0: 20 20 20 20 20 20 20 20 20 20 20 64 65 62 75 67             debug
52b0: 4c 69 73 74 65 6e 65 72 73 2e 41 64 64 28 6e 65  Listeners.Add(ne
52c0: 77 20 43 6f 6e 73 6f 6c 65 54 72 61 63 65 4c 69  w ConsoleTraceLi
52d0: 73 74 65 6e 65 72 28 29 29 3b 0d 0a 20 20 20 20  stener());..    
52e0: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
52f0: 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
5300: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5310: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5320: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5330: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
5340: 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
5350: 69 63 20 73 74 61 74 69 63 20 6c 6f 6e 67 20 4e  ic static long N
5360: 65 78 74 44 65 62 75 67 49 64 28 29 0d 0a 20 20  extDebugId()..  
5370: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
5380: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
5390: 75 72 6e 20 49 6e 74 65 72 6c 6f 63 6b 65 64 2e  urn Interlocked.
53a0: 49 6e 63 72 65 6d 65 6e 74 28 72 65 66 20 6e 65  Increment(ref ne
53b0: 78 74 44 65 62 75 67 49 64 29 3b 0d 0a 20 20 20  xtDebugId);..   
53c0: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
53d0: 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
53e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
53f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5400: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5410: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
5420: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
5430: 6c 69 63 20 73 74 61 74 69 63 20 6c 6f 6e 67 20  lic static long 
5440: 4e 65 78 74 54 72 61 63 65 49 64 28 29 0d 0a 20  NextTraceId().. 
5450: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
5460: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
5470: 74 75 72 6e 20 49 6e 74 65 72 6c 6f 63 6b 65 64  turn Interlocked
5480: 2e 49 6e 63 72 65 6d 65 6e 74 28 72 65 66 20 6e  .Increment(ref n
5490: 65 78 74 54 72 61 63 65 49 64 29 3b 0d 0a 20 20  extTraceId);..  
54a0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
54b0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
54c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
54d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
54e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
54f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
5500: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
5510: 62 6c 69 63 20 73 74 61 74 69 63 20 73 74 72 69  blic static stri
5520: 6e 67 20 54 69 6d 65 53 74 61 6d 70 28 44 61 74  ng TimeStamp(Dat
5530: 65 54 69 6d 65 20 64 61 74 65 54 69 6d 65 29 0d  eTime dateTime).
5540: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
5550: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5560: 72 65 74 75 72 6e 20 64 61 74 65 54 69 6d 65 2e  return dateTime.
5570: 54 6f 53 74 72 69 6e 67 28 49 73 6f 38 36 30 31  ToString(Iso8601
5580: 44 61 74 65 54 69 6d 65 4f 75 74 70 75 74 46 6f  DateTimeOutputFo
5590: 72 6d 61 74 29 3b 0d 0a 20 20 20 20 20 20 20 20  rmat);..        
55a0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
55b0: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
55c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
55d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
55e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
55f0: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
5600: 20 20 20 20 20 20 20 20 5b 4d 65 74 68 6f 64 49          [MethodI
5610: 6d 70 6c 28 4d 65 74 68 6f 64 49 6d 70 6c 4f 70  mpl(MethodImplOp
5620: 74 69 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e 69 6e 67  tions.NoInlining
5630: 29 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  )]..            
5640: 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 73 74  public static st
5650: 72 69 6e 67 20 47 65 74 4d 65 74 68 6f 64 4e 61  ring GetMethodNa
5660: 6d 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me(..           
5670: 20 20 20 20 20 53 74 61 63 6b 54 72 61 63 65 20       StackTrace 
5680: 73 74 61 63 6b 54 72 61 63 65 2c 0d 0a 20 20 20  stackTrace,..   
5690: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74               int
56a0: 20 6c 65 76 65 6c 0d 0a 20 20 20 20 20 20 20 20   level..        
56b0: 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
56c0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
56d0: 20 20 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20            try.. 
56e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
56f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
5700: 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
5710: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
5720: 20 4e 4f 54 45 3a 20 49 66 20 61 20 76 61 6c 69   NOTE: If a vali
5730: 64 20 73 74 61 63 6b 20 74 72 61 63 65 20 77 61  d stack trace wa
5740: 73 20 6e 6f 74 20 73 75 70 70 6c 69 65 64 20 62  s not supplied b
5750: 79 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 20  y the..         
5760: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
5770: 20 20 20 20 63 61 6c 6c 65 72 2c 20 63 72 65 61      caller, crea
5780: 74 65 20 6f 6e 65 20 6e 6f 77 20 62 61 73 65 64  te one now based
5790: 20 6f 6e 20 74 68 65 20 63 75 72 72 65 6e 74 0d   on the current.
57a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
57b0: 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 65 78       //       ex
57c0: 65 63 75 74 69 6f 6e 20 73 74 61 63 6b 2e 0d 0a  ecution stack...
57d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
57e0: 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
57f0: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
5800: 73 74 61 63 6b 54 72 61 63 65 20 3d 3d 20 6e 75  stackTrace == nu
5810: 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
5820: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
5830: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5840: 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
5850: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5860: 2f 2f 20 4e 4f 54 45 3a 20 47 72 61 62 20 74 68  // NOTE: Grab th
5870: 65 20 63 75 72 72 65 6e 74 20 65 78 65 63 75 74  e current execut
5880: 69 6f 6e 20 73 74 61 63 6b 2e 0d 0a 20 20 20 20  ion stack...    
5890: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
58a0: 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
58b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
58c0: 73 74 61 63 6b 54 72 61 63 65 20 3d 20 6e 65 77  stackTrace = new
58d0: 20 53 74 61 63 6b 54 72 61 63 65 28 29 3b 0d 0a   StackTrace();..
58e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
58f0: 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
5900: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5910: 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 41        // NOTE: A
5920: 6c 77 61 79 73 20 73 6b 69 70 20 74 68 69 73 20  lways skip this 
5930: 63 61 6c 6c 20 66 72 61 6d 65 20 77 68 65 6e 20  call frame when 
5940: 77 65 20 63 61 70 74 75 72 65 0d 0a 20 20 20 20  we capture..    
5950: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5960: 20 20 20 20 2f 2f 20 20 20 20 20 20 20 74 68 65      //       the
5970: 20 73 74 61 63 6b 20 74 72 61 63 65 2e 0d 0a 20   stack trace... 
5980: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5990: 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
59a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
59b0: 20 20 20 6c 65 76 65 6c 2b 2b 3b 0d 0a 20 20 20     level++;..   
59c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
59d0: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
59e0: 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
59f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5a00: 20 20 2f 2f 20 4e 4f 54 45 3a 20 47 65 74 20 74    // NOTE: Get t
5a10: 68 65 20 73 70 65 63 69 66 69 65 64 20 73 74 61  he specified sta
5a20: 63 6b 20 66 72 61 6d 65 20 28 61 6c 77 61 79 73  ck frame (always
5a30: 20 61 64 64 20 6f 6e 65 20 74 6f 0d 0a 20 20 20   add one to..   
5a40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5a50: 20 2f 2f 20 20 20 20 20 20 20 73 6b 69 70 20 74   //       skip t
5a60: 68 69 73 20 6d 65 74 68 6f 64 29 2e 0d 0a 20 20  his method)...  
5a70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5a80: 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
5a90: 20 20 20 20 20 20 20 20 20 20 53 74 61 63 6b 46            StackF
5aa0: 72 61 6d 65 20 73 74 61 63 6b 46 72 61 6d 65 20  rame stackFrame 
5ab0: 3d 20 73 74 61 63 6b 54 72 61 63 65 2e 47 65 74  = stackTrace.Get
5ac0: 46 72 61 6d 65 28 6c 65 76 65 6c 29 3b 0d 0a 0d  Frame(level);...
5ad0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
5ae0: 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
5af0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
5b00: 4e 4f 54 45 3a 20 47 65 74 20 74 68 65 20 6d 65  NOTE: Get the me
5b10: 74 68 6f 64 20 66 6f 72 20 74 68 65 20 73 74 61  thod for the sta
5b20: 63 6b 20 66 72 61 6d 65 2e 0d 0a 20 20 20 20 20  ck frame...     
5b30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
5b40: 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
5b50: 20 20 20 20 20 20 20 4d 65 74 68 6f 64 42 61 73         MethodBas
5b60: 65 20 6d 65 74 68 6f 64 42 61 73 65 20 3d 20 73  e methodBase = s
5b70: 74 61 63 6b 46 72 61 6d 65 2e 47 65 74 4d 65 74  tackFrame.GetMet
5b80: 68 6f 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  hod();....      
5b90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
5ba0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
5bb0: 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 47        // NOTE: G
5bc0: 65 74 20 74 68 65 20 74 79 70 65 20 66 6f 72 20  et the type for 
5bd0: 74 68 65 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20  the method...   
5be0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5bf0: 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
5c00: 20 20 20 20 20 20 20 20 20 54 79 70 65 20 74 79           Type ty
5c10: 70 65 20 3d 20 6d 65 74 68 6f 64 42 61 73 65 2e  pe = methodBase.
5c20: 44 65 63 6c 61 72 69 6e 67 54 79 70 65 3b 0d 0a  DeclaringType;..
5c30: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
5c40: 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
5c50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
5c60: 20 4e 4f 54 45 3a 20 47 65 74 20 74 68 65 20 6e   NOTE: Get the n
5c70: 61 6d 65 20 6f 66 20 74 68 65 20 6d 65 74 68 6f  ame of the metho
5c80: 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  d...            
5c90: 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
5ca0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5cb0: 73 74 72 69 6e 67 20 6e 61 6d 65 20 3d 20 6d 65  string name = me
5cc0: 74 68 6f 64 42 61 73 65 2e 4e 61 6d 65 3b 0d 0a  thodBase.Name;..
5cd0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
5ce0: 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
5cf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
5d00: 20 4e 4f 54 45 3a 20 52 65 74 75 72 6e 20 74 68   NOTE: Return th
5d10: 65 20 70 72 6f 70 65 72 6c 79 20 66 6f 72 6d 61  e properly forma
5d20: 74 74 65 64 20 72 65 73 75 6c 74 2e 0d 0a 20 20  tted result...  
5d30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5d40: 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
5d50: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
5d60: 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d   String.Format(.
5d70: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
5d80: 20 20 20 20 20 20 20 20 20 22 7b 30 7d 7b 31 7d           "{0}{1}
5d90: 7b 32 7d 22 2c 20 74 79 70 65 2e 4e 61 6d 65 2c  {2}", type.Name,
5da0: 20 54 79 70 65 2e 44 65 6c 69 6d 69 74 65 72 2c   Type.Delimiter,
5db0: 20 6e 61 6d 65 29 3b 0d 0a 20 20 20 20 20 20 20   name);..       
5dc0: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
5dd0: 20 20 20 20 20 20 20 20 20 20 20 20 63 61 74 63              catc
5de0: 68 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  h..             
5df0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
5e00: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20            // do 
5e10: 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20  nothing...      
5e20: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
5e30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
5e40: 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 20 20 20  eturn null;..   
5e50: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
5e60: 20 20 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5ea0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
5eb0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
5ec0: 6c 69 63 20 73 74 61 74 69 63 20 76 6f 69 64 20  lic static void 
5ed0: 44 65 62 75 67 43 6f 72 65 28 0d 0a 20 20 20 20  DebugCore(..    
5ee0: 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
5ef0: 6e 67 20 6d 65 73 73 61 67 65 2c 0d 0a 20 20 20  ng message,..   
5f00: 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72               str
5f10: 69 6e 67 20 63 61 74 65 67 6f 72 79 0d 0a 20 20  ing category..  
5f20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d                ).
5f30: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
5f40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5f50: 6c 6f 63 6b 20 28 73 79 6e 63 52 6f 6f 74 29 20  lock (syncRoot) 
5f60: 2f 2a 20 54 52 41 4e 53 41 43 54 49 4f 4e 41 4c  /* TRANSACTIONAL
5f70: 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   */..           
5f80: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
5f90: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
5fa0: 64 65 62 75 67 4c 69 73 74 65 6e 65 72 73 20 21  debugListeners !
5fb0: 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
5fc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
5fd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5fe0: 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20          foreach 
5ff0: 28 54 72 61 63 65 4c 69 73 74 65 6e 65 72 20 6c  (TraceListener l
6000: 69 73 74 65 6e 65 72 20 69 6e 20 64 65 62 75 67  istener in debug
6010: 4c 69 73 74 65 6e 65 72 73 29 0d 0a 20 20 20 20  Listeners)..    
6020: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6030: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
6040: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6050: 20 20 20 6c 69 73 74 65 6e 65 72 2e 57 72 69 74     listener.Writ
6060: 65 4c 69 6e 65 28 6d 65 73 73 61 67 65 2c 20 63  eLine(message, c
6070: 61 74 65 67 6f 72 79 29 3b 0d 0a 20 20 20 20 20  ategory);..     
6080: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6090: 20 20 20 20 20 20 20 6c 69 73 74 65 6e 65 72 2e         listener.
60a0: 46 6c 75 73 68 28 29 3b 0d 0a 20 20 20 20 20 20  Flush();..      
60b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
60c0: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
60d0: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
60e0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
60f0: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
6100: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
6110: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6120: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6130: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6140: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
6150: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
6160: 75 62 6c 69 63 20 73 74 61 74 69 63 20 76 6f 69  ublic static voi
6170: 64 20 54 72 61 63 65 43 6f 72 65 28 0d 0a 20 20  d TraceCore(..  
6180: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
6190: 72 69 6e 67 20 6d 65 73 73 61 67 65 2c 0d 0a 20  ring message,.. 
61a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
61b0: 74 72 69 6e 67 20 63 61 74 65 67 6f 72 79 0d 0a  tring category..
61c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
61d0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
61e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
61f0: 20 20 6c 6f 63 6b 20 28 73 79 6e 63 52 6f 6f 74    lock (syncRoot
6200: 29 20 2f 2a 20 54 52 41 4e 53 41 43 54 49 4f 4e  ) /* TRANSACTION
6210: 41 4c 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20  AL */..         
6220: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
6230: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
6240: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
6250: 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 57        // NOTE: W
6260: 72 69 74 65 20 74 68 65 20 6d 65 73 73 61 67 65  rite the message
6270: 20 74 6f 20 61 6c 6c 20 74 68 65 20 61 63 74 69   to all the acti
6280: 76 65 20 74 72 61 63 65 0d 0a 20 20 20 20 20 20  ve trace..      
6290: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
62a0: 20 20 20 20 20 20 20 6c 69 73 74 65 6e 65 72 73         listeners
62b0: 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
62c0: 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
62d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
62e0: 72 61 63 65 2e 57 72 69 74 65 4c 69 6e 65 28 6d  race.WriteLine(m
62f0: 65 73 73 61 67 65 2c 20 63 61 74 65 67 6f 72 79  essage, category
6300: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
6310: 20 20 20 20 20 20 20 20 54 72 61 63 65 2e 46 6c          Trace.Fl
6320: 75 73 68 28 29 3b 0d 0a 20 20 20 20 20 20 20 20  ush();..        
6330: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
6340: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
6350: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
6360: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6370: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6380: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6390: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
63a0: 20 20 20 20 20 20 20 20 20 20 20 5b 4d 65 74 68             [Meth
63b0: 6f 64 49 6d 70 6c 28 4d 65 74 68 6f 64 49 6d 70  odImpl(MethodImp
63c0: 6c 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e  lOptions.NoInlin
63d0: 69 6e 67 29 5d 0d 0a 20 20 20 20 20 20 20 20 20  ing)]..         
63e0: 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63     public static
63f0: 20 73 74 72 69 6e 67 20 44 65 62 75 67 41 6e 64   string DebugAnd
6400: 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20  Trace(..        
6410: 20 20 20 20 20 20 20 20 54 72 61 63 65 50 72 69          TracePri
6420: 6f 72 69 74 79 20 74 72 61 63 65 50 72 69 6f 72  ority tracePrior
6430: 69 74 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ity,..          
6440: 20 20 20 20 20 20 54 72 61 63 65 43 61 6c 6c 62        TraceCallb
6450: 61 63 6b 20 64 65 62 75 67 43 61 6c 6c 62 61 63  ack debugCallbac
6460: 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  k,..            
6470: 20 20 20 20 54 72 61 63 65 43 61 6c 6c 62 61 63      TraceCallbac
6480: 6b 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c  k traceCallback,
6490: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
64a0: 20 20 45 78 63 65 70 74 69 6f 6e 20 65 78 63 65    Exception exce
64b0: 70 74 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20  ption,..        
64c0: 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 63          string c
64d0: 61 74 65 67 6f 72 79 0d 0a 20 20 20 20 20 20 20  ategory..       
64e0: 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
64f0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
6500: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 65             if (e
6510: 78 63 65 70 74 69 6f 6e 20 21 3d 20 6e 75 6c 6c  xception != null
6520: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
6530: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 44 65         return De
6540: 62 75 67 41 6e 64 54 72 61 63 65 28 74 72 61 63  bugAndTrace(trac
6550: 65 50 72 69 6f 72 69 74 79 2c 20 64 65 62 75 67  ePriority, debug
6560: 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20  Callback,..     
6570: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6580: 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b     traceCallback
6590: 2c 20 6e 65 77 20 53 74 61 63 6b 54 72 61 63 65  , new StackTrace
65a0: 28 65 78 63 65 70 74 69 6f 6e 2c 20 74 72 75 65  (exception, true
65b0: 29 2c 20 30 2c 0d 0a 20 20 20 20 20 20 20 20 20  ), 0,..         
65c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
65d0: 78 63 65 70 74 69 6f 6e 2e 54 6f 53 74 72 69 6e  xception.ToStrin
65e0: 67 28 29 2c 20 63 61 74 65 67 6f 72 79 29 3b 0d  g(), category);.
65f0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
6600: 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d     return null;.
6610: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
6620: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
6630: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6640: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6650: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6660: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6670: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
6680: 20 5b 4d 65 74 68 6f 64 49 6d 70 6c 28 4d 65 74   [MethodImpl(Met
6690: 68 6f 64 49 6d 70 6c 4f 70 74 69 6f 6e 73 2e 4e  hodImplOptions.N
66a0: 6f 49 6e 6c 69 6e 69 6e 67 29 5d 0d 0a 20 20 20  oInlining)]..   
66b0: 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
66c0: 73 74 61 74 69 63 20 73 74 72 69 6e 67 20 44 65  static string De
66d0: 62 75 67 41 6e 64 54 72 61 63 65 28 0d 0a 20 20  bugAndTrace(..  
66e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
66f0: 61 63 65 50 72 69 6f 72 69 74 79 20 74 72 61 63  acePriority trac
6700: 65 50 72 69 6f 72 69 74 79 2c 0d 0a 20 20 20 20  ePriority,..    
6710: 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
6720: 65 43 61 6c 6c 62 61 63 6b 20 64 65 62 75 67 43  eCallback debugC
6730: 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20  allback,..      
6740: 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 43            TraceC
6750: 61 6c 6c 62 61 63 6b 20 74 72 61 63 65 43 61 6c  allback traceCal
6760: 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20  lback,..        
6770: 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6d          string m
6780: 65 73 73 61 67 65 2c 0d 0a 20 20 20 20 20 20 20  essage,..       
6790: 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
67a0: 63 61 74 65 67 6f 72 79 0d 0a 20 20 20 20 20 20  category..      
67b0: 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
67c0: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
67d0: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
67e0: 72 6e 20 44 65 62 75 67 41 6e 64 54 72 61 63 65  rn DebugAndTrace
67f0: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
6800: 20 20 20 20 20 20 20 74 72 61 63 65 50 72 69 6f         tracePrio
6810: 72 69 74 79 2c 20 64 65 62 75 67 43 61 6c 6c 62  rity, debugCallb
6820: 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61  ack, traceCallba
6830: 63 6b 2c 20 6e 75 6c 6c 2c 20 31 2c 0d 0a 20 20  ck, null, 1,..  
6840: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6850: 20 20 6d 65 73 73 61 67 65 2c 20 63 61 74 65 67    message, categ
6860: 6f 72 79 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ory);..         
6870: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
6880: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
6890: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
68a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
68b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
68c0: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
68d0: 20 20 20 20 20 20 20 5b 4d 65 74 68 6f 64 49 6d         [MethodIm
68e0: 70 6c 28 4d 65 74 68 6f 64 49 6d 70 6c 4f 70 74  pl(MethodImplOpt
68f0: 69 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e 69 6e 67 29  ions.NoInlining)
6900: 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ]..            p
6910: 72 69 76 61 74 65 20 73 74 61 74 69 63 20 73 74  rivate static st
6920: 72 69 6e 67 20 44 65 62 75 67 41 6e 64 54 72 61  ring DebugAndTra
6930: 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ce(..           
6940: 20 20 20 20 20 54 72 61 63 65 50 72 69 6f 72 69       TracePriori
6950: 74 79 20 74 72 61 63 65 50 72 69 6f 72 69 74 79  ty tracePriority
6960: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
6970: 20 20 20 54 72 61 63 65 43 61 6c 6c 62 61 63 6b     TraceCallback
6980: 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d   debugCallback,.
6990: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
69a0: 20 54 72 61 63 65 43 61 6c 6c 62 61 63 6b 20 74   TraceCallback t
69b0: 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20  raceCallback,.. 
69c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53                 S
69d0: 74 61 63 6b 54 72 61 63 65 20 73 74 61 63 6b 54  tackTrace stackT
69e0: 72 61 63 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  race,..         
69f0: 20 20 20 20 20 20 20 69 6e 74 20 6c 65 76 65 6c         int level
6a00: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
6a10: 20 20 20 73 74 72 69 6e 67 20 6d 65 73 73 61 67     string messag
6a20: 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
6a30: 20 20 20 20 73 74 72 69 6e 67 20 63 61 74 65 67      string categ
6a40: 6f 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ory..           
6a50: 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
6a60: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
6a70: 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
6a80: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f             // NO
6a90: 54 45 3a 20 41 6c 77 61 79 73 20 73 6b 69 70 20  TE: Always skip 
6aa0: 74 68 69 73 20 63 61 6c 6c 20 66 72 61 6d 65 20  this call frame 
6ab0: 69 66 20 74 68 65 20 73 74 61 63 6b 20 74 72 61  if the stack tra
6ac0: 63 65 20 69 73 0d 0a 20 20 20 20 20 20 20 20 20  ce is..         
6ad0: 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
6ae0: 67 6f 69 6e 67 20 74 6f 20 62 65 20 63 61 70 74  going to be capt
6af0: 75 72 65 64 20 62 79 20 47 65 74 4d 65 74 68 6f  ured by GetMetho
6b00: 64 4e 61 6d 65 2e 0d 0a 20 20 20 20 20 20 20 20  dName...        
6b10: 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
6b20: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
6b30: 73 74 61 63 6b 54 72 61 63 65 20 3d 3d 20 6e 75  stackTrace == nu
6b40: 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
6b50: 20 20 20 20 20 20 20 20 20 6c 65 76 65 6c 2b 2b           level++
6b60: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
6b70: 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
6b80: 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45           // NOTE
6b90: 3a 20 46 6f 72 6d 61 74 20 74 68 65 20 6d 65 73  : Format the mes
6ba0: 73 61 67 65 20 66 6f 72 20 64 69 73 70 6c 61 79  sage for display
6bb0: 20 28 6f 6e 63 65 29 2e 0d 0a 20 20 20 20 20 20   (once)...      
6bc0: 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
6bd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
6be0: 72 69 6e 67 20 66 6f 72 6d 61 74 74 65 64 20 3d  ring formatted =
6bf0: 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 22   String.Format("
6c00: 7b 30 7d 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20  {0}: {1}",..    
6c10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6c20: 47 65 74 4d 65 74 68 6f 64 4e 61 6d 65 28 73 74  GetMethodName(st
6c30: 61 63 6b 54 72 61 63 65 2c 20 6c 65 76 65 6c 29  ackTrace, level)
6c40: 2c 20 6d 65 73 73 61 67 65 29 3b 0d 0a 0d 0a 20  , message);.... 
6c50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
6c60: 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
6c70: 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 49 66 20 74     // NOTE: If t
6c80: 68 65 20 64 65 62 75 67 20 63 61 6c 6c 62 61 63  he debug callbac
6c90: 6b 20 69 73 20 69 6e 76 61 6c 69 64 20 6f 72 20  k is invalid or 
6ca0: 74 68 65 20 74 72 61 63 65 20 70 72 69 6f 72 69  the trace priori
6cb0: 74 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ty..            
6cc0: 20 20 20 20 2f 2f 20 20 20 20 20 20 20 6f 66 20      //       of 
6cd0: 74 68 69 73 20 6d 65 73 73 61 67 65 20 69 73 20  this message is 
6ce0: 6c 65 73 73 20 74 68 61 6e 20 77 68 61 74 20 77  less than what w
6cf0: 65 20 63 75 72 72 65 6e 74 6c 79 20 77 61 6e 74  e currently want
6d00: 20 74 6f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   to..           
6d10: 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 64 65       //       de
6d20: 62 75 67 2c 20 73 6b 69 70 20 69 74 2e 0d 0a 20  bug, skip it... 
6d30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
6d40: 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
6d50: 20 20 20 69 66 20 28 28 64 65 62 75 67 43 61 6c     if ((debugCal
6d60: 6c 62 61 63 6b 20 21 3d 20 6e 75 6c 6c 29 20 26  lback != null) &
6d70: 26 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  &..             
6d80: 20 20 20 20 20 20 20 28 74 72 61 63 65 50 72 69         (tracePri
6d90: 6f 72 69 74 79 20 3e 3d 20 44 65 62 75 67 50 72  ority >= DebugPr
6da0: 69 6f 72 69 74 79 29 29 0d 0a 20 20 20 20 20 20  iority))..      
6db0: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
6dc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6dd0: 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
6de0: 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45           // NOTE
6df0: 3a 20 49 6e 76 6f 6b 65 20 74 68 65 20 64 65 62  : Invoke the deb
6e00: 75 67 20 63 61 6c 6c 62 61 63 6b 20 77 69 74 68  ug callback with
6e10: 20 74 68 65 20 66 6f 72 6d 61 74 74 65 64 0d 0a   the formatted..
6e20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6e30: 20 20 20 20 2f 2f 20 20 20 20 20 20 20 6d 65 73      //       mes
6e40: 73 61 67 65 20 61 6e 64 20 74 68 65 20 63 61 74  sage and the cat
6e50: 65 67 6f 72 79 20 73 70 65 63 69 66 69 65 64 20  egory specified 
6e60: 62 79 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20  by the..        
6e70: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
6e80: 20 20 20 20 20 63 61 6c 6c 65 72 2e 0d 0a 20 20       caller...  
6e90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6ea0: 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
6eb0: 20 20 20 20 20 20 20 20 20 20 64 65 62 75 67 43            debugC
6ec0: 61 6c 6c 62 61 63 6b 28 66 6f 72 6d 61 74 74 65  allback(formatte
6ed0: 64 2c 20 63 61 74 65 67 6f 72 79 29 3b 0d 0a 20  d, category);.. 
6ee0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
6ef0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
6f00: 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
6f10: 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a          // NOTE:
6f20: 20 49 66 20 74 68 65 20 74 72 61 63 65 20 63 61   If the trace ca
6f30: 6c 6c 62 61 63 6b 20 69 73 20 69 6e 76 61 6c 69  llback is invali
6f40: 64 20 6f 72 20 74 68 65 20 74 72 61 63 65 20 70  d or the trace p
6f50: 72 69 6f 72 69 74 79 0d 0a 20 20 20 20 20 20 20  riority..       
6f60: 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
6f70: 20 20 6f 66 20 74 68 69 73 20 6d 65 73 73 61 67    of this messag
6f80: 65 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20 77  e is less than w
6f90: 68 61 74 20 77 65 20 63 75 72 72 65 6e 74 6c 79  hat we currently
6fa0: 20 77 61 6e 74 20 74 6f 0d 0a 20 20 20 20 20 20   want to..      
6fb0: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
6fc0: 20 20 20 74 72 61 63 65 2c 20 73 6b 69 70 20 69     trace, skip i
6fd0: 74 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t...            
6fe0: 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
6ff0: 20 20 20 20 20 20 20 20 69 66 20 28 28 74 72 61          if ((tra
7000: 63 65 43 61 6c 6c 62 61 63 6b 20 21 3d 20 6e 75  ceCallback != nu
7010: 6c 6c 29 20 26 26 0d 0a 20 20 20 20 20 20 20 20  ll) &&..        
7020: 20 20 20 20 20 20 20 20 20 20 20 20 28 74 72 61              (tra
7030: 63 65 50 72 69 6f 72 69 74 79 20 3e 3d 20 54 72  cePriority >= Tr
7040: 61 63 65 50 72 69 6f 72 69 74 79 29 29 0d 0a 20  acePriority)).. 
7050: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
7060: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
7070: 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
7080: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
7090: 20 4e 4f 54 45 3a 20 49 6e 76 6f 6b 65 20 74 68   NOTE: Invoke th
70a0: 65 20 74 72 61 63 65 20 63 61 6c 6c 62 61 63 6b  e trace callback
70b0: 20 77 69 74 68 20 74 68 65 20 66 6f 72 6d 61 74   with the format
70c0: 74 65 64 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ted..           
70d0: 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
70e0: 20 20 6d 65 73 73 61 67 65 20 61 6e 64 20 74 68    message and th
70f0: 65 20 63 61 74 65 67 6f 72 79 20 73 70 65 63 69  e category speci
7100: 66 69 65 64 20 62 79 20 74 68 65 0d 0a 20 20 20  fied by the..   
7110: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7120: 20 2f 2f 20 20 20 20 20 20 20 63 61 6c 6c 65 72   //       caller
7130: 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
7140: 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
7150: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
7160: 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 66 6f 72  raceCallback(for
7170: 6d 61 74 74 65 64 2c 20 63 61 74 65 67 6f 72 79  matted, category
7180: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
7190: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
71a0: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
71b0: 6d 65 73 73 61 67 65 3b 0d 0a 20 20 20 20 20 20  message;..      
71c0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
71d0: 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d       #endregion.
71e0: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..    
71f0: 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
7200: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
7210: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7220: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7230: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7240: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7250: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65  /....        #re
7260: 67 69 6f 6e 20 4d 6f 63 6b 52 65 67 69 73 74 72  gion MockRegistr
7270: 79 20 43 6c 61 73 73 0d 0a 20 20 20 20 20 20 20  y Class..       
7280: 20 70 72 69 76 61 74 65 20 73 65 61 6c 65 64 20   private sealed 
7290: 63 6c 61 73 73 20 4d 6f 63 6b 52 65 67 69 73 74  class MockRegist
72a0: 72 79 20 3a 20 49 44 69 73 70 6f 73 61 62 6c 65  ry : IDisposable
72b0: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
72c0: 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e           #region
72d0: 20 50 75 62 6c 69 63 20 43 6f 6e 73 74 72 75 63   Public Construc
72e0: 74 6f 72 73 0d 0a 20 20 20 20 20 20 20 20 20 20  tors..          
72f0: 20 20 70 75 62 6c 69 63 20 4d 6f 63 6b 52 65 67    public MockReg
7300: 69 73 74 72 79 28 29 0d 0a 20 20 20 20 20 20 20  istry()..       
7310: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
7320: 20 20 20 20 20 20 20 20 77 68 61 74 49 66 20 3d          whatIf =
7330: 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20   true;..        
7340: 20 20 20 20 20 20 20 20 72 65 61 64 4f 6e 6c 79          readOnly
7350: 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20   = true;..      
7360: 20 20 20 20 20 20 20 20 20 20 73 61 66 65 20 3d            safe =
7370: 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20   true;..        
7380: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
7390: 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
73e0: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 4d          public M
73f0: 6f 63 6b 52 65 67 69 73 74 72 79 28 0d 0a 20 20  ockRegistry(..  
7400: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f                bo
7410: 6f 6c 20 77 68 61 74 49 66 0d 0a 20 20 20 20 20  ol whatIf..     
7420: 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
7430: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3a 20                : 
7440: 74 68 69 73 28 29 0d 0a 20 20 20 20 20 20 20 20  this()..        
7450: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
7460: 20 20 20 20 20 20 20 74 68 69 73 2e 77 68 61 74         this.what
7470: 49 66 20 3d 20 77 68 61 74 49 66 3b 0d 0a 20 20  If = whatIf;..  
7480: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
7490: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
74a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
74b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
74c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
74d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
74e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
74f0: 62 6c 69 63 20 4d 6f 63 6b 52 65 67 69 73 74 72  blic MockRegistr
7500: 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y(..            
7510: 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c      bool whatIf,
7520: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
7530: 20 20 62 6f 6f 6c 20 72 65 61 64 4f 6e 6c 79 0d    bool readOnly.
7540: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
7550: 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   )..            
7560: 20 20 20 20 3a 20 74 68 69 73 28 77 68 61 74 49      : this(whatI
7570: 66 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  f)..            
7580: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
7590: 20 20 20 74 68 69 73 2e 72 65 61 64 4f 6e 6c 79     this.readOnly
75a0: 20 3d 20 72 65 61 64 4f 6e 6c 79 3b 0d 0a 20 20   = readOnly;..  
75b0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
75c0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
75d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
75e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
75f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7600: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
7610: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
7620: 62 6c 69 63 20 4d 6f 63 6b 52 65 67 69 73 74 72  blic MockRegistr
7630: 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y(..            
7640: 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c      bool whatIf,
7650: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
7660: 20 20 62 6f 6f 6c 20 72 65 61 64 4f 6e 6c 79 2c    bool readOnly,
7670: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
7680: 20 20 62 6f 6f 6c 20 73 61 66 65 0d 0a 20 20 20    bool safe..   
7690: 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a               )..
76a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
76b0: 3a 20 74 68 69 73 28 77 68 61 74 49 66 2c 20 72  : this(whatIf, r
76c0: 65 61 64 4f 6e 6c 79 29 0d 0a 20 20 20 20 20 20  eadOnly)..      
76d0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
76e0: 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 73 61           this.sa
76f0: 66 65 20 3d 20 73 61 66 65 3b 0d 0a 20 20 20 20  fe = safe;..    
7700: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
7710: 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f         #endregio
7720: 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n....           
7730: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
7740: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7750: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7760: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7770: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
7780: 20 20 20 20 23 72 65 67 69 6f 6e 20 50 75 62 6c      #region Publ
7790: 69 63 20 50 72 6f 70 65 72 74 69 65 73 0d 0a 20  ic Properties.. 
77a0: 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
77b0: 74 65 20 62 6f 6f 6c 20 77 68 61 74 49 66 3b 0d  te bool whatIf;.
77c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
77d0: 6c 69 63 20 62 6f 6f 6c 20 57 68 61 74 49 66 0d  lic bool WhatIf.
77e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
77f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7800: 67 65 74 20 7b 20 43 68 65 63 6b 44 69 73 70 6f  get { CheckDispo
7810: 73 65 64 28 29 3b 20 72 65 74 75 72 6e 20 77 68  sed(); return wh
7820: 61 74 49 66 3b 20 7d 0d 0a 20 20 20 20 20 20 20  atIf; }..       
7830: 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 43           set { C
7840: 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 20  heckDisposed(); 
7850: 77 68 61 74 49 66 20 3d 20 76 61 6c 75 65 3b 20  whatIf = value; 
7860: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
7870: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
7880: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7890: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
78a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
78b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
78c0: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
78d0: 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20     private bool 
78e0: 72 65 61 64 4f 6e 6c 79 3b 0d 0a 20 20 20 20 20  readOnly;..     
78f0: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f         public bo
7900: 6f 6c 20 52 65 61 64 4f 6e 6c 79 0d 0a 20 20 20  ol ReadOnly..   
7910: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
7920: 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20              get 
7930: 7b 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28  { CheckDisposed(
7940: 29 3b 20 72 65 74 75 72 6e 20 72 65 61 64 4f 6e  ); return readOn
7950: 6c 79 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  ly; }..         
7960: 20 20 20 20 20 20 20 73 65 74 20 7b 20 43 68 65         set { Che
7970: 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 20 72 65  ckDisposed(); re
7980: 61 64 4f 6e 6c 79 20 3d 20 76 61 6c 75 65 3b 20  adOnly = value; 
7990: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
79a0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
79b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
79c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
79d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
79e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
79f0: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
7a00: 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20     private bool 
7a10: 73 61 66 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  safe;..         
7a20: 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 53     public bool S
7a30: 61 66 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  afe..           
7a40: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
7a50: 20 20 20 20 67 65 74 20 7b 20 43 68 65 63 6b 44      get { CheckD
7a60: 69 73 70 6f 73 65 64 28 29 3b 20 72 65 74 75 72  isposed(); retur
7a70: 6e 20 73 61 66 65 3b 20 7d 0d 0a 20 20 20 20 20  n safe; }..     
7a80: 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b             set {
7a90: 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29   CheckDisposed()
7aa0: 3b 20 73 61 66 65 20 3d 20 76 61 6c 75 65 3b 20  ; safe = value; 
7ab0: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
7ac0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
7ad0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7ae0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7af0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7b00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7b10: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
7b20: 20 20 20 70 72 69 76 61 74 65 20 4d 6f 63 6b 52     private MockR
7b30: 65 67 69 73 74 72 79 4b 65 79 20 63 6c 61 73 73  egistryKey class
7b40: 65 73 52 6f 6f 74 3b 0d 0a 20 20 20 20 20 20 20  esRoot;..       
7b50: 20 20 20 20 20 70 75 62 6c 69 63 20 4d 6f 63 6b       public Mock
7b60: 52 65 67 69 73 74 72 79 4b 65 79 20 43 6c 61 73  RegistryKey Clas
7b70: 73 65 73 52 6f 6f 74 0d 0a 20 20 20 20 20 20 20  sesRoot..       
7b80: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
7b90: 20 20 20 20 20 20 20 20 67 65 74 0d 0a 20 20 20          get..   
7ba0: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
7bb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7bc0: 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65      CheckDispose
7bd0: 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  d();....        
7be0: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
7bf0: 63 6c 61 73 73 65 73 52 6f 6f 74 20 3d 3d 20 6e  classesRoot == n
7c00: 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
7c10: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
7c20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7c30: 20 20 20 20 20 63 6c 61 73 73 65 73 52 6f 6f 74       classesRoot
7c40: 20 3d 20 6e 65 77 20 4d 6f 63 6b 52 65 67 69 73   = new MockRegis
7c50: 74 72 79 4b 65 79 28 0d 0a 20 20 20 20 20 20 20  tryKey(..       
7c60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7c70: 20 20 20 20 20 52 65 67 69 73 74 72 79 2e 43 6c       Registry.Cl
7c80: 61 73 73 65 73 52 6f 6f 74 2c 20 77 68 61 74 49  assesRoot, whatI
7c90: 66 2c 20 72 65 61 64 4f 6e 6c 79 2c 20 73 61 66  f, readOnly, saf
7ca0: 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e);..           
7cb0: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
7cc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7cd0: 20 20 72 65 74 75 72 6e 20 63 6c 61 73 73 65 73    return classes
7ce0: 52 6f 6f 74 3b 0d 0a 20 20 20 20 20 20 20 20 20  Root;..         
7cf0: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
7d00: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
7d10: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
7d20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7d30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7d40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7d50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
7d60: 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
7d70: 65 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65  e MockRegistryKe
7d80: 79 20 63 75 72 72 65 6e 74 43 6f 6e 66 69 67 3b  y currentConfig;
7d90: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
7da0: 62 6c 69 63 20 4d 6f 63 6b 52 65 67 69 73 74 72  blic MockRegistr
7db0: 79 4b 65 79 20 43 75 72 72 65 6e 74 43 6f 6e 66  yKey CurrentConf
7dc0: 69 67 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ig..            
7dd0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
7de0: 20 20 20 67 65 74 0d 0a 20 20 20 20 20 20 20 20     get..        
7df0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
7e00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43                 C
7e10: 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d  heckDisposed();.
7e20: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
7e30: 20 20 20 20 20 20 20 69 66 20 28 63 75 72 72 65         if (curre
7e40: 6e 74 43 6f 6e 66 69 67 20 3d 3d 20 6e 75 6c 6c  ntConfig == null
7e50: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
7e60: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
7e70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7e80: 20 20 63 75 72 72 65 6e 74 43 6f 6e 66 69 67 20    currentConfig 
7e90: 3d 20 6e 65 77 20 4d 6f 63 6b 52 65 67 69 73 74  = new MockRegist
7ea0: 72 79 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20  ryKey(..        
7eb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7ec0: 20 20 20 20 52 65 67 69 73 74 72 79 2e 43 75 72      Registry.Cur
7ed0: 72 65 6e 74 43 6f 6e 66 69 67 2c 20 77 68 61 74  rentConfig, what
7ee0: 49 66 2c 20 72 65 61 64 4f 6e 6c 79 2c 20 73 61  If, readOnly, sa
7ef0: 66 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  fe);..          
7f00: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
7f10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7f20: 20 20 20 72 65 74 75 72 6e 20 63 75 72 72 65 6e     return curren
7f30: 74 43 6f 6e 66 69 67 3b 0d 0a 20 20 20 20 20 20  tConfig;..      
7f40: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
7f50: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
7f60: 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
7f70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7f80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7f90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7fa0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
7fb0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69  .            pri
7fc0: 76 61 74 65 20 4d 6f 63 6b 52 65 67 69 73 74 72  vate MockRegistr
7fd0: 79 4b 65 79 20 63 75 72 72 65 6e 74 55 73 65 72  yKey currentUser
7fe0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ;..            p
7ff0: 75 62 6c 69 63 20 4d 6f 63 6b 52 65 67 69 73 74  ublic MockRegist
8000: 72 79 4b 65 79 20 43 75 72 72 65 6e 74 55 73 65  ryKey CurrentUse
8010: 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  r..            {
8020: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
8030: 20 20 67 65 74 0d 0a 20 20 20 20 20 20 20 20 20    get..         
8040: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
8050: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43 68                Ch
8060: 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a  eckDisposed();..
8070: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
8080: 20 20 20 20 20 20 69 66 20 28 63 75 72 72 65 6e        if (curren
8090: 74 55 73 65 72 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  tUser == null)..
80a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
80b0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
80c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
80d0: 75 72 72 65 6e 74 55 73 65 72 20 3d 20 6e 65 77  urrentUser = new
80e0: 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79   MockRegistryKey
80f0: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
8100: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52                 R
8110: 65 67 69 73 74 72 79 2e 43 75 72 72 65 6e 74 55  egistry.CurrentU
8120: 73 65 72 2c 20 77 68 61 74 49 66 2c 20 72 65 61  ser, whatIf, rea
8130: 64 4f 6e 6c 79 2c 20 73 61 66 65 29 3b 0d 0a 20  dOnly, safe);.. 
8140: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8150: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
8160: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
8170: 72 6e 20 63 75 72 72 65 6e 74 55 73 65 72 3b 0d  rn currentUser;.
8180: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
8190: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
81a0: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
81b0: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
81c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
81d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
81e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
81f0: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
8200: 20 20 20 20 70 72 69 76 61 74 65 20 4d 6f 63 6b      private Mock
8210: 52 65 67 69 73 74 72 79 4b 65 79 20 64 79 6e 44  RegistryKey dynD
8220: 61 74 61 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ata;..          
8230: 20 20 70 75 62 6c 69 63 20 4d 6f 63 6b 52 65 67    public MockReg
8240: 69 73 74 72 79 4b 65 79 20 44 79 6e 44 61 74 61  istryKey DynData
8250: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
8260: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
8270: 20 67 65 74 0d 0a 20 20 20 20 20 20 20 20 20 20   get..          
8280: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
8290: 20 20 20 20 20 20 20 20 20 20 20 20 20 43 68 65               Che
82a0: 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 0d  ckDisposed();...
82b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
82c0: 20 20 20 20 20 69 66 20 28 64 79 6e 44 61 74 61       if (dynData
82d0: 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
82e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
82f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
8300: 20 20 20 20 20 20 20 20 20 20 64 79 6e 44 61 74            dynDat
8310: 61 20 3d 20 6e 65 77 20 4d 6f 63 6b 52 65 67 69  a = new MockRegi
8320: 73 74 72 79 4b 65 79 28 0d 0a 20 20 20 20 20 20  stryKey(..      
8330: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8340: 20 20 20 20 20 20 52 65 67 69 73 74 72 79 2e 44        Registry.D
8350: 79 6e 44 61 74 61 2c 20 77 68 61 74 49 66 2c 20  ynData, whatIf, 
8360: 72 65 61 64 4f 6e 6c 79 2c 20 73 61 66 65 29 3b  readOnly, safe);
8370: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
8380: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
8390: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
83a0: 65 74 75 72 6e 20 64 79 6e 44 61 74 61 3b 0d 0a  eturn dynData;..
83b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
83c0: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
83d0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
83e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
83f0: 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
8430: 20 20 20 70 72 69 76 61 74 65 20 4d 6f 63 6b 52     private MockR
8440: 65 67 69 73 74 72 79 4b 65 79 20 6c 6f 63 61 6c  egistryKey local
8450: 4d 61 63 68 69 6e 65 3b 0d 0a 20 20 20 20 20 20  Machine;..      
8460: 20 20 20 20 20 20 70 75 62 6c 69 63 20 4d 6f 63        public Moc
8470: 6b 52 65 67 69 73 74 72 79 4b 65 79 20 4c 6f 63  kRegistryKey Loc
8480: 61 6c 4d 61 63 68 69 6e 65 0d 0a 20 20 20 20 20  alMachine..     
8490: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
84a0: 20 20 20 20 20 20 20 20 20 20 67 65 74 0d 0a 20            get.. 
84b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
84c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
84d0: 20 20 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f        CheckDispo
84e0: 73 65 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  sed();....      
84f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
8500: 20 28 6c 6f 63 61 6c 4d 61 63 68 69 6e 65 20 3d   (localMachine =
8510: 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
8520: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
8530: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8540: 20 20 20 20 20 20 20 20 6c 6f 63 61 6c 4d 61 63          localMac
8550: 68 69 6e 65 20 3d 20 6e 65 77 20 4d 6f 63 6b 52  hine = new MockR
8560: 65 67 69 73 74 72 79 4b 65 79 28 0d 0a 20 20 20  egistryKey(..   
8570: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8580: 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74 72           Registr
8590: 79 2e 4c 6f 63 61 6c 4d 61 63 68 69 6e 65 2c 20  y.LocalMachine, 
85a0: 77 68 61 74 49 66 2c 20 72 65 61 64 4f 6e 6c 79  whatIf, readOnly
85b0: 2c 20 73 61 66 65 29 3b 0d 0a 20 20 20 20 20 20  , safe);..      
85c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
85d0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
85e0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6c 6f         return lo
85f0: 63 61 6c 4d 61 63 68 69 6e 65 3b 0d 0a 20 20 20  calMachine;..   
8600: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
8610: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
8620: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
8630: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8640: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8650: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8660: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8670: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
8680: 70 72 69 76 61 74 65 20 4d 6f 63 6b 52 65 67 69  private MockRegi
8690: 73 74 72 79 4b 65 79 20 70 65 72 66 6f 72 6d 61  stryKey performa
86a0: 6e 63 65 44 61 74 61 3b 0d 0a 20 20 20 20 20 20  nceData;..      
86b0: 20 20 20 20 20 20 70 75 62 6c 69 63 20 4d 6f 63        public Moc
86c0: 6b 52 65 67 69 73 74 72 79 4b 65 79 20 50 65 72  kRegistryKey Per
86d0: 66 6f 72 6d 61 6e 63 65 44 61 74 61 0d 0a 20 20  formanceData..  
86e0: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
86f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74               get
8700: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
8710: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
8720: 20 20 20 20 20 20 20 20 20 43 68 65 63 6b 44 69           CheckDi
8730: 73 70 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20 20 20  sposed();....   
8740: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8750: 20 69 66 20 28 70 65 72 66 6f 72 6d 61 6e 63 65   if (performance
8760: 44 61 74 61 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  Data == null).. 
8770: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8780: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
8790: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70 65                pe
87a0: 72 66 6f 72 6d 61 6e 63 65 44 61 74 61 20 3d 20  rformanceData = 
87b0: 6e 65 77 20 4d 6f 63 6b 52 65 67 69 73 74 72 79  new MockRegistry
87c0: 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20  Key(..          
87d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
87e0: 20 20 52 65 67 69 73 74 72 79 2e 50 65 72 66 6f    Registry.Perfo
87f0: 72 6d 61 6e 63 65 44 61 74 61 2c 20 77 68 61 74  rmanceData, what
8800: 49 66 2c 20 72 65 61 64 4f 6e 6c 79 2c 20 73 61  If, readOnly, sa
8810: 66 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  fe);..          
8820: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
8830: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8840: 20 20 20 72 65 74 75 72 6e 20 70 65 72 66 6f 72     return perfor
8850: 6d 61 6e 63 65 44 61 74 61 3b 0d 0a 20 20 20 20  manceData;..    
8860: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
8870: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
8880: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
8890: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
88a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
88b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
88c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
88d0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
88e0: 72 69 76 61 74 65 20 4d 6f 63 6b 52 65 67 69 73  rivate MockRegis
88f0: 74 72 79 4b 65 79 20 75 73 65 72 73 3b 0d 0a 20  tryKey users;.. 
8900: 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
8910: 63 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65  c MockRegistryKe
8920: 79 20 55 73 65 72 73 0d 0a 20 20 20 20 20 20 20  y Users..       
8930: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
8940: 20 20 20 20 20 20 20 20 67 65 74 0d 0a 20 20 20          get..   
8950: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
8960: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8970: 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65      CheckDispose
8980: 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  d();....        
8990: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
89a0: 75 73 65 72 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  users == null)..
89b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
89c0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
89d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 75                 u
89e0: 73 65 72 73 20 3d 20 6e 65 77 20 4d 6f 63 6b 52  sers = new MockR
89f0: 65 67 69 73 74 72 79 4b 65 79 28 0d 0a 20 20 20  egistryKey(..   
8a00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8a10: 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74 72           Registr
8a20: 79 2e 55 73 65 72 73 2c 20 77 68 61 74 49 66 2c  y.Users, whatIf,
8a30: 20 72 65 61 64 4f 6e 6c 79 2c 20 73 61 66 65 29   readOnly, safe)
8a40: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
8a50: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
8a60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8a70: 72 65 74 75 72 6e 20 75 73 65 72 73 3b 0d 0a 20  return users;.. 
8a80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
8a90: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
8aa0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e  .            #en
8ab0: 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20  dregion....     
8ac0: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
8ad0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8ae0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8af0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8b00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
8b10: 20 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f            #regio
8b20: 6e 20 50 75 62 6c 69 63 20 22 52 65 67 69 73 74  n Public "Regist
8b30: 72 79 22 20 4d 65 74 68 6f 64 73 0d 0a 23 69 66  ry" Methods..#if
8b40: 20 66 61 6c 73 65 0d 0a 20 20 20 20 20 20 20 20   false..        
8b50: 20 20 20 20 70 75 62 6c 69 63 20 6f 62 6a 65 63      public objec
8b60: 74 20 47 65 74 56 61 6c 75 65 28 0d 0a 20 20 20  t GetValue(..   
8b70: 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72               str
8b80: 69 6e 67 20 6b 65 79 4e 61 6d 65 2c 0d 0a 20 20  ing keyName,..  
8b90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
8ba0: 72 69 6e 67 20 76 61 6c 75 65 4e 61 6d 65 2c 0d  ring valueName,.
8bb0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
8bc0: 20 6f 62 6a 65 63 74 20 64 65 66 61 75 6c 74 56   object defaultV
8bd0: 61 6c 75 65 0d 0a 20 20 20 20 20 20 20 20 20 20  alue..          
8be0: 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
8bf0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
8c00: 20 20 20 20 20 20 20 20 43 68 65 63 6b 44 69 73          CheckDis
8c10: 70 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20 20 20 20  posed();....    
8c20: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
8c30: 72 6e 20 52 65 67 69 73 74 72 79 2e 47 65 74 56  rn Registry.GetV
8c40: 61 6c 75 65 28 6b 65 79 4e 61 6d 65 2c 20 76 61  alue(keyName, va
8c50: 6c 75 65 4e 61 6d 65 2c 20 64 65 66 61 75 6c 74  lueName, default
8c60: 56 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20 20  Value);..       
8c70: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
8c80: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
8c90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8ca0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8cb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8cc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
8cd0: 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
8ce0: 76 6f 69 64 20 53 65 74 56 61 6c 75 65 28 0d 0a  void SetValue(..
8cf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8d00: 73 74 72 69 6e 67 20 6b 65 79 4e 61 6d 65 2c 0d  string keyName,.
8d10: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
8d20: 20 73 74 72 69 6e 67 20 76 61 6c 75 65 4e 61 6d   string valueNam
8d30: 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
8d40: 20 20 20 20 6f 62 6a 65 63 74 20 76 61 6c 75 65      object value
8d50: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
8d60: 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20    )..           
8d70: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
8d80: 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65      CheckDispose
8d90: 64 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  d();..          
8da0: 20 20 20 20 20 20 43 68 65 63 6b 52 65 61 64 4f        CheckReadO
8db0: 6e 6c 79 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  nly();....      
8dc0: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21 77            if (!w
8dd0: 68 61 74 49 66 29 0d 0a 20 20 20 20 20 20 20 20  hatIf)..        
8de0: 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69              Regi
8df0: 73 74 72 79 2e 53 65 74 56 61 6c 75 65 28 6b 65  stry.SetValue(ke
8e00: 79 4e 61 6d 65 2c 20 76 61 6c 75 65 4e 61 6d 65  yName, valueName
8e10: 2c 20 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20  , value);..     
8e20: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
8e30: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
8e40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8e50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8e60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8e70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
8e80: 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
8e90: 63 20 76 6f 69 64 20 53 65 74 56 61 6c 75 65 28  c void SetValue(
8ea0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
8eb0: 20 20 73 74 72 69 6e 67 20 6b 65 79 4e 61 6d 65    string keyName
8ec0: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
8ed0: 20 20 20 73 74 72 69 6e 67 20 76 61 6c 75 65 4e     string valueN
8ee0: 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ame,..          
8ef0: 20 20 20 20 20 20 6f 62 6a 65 63 74 20 76 61 6c        object val
8f00: 75 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue,..           
8f10: 20 20 20 20 20 52 65 67 69 73 74 72 79 56 61 6c       RegistryVal
8f20: 75 65 4b 69 6e 64 20 76 61 6c 75 65 4b 69 6e 64  ueKind valueKind
8f30: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
8f40: 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20    )..           
8f50: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
8f60: 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65      CheckDispose
8f70: 64 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  d();..          
8f80: 20 20 20 20 20 20 43 68 65 63 6b 52 65 61 64 4f        CheckReadO
8f90: 6e 6c 79 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  nly();....      
8fa0: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21 77            if (!w
8fb0: 68 61 74 49 66 29 0d 0a 20 20 20 20 20 20 20 20  hatIf)..        
8fc0: 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69              Regi
8fd0: 73 74 72 79 2e 53 65 74 56 61 6c 75 65 28 6b 65  stry.SetValue(ke
8fe0: 79 4e 61 6d 65 2c 20 76 61 6c 75 65 4e 61 6d 65  yName, valueName
8ff0: 2c 20 76 61 6c 75 65 2c 20 76 61 6c 75 65 4b 69  , value, valueKi
9000: 6e 64 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  nd);..          
9010: 20 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20    }..#endif..   
9020: 20 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67           #endreg
9030: 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ion....         
9040: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
9050: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9060: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9070: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9080: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
9090: 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50 72        #region Pr
90a0: 69 76 61 74 65 20 4d 65 74 68 6f 64 73 0d 0a 20  ivate Methods.. 
90b0: 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
90c0: 74 65 20 76 6f 69 64 20 43 68 65 63 6b 52 65 61  te void CheckRea
90d0: 64 4f 6e 6c 79 28 29 0d 0a 20 20 20 20 20 20 20  dOnly()..       
90e0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
90f0: 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
9100: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e              // N
9110: 4f 54 45 3a 20 49 6e 20 22 72 65 61 64 2d 6f 6e  OTE: In "read-on
9120: 6c 79 22 20 6d 6f 64 65 2c 20 77 65 20 64 69 73  ly" mode, we dis
9130: 61 6c 6c 6f 77 20 61 6c 6c 20 77 72 69 74 65 20  allow all write 
9140: 61 63 63 65 73 73 2e 0d 0a 20 20 20 20 20 20 20  access...       
9150: 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
9160: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
9170: 28 21 72 65 61 64 4f 6e 6c 79 29 0d 0a 20 20 20  (!readOnly)..   
9180: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9190: 20 72 65 74 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20   return;....    
91a0: 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f              thro
91b0: 77 20 6e 65 77 20 49 6e 76 61 6c 69 64 4f 70 65  w new InvalidOpe
91c0: 72 61 74 69 6f 6e 45 78 63 65 70 74 69 6f 6e 28  rationException(
91d0: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
91e0: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  }..            #
91f0: 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20  endregion....   
9200: 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
9210: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9220: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9230: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9240: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
9250: 20 20 20 20 20 20 20 20 20 20 20 20 23 72 65 67              #reg
9260: 69 6f 6e 20 49 44 69 73 70 6f 73 61 62 6c 65 20  ion IDisposable 
9270: 22 50 61 74 74 65 72 6e 22 20 4d 65 6d 62 65 72  "Pattern" Member
9280: 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  s..            p
9290: 72 69 76 61 74 65 20 62 6f 6f 6c 20 64 69 73 70  rivate bool disp
92a0: 6f 73 65 64 3b 0d 0a 20 20 20 20 20 20 20 20 20  osed;..         
92b0: 20 20 20 70 72 69 76 61 74 65 20 76 6f 69 64 20     private void 
92c0: 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 20  CheckDisposed() 
92d0: 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a 20 20 20  /* throw */..   
92e0: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
92f0: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
9300: 21 64 69 73 70 6f 73 65 64 29 0d 0a 20 20 20 20  !disposed)..    
9310: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9320: 72 65 74 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20  return;....     
9330: 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77             throw
9340: 20 6e 65 77 20 4f 62 6a 65 63 74 44 69 73 70 6f   new ObjectDispo
9350: 73 65 64 45 78 63 65 70 74 69 6f 6e 28 0d 0a 20  sedException(.. 
9360: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9370: 20 20 20 74 79 70 65 6f 66 28 4d 6f 63 6b 52 65     typeof(MockRe
9380: 67 69 73 74 72 79 29 2e 4e 61 6d 65 29 3b 0d 0a  gistry).Name);..
9390: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
93a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
93b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
93c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
93d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
93e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
93f0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
9400: 70 72 69 76 61 74 65 20 2f 2a 20 70 72 6f 74 65  private /* prote
9410: 63 74 65 64 20 76 69 72 74 75 61 6c 20 2a 2f 20  cted virtual */ 
9420: 76 6f 69 64 20 44 69 73 70 6f 73 65 28 0d 0a 20  void Dispose(.. 
9430: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62                 b
9440: 6f 6f 6c 20 64 69 73 70 6f 73 69 6e 67 0d 0a 20  ool disposing.. 
9450: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29                 )
9460: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
9470: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
9480: 20 69 66 20 28 21 64 69 73 70 6f 73 65 64 29 0d   if (!disposed).
9490: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
94a0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
94b0: 20 20 20 20 20 20 20 20 69 66 20 28 64 69 73 70          if (disp
94c0: 6f 73 69 6e 67 29 0d 0a 20 20 20 20 20 20 20 20  osing)..        
94d0: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
94e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
94f0: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
9500: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9510: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 20 20 20  ///////////..   
9520: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9530: 20 20 20 20 20 2f 2f 20 64 69 73 70 6f 73 65 20       // dispose 
9540: 6d 61 6e 61 67 65 64 20 72 65 73 6f 75 72 63 65  managed resource
9550: 73 20 68 65 72 65 2e 2e 2e 0d 0a 20 20 20 20 20  s here.....     
9560: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9570: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
9580: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9590: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
95a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
95b0: 20 20 20 69 66 20 28 63 6c 61 73 73 65 73 52 6f     if (classesRo
95c0: 6f 74 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ot != null)..   
95d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
95e0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
95f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9600: 20 20 20 20 63 6c 61 73 73 65 73 52 6f 6f 74 2e      classesRoot.
9610: 43 6c 6f 73 65 28 29 3b 0d 0a 20 20 20 20 20 20  Close();..      
9620: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9630: 20 20 20 20 20 20 63 6c 61 73 73 65 73 52 6f 6f        classesRoo
9640: 74 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20  t = null;..     
9650: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9660: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
9670: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9680: 69 66 20 28 63 75 72 72 65 6e 74 43 6f 6e 66 69  if (currentConfi
9690: 67 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  g != null)..    
96a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
96b0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
96c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
96d0: 20 20 20 63 75 72 72 65 6e 74 43 6f 6e 66 69 67     currentConfig
96e0: 2e 43 6c 6f 73 65 28 29 3b 0d 0a 20 20 20 20 20  .Close();..     
96f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9700: 20 20 20 20 20 20 20 63 75 72 72 65 6e 74 43 6f         currentCo
9710: 6e 66 69 67 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20  nfig = null;..  
9720: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9730: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
9740: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9750: 20 20 20 69 66 20 28 63 75 72 72 65 6e 74 55 73     if (currentUs
9760: 65 72 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  er != null)..   
9770: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9780: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
9790: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
97a0: 20 20 20 20 63 75 72 72 65 6e 74 55 73 65 72 2e      currentUser.
97b0: 43 6c 6f 73 65 28 29 3b 0d 0a 20 20 20 20 20 20  Close();..      
97c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
97d0: 20 20 20 20 20 20 63 75 72 72 65 6e 74 55 73 65        currentUse
97e0: 72 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20  r = null;..     
97f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9800: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
9810: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9820: 69 66 20 28 64 79 6e 44 61 74 61 20 21 3d 20 6e  if (dynData != n
9830: 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
9840: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
9850: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
9860: 20 20 20 20 20 20 20 20 20 20 20 20 20 64 79 6e               dyn
9870: 44 61 74 61 2e 43 6c 6f 73 65 28 29 3b 0d 0a 20  Data.Close();.. 
9880: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9890: 20 20 20 20 20 20 20 20 20 20 20 64 79 6e 44 61             dynDa
98a0: 74 61 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20  ta = null;..    
98b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
98c0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
98d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
98e0: 20 69 66 20 28 6c 6f 63 61 6c 4d 61 63 68 69 6e   if (localMachin
98f0: 65 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  e != null)..    
9900: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9910: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
9920: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9930: 20 20 20 6c 6f 63 61 6c 4d 61 63 68 69 6e 65 2e     localMachine.
9940: 43 6c 6f 73 65 28 29 3b 0d 0a 20 20 20 20 20 20  Close();..      
9950: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9960: 20 20 20 20 20 20 6c 6f 63 61 6c 4d 61 63 68 69        localMachi
9970: 6e 65 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20  ne = null;..    
9980: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9990: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
99a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
99b0: 20 69 66 20 28 70 65 72 66 6f 72 6d 61 6e 63 65   if (performance
99c0: 44 61 74 61 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20  Data != null).. 
99d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
99e0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
99f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9a00: 20 20 20 20 20 20 70 65 72 66 6f 72 6d 61 6e 63        performanc
9a10: 65 44 61 74 61 2e 43 6c 6f 73 65 28 29 3b 0d 0a  eData.Close();..
9a20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9a30: 20 20 20 20 20 20 20 20 20 20 20 20 70 65 72 66              perf
9a40: 6f 72 6d 61 6e 63 65 44 61 74 61 20 3d 20 6e 75  ormanceData = nu
9a50: 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll;..           
9a60: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
9a70: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
9a80: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 75 73            if (us
9a90: 65 72 73 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20  ers != null)..  
9aa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9ab0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
9ac0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9ad0: 20 20 20 20 20 75 73 65 72 73 2e 43 6c 6f 73 65       users.Close
9ae0: 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ();..           
9af0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9b00: 20 75 73 65 72 73 20 3d 20 6e 75 6c 6c 3b 0d 0a   users = null;..
9b10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9b20: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
9b30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
9b40: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
9b50: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
9b60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9b70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
9b80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9b90: 20 20 20 20 2f 2f 20 72 65 6c 65 61 73 65 20 75      // release u
9ba0: 6e 6d 61 6e 61 67 65 64 20 72 65 73 6f 75 72 63  nmanaged resourc
9bb0: 65 73 20 68 65 72 65 2e 2e 2e 0d 0a 20 20 20 20  es here.....    
9bc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9bd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9be0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9bf0: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
9c00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
9c10: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
9c20: 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 54        // NOTE: T
9c30: 68 69 73 20 6f 62 6a 65 63 74 20 69 73 20 6e 6f  his object is no
9c40: 77 20 64 69 73 70 6f 73 65 64 2e 0d 0a 20 20 20  w disposed...   
9c50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9c60: 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
9c70: 20 20 20 20 20 20 20 20 20 64 69 73 70 6f 73 65           dispose
9c80: 64 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20  d = true;..     
9c90: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
9ca0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
9cb0: 20 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67           #endreg
9cc0: 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ion....         
9cd0: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
9ce0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9cf0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9d00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9d10: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
9d20: 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 49 44        #region ID
9d30: 69 73 70 6f 73 61 62 6c 65 20 4d 65 6d 62 65 72  isposable Member
9d40: 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  s..            p
9d50: 75 62 6c 69 63 20 76 6f 69 64 20 44 69 73 70 6f  ublic void Dispo
9d60: 73 65 28 29 0d 0a 20 20 20 20 20 20 20 20 20 20  se()..          
9d70: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
9d80: 20 20 20 20 20 44 69 73 70 6f 73 65 28 74 72 75       Dispose(tru
9d90: 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e);..           
9da0: 20 20 20 20 20 47 43 2e 53 75 70 70 72 65 73 73       GC.Suppress
9db0: 46 69 6e 61 6c 69 7a 65 28 74 68 69 73 29 3b 0d  Finalize(this);.
9dc0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
9dd0: 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e 64              #end
9de0: 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20  region....      
9df0: 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9e30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
9e40: 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e           #region
9e50: 20 44 65 73 74 72 75 63 74 6f 72 0d 0a 20 20 20   Destructor..   
9e60: 20 20 20 20 20 20 20 20 20 7e 4d 6f 63 6b 52 65           ~MockRe
9e70: 67 69 73 74 72 79 28 29 0d 0a 20 20 20 20 20 20  gistry()..      
9e80: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
9e90: 20 20 20 20 20 20 20 20 20 44 69 73 70 6f 73 65           Dispose
9ea0: 28 66 61 6c 73 65 29 3b 0d 0a 20 20 20 20 20 20  (false);..      
9eb0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
9ec0: 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d       #endregion.
9ed0: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..    
9ee0: 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
9ef0: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
9f00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9f10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9f20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9f30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9f40: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65  /....        #re
9f50: 67 69 6f 6e 20 4d 6f 63 6b 52 65 67 69 73 74 72  gion MockRegistr
9f60: 79 4b 65 79 20 43 6c 61 73 73 0d 0a 20 20 20 20  yKey Class..    
9f70: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 73 65 61      internal sea
9f80: 6c 65 64 20 63 6c 61 73 73 20 4d 6f 63 6b 52 65  led class MockRe
9f90: 67 69 73 74 72 79 4b 65 79 20 3a 20 49 44 69 73  gistryKey : IDis
9fa0: 70 6f 73 61 62 6c 65 0d 0a 20 20 20 20 20 20 20  posable..       
9fb0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
9fc0: 23 72 65 67 69 6f 6e 20 50 72 69 76 61 74 65 20  #region Private 
9fd0: 43 6f 6e 73 74 72 75 63 74 6f 72 73 0d 0a 20 20  Constructors..  
9fe0: 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
9ff0: 65 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65  e MockRegistryKe
a000: 79 28 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  y()..           
a010: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
a020: 20 20 20 20 77 68 61 74 49 66 20 3d 20 74 72 75      whatIf = tru
a030: 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
a040: 20 20 20 20 72 65 61 64 4f 6e 6c 79 20 3d 20 74      readOnly = t
a050: 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  rue;..          
a060: 20 20 20 20 20 20 73 61 66 65 20 3d 20 74 72 75        safe = tru
a070: 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
a080: 20 20 20 20 6e 6f 43 6c 6f 73 65 20 3d 20 66 61      noClose = fa
a090: 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lse;..          
a0a0: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
a0b0: 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20   #endregion.... 
a0c0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
a0d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a0e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a0f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a100: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
a110: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 72  ..            #r
a120: 65 67 69 6f 6e 20 50 75 62 6c 69 63 20 43 6f 6e  egion Public Con
a130: 73 74 72 75 63 74 6f 72 73 0d 0a 20 20 20 20 20  structors..     
a140: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 4d 6f         public Mo
a150: 63 6b 52 65 67 69 73 74 72 79 4b 65 79 28 0d 0a  ckRegistryKey(..
a160: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a170: 52 65 67 69 73 74 72 79 4b 65 79 20 6b 65 79 0d  RegistryKey key.
a180: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
a190: 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   )..            
a1a0: 20 20 20 20 3a 20 74 68 69 73 28 29 0d 0a 20 20      : this()..  
a1b0: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
a1c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69               thi
a1d0: 73 2e 6b 65 79 20 3d 20 6b 65 79 3b 0d 0a 20 20  s.key = key;..  
a1e0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
a1f0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
a200: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a210: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a220: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a230: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
a240: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
a250: 62 6c 69 63 20 4d 6f 63 6b 52 65 67 69 73 74 72  blic MockRegistr
a260: 79 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20  yKey(..         
a270: 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79 4b         RegistryK
a280: 65 79 20 6b 65 79 2c 0d 0a 20 20 20 20 20 20 20  ey key,..       
a290: 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
a2a0: 73 75 62 4b 65 79 4e 61 6d 65 0d 0a 20 20 20 20  subKeyName..    
a2b0: 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
a2c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3a                 :
a2d0: 20 74 68 69 73 28 6b 65 79 29 0d 0a 20 20 20 20   this(key)..    
a2e0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
a2f0: 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e             this.
a300: 73 75 62 4b 65 79 4e 61 6d 65 20 3d 20 73 75 62  subKeyName = sub
a310: 4b 65 79 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20  KeyName;..      
a320: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
a330: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
a340: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a350: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a360: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a370: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
a380: 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
a390: 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79   MockRegistryKey
a3a0: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
a3b0: 20 20 20 52 65 67 69 73 74 72 79 4b 65 79 20 6b     RegistryKey k
a3c0: 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ey,..           
a3d0: 20 20 20 20 20 73 74 72 69 6e 67 20 73 75 62 4b       string subK
a3e0: 65 79 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20  eyName,..       
a3f0: 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68           bool wh
a400: 61 74 49 66 0d 0a 20 20 20 20 20 20 20 20 20 20  atIf..          
a410: 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
a420: 20 20 20 20 20 20 20 20 20 3a 20 74 68 69 73 28           : this(
a430: 6b 65 79 2c 20 73 75 62 4b 65 79 4e 61 6d 65 29  key, subKeyName)
a440: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
a450: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
a460: 20 74 68 69 73 2e 77 68 61 74 49 66 20 3d 20 77   this.whatIf = w
a470: 68 61 74 49 66 3b 0d 0a 20 20 20 20 20 20 20 20  hatIf;..        
a480: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
a490: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
a4a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a4b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a4c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a4d0: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
a4e0: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 4d          public M
a4f0: 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 28 0d  ockRegistryKey(.
a500: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
a510: 20 52 65 67 69 73 74 72 79 4b 65 79 20 6b 65 79   RegistryKey key
a520: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
a530: 20 20 20 73 74 72 69 6e 67 20 73 75 62 4b 65 79     string subKey
a540: 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  Name,..         
a550: 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74         bool what
a560: 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  If,..           
a570: 20 20 20 20 20 62 6f 6f 6c 20 72 65 61 64 4f 6e       bool readOn
a580: 6c 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ly..            
a590: 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20      )..         
a5a0: 20 20 20 20 20 20 20 3a 20 74 68 69 73 28 6b 65         : this(ke
a5b0: 79 2c 20 73 75 62 4b 65 79 4e 61 6d 65 2c 20 77  y, subKeyName, w
a5c0: 68 61 74 49 66 29 0d 0a 20 20 20 20 20 20 20 20  hatIf)..        
a5d0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
a5e0: 20 20 20 20 20 20 20 74 68 69 73 2e 72 65 61 64         this.read
a5f0: 4f 6e 6c 79 20 3d 20 72 65 61 64 4f 6e 6c 79 3b  Only = readOnly;
a600: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
a610: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
a620: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a630: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a640: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a650: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a660: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
a670: 20 20 70 75 62 6c 69 63 20 4d 6f 63 6b 52 65 67    public MockReg
a680: 69 73 74 72 79 4b 65 79 28 0d 0a 20 20 20 20 20  istryKey(..     
a690: 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73             Regis
a6a0: 74 72 79 4b 65 79 20 6b 65 79 2c 0d 0a 20 20 20  tryKey key,..   
a6b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72               str
a6c0: 69 6e 67 20 73 75 62 4b 65 79 4e 61 6d 65 2c 0d  ing subKeyName,.
a6d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
a6e0: 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20   bool whatIf,.. 
a6f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62                 b
a700: 6f 6f 6c 20 72 65 61 64 4f 6e 6c 79 2c 0d 0a 20  ool readOnly,.. 
a710: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62                 b
a720: 6f 6f 6c 20 73 61 66 65 0d 0a 20 20 20 20 20 20  ool safe..      
a730: 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
a740: 20 20 20 20 20 20 20 20 20 20 20 20 20 3a 20 74               : t
a750: 68 69 73 28 6b 65 79 2c 20 73 75 62 4b 65 79 4e  his(key, subKeyN
a760: 61 6d 65 2c 20 77 68 61 74 49 66 2c 20 72 65 61  ame, whatIf, rea
a770: 64 4f 6e 6c 79 29 0d 0a 20 20 20 20 20 20 20 20  dOnly)..        
a780: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
a790: 20 20 20 20 20 20 20 74 68 69 73 2e 73 61 66 65         this.safe
a7a0: 20 3d 20 73 61 66 65 3b 0d 0a 20 20 20 20 20 20   = safe;..      
a7b0: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
a7c0: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
a7d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a7e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a7f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a800: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
a810: 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
a820: 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79   MockRegistryKey
a830: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
a840: 20 20 20 52 65 67 69 73 74 72 79 4b 65 79 20 6b     RegistryKey k
a850: 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ey,..           
a860: 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66       bool whatIf
a870: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
a880: 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20    )..           
a890: 20 20 20 20 20 3a 20 74 68 69 73 28 6b 65 79 2c       : this(key,
a8a0: 20 6e 75 6c 6c 2c 20 77 68 61 74 49 66 29 0d 0a   null, whatIf)..
a8b0: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
a8c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
a8d0: 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20  / do nothing... 
a8e0: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
a8f0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
a900: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a910: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a920: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a930: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
a940: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
a950: 75 62 6c 69 63 20 4d 6f 63 6b 52 65 67 69 73 74  ublic MockRegist
a960: 72 79 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20  ryKey(..        
a970: 20 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79          Registry
a980: 4b 65 79 20 6b 65 79 2c 0d 0a 20 20 20 20 20 20  Key key,..      
a990: 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77            bool w
a9a0: 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20  hatIf,..        
a9b0: 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 72 65 61          bool rea
a9c0: 64 4f 6e 6c 79 0d 0a 20 20 20 20 20 20 20 20 20  dOnly..         
a9d0: 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
a9e0: 20 20 20 20 20 20 20 20 20 20 3a 20 74 68 69 73            : this
a9f0: 28 6b 65 79 2c 20 6e 75 6c 6c 2c 20 77 68 61 74  (key, null, what
aa00: 49 66 2c 20 72 65 61 64 4f 6e 6c 79 29 0d 0a 20  If, readOnly).. 
aa10: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
aa20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
aa30: 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20   do nothing...  
aa40: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
aa50: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
aa60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
aa70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a  //////////////..
aaa0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
aab0: 62 6c 69 63 20 4d 6f 63 6b 52 65 67 69 73 74 72  blic MockRegistr
aac0: 79 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20  yKey(..         
aad0: 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79 4b         RegistryK
aae0: 65 79 20 6b 65 79 2c 0d 0a 20 20 20 20 20 20 20  ey key,..       
aaf0: 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68           bool wh
ab00: 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20  atIf,..         
ab10: 20 20 20 20 20 20 20 62 6f 6f 6c 20 72 65 61 64         bool read
ab20: 4f 6e 6c 79 2c 0d 0a 20 20 20 20 20 20 20 20 20  Only,..         
ab30: 20 20 20 20 20 20 20 62 6f 6f 6c 20 73 61 66 65         bool safe
ab40: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
ab50: 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20    )..           
ab60: 20 20 20 20 20 3a 20 74 68 69 73 28 6b 65 79 2c       : this(key,
ab70: 20 6e 75 6c 6c 2c 20 77 68 61 74 49 66 2c 20 72   null, whatIf, r
ab80: 65 61 64 4f 6e 6c 79 2c 20 73 61 66 65 29 0d 0a  eadOnly, safe)..
ab90: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
aba0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
abb0: 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20  / do nothing... 
abc0: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
abd0: 20 20 20 20 20 20 20 20 20 20 23 65 6e 64 72 65            #endre
abe0: 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20  gion....        
abf0: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
ac00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ac10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ac20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ac30: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
ac40: 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50         #region P
ac50: 75 62 6c 69 63 20 4d 65 74 68 6f 64 73 0d 0a 20  ublic Methods.. 
ac60: 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
ac70: 63 20 76 6f 69 64 20 43 6c 6f 73 65 28 29 0d 0a  c void Close()..
ac80: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
ac90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
aca0: 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
acb0: 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 4e 6f 20 64     // NOTE: No d
acc0: 69 73 70 6f 73 65 64 20 63 68 65 63 6b 20 68 65  isposed check he
acd0: 72 65 20 62 65 63 61 75 73 65 20 63 61 6c 6c 69  re because calli
ace0: 6e 67 20 74 68 69 73 20 6d 65 74 68 6f 64 0d 0a  ng this method..
acf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ad00: 2f 2f 20 20 20 20 20 20 20 73 68 6f 75 6c 64 20  //       should 
ad10: 62 65 20 6a 75 73 74 20 6c 69 6b 65 20 63 61 6c  be just like cal
ad20: 6c 69 6e 67 20 44 69 73 70 6f 73 65 2e 0d 0a 20  ling Dispose... 
ad30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
ad40: 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
ad50: 20 20 20 44 69 73 70 6f 73 65 28 74 72 75 65 29     Dispose(true)
ad60: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
ad70: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
ad80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ad90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ada0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
adb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
adc0: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
add0: 20 20 20 70 75 62 6c 69 63 20 76 6f 69 64 20 44     public void D
ade0: 69 73 61 62 6c 65 43 6c 6f 73 65 28 29 0d 0a 20  isableClose().. 
adf0: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
ae00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43 68                Ch
ae10: 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a  eckDisposed();..
ae20: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
ae30: 20 20 6e 6f 43 6c 6f 73 65 20 3d 20 74 72 75 65    noClose = true
ae40: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
ae50: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
ae60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ae70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ae80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ae90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
aea0: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
aeb0: 20 20 20 70 75 62 6c 69 63 20 76 6f 69 64 20 52     public void R
aec0: 65 73 65 74 53 75 62 4b 65 79 4e 61 6d 65 28 0d  esetSubKeyName(.
aed0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
aee0: 20 73 74 72 69 6e 67 20 73 75 62 4b 65 79 4e 61   string subKeyNa
aef0: 6d 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  me..            
af00: 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20      )..         
af10: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
af20: 20 20 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f        CheckDispo
af30: 73 65 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  sed();....      
af40: 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 73            this.s
af50: 75 62 4b 65 79 4e 61 6d 65 20 3d 20 73 75 62 4b  ubKeyName = subK
af60: 65 79 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20  eyName;..       
af70: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
af80: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
af90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
afa0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
afb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
afc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
afd0: 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
afe0: 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20  MockRegistryKey 
aff0: 43 6c 6f 6e 65 28 0d 0a 20 20 20 20 20 20 20 20  Clone(..        
b000: 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61          bool wha
b010: 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  tIf,..          
b020: 20 20 20 20 20 20 62 6f 6f 6c 20 72 65 61 64 4f        bool readO
b030: 6e 6c 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  nly,..          
b040: 20 20 20 20 20 20 62 6f 6f 6c 20 73 61 66 65 0d        bool safe.
b050: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
b060: 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   )..            
b070: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
b080: 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64     CheckDisposed
b090: 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ();....         
b0a0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 65         return ne
b0b0: 77 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65  w MockRegistryKe
b0c0: 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y(..            
b0d0: 20 20 20 20 20 20 20 20 6b 65 79 2c 20 73 75 62          key, sub
b0e0: 4b 65 79 4e 61 6d 65 2c 20 74 68 69 73 2e 77 68  KeyName, this.wh
b0f0: 61 74 49 66 20 7c 7c 20 77 68 61 74 49 66 2c 20  atIf || whatIf, 
b100: 74 68 69 73 2e 72 65 61 64 4f 6e 6c 79 20 7c 7c  this.readOnly ||
b110: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
b120: 20 20 20 20 20 20 72 65 61 64 4f 6e 6c 79 2c 20        readOnly, 
b130: 74 68 69 73 2e 73 61 66 65 20 7c 7c 20 73 61 66  this.safe || saf
b140: 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e);..           
b150: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
b160: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
b170: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b180: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b190: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b1a0: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
b1b0: 20 20 20 20 20 70 75 62 6c 69 63 20 4d 6f 63 6b       public Mock
b1c0: 52 65 67 69 73 74 72 79 4b 65 79 20 43 72 65 61  RegistryKey Crea
b1d0: 74 65 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20  teSubKey(..     
b1e0: 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
b1f0: 67 20 73 75 62 4b 65 79 4e 61 6d 65 0d 0a 20 20  g subKeyName..  
b200: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d                ).
b210: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
b220: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b230: 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b  CheckDisposed();
b240: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
b250: 20 20 43 68 65 63 6b 52 65 61 64 4f 6e 6c 79 28    CheckReadOnly(
b260: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
b270: 20 20 20 20 20 20 69 66 20 28 6b 65 79 20 3d 3d        if (key ==
b280: 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
b290: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
b2a0: 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20  rn null;....    
b2b0: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
b2c0: 77 68 61 74 49 66 29 0d 0a 20 20 20 20 20 20 20  whatIf)..       
b2d0: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
b2e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b2f0: 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
b300: 20 20 20 20 20 20 20 20 2f 2f 20 48 41 43 4b 3a          // HACK:
b310: 20 41 74 74 65 6d 70 74 20 74 6f 20 6f 70 65 6e   Attempt to open
b320: 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20 73   the specified s
b330: 75 62 2d 6b 65 79 2e 20 20 49 66 20 74 68 69 73  ub-key.  If this
b340: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
b350: 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 66        //       f
b360: 61 69 6c 73 2c 20 77 65 27 6c 6c 20 73 69 6d 70  ails, we'll simp
b370: 6c 79 20 72 65 74 75 72 6e 20 74 68 65 20 77 72  ly return the wr
b380: 61 70 70 65 64 20 72 6f 6f 74 20 6b 65 79 0d 0a  apped root key..
b390: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b3a0: 20 20 20 20 2f 2f 20 20 20 20 20 20 20 69 74 73      //       its
b3b0: 65 6c 66 20 73 69 6e 63 65 20 6e 6f 20 77 72 69  elf since no wri
b3c0: 74 65 73 20 61 72 65 20 61 6c 6c 6f 77 65 64 20  tes are allowed 
b3d0: 69 6e 20 22 77 68 61 74 2d 69 66 22 0d 0a 20 20  in "what-if"..  
b3e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b3f0: 20 20 2f 2f 20 20 20 20 20 20 20 6d 6f 64 65 20    //       mode 
b400: 61 6e 79 68 6f 77 2e 0d 0a 20 20 20 20 20 20 20  anyhow...       
b410: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
b420: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
b430: 20 20 20 20 20 52 65 67 69 73 74 72 79 4b 65 79       RegistryKey
b440: 20 73 75 62 4b 65 79 20 3d 20 6b 65 79 2e 4f 70   subKey = key.Op
b450: 65 6e 53 75 62 4b 65 79 28 73 75 62 4b 65 79 4e  enSubKey(subKeyN
b460: 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ame);....       
b470: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
b480: 28 73 75 62 4b 65 79 20 21 3d 20 6e 75 6c 6c 29  (subKey != null)
b490: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
b4a0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
b4b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b4c0: 20 72 65 74 75 72 6e 20 6e 65 77 20 4d 6f 63 6b   return new Mock
b4d0: 52 65 67 69 73 74 72 79 4b 65 79 28 0d 0a 20 20  RegistryKey(..  
b4e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b4f0: 20 20 20 20 20 20 20 20 20 20 73 75 62 4b 65 79            subKey
b500: 2c 20 77 68 61 74 49 66 2c 20 72 65 61 64 4f 6e  , whatIf, readOn
b510: 6c 79 2c 20 73 61 66 65 29 3b 0d 0a 20 20 20 20  ly, safe);..    
b520: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b530: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
b540: 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20         else..   
b550: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b560: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
b570: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
b580: 72 6e 20 6e 65 77 20 4d 6f 63 6b 52 65 67 69 73  rn new MockRegis
b590: 74 72 79 4b 65 79 28 0d 0a 20 20 20 20 20 20 20  tryKey(..       
b5a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b5b0: 20 20 20 20 20 6b 65 79 2c 20 73 75 62 4b 65 79       key, subKey
b5c0: 4e 61 6d 65 2c 20 77 68 61 74 49 66 2c 20 72 65  Name, whatIf, re
b5d0: 61 64 4f 6e 6c 79 2c 20 73 61 66 65 29 3b 0d 0a  adOnly, safe);..
b5e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b5f0: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
b600: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
b610: 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a            else..
b620: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b630: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
b640: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 65         return ne
b650: 77 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65  w MockRegistryKe
b660: 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y(..            
b670: 20 20 20 20 20 20 20 20 20 20 20 20 6b 65 79 2e              key.
b680: 43 72 65 61 74 65 53 75 62 4b 65 79 28 73 75 62  CreateSubKey(sub
b690: 4b 65 79 4e 61 6d 65 29 2c 20 77 68 61 74 49 66  KeyName), whatIf
b6a0: 2c 20 72 65 61 64 4f 6e 6c 79 2c 20 73 61 66 65  , readOnly, safe
b6b0: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
b6c0: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
b6d0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
b6e0: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
b6f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b700: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b710: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b720: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
b730: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 76 6f         public vo
b740: 69 64 20 44 65 6c 65 74 65 53 75 62 4b 65 79 28  id DeleteSubKey(
b750: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
b760: 20 20 73 74 72 69 6e 67 20 73 75 62 4b 65 79 4e    string subKeyN
b770: 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ame,..          
b780: 20 20 20 20 20 20 62 6f 6f 6c 20 74 68 72 6f 77        bool throw
b790: 4f 6e 4d 69 73 73 69 6e 67 0d 0a 20 20 20 20 20  OnMissing..     
b7a0: 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
b7b0: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
b7c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 43 68 65               Che
b7d0: 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 20  ckDisposed();.. 
b7e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43                 C
b7f0: 68 65 63 6b 52 65 61 64 4f 6e 6c 79 28 29 3b 0d  heckReadOnly();.
b800: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
b810: 20 20 20 69 66 20 28 6b 65 79 20 3d 3d 20 6e 75     if (key == nu
b820: 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
b830: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 3b           return;
b840: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
b850: 20 20 20 20 69 66 20 28 21 77 68 61 74 49 66 29      if (!whatIf)
b860: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
b870: 20 20 20 20 20 20 6b 65 79 2e 44 65 6c 65 74 65        key.Delete
b880: 53 75 62 4b 65 79 28 73 75 62 4b 65 79 4e 61 6d  SubKey(subKeyNam
b890: 65 2c 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e  e, throwOnMissin
b8a0: 67 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  g);..           
b8b0: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
b8c0: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
b8d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b8e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b8f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b900: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
b910: 20 20 20 20 20 70 75 62 6c 69 63 20 76 6f 69 64       public void
b920: 20 44 65 6c 65 74 65 53 75 62 4b 65 79 54 72 65   DeleteSubKeyTre
b930: 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
b940: 20 20 20 20 73 74 72 69 6e 67 20 73 75 62 4b 65      string subKe
b950: 79 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 20  yName..         
b960: 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
b970: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
b980: 20 20 20 20 20 20 20 20 20 43 68 65 63 6b 44 69           CheckDi
b990: 73 70 6f 73 65 64 28 29 3b 0d 0a 20 20 20 20 20  sposed();..     
b9a0: 20 20 20 20 20 20 20 20 20 20 20 43 68 65 63 6b             Check
b9b0: 52 65 61 64 4f 6e 6c 79 28 29 3b 0d 0a 0d 0a 20  ReadOnly();.... 
b9c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
b9d0: 66 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d  f (key == null).
b9e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
b9f0: 20 20 20 20 20 72 65 74 75 72 6e 3b 0d 0a 0d 0a       return;....
ba00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ba10: 69 66 20 28 21 77 68 61 74 49 66 29 0d 0a 20 20  if (!whatIf)..  
ba20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ba30: 20 20 6b 65 79 2e 44 65 6c 65 74 65 53 75 62 4b    key.DeleteSubK
ba40: 65 79 54 72 65 65 28 73 75 62 4b 65 79 4e 61 6d  eyTree(subKeyNam
ba50: 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e);..           
ba60: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
ba70: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
ba80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ba90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
baa0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bab0: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
bac0: 20 20 20 20 20 70 75 62 6c 69 63 20 76 6f 69 64       public void
bad0: 20 44 65 6c 65 74 65 56 61 6c 75 65 28 0d 0a 20   DeleteValue(.. 
bae0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
baf0: 74 72 69 6e 67 20 6e 61 6d 65 2c 0d 0a 20 20 20  tring name,..   
bb00: 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f               boo
bb10: 6c 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67  l throwOnMissing
bb20: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
bb30: 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20    )..           
bb40: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
bb50: 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65      CheckDispose
bb60: 64 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  d();..          
bb70: 20 20 20 20 20 20 43 68 65 63 6b 52 65 61 64 4f        CheckReadO
bb80: 6e 6c 79 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  nly();....      
bb90: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6b 65            if (ke
bba0: 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  y == null)..    
bbb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bbc0: 72 65 74 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20  return;....     
bbd0: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21             if (!
bbe0: 77 68 61 74 49 66 29 0d 0a 20 20 20 20 20 20 20  whatIf)..       
bbf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 6b 65 79               key
bc00: 2e 44 65 6c 65 74 65 56 61 6c 75 65 28 6e 61 6d  .DeleteValue(nam
bc10: 65 2c 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e  e, throwOnMissin
bc20: 67 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  g);..           
bc30: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
bc40: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
bc50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bc60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bc70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bc80: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
bc90: 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 72 69       public stri
bca0: 6e 67 5b 5d 20 47 65 74 53 75 62 4b 65 79 4e 61  ng[] GetSubKeyNa
bcb0: 6d 65 73 28 29 0d 0a 20 20 20 20 20 20 20 20 20  mes()..         
bcc0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
bcd0: 20 20 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f        CheckDispo
bce0: 73 65 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  sed();....      
bcf0: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6b 65            if (ke
bd00: 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  y == null)..    
bd10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bd20: 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a  return null;....
bd30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bd40: 72 65 74 75 72 6e 20 6b 65 79 2e 47 65 74 53 75  return key.GetSu
bd50: 62 4b 65 79 4e 61 6d 65 73 28 29 3b 0d 0a 20 20  bKeyNames();..  
bd60: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
bd70: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
bd80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bd90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bda0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bdb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
bdc0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
bdd0: 62 6c 69 63 20 6f 62 6a 65 63 74 20 47 65 74 56  blic object GetV
bde0: 61 6c 75 65 28 0d 0a 20 20 20 20 20 20 20 20 20  alue(..         
bdf0: 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6e 61         string na
be00: 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me,..           
be10: 20 20 20 20 20 6f 62 6a 65 63 74 20 64 65 66 61       object defa
be20: 75 6c 74 56 61 6c 75 65 0d 0a 20 20 20 20 20 20  ultValue..      
be30: 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
be40: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
be50: 20 20 20 20 20 20 20 20 20 20 20 20 43 68 65 63              Chec
be60: 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 0d 0a  kDisposed();....
be70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
be80: 69 66 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29  if (key == null)
be90: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
bea0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 75 6c        return nul
beb0: 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  l;....          
bec0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 6b 65 79        return key
bed0: 2e 47 65 74 56 61 6c 75 65 28 6e 61 6d 65 2c 20  .GetValue(name, 
bee0: 64 65 66 61 75 6c 74 56 61 6c 75 65 29 3b 0d 0a  defaultValue);..
bef0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
bf00: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
bf10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bf20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bf30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bf40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bf50: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
bf60: 70 75 62 6c 69 63 20 73 74 72 69 6e 67 5b 5d 20  public string[] 
bf70: 47 65 74 56 61 6c 75 65 4e 61 6d 65 73 28 29 0d  GetValueNames().
bf80: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
bf90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bfa0: 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b  CheckDisposed();
bfb0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
bfc0: 20 20 20 20 69 66 20 28 6b 65 79 20 3d 3d 20 6e      if (key == n
bfd0: 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
bfe0: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
bff0: 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20   null;....      
c000: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
c010: 20 6b 65 79 2e 47 65 74 56 61 6c 75 65 4e 61 6d   key.GetValueNam
c020: 65 73 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  es();..         
c030: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
c040: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
c050: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c060: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c070: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c080: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
c090: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 4d 6f         public Mo
c0a0: 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 4f 70  ckRegistryKey Op
c0b0: 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20  enSubKey(..     
c0c0: 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
c0d0: 67 20 73 75 62 4b 65 79 4e 61 6d 65 0d 0a 20 20  g subKeyName..  
c0e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d                ).
c0f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
c100: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c110: 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b  CheckDisposed();
c120: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
c130: 20 20 20 20 72 65 74 75 72 6e 20 4f 70 65 6e 53      return OpenS
c140: 75 62 4b 65 79 28 73 75 62 4b 65 79 4e 61 6d 65  ubKey(subKeyName
c150: 2c 20 66 61 6c 73 65 29 3b 0d 0a 20 20 20 20 20  , false);..     
c160: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
c170: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
c180: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c190: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c1a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c1b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
c1c0: 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
c1d0: 63 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65  c MockRegistryKe
c1e0: 79 20 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20  y OpenSubKey(.. 
c1f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
c200: 74 72 69 6e 67 20 73 75 62 4b 65 79 4e 61 6d 65  tring subKeyName
c210: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
c220: 20 20 20 62 6f 6f 6c 20 77 72 69 74 61 62 6c 65     bool writable
c230: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
c240: 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20    )..           
c250: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
c260: 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65      CheckDispose
c270: 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  d();....        
c280: 20 20 20 20 20 20 20 20 69 66 20 28 77 72 69 74          if (writ
c290: 61 62 6c 65 29 0d 0a 20 20 20 20 20 20 20 20 20  able)..         
c2a0: 20 20 20 20 20 20 20 20 20 20 20 43 68 65 63 6b             Check
c2b0: 52 65 61 64 4f 6e 6c 79 28 29 3b 0d 0a 0d 0a 20  ReadOnly();.... 
c2c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
c2d0: 66 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d  f (key == null).
c2e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
c2f0: 20 20 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c       return null
c300: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
c310: 20 20 20 20 20 52 65 67 69 73 74 72 79 4b 65 79       RegistryKey
c320: 20 73 75 62 4b 65 79 20 3d 20 6b 65 79 2e 4f 70   subKey = key.Op
c330: 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20  enSubKey(..     
c340: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
c350: 75 62 4b 65 79 4e 61 6d 65 2c 20 77 68 61 74 49  ubKeyName, whatI
c360: 66 20 3f 20 66 61 6c 73 65 20 3a 20 77 72 69 74  f ? false : writ
c370: 61 62 6c 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  able);....      
c380: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 73 75            if (su
c390: 62 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  bKey == null).. 
c3a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c3b0: 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d     return null;.
c3c0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
c3d0: 20 20 20 72 65 74 75 72 6e 20 6e 65 77 20 4d 6f     return new Mo
c3e0: 63 6b 52 65 67 69 73 74 72 79 4b 65 79 28 73 75  ckRegistryKey(su
c3f0: 62 4b 65 79 2c 20 77 68 61 74 49 66 2c 20 72 65  bKey, whatIf, re
c400: 61 64 4f 6e 6c 79 2c 20 73 61 66 65 29 3b 0d 0a  adOnly, safe);..
c410: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
c420: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
c430: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c440: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c450: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c460: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c470: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
c480: 70 75 62 6c 69 63 20 76 6f 69 64 20 53 65 74 56  public void SetV
c490: 61 6c 75 65 28 0d 0a 20 20 20 20 20 20 20 20 20  alue(..         
c4a0: 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6e 61         string na
c4b0: 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me,..           
c4c0: 20 20 20 20 20 6f 62 6a 65 63 74 20 76 61 6c 75       object valu
c4d0: 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e..             
c4e0: 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20     )..          
c4f0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
c500: 20 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73       CheckDispos
c510: 65 64 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ed();..         
c520: 20 20 20 20 20 20 20 43 68 65 63 6b 52 65 61 64         CheckRead
c530: 4f 6e 6c 79 28 29 3b 0d 0a 0d 0a 20 20 20 20 20  Only();....     
c540: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6b             if (k
c550: 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ey == null)..   
c560: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c570: 20 72 65 74 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20   return;....    
c580: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
c590: 21 77 68 61 74 49 66 29 0d 0a 20 20 20 20 20 20  !whatIf)..      
c5a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6b 65                ke
c5b0: 79 2e 53 65 74 56 61 6c 75 65 28 6e 61 6d 65 2c  y.SetValue(name,
c5c0: 20 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20   value);..      
c5d0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
c5e0: 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d       #endregion.
c5f0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
c600: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c610: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c620: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c630: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c640: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
c650: 20 20 23 72 65 67 69 6f 6e 20 50 75 62 6c 69 63    #region Public
c660: 20 50 72 6f 70 65 72 74 69 65 73 0d 0a 20 20 20   Properties..   
c670: 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
c680: 73 74 72 69 6e 67 20 4e 61 6d 65 0d 0a 20 20 20  string Name..   
c690: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
c6a0: 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74 0d              get.
c6b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
c6c0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
c6d0: 20 20 20 20 20 20 20 20 43 68 65 63 6b 44 69 73          CheckDis
c6e0: 70 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20 20 20 20  posed();....    
c6f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c700: 69 66 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29  if (key == null)
c710: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
c720: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
c730: 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20   null;....      
c740: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
c750: 74 75 72 6e 20 21 53 74 72 69 6e 67 2e 49 73 4e  turn !String.IsN
c760: 75 6c 6c 4f 72 45 6d 70 74 79 28 73 75 62 4b 65  ullOrEmpty(subKe
c770: 79 4e 61 6d 65 29 20 3f 0d 0a 20 20 20 20 20 20  yName) ?..      
c780: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c790: 20 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72    RegistryHelper
c7a0: 2e 4a 6f 69 6e 4b 65 79 4e 61 6d 65 73 28 6b 65  .JoinKeyNames(ke
c7b0: 79 2e 4e 61 6d 65 2c 20 73 75 62 4b 65 79 4e 61  y.Name, subKeyNa
c7c0: 6d 65 29 20 3a 0d 0a 20 20 20 20 20 20 20 20 20  me) :..         
c7d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6b                 k
c7e0: 65 79 2e 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20  ey.Name;..      
c7f0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
c800: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
c810: 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
c820: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c830: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c840: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c850: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
c860: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69  .            pri
c870: 76 61 74 65 20 52 65 67 69 73 74 72 79 4b 65 79  vate RegistryKey
c880: 20 6b 65 79 3b 0d 0a 20 20 20 20 20 20 20 20 20   key;..         
c890: 20 20 20 70 75 62 6c 69 63 20 52 65 67 69 73 74     public Regist
c8a0: 72 79 4b 65 79 20 4b 65 79 0d 0a 20 20 20 20 20  ryKey Key..     
c8b0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
c8c0: 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20            get { 
c8d0: 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b  CheckDisposed();
c8e0: 20 43 68 65 63 6b 53 61 66 65 28 29 3b 20 72 65   CheckSafe(); re
c8f0: 74 75 72 6e 20 6b 65 79 3b 20 7d 0d 0a 20 20 20  turn key; }..   
c900: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
c910: 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
c920: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c930: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c940: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c950: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
c960: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69  .            pri
c970: 76 61 74 65 20 73 74 72 69 6e 67 20 73 75 62 4b  vate string subK
c980: 65 79 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20  eyName;..       
c990: 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 72 69       public stri
c9a0: 6e 67 20 53 75 62 4b 65 79 4e 61 6d 65 0d 0a 20  ng SubKeyName.. 
c9b0: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
c9c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65                ge
c9d0: 74 20 7b 20 43 68 65 63 6b 44 69 73 70 6f 73 65  t { CheckDispose
c9e0: 64 28 29 3b 20 72 65 74 75 72 6e 20 73 75 62 4b  d(); return subK
c9f0: 65 79 4e 61 6d 65 3b 20 7d 0d 0a 20 20 20 20 20  eyName; }..     
ca00: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
ca10: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
ca20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ca30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ca40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ca50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
ca60: 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
ca70: 74 65 20 62 6f 6f 6c 20 77 68 61 74 49 66 3b 0d  te bool whatIf;.
ca80: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
ca90: 6c 69 63 20 62 6f 6f 6c 20 57 68 61 74 49 66 0d  lic bool WhatIf.
caa0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
cab0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cac0: 67 65 74 20 7b 20 43 68 65 63 6b 44 69 73 70 6f  get { CheckDispo
cad0: 73 65 64 28 29 3b 20 72 65 74 75 72 6e 20 77 68  sed(); return wh
cae0: 61 74 49 66 3b 20 7d 0d 0a 20 20 20 20 20 20 20  atIf; }..       
caf0: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
cb00: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
cb10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cb20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cb30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cb40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
cb50: 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65           private
cb60: 20 62 6f 6f 6c 20 72 65 61 64 4f 6e 6c 79 3b 0d   bool readOnly;.
cb70: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
cb80: 6c 69 63 20 62 6f 6f 6c 20 52 65 61 64 4f 6e 6c  lic bool ReadOnl
cb90: 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  y..            {
cba0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
cbb0: 20 20 67 65 74 20 7b 20 43 68 65 63 6b 44 69 73    get { CheckDis
cbc0: 70 6f 73 65 64 28 29 3b 20 72 65 74 75 72 6e 20  posed(); return 
cbd0: 72 65 61 64 4f 6e 6c 79 3b 20 7d 0d 0a 20 20 20  readOnly; }..   
cbe0: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
cbf0: 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
cc00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cc10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cc20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cc30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
cc40: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
cc50: 6c 69 63 20 62 6f 6f 6c 20 73 61 66 65 3b 0d 0a  lic bool safe;..
cc60: 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
cc70: 69 63 20 62 6f 6f 6c 20 53 61 66 65 0d 0a 20 20  ic bool Safe..  
cc80: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
cc90: 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74               get
cca0: 20 7b 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64   { CheckDisposed
ccb0: 28 29 3b 20 72 65 74 75 72 6e 20 73 61 66 65 3b  (); return safe;
ccc0: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
ccd0: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
cce0: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
ccf0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cd00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cd10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cd20: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
cd30: 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20      public bool 
cd40: 6e 6f 43 6c 6f 73 65 3b 0d 0a 20 20 20 20 20 20  noClose;..      
cd50: 20 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f        public boo
cd60: 6c 20 4e 6f 43 6c 6f 73 65 0d 0a 20 20 20 20 20  l NoClose..     
cd70: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
cd80: 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20            get { 
cd90: 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b  CheckDisposed();
cda0: 20 72 65 74 75 72 6e 20 6e 6f 43 6c 6f 73 65 3b   return noClose;
cdb0: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
cdc0: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  }..            #
cdd0: 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20  endregion....   
cde0: 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
cdf0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ce00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ce10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ce20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
ce30: 20 20 20 20 20 20 20 20 20 20 20 20 23 72 65 67              #reg
ce40: 69 6f 6e 20 50 72 69 76 61 74 65 20 4d 65 74 68  ion Private Meth
ce50: 6f 64 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ods..           
ce60: 20 70 72 69 76 61 74 65 20 76 6f 69 64 20 43 68   private void Ch
ce70: 65 63 6b 52 65 61 64 4f 6e 6c 79 28 29 0d 0a 20  eckReadOnly().. 
ce80: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
ce90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
cea0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
ceb0: 20 20 2f 2f 20 4e 4f 54 45 3a 20 49 6e 20 22 72    // NOTE: In "r
cec0: 65 61 64 2d 6f 6e 6c 79 22 20 6d 6f 64 65 2c 20  ead-only" mode, 
ced0: 77 65 20 64 69 73 61 6c 6c 6f 77 20 61 6c 6c 20  we disallow all 
cee0: 77 72 69 74 65 20 61 63 63 65 73 73 2e 0d 0a 20  write access... 
cef0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
cf00: 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
cf10: 20 20 20 69 66 20 28 21 72 65 61 64 4f 6e 6c 79     if (!readOnly
cf20: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
cf30: 20 20 20 20 20 20 20 72 65 74 75 72 6e 3b 0d 0a         return;..
cf40: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
cf50: 20 20 74 68 72 6f 77 20 6e 65 77 20 49 6e 76 61    throw new Inva
cf60: 6c 69 64 4f 70 65 72 61 74 69 6f 6e 45 78 63 65  lidOperationExce
cf70: 70 74 69 6f 6e 28 29 3b 0d 0a 20 20 20 20 20 20  ption();..      
cf80: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
cf90: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
cfa0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cfb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cfc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cfd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
cfe0: 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
cff0: 65 20 76 6f 69 64 20 43 68 65 63 6b 53 61 66 65  e void CheckSafe
d000: 28 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ()..            
d010: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
d020: 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
d030: 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20         // NOTE: 
d040: 49 6e 20 22 73 61 66 65 22 20 6d 6f 64 65 2c 20  In "safe" mode, 
d050: 77 65 20 64 69 73 61 6c 6c 6f 77 20 61 6c 6c 20  we disallow all 
d060: 64 69 72 65 63 74 20 61 63 63 65 73 73 20 74 6f  direct access to
d070: 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 20 20   the..          
d080: 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 63        //       c
d090: 6f 6e 74 61 69 6e 65 64 20 72 65 67 69 73 74 72  ontained registr
d0a0: 79 20 6b 65 79 2e 0d 0a 20 20 20 20 20 20 20 20  y key...        
d0b0: 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
d0c0: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
d0d0: 21 73 61 66 65 29 0d 0a 20 20 20 20 20 20 20 20  !safe)..        
d0e0: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
d0f0: 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  rn;....         
d100: 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77         throw new
d110: 20 49 6e 76 61 6c 69 64 4f 70 65 72 61 74 69 6f   InvalidOperatio
d120: 6e 45 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 20  nException();.. 
d130: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
d140: 20 20 20 20 20 20 20 20 20 20 23 65 6e 64 72 65            #endre
d150: 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20  gion....        
d160: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
d170: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d180: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d190: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d1a0: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
d1b0: 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 53         #region S
d1c0: 79 73 74 65 6d 2e 4f 62 6a 65 63 74 20 4f 76 65  ystem.Object Ove
d1d0: 72 72 69 64 65 73 0d 0a 20 20 20 20 20 20 20 20  rrides..        
d1e0: 20 20 20 20 70 75 62 6c 69 63 20 6f 76 65 72 72      public overr
d1f0: 69 64 65 20 73 74 72 69 6e 67 20 54 6f 53 74 72  ide string ToStr
d200: 69 6e 67 28 29 0d 0a 20 20 20 20 20 20 20 20 20  ing()..         
d210: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
d220: 20 20 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f        CheckDispo
d230: 73 65 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  sed();....      
d240: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
d250: 20 74 68 69 73 2e 4e 61 6d 65 3b 0d 0a 20 20 20   this.Name;..   
d260: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
d270: 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
d280: 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  on....          
d290: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
d2a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d2b0: 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
d2e0: 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50 75 62       #region Pub
d2f0: 6c 69 63 20 53 74 61 74 69 63 20 4d 65 74 68 6f  lic Static Metho
d300: 64 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ds..            
d310: 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 62 6f  public static bo
d320: 6f 6c 20 4e 61 6d 65 45 71 75 61 6c 73 28 0d 0a  ol NameEquals(..
d330: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d340: 73 74 72 69 6e 67 20 6e 61 6d 65 31 2c 0d 0a 20  string name1,.. 
d350: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
d360: 74 72 69 6e 67 20 6e 61 6d 65 32 0d 0a 20 20 20  tring name2..   
d370: 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a               )..
d380: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
d390: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
d3a0: 65 74 75 72 6e 20 53 74 72 69 6e 67 2e 45 71 75  eturn String.Equ
d3b0: 61 6c 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20  als(..          
d3c0: 20 20 20 20 20 20 20 20 20 20 6e 61 6d 65 31 2c            name1,
d3d0: 20 6e 61 6d 65 32 2c 20 53 74 72 69 6e 67 43 6f   name2, StringCo
d3e0: 6d 70 61 72 69 73 6f 6e 2e 4f 72 64 69 6e 61 6c  mparison.Ordinal
d3f0: 49 67 6e 6f 72 65 43 61 73 65 29 3b 0d 0a 20 20  IgnoreCase);..  
d400: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
d410: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
d420: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d430: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d440: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d450: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
d460: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
d470: 62 6c 69 63 20 73 74 61 74 69 63 20 62 6f 6f 6c  blic static bool
d480: 20 56 61 6c 75 65 45 71 75 61 6c 73 28 0d 0a 20   ValueEquals(.. 
d490: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6f                 o
d4a0: 62 6a 65 63 74 20 76 61 6c 75 65 31 2c 0d 0a 20  bject value1,.. 
d4b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6f                 o
d4c0: 62 6a 65 63 74 20 76 61 6c 75 65 32 0d 0a 20 20  bject value2..  
d4d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d                ).
d4e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
d4f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d500: 69 66 20 28 28 76 61 6c 75 65 31 20 3d 3d 20 6e  if ((value1 == n
d510: 75 6c 6c 29 20 7c 7c 20 28 76 61 6c 75 65 32 20  ull) || (value2 
d520: 3d 3d 20 6e 75 6c 6c 29 29 0d 0a 20 20 20 20 20  == null))..     
d530: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
d540: 65 74 75 72 6e 20 28 28 76 61 6c 75 65 31 20 3d  eturn ((value1 =
d550: 3d 20 6e 75 6c 6c 29 20 26 26 20 28 76 61 6c 75  = null) && (valu
d560: 65 32 20 3d 3d 20 6e 75 6c 6c 29 29 3b 0d 0a 0d  e2 == null));...
d570: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
d580: 20 69 66 20 28 4f 62 6a 65 63 74 2e 52 65 66 65   if (Object.Refe
d590: 72 65 6e 63 65 45 71 75 61 6c 73 28 76 61 6c 75  renceEquals(valu
d5a0: 65 31 2c 20 76 61 6c 75 65 32 29 29 0d 0a 20 20  e1, value2))..  
d5b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d5c0: 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a    return true;..
d5d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
d5e0: 20 20 54 79 70 65 20 74 79 70 65 31 20 3d 20 76    Type type1 = v
d5f0: 61 6c 75 65 31 2e 47 65 74 54 79 70 65 28 29 3b  alue1.GetType();
d600: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
d610: 20 20 54 79 70 65 20 74 79 70 65 32 20 3d 20 76    Type type2 = v
d620: 61 6c 75 65 32 2e 47 65 74 54 79 70 65 28 29 3b  alue2.GetType();
d630: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
d640: 20 20 20 20 69 66 20 28 21 4f 62 6a 65 63 74 2e      if (!Object.
d650: 52 65 66 65 72 65 6e 63 65 45 71 75 61 6c 73 28  ReferenceEquals(
d660: 74 79 70 65 31 2c 20 74 79 70 65 32 29 29 0d 0a  type1, type2))..
d670: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d680: 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
d690: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
d6a0: 20 20 20 20 20 69 66 20 28 74 79 70 65 31 20 3d       if (type1 =
d6b0: 3d 20 74 79 70 65 6f 66 28 69 6e 74 29 29 20 2f  = typeof(int)) /
d6c0: 2f 20 44 57 6f 72 64 0d 0a 20 20 20 20 20 20 20  / DWord..       
d6d0: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
d6e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d6f0: 72 65 74 75 72 6e 20 28 28 69 6e 74 29 76 61 6c  return ((int)val
d700: 75 65 31 20 3d 3d 20 28 69 6e 74 29 76 61 6c 75  ue1 == (int)valu
d710: 65 32 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  e2);..          
d720: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
d730: 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66           else if
d740: 20 28 74 79 70 65 31 20 3d 3d 20 74 79 70 65 6f   (type1 == typeo
d750: 66 28 6c 6f 6e 67 29 29 20 2f 2f 20 51 57 6f 72  f(long)) // QWor
d760: 64 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  d..             
d770: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
d780: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
d790: 20 28 28 6c 6f 6e 67 29 76 61 6c 75 65 31 20 3d   ((long)value1 =
d7a0: 3d 20 28 6c 6f 6e 67 29 76 61 6c 75 65 32 29 3b  = (long)value2);
d7b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
d7c0: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
d7d0: 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 74 79       else if (ty
d7e0: 70 65 31 20 3d 3d 20 74 79 70 65 6f 66 28 73 74  pe1 == typeof(st
d7f0: 72 69 6e 67 29 29 20 2f 2f 20 53 74 72 69 6e 67  ring)) // String
d800: 20 2f 20 45 78 70 61 6e 64 53 74 72 69 6e 67 0d   / ExpandString.
d810: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
d820: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
d830: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 53          return S
d840: 74 72 69 6e 67 2e 45 71 75 61 6c 73 28 0d 0a 20  tring.Equals(.. 
d850: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d860: 20 20 20 20 20 20 20 28 73 74 72 69 6e 67 29 76         (string)v
d870: 61 6c 75 65 31 2c 20 28 73 74 72 69 6e 67 29 76  alue1, (string)v
d880: 61 6c 75 65 32 2c 0d 0a 20 20 20 20 20 20 20 20  alue2,..        
d890: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d8a0: 53 74 72 69 6e 67 43 6f 6d 70 61 72 69 73 6f 6e  StringComparison
d8b0: 2e 4f 72 64 69 6e 61 6c 29 3b 0d 0a 20 20 20 20  .Ordinal);..    
d8c0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
d8d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
d8e0: 6c 73 65 20 69 66 20 28 74 79 70 65 31 20 3d 3d  lse if (type1 ==
d8f0: 20 74 79 70 65 6f 66 28 73 74 72 69 6e 67 5b 5d   typeof(string[]
d900: 29 29 20 2f 2f 20 4d 75 6c 74 69 53 74 72 69 6e  )) // MultiStrin
d910: 67 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  g..             
d920: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
d930: 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
d940: 5b 5d 20 61 72 72 61 79 31 20 3d 20 28 73 74 72  [] array1 = (str
d950: 69 6e 67 5b 5d 29 76 61 6c 75 65 31 3b 0d 0a 20  ing[])value1;.. 
d960: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d970: 20 20 20 73 74 72 69 6e 67 5b 5d 20 61 72 72 61     string[] arra
d980: 79 32 20 3d 20 28 73 74 72 69 6e 67 5b 5d 29 76  y2 = (string[])v
d990: 61 6c 75 65 32 3b 0d 0a 0d 0a 20 20 20 20 20 20  alue2;....      
d9a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e                in
d9b0: 74 20 6c 65 6e 67 74 68 31 20 3d 20 61 72 72 61  t length1 = arra
d9c0: 79 31 2e 4c 65 6e 67 74 68 3b 0d 0a 0d 0a 20 20  y1.Length;....  
d9d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d9e0: 20 20 69 66 20 28 6c 65 6e 67 74 68 31 20 21 3d    if (length1 !=
d9f0: 20 61 72 72 61 79 32 2e 4c 65 6e 67 74 68 29 0d   array2.Length).
da00: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
da10: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
da20: 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  false;....      
da30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 6f                fo
da40: 72 20 28 69 6e 74 20 69 6e 64 65 78 31 20 3d 20  r (int index1 = 
da50: 30 3b 20 69 6e 64 65 78 31 20 3c 20 6c 65 6e 67  0; index1 < leng
da60: 74 68 31 3b 20 69 6e 64 65 78 31 2b 2b 29 0d 0a  th1; index1++)..
da70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
da80: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
da90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
daa0: 66 20 28 21 53 74 72 69 6e 67 2e 45 71 75 61 6c  f (!String.Equal
dab0: 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  s(..            
dac0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dad0: 20 20 20 20 61 72 72 61 79 31 5b 69 6e 64 65 78      array1[index
dae0: 31 5d 2c 20 61 72 72 61 79 32 5b 69 6e 64 65 78  1], array2[index
daf0: 31 5d 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  1],..           
db00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
db10: 20 20 20 20 20 53 74 72 69 6e 67 43 6f 6d 70 61       StringCompa
db20: 72 69 73 6f 6e 2e 4f 72 64 69 6e 61 6c 29 29 0d  rison.Ordinal)).
db30: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
db40: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
db50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
db60: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
db70: 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alse;..         
db80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
db90: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
dba0: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
dbb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
dbc0: 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20  eturn true;..   
dbd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
dbe0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dbf0: 65 6c 73 65 20 69 66 20 28 74 79 70 65 31 20 3d  else if (type1 =
dc00: 3d 20 74 79 70 65 6f 66 28 62 79 74 65 5b 5d 29  = typeof(byte[])
dc10: 29 20 2f 2f 20 42 69 6e 61 72 79 0d 0a 20 20 20  ) // Binary..   
dc20: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
dc30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dc40: 20 20 20 20 62 79 74 65 5b 5d 20 61 72 72 61 79      byte[] array
dc50: 31 20 3d 20 28 62 79 74 65 5b 5d 29 76 61 6c 75  1 = (byte[])valu
dc60: 65 31 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e1;..           
dc70: 20 20 20 20 20 20 20 20 20 62 79 74 65 5b 5d 20           byte[] 
dc80: 61 72 72 61 79 32 20 3d 20 28 62 79 74 65 5b 5d  array2 = (byte[]
dc90: 29 76 61 6c 75 65 32 3b 0d 0a 0d 0a 20 20 20 20  )value2;....    
dca0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dcb0: 69 6e 74 20 6c 65 6e 67 74 68 31 20 3d 20 61 72  int length1 = ar
dcc0: 72 61 79 31 2e 4c 65 6e 67 74 68 3b 0d 0a 0d 0a  ray1.Length;....
dcd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dce0: 20 20 20 20 69 66 20 28 6c 65 6e 67 74 68 31 20      if (length1 
dcf0: 21 3d 20 61 72 72 61 79 32 2e 4c 65 6e 67 74 68  != array2.Length
dd00: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
dd10: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
dd20: 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20  n false;....    
dd30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dd40: 66 6f 72 20 28 69 6e 74 20 69 6e 64 65 78 31 20  for (int index1 
dd50: 3d 20 30 3b 20 69 6e 64 65 78 31 20 3c 20 6c 65  = 0; index1 < le
dd60: 6e 67 74 68 31 3b 20 69 6e 64 65 78 31 2b 2b 29  ngth1; index1++)
dd70: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
dd80: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 61 72            if (ar
dd90: 72 61 79 31 5b 69 6e 64 65 78 31 5d 20 21 3d 20  ray1[index1] != 
dda0: 61 72 72 61 79 32 5b 69 6e 64 65 78 31 5d 29 0d  array2[index1]).
ddb0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
ddc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
ddd0: 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20  urn false;....  
dde0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ddf0: 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a    return true;..
de00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
de10: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
de20: 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
de30: 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
de40: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
de50: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
de60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
de70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
de80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
de90: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
dea0: 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69      public stati
deb0: 63 20 69 6e 74 20 56 61 6c 75 65 48 61 73 68 43  c int ValueHashC
dec0: 6f 64 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ode(..          
ded0: 20 20 20 20 20 20 6f 62 6a 65 63 74 20 76 61 6c        object val
dee0: 75 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ue..            
def0: 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20      )..         
df00: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
df10: 20 20 20 20 20 20 69 6e 74 20 72 65 73 75 6c 74        int result
df20: 20 3d 20 30 3b 0d 0a 0d 0a 20 20 20 20 20 20 20   = 0;....       
df30: 20 20 20 20 20 20 20 20 20 69 66 20 28 76 61 6c           if (val
df40: 75 65 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ue != null)..   
df50: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
df60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
df70: 20 20 20 20 54 79 70 65 20 74 79 70 65 20 3d 20      Type type = 
df80: 76 61 6c 75 65 2e 47 65 74 54 79 70 65 28 29 3b  value.GetType();
df90: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
dfa0: 20 20 20 20 20 20 20 20 69 66 20 28 28 74 79 70          if ((typ
dfb0: 65 20 3d 3d 20 74 79 70 65 6f 66 28 69 6e 74 29  e == typeof(int)
dfc0: 29 20 7c 7c 20 2f 2f 20 44 57 6f 72 64 0d 0a 20  ) || // DWord.. 
dfd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dfe0: 20 20 20 20 20 20 20 28 74 79 70 65 20 3d 3d 20         (type == 
dff0: 74 79 70 65 6f 66 28 6c 6f 6e 67 29 29 20 7c 7c  typeof(long)) ||
e000: 20 2f 2f 20 51 57 6f 72 64 0d 0a 20 20 20 20 20   // QWord..     
e010: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e020: 20 20 20 28 74 79 70 65 20 3d 3d 20 74 79 70 65     (type == type
e030: 6f 66 28 73 74 72 69 6e 67 29 29 29 20 2f 2f 20  of(string))) // 
e040: 53 74 72 69 6e 67 20 2f 20 45 78 70 61 6e 64 53  String / ExpandS
e050: 74 72 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 20  tring..         
e060: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
e070: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e080: 20 20 20 20 20 20 72 65 73 75 6c 74 20 3d 20 76        result = v
e090: 61 6c 75 65 2e 47 65 74 48 61 73 68 43 6f 64 65  alue.GetHashCode
e0a0: 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ();..           
e0b0: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
e0c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e0d0: 65 6c 73 65 20 69 66 20 28 28 74 79 70 65 20 3d  else if ((type =
e0e0: 3d 20 74 79 70 65 6f 66 28 73 74 72 69 6e 67 5b  = typeof(string[
e0f0: 5d 29 29 20 7c 7c 20 2f 2f 20 4d 75 6c 74 69 53  ])) || // MultiS
e100: 74 72 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 20  tring..         
e110: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28                 (
e120: 74 79 70 65 20 3d 3d 20 74 79 70 65 6f 66 28 62  type == typeof(b
e130: 79 74 65 5b 5d 29 29 29 20 2f 2f 20 42 69 6e 61  yte[]))) // Bina
e140: 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ry..            
e150: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
e160: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e170: 20 20 20 41 72 72 61 79 20 61 72 72 61 79 20 3d     Array array =
e180: 20 28 41 72 72 61 79 29 76 61 6c 75 65 3b 0d 0a   (Array)value;..
e190: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e1a0: 20 20 20 20 20 20 20 20 69 6e 74 20 6c 65 6e 67          int leng
e1b0: 74 68 20 3d 20 61 72 72 61 79 2e 4c 65 6e 67 74  th = array.Lengt
e1c0: 68 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  h;....          
e1d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 6f                fo
e1e0: 72 20 28 69 6e 74 20 69 6e 64 65 78 20 3d 20 30  r (int index = 0
e1f0: 3b 20 69 6e 64 65 78 20 3c 20 6c 65 6e 67 74 68  ; index < length
e200: 3b 20 69 6e 64 65 78 2b 2b 29 0d 0a 20 20 20 20  ; index++)..    
e210: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e220: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
e230: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e240: 20 20 20 6f 62 6a 65 63 74 20 65 6c 65 6d 65 6e     object elemen
e250: 74 20 3d 20 61 72 72 61 79 2e 47 65 74 56 61 6c  t = array.GetVal
e260: 75 65 28 69 6e 64 65 78 29 3b 0d 0a 0d 0a 20 20  ue(index);....  
e270: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e280: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 65 6c            if (el
e290: 65 6d 65 6e 74 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  ement == null)..
e2a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e2b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e2c0: 63 6f 6e 74 69 6e 75 65 3b 0d 0a 0d 0a 20 20 20  continue;....   
e2d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e2e0: 20 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 20           result 
e2f0: 5e 3d 20 65 6c 65 6d 65 6e 74 2e 47 65 74 48 61  ^= element.GetHa
e300: 73 68 43 6f 64 65 28 29 3b 0d 0a 20 20 20 20 20  shCode();..     
e310: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e320: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
e330: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
e340: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
e350: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
e360: 20 20 72 65 74 75 72 6e 20 72 65 73 75 6c 74 3b    return result;
e370: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
e380: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
e390: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e3a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e3b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e3c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e3d0: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
e3e0: 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20    public static 
e3f0: 73 74 72 69 6e 67 20 56 61 6c 75 65 54 6f 53 74  string ValueToSt
e400: 72 69 6e 67 28 0d 0a 20 20 20 20 20 20 20 20 20  ring(..         
e410: 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 76 61         object va
e420: 6c 75 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  lue,..          
e430: 20 20 20 20 20 20 73 74 72 69 6e 67 20 64 65 6c        string del
e440: 69 6d 69 74 65 72 2c 0d 0a 20 20 20 20 20 20 20  imiter,..       
e450: 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
e460: 6e 75 6c 6c 56 61 6c 75 65 0d 0a 20 20 20 20 20  nullValue..     
e470: 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
e480: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
e490: 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72               str
e4a0: 69 6e 67 20 72 65 73 75 6c 74 20 3d 20 6e 75 6c  ing result = nul
e4b0: 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  l;....          
e4c0: 20 20 20 20 20 20 69 66 20 28 76 61 6c 75 65 20        if (value 
e4d0: 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  != null)..      
e4e0: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
e4f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e500: 20 54 79 70 65 20 74 79 70 65 20 3d 20 76 61 6c   Type type = val
e510: 75 65 2e 47 65 74 54 79 70 65 28 29 3b 0d 0a 0d  ue.GetType();...
e520: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
e530: 20 20 20 20 20 69 66 20 28 28 74 79 70 65 20 3d       if ((type =
e540: 3d 20 74 79 70 65 6f 66 28 69 6e 74 29 29 20 7c  = typeof(int)) |
e550: 7c 20 2f 2f 20 44 57 6f 72 64 0d 0a 20 20 20 20  | // DWord..    
e560: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e570: 20 20 20 20 28 74 79 70 65 20 3d 3d 20 74 79 70      (type == typ
e580: 65 6f 66 28 6c 6f 6e 67 29 29 20 7c 7c 20 2f 2f  eof(long)) || //
e590: 20 51 57 6f 72 64 0d 0a 20 20 20 20 20 20 20 20   QWord..        
e5a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e5b0: 28 74 79 70 65 20 3d 3d 20 74 79 70 65 6f 66 28  (type == typeof(
e5c0: 73 74 72 69 6e 67 29 29 29 20 2f 2f 20 53 74 72  string))) // Str
e5d0: 69 6e 67 20 2f 20 45 78 70 61 6e 64 53 74 72 69  ing / ExpandStri
e5e0: 6e 67 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ng..            
e5f0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
e600: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e610: 20 20 20 72 65 73 75 6c 74 20 3d 20 76 61 6c 75     result = valu
e620: 65 2e 54 6f 53 74 72 69 6e 67 28 29 3b 0d 0a 20  e.ToString();.. 
e630: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e640: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
e650: 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69            else i
e660: 66 20 28 28 74 79 70 65 20 3d 3d 20 74 79 70 65  f ((type == type
e670: 6f 66 28 73 74 72 69 6e 67 5b 5d 29 29 20 7c 7c  of(string[])) ||
e680: 20 2f 2f 20 4d 75 6c 74 69 53 74 72 69 6e 67 0d   // MultiString.
e690: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
e6a0: 20 20 20 20 20 20 20 20 20 28 74 79 70 65 20 3d           (type =
e6b0: 3d 20 74 79 70 65 6f 66 28 62 79 74 65 5b 5d 29  = typeof(byte[])
e6c0: 29 29 20 2f 2f 20 42 69 6e 61 72 79 0d 0a 20 20  )) // Binary..  
e6d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e6e0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
e6f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 53 74 72               Str
e700: 69 6e 67 42 75 69 6c 64 65 72 20 62 75 69 6c 64  ingBuilder build
e710: 65 72 20 3d 20 6e 65 77 20 53 74 72 69 6e 67 42  er = new StringB
e720: 75 69 6c 64 65 72 28 29 3b 0d 0a 20 20 20 20 20  uilder();..     
e730: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e740: 20 20 20 41 72 72 61 79 20 61 72 72 61 79 20 3d     Array array =
e750: 20 28 41 72 72 61 79 29 76 61 6c 75 65 3b 0d 0a   (Array)value;..
e760: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e770: 20 20 20 20 20 20 20 20 69 6e 74 20 6c 65 6e 67          int leng
e780: 74 68 20 3d 20 61 72 72 61 79 2e 4c 65 6e 67 74  th = array.Lengt
e790: 68 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  h;....          
e7a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 6f                fo
e7b0: 72 20 28 69 6e 74 20 69 6e 64 65 78 20 3d 20 30  r (int index = 0
e7c0: 3b 20 69 6e 64 65 78 20 3c 20 6c 65 6e 67 74 68  ; index < length
e7d0: 3b 20 69 6e 64 65 78 2b 2b 29 0d 0a 20 20 20 20  ; index++)..    
e7e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e7f0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
e800: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e810: 20 20 20 69 66 20 28 28 69 6e 64 65 78 20 3e 20     if ((index > 
e820: 30 29 20 26 26 20 28 64 65 6c 69 6d 69 74 65 72  0) && (delimiter
e830: 20 21 3d 20 6e 75 6c 6c 29 29 0d 0a 20 20 20 20   != null))..    
e840: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e850: 20 20 20 20 20 20 20 20 20 20 20 20 62 75 69 6c              buil
e860: 64 65 72 2e 41 70 70 65 6e 64 28 64 65 6c 69 6d  der.Append(delim
e870: 69 74 65 72 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  iter);....      
e880: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e890: 20 20 20 20 20 20 6f 62 6a 65 63 74 20 65 6c 65        object ele
e8a0: 6d 65 6e 74 20 3d 20 61 72 72 61 79 2e 47 65 74  ment = array.Get
e8b0: 56 61 6c 75 65 28 69 6e 64 65 78 29 3b 0d 0a 0d  Value(index);...
e8c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
e8d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
e8e0: 28 65 6c 65 6d 65 6e 74 20 3d 3d 20 6e 75 6c 6c  (element == null
e8f0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
e900: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
e910: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
e920: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e930: 20 20 69 66 20 28 6e 75 6c 6c 56 61 6c 75 65 20    if (nullValue 
e940: 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  != null)..      
e950: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e960: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 75                bu
e970: 69 6c 64 65 72 2e 41 70 70 65 6e 64 28 6e 75 6c  ilder.Append(nul
e980: 6c 56 61 6c 75 65 29 3b 0d 0a 0d 0a 20 20 20 20  lValue);....    
e990: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e9a0: 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74              cont
e9b0: 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  inue;..         
e9c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e9d0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
e9e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e9f0: 20 20 20 20 62 75 69 6c 64 65 72 2e 41 70 70 65      builder.Appe
ea00: 6e 64 28 65 6c 65 6d 65 6e 74 2e 54 6f 53 74 72  nd(element.ToStr
ea10: 69 6e 67 28 29 29 3b 0d 0a 20 20 20 20 20 20 20  ing());..       
ea20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ea30: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
ea40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
ea50: 73 75 6c 74 20 3d 20 62 75 69 6c 64 65 72 2e 54  sult = builder.T
ea60: 6f 53 74 72 69 6e 67 28 29 3b 0d 0a 20 20 20 20  oString();..    
ea70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ea80: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
ea90: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
eaa0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 72          return r
eab0: 65 73 75 6c 74 3b 0d 0a 20 20 20 20 20 20 20 20  esult;..        
eac0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
ead0: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
eae0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
eaf0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
eb00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
eb10: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
eb20: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73          public s
eb30: 74 61 74 69 63 20 62 6f 6f 6c 20 45 71 75 61 6c  tatic bool Equal
eb40: 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  s(..            
eb50: 20 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79      MockRegistry
eb60: 4b 65 79 20 6b 65 79 31 2c 0d 0a 20 20 20 20 20  Key key1,..     
eb70: 20 20 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52             MockR
eb80: 65 67 69 73 74 72 79 4b 65 79 20 6b 65 79 32 0d  egistryKey key2.
eb90: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
eba0: 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   )..            
ebb0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
ebc0: 20 20 20 69 66 20 28 28 6b 65 79 31 20 3d 3d 20     if ((key1 == 
ebd0: 6e 75 6c 6c 29 20 7c 7c 20 28 6b 65 79 32 20 3d  null) || (key2 =
ebe0: 3d 20 6e 75 6c 6c 29 29 0d 0a 20 20 20 20 20 20  = null))..      
ebf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
ec00: 74 75 72 6e 20 28 28 6b 65 79 31 20 3d 3d 20 6e  turn ((key1 == n
ec10: 75 6c 6c 29 20 26 26 20 28 6b 65 79 32 20 3d 3d  ull) && (key2 ==
ec20: 20 6e 75 6c 6c 29 29 3b 0d 0a 0d 0a 20 20 20 20   null));....    
ec30: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
ec40: 4f 62 6a 65 63 74 2e 52 65 66 65 72 65 6e 63 65  Object.Reference
ec50: 45 71 75 61 6c 73 28 6b 65 79 31 2c 20 6b 65 79  Equals(key1, key
ec60: 32 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  2))..           
ec70: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
ec80: 74 72 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  true;....       
ec90: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
eca0: 4e 61 6d 65 45 71 75 61 6c 73 28 6b 65 79 31 2e  NameEquals(key1.
ecb0: 4e 61 6d 65 2c 20 6b 65 79 32 2e 4e 61 6d 65 29  Name, key2.Name)
ecc0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
ecd0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
ece0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ecf0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ed00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ed10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ed20: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
ed30: 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63     public static
ed40: 20 69 6e 74 20 47 65 74 48 61 73 68 43 6f 64 65   int GetHashCode
ed50: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
ed60: 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b     MockRegistryK
ed70: 65 79 20 6b 65 79 0d 0a 20 20 20 20 20 20 20 20  ey key..        
ed80: 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
ed90: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
eda0: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6b 65            if (ke
edb0: 79 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  y != null)..    
edc0: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
edd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ede0: 20 20 20 73 74 72 69 6e 67 20 6e 61 6d 65 20 3d     string name =
edf0: 20 6b 65 79 2e 4e 61 6d 65 3b 0d 0a 0d 0a 20 20   key.Name;....  
ee00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ee10: 20 20 69 66 20 28 6e 61 6d 65 20 21 3d 20 6e 75    if (name != nu
ee20: 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
ee30: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
ee40: 75 72 6e 20 6e 61 6d 65 2e 47 65 74 48 61 73 68  urn name.GetHash
ee50: 43 6f 64 65 28 29 3b 0d 0a 20 20 20 20 20 20 20  Code();..       
ee60: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
ee70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
ee80: 74 75 72 6e 20 30 3b 0d 0a 20 20 20 20 20 20 20  turn 0;..       
ee90: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
eea0: 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
eeb0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
eec0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
eed0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
eee0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
eef0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ef00: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
ef10: 20 23 72 65 67 69 6f 6e 20 49 6d 70 6c 69 63 69   #region Implici
ef20: 74 20 43 6f 6e 76 65 72 73 69 6f 6e 20 4f 70 65  t Conversion Ope
ef30: 72 61 74 6f 72 73 0d 0a 20 20 20 20 20 20 20 20  rators..        
ef40: 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
ef50: 20 20 20 20 2f 2f 20 42 55 47 42 55 47 3a 20 52      // BUGBUG: R
ef60: 65 6d 6f 76 65 20 6d 65 3f 20 20 54 68 69 73 20  emove me?  This 
ef70: 73 68 6f 75 6c 64 20 62 65 20 73 61 66 65 20 62  should be safe b
ef80: 65 63 61 75 73 65 20 69 6e 20 22 77 68 61 74 2d  ecause in "what-
ef90: 69 66 22 0d 0a 20 20 20 20 20 20 20 20 20 20 20  if"..           
efa0: 20 2f 2f 20 20 20 20 20 20 20 20 20 6d 6f 64 65   //         mode
efb0: 20 61 6c 6c 20 6b 65 79 73 20 61 72 65 20 6f 70   all keys are op
efc0: 65 6e 65 64 20 72 65 61 64 2d 6f 6e 6c 79 2e 0d  ened read-only..
efd0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d  .            //.
efe0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
eff0: 6c 69 63 20 73 74 61 74 69 63 20 69 6d 70 6c 69  lic static impli
f000: 63 69 74 20 6f 70 65 72 61 74 6f 72 20 52 65 67  cit operator Reg
f010: 69 73 74 72 79 4b 65 79 28 0d 0a 20 20 20 20 20  istryKey(..     
f020: 20 20 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52             MockR
f030: 65 67 69 73 74 72 79 4b 65 79 20 6b 65 79 0d 0a  egistryKey key..
f040: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f050: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
f060: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
f070: 20 20 72 65 74 75 72 6e 20 28 6b 65 79 20 21 3d    return (key !=
f080: 20 6e 75 6c 6c 29 20 3f 20 6b 65 79 2e 4b 65 79   null) ? key.Key
f090: 20 3a 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20   : null;..      
f0a0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
f0b0: 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d       #endregion.
f0c0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
f0d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f0e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f0f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f100: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f110: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
f120: 20 20 23 72 65 67 69 6f 6e 20 49 44 69 73 70 6f    #region IDispo
f130: 73 61 62 6c 65 20 22 50 61 74 74 65 72 6e 22 20  sable "Pattern" 
f140: 4d 65 6d 62 65 72 73 0d 0a 20 20 20 20 20 20 20  Members..       
f150: 20 20 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f       private boo
f160: 6c 20 64 69 73 70 6f 73 65 64 3b 0d 0a 20 20 20  l disposed;..   
f170: 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65           private
f180: 20 76 6f 69 64 20 43 68 65 63 6b 44 69 73 70 6f   void CheckDispo
f190: 73 65 64 28 29 20 2f 2a 20 74 68 72 6f 77 20 2a  sed() /* throw *
f1a0: 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  /..            {
f1b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
f1c0: 20 20 69 66 20 28 21 64 69 73 70 6f 73 65 64 29    if (!disposed)
f1d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
f1e0: 20 20 20 20 20 20 72 65 74 75 72 6e 3b 0d 0a 0d        return;...
f1f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
f200: 20 74 68 72 6f 77 20 6e 65 77 20 4f 62 6a 65 63   throw new Objec
f210: 74 44 69 73 70 6f 73 65 64 45 78 63 65 70 74 69  tDisposedExcepti
f220: 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  on(..           
f230: 20 20 20 20 20 20 20 20 20 74 79 70 65 6f 66 28           typeof(
f240: 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 29  MockRegistryKey)
f250: 2e 4e 61 6d 65 29 3b 0d 0a 20 20 20 20 20 20 20  .Name);..       
f260: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
f270: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
f280: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f290: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f2a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f2b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
f2c0: 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65           private
f2d0: 20 2f 2a 20 70 72 6f 74 65 63 74 65 64 20 76 69   /* protected vi
f2e0: 72 74 75 61 6c 20 2a 2f 20 76 6f 69 64 20 44 69  rtual */ void Di
f2f0: 73 70 6f 73 65 28 0d 0a 20 20 20 20 20 20 20 20  spose(..        
f300: 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 64 69 73          bool dis
f310: 70 6f 73 69 6e 67 0d 0a 20 20 20 20 20 20 20 20  posing..        
f320: 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
f330: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
f340: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21 64            if (!d
f350: 69 73 70 6f 73 65 64 29 0d 0a 20 20 20 20 20 20  isposed)..      
f360: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
f370: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f380: 20 69 66 20 28 64 69 73 70 6f 73 69 6e 67 29 0d   if (disposing).
f390: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
f3a0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
f3b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f3c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f3d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f3e0: 2f 2f 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20  ////..          
f3f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
f400: 20 64 69 73 70 6f 73 65 20 6d 61 6e 61 67 65 64   dispose managed
f410: 20 72 65 73 6f 75 72 63 65 73 20 68 65 72 65 2e   resources here.
f420: 2e 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
f430: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
f440: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f450: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f460: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
f470: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
f480: 6b 65 79 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20  key != null)..  
f490: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f4a0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
f4b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f4c0: 20 20 20 20 20 69 66 20 28 21 6e 6f 43 6c 6f 73       if (!noClos
f4d0: 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e)..            
f4e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f4f0: 20 20 20 20 6b 65 79 2e 43 6c 6f 73 65 28 29 3b      key.Close();
f500: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
f510: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f520: 6b 65 79 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20  key = null;..   
f530: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f540: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
f550: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
f560: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
f570: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
f580: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f590: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 20 20 20  ///////////..   
f5a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f5b0: 20 2f 2f 20 72 65 6c 65 61 73 65 20 75 6e 6d 61   // release unma
f5c0: 6e 61 67 65 64 20 72 65 73 6f 75 72 63 65 73 20  naged resources 
f5d0: 68 65 72 65 2e 2e 2e 0d 0a 20 20 20 20 20 20 20  here.....       
f5e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f               ///
f5f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f600: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f610: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
f620: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
f630: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f640: 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 54 68 69 73     // NOTE: This
f650: 20 6f 62 6a 65 63 74 20 69 73 20 6e 6f 77 20 64   object is now d
f660: 69 73 70 6f 73 65 64 2e 0d 0a 20 20 20 20 20 20  isposed...      
f670: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
f680: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
f690: 20 20 20 20 20 20 64 69 73 70 6f 73 65 64 20 3d        disposed =
f6a0: 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20   true;..        
f6b0: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
f6c0: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
f6d0: 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
f6e0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f720: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f730: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
f740: 20 20 20 23 72 65 67 69 6f 6e 20 49 44 69 73 70     #region IDisp
f750: 6f 73 61 62 6c 65 20 4d 65 6d 62 65 72 73 0d 0a  osable Members..
f760: 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
f770: 69 63 20 76 6f 69 64 20 44 69 73 70 6f 73 65 28  ic void Dispose(
f780: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
f790: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
f7a0: 20 20 44 69 73 70 6f 73 65 28 74 72 75 65 29 3b    Dispose(true);
f7b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
f7c0: 20 20 47 43 2e 53 75 70 70 72 65 73 73 46 69 6e    GC.SuppressFin
f7d0: 61 6c 69 7a 65 28 74 68 69 73 29 3b 0d 0a 20 20  alize(this);..  
f7e0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
f7f0: 20 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67           #endreg
f800: 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ion....         
f810: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
f820: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f830: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f840: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f850: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
f860: 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 44 65        #region De
f870: 73 74 72 75 63 74 6f 72 0d 0a 20 20 20 20 20 20  structor..      
f880: 20 20 20 20 20 20 7e 4d 6f 63 6b 52 65 67 69 73        ~MockRegis
f890: 74 72 79 4b 65 79 28 29 0d 0a 20 20 20 20 20 20  tryKey()..      
f8a0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
f8b0: 20 20 20 20 20 20 20 20 20 44 69 73 70 6f 73 65           Dispose
f8c0: 28 66 61 6c 73 65 29 3b 0d 0a 20 20 20 20 20 20  (false);..      
f8d0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
f8e0: 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d       #endregion.
f8f0: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..    
f900: 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
f910: 0d 0a 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f960: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65  /....        #re
f970: 67 69 6f 6e 20 52 65 67 69 73 74 72 79 52 6f 6f  gion RegistryRoo
f980: 74 4b 65 79 4e 61 6d 65 73 20 43 6c 61 73 73 0d  tKeyNames Class.
f990: 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65  .        private
f9a0: 20 73 74 61 74 69 63 20 63 6c 61 73 73 20 52 65   static class Re
f9b0: 67 69 73 74 72 79 52 6f 6f 74 4b 65 79 4e 61 6d  gistryRootKeyNam
f9c0: 65 73 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  es..        {.. 
f9d0: 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
f9e0: 63 20 63 6f 6e 73 74 20 73 74 72 69 6e 67 20 48  c const string H
f9f0: 4b 45 59 5f 43 4c 41 53 53 45 53 5f 52 4f 4f 54  KEY_CLASSES_ROOT
fa00: 20 3d 20 22 48 4b 45 59 5f 43 4c 41 53 53 45 53   = "HKEY_CLASSES
fa10: 5f 52 4f 4f 54 22 3b 0d 0a 20 20 20 20 20 20 20  _ROOT";..       
fa20: 20 20 20 20 20 70 75 62 6c 69 63 20 63 6f 6e 73       public cons
fa30: 74 20 73 74 72 69 6e 67 20 48 4b 43 52 20 3d 20  t string HKCR = 
fa40: 22 48 4b 43 52 22 3b 0d 0a 0d 0a 20 20 20 20 20  "HKCR";....     
fa50: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
fa60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fa70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fa80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fa90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
faa0: 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
fab0: 20 63 6f 6e 73 74 20 73 74 72 69 6e 67 20 48 4b   const string HK
fac0: 45 59 5f 43 55 52 52 45 4e 54 5f 43 4f 4e 46 49  EY_CURRENT_CONFI
fad0: 47 20 3d 20 22 48 4b 45 59 5f 43 55 52 52 45 4e  G = "HKEY_CURREN
fae0: 54 5f 43 4f 4e 46 49 47 22 3b 0d 0a 20 20 20 20  T_CONFIG";..    
faf0: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 63          public c
fb00: 6f 6e 73 74 20 73 74 72 69 6e 67 20 48 4b 43 43  onst string HKCC
fb10: 20 3d 20 22 48 4b 43 43 22 3b 0d 0a 0d 0a 20 20   = "HKCC";....  
fb20: 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
fb30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fb40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fb50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fb60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
fb70: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
fb80: 6c 69 63 20 63 6f 6e 73 74 20 73 74 72 69 6e 67  lic const string
fb90: 20 48 4b 45 59 5f 43 55 52 52 45 4e 54 5f 55 53   HKEY_CURRENT_US
fba0: 45 52 20 3d 20 22 48 4b 45 59 5f 43 55 52 52 45  ER = "HKEY_CURRE
fbb0: 4e 54 5f 55 53 45 52 22 3b 0d 0a 20 20 20 20 20  NT_USER";..     
fbc0: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 63 6f         public co
fbd0: 6e 73 74 20 73 74 72 69 6e 67 20 48 4b 43 55 20  nst string HKCU 
fbe0: 3d 20 22 48 4b 43 55 22 3b 0d 0a 0d 0a 20 20 20  = "HKCU";....   
fbf0: 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
fc00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fc10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fc20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fc30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
fc40: 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
fc50: 69 63 20 63 6f 6e 73 74 20 73 74 72 69 6e 67 20  ic const string 
fc60: 48 4b 45 59 5f 44 59 4e 5f 44 41 54 41 20 3d 20  HKEY_DYN_DATA = 
fc70: 22 48 4b 45 59 5f 44 59 4e 5f 44 41 54 41 22 3b  "HKEY_DYN_DATA";
fc80: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
fc90: 62 6c 69 63 20 63 6f 6e 73 74 20 73 74 72 69 6e  blic const strin
fca0: 67 20 48 4b 44 44 20 3d 20 22 48 4b 44 44 22 3b  g HKDD = "HKDD";
fcb0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
fcc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fcd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fce0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fcf0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fd00: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
fd10: 20 20 20 70 75 62 6c 69 63 20 63 6f 6e 73 74 20     public const 
fd20: 73 74 72 69 6e 67 20 48 4b 45 59 5f 4c 4f 43 41  string HKEY_LOCA
fd30: 4c 5f 4d 41 43 48 49 4e 45 20 3d 20 22 48 4b 45  L_MACHINE = "HKE
fd40: 59 5f 4c 4f 43 41 4c 5f 4d 41 43 48 49 4e 45 22  Y_LOCAL_MACHINE"
fd50: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ;..            p
fd60: 75 62 6c 69 63 20 63 6f 6e 73 74 20 73 74 72 69  ublic const stri
fd70: 6e 67 20 48 4b 4c 4d 20 3d 20 22 48 4b 4c 4d 22  ng HKLM = "HKLM"
fd80: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
fd90: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
fda0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fdb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fdc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fdd0: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
fde0: 20 20 20 20 70 75 62 6c 69 63 20 63 6f 6e 73 74      public const
fdf0: 20 73 74 72 69 6e 67 20 48 4b 45 59 5f 50 45 52   string HKEY_PER
fe00: 46 4f 52 4d 41 4e 43 45 5f 44 41 54 41 20 3d 20  FORMANCE_DATA = 
fe10: 22 48 4b 45 59 5f 50 45 52 46 4f 52 4d 41 4e 43  "HKEY_PERFORMANC
fe20: 45 5f 44 41 54 41 22 3b 0d 0a 20 20 20 20 20 20  E_DATA";..      
fe30: 20 20 20 20 20 20 70 75 62 6c 69 63 20 63 6f 6e        public con
fe40: 73 74 20 73 74 72 69 6e 67 20 48 4b 50 44 20 3d  st string HKPD =
fe50: 20 22 48 4b 50 44 22 3b 0d 0a 0d 0a 20 20 20 20   "HKPD";....    
fe60: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
fe70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fe80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fe90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fea0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
feb0: 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
fec0: 63 20 63 6f 6e 73 74 20 73 74 72 69 6e 67 20 48  c const string H
fed0: 4b 45 59 5f 55 53 45 52 53 20 3d 20 22 48 4b 45  KEY_USERS = "HKE
fee0: 59 5f 55 53 45 52 53 22 3b 0d 0a 20 20 20 20 20  Y_USERS";..     
fef0: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 63 6f         public co
ff00: 6e 73 74 20 73 74 72 69 6e 67 20 48 4b 55 20 3d  nst string HKU =
ff10: 20 22 48 4b 55 22 3b 0d 0a 20 20 20 20 20 20 20   "HKU";..       
ff20: 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64   }..        #end
ff30: 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20  region....      
ff40: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
ff50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ff60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ff70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ff80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
ff90: 20 20 20 20 20 23 72 65 67 69 6f 6e 20 52 65 67       #region Reg
ffa0: 69 73 74 72 79 48 65 6c 70 65 72 20 43 6c 61 73  istryHelper Clas
ffb0: 73 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69  s..        #regi
ffc0: 6f 6e 20 50 72 69 76 61 74 65 20 43 6f 6e 73 74  on Private Const
ffd0: 61 6e 74 73 0d 0a 20 20 20 20 20 20 20 20 70 72  ants..        pr
ffe0: 69 76 61 74 65 20 63 6f 6e 73 74 20 63 68 61 72  ivate const char
fff0: 20 4b 65 79 4e 61 6d 65 53 65 70 61 72 61 74 6f   KeyNameSeparato
10000 72 20 3d 20 27 5c 5c 27 3b 0d 0a 0d 0a 20 20 20  r = '\\';....   
10010 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
10020 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10030 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10040 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10050 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
10060 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
10070 73 74 61 74 69 63 20 72 65 61 64 6f 6e 6c 79 20  static readonly 
10080 63 68 61 72 5b 5d 20 4b 65 79 4e 61 6d 65 53 65  char[] KeyNameSe
10090 70 61 72 61 74 6f 72 73 20 3d 20 7b 0d 0a 20 20  parators = {..  
100a0 20 20 20 20 20 20 20 20 20 20 4b 65 79 4e 61 6d            KeyNam
100b0 65 53 65 70 61 72 61 74 6f 72 0d 0a 20 20 20 20  eSeparator..    
100c0 20 20 20 20 7d 3b 0d 0a 20 20 20 20 20 20 20 20      };..        
100d0 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20  #endregion....  
100e0 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
100f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10100 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10110 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10120 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
10130 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65  .        private
10140 20 73 74 61 74 69 63 20 63 6c 61 73 73 20 52 65   static class Re
10150 67 69 73 74 72 79 48 65 6c 70 65 72 0d 0a 20 20  gistryHelper..  
10160 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
10170 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50 72 69       #region Pri
10180 76 61 74 65 20 44 61 74 61 0d 0a 20 20 20 20 20  vate Data..     
10190 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
101a0 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20         // NOTE: 
101b0 54 68 69 73 20 69 73 20 75 73 65 64 20 74 6f 20  This is used to 
101c0 73 79 6e 63 68 72 6f 6e 69 7a 65 20 61 63 63 65  synchronize acce
101d0 73 73 20 74 6f 20 74 68 65 20 6c 69 73 74 20 6f  ss to the list o
101e0 66 20 6c 6f 67 67 65 64 0d 0a 20 20 20 20 20 20  f logged..      
101f0 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 72        //       r
10200 65 67 69 73 74 72 79 20 6f 70 65 72 61 74 69 6f  egistry operatio
10210 6e 73 20 28 6a 75 73 74 20 62 65 6c 6f 77 29 2e  ns (just below).
10220 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
10230 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
10240 69 76 61 74 65 20 73 74 61 74 69 63 20 6f 62 6a  ivate static obj
10250 65 63 74 20 73 79 6e 63 52 6f 6f 74 20 3d 20 6e  ect syncRoot = n
10260 65 77 20 6f 62 6a 65 63 74 28 29 3b 0d 0a 0d 0a  ew object();....
10270 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
10280 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e              // N
10290 4f 54 45 3a 20 54 68 69 73 20 69 73 20 74 68 65  OTE: This is the
102a0 20 6c 69 73 74 20 6f 66 20 72 65 67 69 73 74 72   list of registr
102b0 79 20 77 72 69 74 65 20 6f 70 65 72 61 74 69 6f  y write operatio
102c0 6e 73 20 77 68 65 6e 20 69 74 20 69 73 0d 0a 20  ns when it is.. 
102d0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
102e0 20 20 20 20 73 65 74 20 74 6f 20 6e 6f 6e 2d 6e      set to non-n
102f0 75 6c 6c 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  ull...          
10300 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
10310 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63    private static
10320 20 52 65 67 69 73 74 72 79 4f 70 65 72 61 74 69   RegistryOperati
10330 6f 6e 4c 69 73 74 20 6f 70 65 72 61 74 69 6f 6e  onList operation
10340 4c 69 73 74 3b 0d 0a 20 20 20 20 20 20 20 20 20  List;..         
10350 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
10360 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
10370 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10380 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10390 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
103a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
103b0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
103c0 23 72 65 67 69 6f 6e 20 50 75 62 6c 69 63 20 53  #region Public S
103d0 74 61 74 69 63 20 50 72 6f 70 65 72 74 69 65 73  tatic Properties
103e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
103f0 69 76 61 74 65 20 73 74 61 74 69 63 20 4d 6f 63  ivate static Moc
10400 6b 52 65 67 69 73 74 72 79 20 72 65 61 64 4f 6e  kRegistry readOn
10410 6c 79 52 65 67 69 73 74 72 79 3b 0d 0a 20 20 20  lyRegistry;..   
10420 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
10430 73 74 61 74 69 63 20 4d 6f 63 6b 52 65 67 69 73  static MockRegis
10440 74 72 79 20 52 65 61 64 4f 6e 6c 79 52 65 67 69  try ReadOnlyRegi
10450 73 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20  stry..          
10460 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
10470 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72       get { retur
10480 6e 20 72 65 61 64 4f 6e 6c 79 52 65 67 69 73 74  n readOnlyRegist
10490 72 79 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  ry; }..         
104a0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
104b0 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
104c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
104d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
104e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
104f0 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
10500 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
10510 74 61 74 69 63 20 4d 6f 63 6b 52 65 67 69 73 74  tatic MockRegist
10520 72 79 20 72 65 61 64 57 72 69 74 65 52 65 67 69  ry readWriteRegi
10530 73 74 72 79 3b 0d 0a 20 20 20 20 20 20 20 20 20  stry;..         
10540 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63     public static
10550 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 20 52 65   MockRegistry Re
10560 61 64 57 72 69 74 65 52 65 67 69 73 74 72 79 0d  adWriteRegistry.
10570 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
10580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10590 67 65 74 20 7b 20 72 65 74 75 72 6e 20 72 65 61  get { return rea
105a0 64 57 72 69 74 65 52 65 67 69 73 74 72 79 3b 20  dWriteRegistry; 
105b0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
105c0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
105d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
105e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
105f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10600 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10610 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
10620 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69     private stati
10630 63 20 69 6e 74 20 73 75 62 4b 65 79 73 43 72 65  c int subKeysCre
10640 61 74 65 64 3b 0d 0a 20 20 20 20 20 20 20 20 20  ated;..         
10650 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63     public static
10660 20 69 6e 74 20 53 75 62 4b 65 79 73 43 72 65 61   int SubKeysCrea
10670 74 65 64 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ted..           
10680 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
10690 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e      get { return
106a0 20 73 75 62 4b 65 79 73 43 72 65 61 74 65 64 3b   subKeysCreated;
106b0 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
106c0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
106d0 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
106e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
106f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10700 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10710 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
10720 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74      private stat
10730 69 63 20 69 6e 74 20 73 75 62 4b 65 79 73 44 65  ic int subKeysDe
10740 6c 65 74 65 64 3b 0d 0a 20 20 20 20 20 20 20 20  leted;..        
10750 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69      public stati
10760 63 20 69 6e 74 20 53 75 62 4b 65 79 73 44 65 6c  c int SubKeysDel
10770 65 74 65 64 0d 0a 20 20 20 20 20 20 20 20 20 20  eted..          
10780 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
10790 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72       get { retur
107a0 6e 20 73 75 62 4b 65 79 73 44 65 6c 65 74 65 64  n subKeysDeleted
107b0 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
107c0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
107d0 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
107e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
107f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10800 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10810 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
10820 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61       private sta
10830 74 69 63 20 69 6e 74 20 6b 65 79 56 61 6c 75 65  tic int keyValue
10840 73 52 65 61 64 3b 0d 0a 20 20 20 20 20 20 20 20  sRead;..        
10850 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69      public stati
10860 63 20 69 6e 74 20 4b 65 79 56 61 6c 75 65 73 52  c int KeyValuesR
10870 65 61 64 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ead..           
10880 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
10890 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e      get { return
108a0 20 6b 65 79 56 61 6c 75 65 73 52 65 61 64 3b 20   keyValuesRead; 
108b0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
108c0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
108d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
108e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
108f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10900 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10910 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
10920 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69     private stati
10930 63 20 69 6e 74 20 6b 65 79 56 61 6c 75 65 73 57  c int keyValuesW
10940 72 69 74 74 65 6e 3b 0d 0a 20 20 20 20 20 20 20  ritten;..       
10950 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74       public stat
10960 69 63 20 69 6e 74 20 4b 65 79 56 61 6c 75 65 73  ic int KeyValues
10970 57 72 69 74 74 65 6e 0d 0a 20 20 20 20 20 20 20  Written..       
10980 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
10990 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65          get { re
109a0 74 75 72 6e 20 6b 65 79 56 61 6c 75 65 73 57 72  turn keyValuesWr
109b0 69 74 74 65 6e 3b 20 7d 0d 0a 20 20 20 20 20 20  itten; }..      
109c0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
109d0 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
109e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
109f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10a00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10a10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
10a20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
10a30 65 20 73 74 61 74 69 63 20 69 6e 74 20 6b 65 79  e static int key
10a40 56 61 6c 75 65 73 44 65 6c 65 74 65 64 3b 0d 0a  ValuesDeleted;..
10a50 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
10a60 69 63 20 73 74 61 74 69 63 20 69 6e 74 20 4b 65  ic static int Ke
10a70 79 56 61 6c 75 65 73 44 65 6c 65 74 65 64 0d 0a  yValuesDeleted..
10a80 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
10a90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67                 g
10aa0 65 74 20 7b 20 72 65 74 75 72 6e 20 6b 65 79 56  et { return keyV
10ab0 61 6c 75 65 73 44 65 6c 65 74 65 64 3b 20 7d 0d  aluesDeleted; }.
10ac0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
10ad0 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e 64              #end
10ae0 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20  region....      
10af0 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
10b00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10b10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10b20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10b30 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
10b40 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e           #region
10b50 20 50 75 62 6c 69 63 20 53 74 61 74 69 63 20 4d   Public Static M
10b60 65 74 68 6f 64 73 0d 0a 20 20 20 20 20 20 20 20  ethods..        
10b70 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69      public stati
10b80 63 20 76 6f 69 64 20 45 6e 61 62 6c 65 4f 72 44  c void EnableOrD
10b90 69 73 61 62 6c 65 4f 70 65 72 61 74 69 6f 6e 4c  isableOperationL
10ba0 69 73 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ist(..          
10bb0 20 20 20 20 20 20 62 6f 6f 6c 20 65 6e 61 62 6c        bool enabl
10bc0 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e..             
10bd0 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20     )..          
10be0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
10bf0 20 20 20 20 20 6c 6f 63 6b 20 28 73 79 6e 63 52       lock (syncR
10c00 6f 6f 74 29 20 2f 2a 20 54 52 41 4e 53 41 43 54  oot) /* TRANSACT
10c10 49 4f 4e 41 4c 20 2a 2f 0d 0a 20 20 20 20 20 20  IONAL */..      
10c20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
10c30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10c40 20 69 66 20 28 65 6e 61 62 6c 65 29 0d 0a 20 20   if (enable)..  
10c50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10c60 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
10c70 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
10c80 28 6f 70 65 72 61 74 69 6f 6e 4c 69 73 74 20 3d  (operationList =
10c90 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
10ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10cb0 20 20 20 20 20 6f 70 65 72 61 74 69 6f 6e 4c 69       operationLi
10cc0 73 74 20 3d 20 6e 65 77 20 52 65 67 69 73 74 72  st = new Registr
10cd0 79 4f 70 65 72 61 74 69 6f 6e 4c 69 73 74 28 29  yOperationList()
10ce0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
10cf0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
10d00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c                el
10d10 73 65 20 69 66 20 28 6f 70 65 72 61 74 69 6f 6e  se if (operation
10d20 4c 69 73 74 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20  List != null).. 
10d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10d40 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
10d50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6f 70                op
10d60 65 72 61 74 69 6f 6e 4c 69 73 74 2e 44 69 73 70  erationList.Disp
10d70 6f 73 65 28 29 3b 0d 0a 20 20 20 20 20 20 20 20  ose();..        
10d80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10d90 6f 70 65 72 61 74 69 6f 6e 4c 69 73 74 20 3d 20  operationList = 
10da0 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20  null;..         
10db0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
10dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
10dd0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
10de0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
10df0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10e00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10e10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10e20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10e30 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
10e40 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 76   public static v
10e50 6f 69 64 20 52 65 69 6e 69 74 69 61 6c 69 7a 65  oid Reinitialize
10e60 44 65 66 61 75 6c 74 52 65 67 69 73 74 72 69 65  DefaultRegistrie
10e70 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  s(..            
10e80 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c      bool whatIf,
10e90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
10ea0 20 20 62 6f 6f 6c 20 73 61 66 65 0d 0a 20 20 20    bool safe..   
10eb0 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a               )..
10ec0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
10ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
10ee0 66 20 28 72 65 61 64 4f 6e 6c 79 52 65 67 69 73  f (readOnlyRegis
10ef0 74 72 79 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20  try != null)..  
10f00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
10f10 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
10f20 20 20 20 20 20 72 65 61 64 4f 6e 6c 79 52 65 67       readOnlyReg
10f30 69 73 74 72 79 2e 44 69 73 70 6f 73 65 28 29 3b  istry.Dispose();
10f40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
10f50 20 20 20 20 20 20 72 65 61 64 4f 6e 6c 79 52 65        readOnlyRe
10f60 67 69 73 74 72 79 20 3d 20 6e 75 6c 6c 3b 0d 0a  gistry = null;..
10f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10f80 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
10f90 20 20 20 20 20 69 66 20 28 72 65 61 64 57 72 69       if (readWri
10fa0 74 65 52 65 67 69 73 74 72 79 20 21 3d 20 6e 75  teRegistry != nu
10fb0 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
10fc0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
10fd0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 61 64              read
10fe0 57 72 69 74 65 52 65 67 69 73 74 72 79 2e 44 69  WriteRegistry.Di
10ff0 73 70 6f 73 65 28 29 3b 0d 0a 20 20 20 20 20 20  spose();..      
11000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
11010 61 64 57 72 69 74 65 52 65 67 69 73 74 72 79 20  adWriteRegistry 
11020 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20  = null;..       
11030 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
11040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
11050 61 64 4f 6e 6c 79 52 65 67 69 73 74 72 79 20 3d  adOnlyRegistry =
11060 20 6e 65 77 20 4d 6f 63 6b 52 65 67 69 73 74 72   new MockRegistr
11070 79 28 77 68 61 74 49 66 2c 20 74 72 75 65 2c 20  y(whatIf, true, 
11080 73 61 66 65 29 3b 0d 0a 20 20 20 20 20 20 20 20  safe);..        
11090 20 20 20 20 20 20 20 20 72 65 61 64 57 72 69 74          readWrit
110a0 65 52 65 67 69 73 74 72 79 20 3d 20 6e 65 77 20  eRegistry = new 
110b0 4d 6f 63 6b 52 65 67 69 73 74 72 79 28 77 68 61  MockRegistry(wha
110c0 74 49 66 2c 20 66 61 6c 73 65 2c 20 73 61 66 65  tIf, false, safe
110d0 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
110e0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
110f0 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
11100 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11110 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11120 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11130 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
11140 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69      public stati
11150 63 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65  c MockRegistryKe
11160 79 20 47 65 74 52 65 61 64 4f 6e 6c 79 52 6f 6f  y GetReadOnlyRoo
11170 74 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20  tKey(..         
11180 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6e 61         string na
11190 6d 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  me..            
111a0 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20      )..         
111b0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
111c0 20 20 20 20 20 20 72 65 74 75 72 6e 20 47 65 74        return Get
111d0 52 6f 6f 74 4b 65 79 28 72 65 61 64 4f 6e 6c 79  RootKey(readOnly
111e0 52 65 67 69 73 74 72 79 2c 20 6e 61 6d 65 29 3b  Registry, name);
111f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
11200 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
11210 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11220 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11230 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11240 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11250 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
11260 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20    public static 
11270 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20  MockRegistryKey 
11280 47 65 74 52 65 61 64 57 72 69 74 65 52 6f 6f 74  GetReadWriteRoot
11290 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20  Key(..          
112a0 20 20 20 20 20 20 73 74 72 69 6e 67 20 6e 61 6d        string nam
112b0 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e..             
112c0 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20     )..          
112d0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
112e0 20 20 20 20 20 72 65 74 75 72 6e 20 47 65 74 52       return GetR
112f0 6f 6f 74 4b 65 79 28 72 65 61 64 57 72 69 74 65  ootKey(readWrite
11300 52 65 67 69 73 74 72 79 2c 20 6e 61 6d 65 29 3b  Registry, name);
11310 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
11320 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
11330 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11340 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11350 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11360 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11370 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
11380 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20    public static 
11390 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20  MockRegistryKey 
113a0 47 65 74 52 6f 6f 74 4b 65 79 28 0d 0a 20 20 20  GetRootKey(..   
113b0 20 20 20 20 20 20 20 20 20 20 20 20 20 4d 6f 63               Moc
113c0 6b 52 65 67 69 73 74 72 79 20 72 65 67 69 73 74  kRegistry regist
113d0 72 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ry,..           
113e0 20 20 20 20 20 73 74 72 69 6e 67 20 6e 61 6d 65       string name
113f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
11400 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20    )..           
11410 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
11420 20 20 20 20 69 66 20 28 72 65 67 69 73 74 72 79      if (registry
11430 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
11440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
11450 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20  eturn null;.... 
11460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
11470 66 20 28 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b  f (MockRegistryK
11480 65 79 2e 4e 61 6d 65 45 71 75 61 6c 73 28 0d 0a  ey.NameEquals(..
11490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
114a0 20 20 20 20 20 20 20 20 6e 61 6d 65 2c 20 52 65          name, Re
114b0 67 69 73 74 72 79 52 6f 6f 74 4b 65 79 4e 61 6d  gistryRootKeyNam
114c0 65 73 2e 48 4b 45 59 5f 43 4c 41 53 53 45 53 5f  es.HKEY_CLASSES_
114d0 52 4f 4f 54 29 20 7c 7c 0d 0a 20 20 20 20 20 20  ROOT) ||..      
114e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4d 6f                Mo
114f0 63 6b 52 65 67 69 73 74 72 79 4b 65 79 2e 4e 61  ckRegistryKey.Na
11500 6d 65 45 71 75 61 6c 73 28 0d 0a 20 20 20 20 20  meEquals(..     
11510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11520 20 20 20 6e 61 6d 65 2c 20 52 65 67 69 73 74 72     name, Registr
11530 79 52 6f 6f 74 4b 65 79 4e 61 6d 65 73 2e 48 4b  yRootKeyNames.HK
11540 43 52 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  CR))..          
11550 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
11560 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
11570 75 72 6e 20 72 65 67 69 73 74 72 79 2e 43 6c 61  urn registry.Cla
11580 73 73 65 73 52 6f 6f 74 3b 0d 0a 20 20 20 20 20  ssesRoot;..     
11590 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
115a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c                el
115b0 73 65 20 69 66 20 28 4d 6f 63 6b 52 65 67 69 73  se if (MockRegis
115c0 74 72 79 4b 65 79 2e 4e 61 6d 65 45 71 75 61 6c  tryKey.NameEqual
115d0 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  s(..            
115e0 20 20 20 20 20 20 20 20 20 20 20 20 6e 61 6d 65              name
115f0 2c 20 52 65 67 69 73 74 72 79 52 6f 6f 74 4b 65  , RegistryRootKe
11600 79 4e 61 6d 65 73 2e 48 4b 45 59 5f 43 55 52 52  yNames.HKEY_CURR
11610 45 4e 54 5f 43 4f 4e 46 49 47 29 20 7c 7c 0d 0a  ENT_CONFIG) ||..
11620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11630 20 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79      MockRegistry
11640 4b 65 79 2e 4e 61 6d 65 45 71 75 61 6c 73 28 0d  Key.NameEquals(.
11650 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
11660 20 20 20 20 20 20 20 20 20 6e 61 6d 65 2c 20 52           name, R
11670 65 67 69 73 74 72 79 52 6f 6f 74 4b 65 79 4e 61  egistryRootKeyNa
11680 6d 65 73 2e 48 4b 43 43 29 29 0d 0a 20 20 20 20  mes.HKCC))..    
11690 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
116a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
116b0 20 20 20 72 65 74 75 72 6e 20 72 65 67 69 73 74     return regist
116c0 72 79 2e 43 75 72 72 65 6e 74 43 6f 6e 66 69 67  ry.CurrentConfig
116d0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
116e0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
116f0 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d        else if (M
11700 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 2e 4e  ockRegistryKey.N
11710 61 6d 65 45 71 75 61 6c 73 28 0d 0a 20 20 20 20  ameEquals(..    
11720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11730 20 20 20 20 6e 61 6d 65 2c 20 52 65 67 69 73 74      name, Regist
11740 72 79 52 6f 6f 74 4b 65 79 4e 61 6d 65 73 2e 48  ryRootKeyNames.H
11750 4b 45 59 5f 43 55 52 52 45 4e 54 5f 55 53 45 52  KEY_CURRENT_USER
11760 29 20 7c 7c 0d 0a 20 20 20 20 20 20 20 20 20 20  ) ||..          
11770 20 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65            MockRe
11780 67 69 73 74 72 79 4b 65 79 2e 4e 61 6d 65 45 71  gistryKey.NameEq
11790 75 61 6c 73 28 0d 0a 20 20 20 20 20 20 20 20 20  uals(..         
117a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e                 n
117b0 61 6d 65 2c 20 52 65 67 69 73 74 72 79 52 6f 6f  ame, RegistryRoo
117c0 74 4b 65 79 4e 61 6d 65 73 2e 48 4b 43 55 29 29  tKeyNames.HKCU))
117d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
117e0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
117f0 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
11800 72 65 67 69 73 74 72 79 2e 43 75 72 72 65 6e 74  registry.Current
11810 55 73 65 72 3b 0d 0a 20 20 20 20 20 20 20 20 20  User;..         
11820 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
11830 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69            else i
11840 66 20 28 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b  f (MockRegistryK
11850 65 79 2e 4e 61 6d 65 45 71 75 61 6c 73 28 0d 0a  ey.NameEquals(..
11860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11870 20 20 20 20 20 20 20 20 6e 61 6d 65 2c 20 52 65          name, Re
11880 67 69 73 74 72 79 52 6f 6f 74 4b 65 79 4e 61 6d  gistryRootKeyNam
11890 65 73 2e 48 4b 45 59 5f 44 59 4e 5f 44 41 54 41  es.HKEY_DYN_DATA
118a0 29 20 7c 7c 0d 0a 20 20 20 20 20 20 20 20 20 20  ) ||..          
118b0 20 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65            MockRe
118c0 67 69 73 74 72 79 4b 65 79 2e 4e 61 6d 65 45 71  gistryKey.NameEq
118d0 75 61 6c 73 28 0d 0a 20 20 20 20 20 20 20 20 20  uals(..         
118e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e                 n
118f0 61 6d 65 2c 20 52 65 67 69 73 74 72 79 52 6f 6f  ame, RegistryRoo
11900 74 4b 65 79 4e 61 6d 65 73 2e 48 4b 44 44 29 29  tKeyNames.HKDD))
11910 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
11920 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
11930 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
11940 72 65 67 69 73 74 72 79 2e 44 79 6e 44 61 74 61  registry.DynData
11950 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
11960 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
11970 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d        else if (M
11980 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 2e 4e  ockRegistryKey.N
11990 61 6d 65 45 71 75 61 6c 73 28 0d 0a 20 20 20 20  ameEquals(..    
119a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
119b0 20 20 20 20 6e 61 6d 65 2c 20 52 65 67 69 73 74      name, Regist
119c0 72 79 52 6f 6f 74 4b 65 79 4e 61 6d 65 73 2e 48  ryRootKeyNames.H
119d0 4b 45 59 5f 4c 4f 43 41 4c 5f 4d 41 43 48 49 4e  KEY_LOCAL_MACHIN
119e0 45 29 20 7c 7c 0d 0a 20 20 20 20 20 20 20 20 20  E) ||..         
119f0 20 20 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52             MockR
11a00 65 67 69 73 74 72 79 4b 65 79 2e 4e 61 6d 65 45  egistryKey.NameE
11a10 71 75 61 6c 73 28 0d 0a 20 20 20 20 20 20 20 20  quals(..        
11a20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11a30 6e 61 6d 65 2c 20 52 65 67 69 73 74 72 79 52 6f  name, RegistryRo
11a40 6f 74 4b 65 79 4e 61 6d 65 73 2e 48 4b 4c 4d 29  otKeyNames.HKLM)
11a50 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
11a60 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
11a70 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
11a80 20 72 65 67 69 73 74 72 79 2e 4c 6f 63 61 6c 4d   registry.LocalM
11a90 61 63 68 69 6e 65 3b 0d 0a 20 20 20 20 20 20 20  achine;..       
11aa0 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
11ab0 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65              else
11ac0 20 69 66 20 28 4d 6f 63 6b 52 65 67 69 73 74 72   if (MockRegistr
11ad0 79 4b 65 79 2e 4e 61 6d 65 45 71 75 61 6c 73 28  yKey.NameEquals(
11ae0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
11af0 20 20 20 20 20 20 20 20 20 20 6e 61 6d 65 2c 20            name, 
11b00 52 65 67 69 73 74 72 79 52 6f 6f 74 4b 65 79 4e  RegistryRootKeyN
11b10 61 6d 65 73 2e 48 4b 45 59 5f 50 45 52 46 4f 52  ames.HKEY_PERFOR
11b20 4d 41 4e 43 45 5f 44 41 54 41 29 20 7c 7c 0d 0a  MANCE_DATA) ||..
11b30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11b40 20 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79      MockRegistry
11b50 4b 65 79 2e 4e 61 6d 65 45 71 75 61 6c 73 28 0d  Key.NameEquals(.
11b60 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
11b70 20 20 20 20 20 20 20 20 20 6e 61 6d 65 2c 20 52           name, R
11b80 65 67 69 73 74 72 79 52 6f 6f 74 4b 65 79 4e 61  egistryRootKeyNa
11b90 6d 65 73 2e 48 4b 50 44 29 29 0d 0a 20 20 20 20  mes.HKPD))..    
11ba0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
11bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11bc0 20 20 20 72 65 74 75 72 6e 20 72 65 67 69 73 74     return regist
11bd0 72 79 2e 50 65 72 66 6f 72 6d 61 6e 63 65 44 61  ry.PerformanceDa
11be0 74 61 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ta;..           
11bf0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
11c00 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20          else if 
11c10 28 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79  (MockRegistryKey
11c20 2e 4e 61 6d 65 45 71 75 61 6c 73 28 0d 0a 20 20  .NameEquals(..  
11c30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11c40 20 20 20 20 20 20 6e 61 6d 65 2c 20 52 65 67 69        name, Regi
11c50 73 74 72 79 52 6f 6f 74 4b 65 79 4e 61 6d 65 73  stryRootKeyNames
11c60 2e 48 4b 45 59 5f 55 53 45 52 53 29 20 7c 7c 0d  .HKEY_USERS) ||.
11c70 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
11c80 20 20 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72       MockRegistr
11c90 79 4b 65 79 2e 4e 61 6d 65 45 71 75 61 6c 73 28  yKey.NameEquals(
11ca0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
11cb0 20 20 20 20 20 20 20 20 20 20 6e 61 6d 65 2c 20            name, 
11cc0 52 65 67 69 73 74 72 79 52 6f 6f 74 4b 65 79 4e  RegistryRootKeyN
11cd0 61 6d 65 73 2e 48 4b 55 29 29 0d 0a 20 20 20 20  ames.HKU))..    
11ce0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
11cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11d00 20 20 20 72 65 74 75 72 6e 20 72 65 67 69 73 74     return regist
11d10 72 79 2e 55 73 65 72 73 3b 0d 0a 20 20 20 20 20  ry.Users;..     
11d20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
11d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11d40 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 20 20  return null;..  
11d50 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
11d60 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
11d70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11d80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11d90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11da0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
11db0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
11dc0 62 6c 69 63 20 73 74 61 74 69 63 20 73 74 72 69  blic static stri
11dd0 6e 67 20 4a 6f 69 6e 4b 65 79 4e 61 6d 65 73 28  ng JoinKeyNames(
11de0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
11df0 20 20 70 61 72 61 6d 73 20 73 74 72 69 6e 67 5b    params string[
11e00 5d 20 6e 61 6d 65 73 0d 0a 20 20 20 20 20 20 20  ] names..       
11e10 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
11e20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
11e30 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 28             if ((
11e40 6e 61 6d 65 73 20 3d 3d 20 6e 75 6c 6c 29 20 7c  names == null) |
11e50 7c 20 28 6e 61 6d 65 73 2e 4c 65 6e 67 74 68 20  | (names.Length 
11e60 3d 3d 20 30 29 29 0d 0a 20 20 20 20 20 20 20 20  == 0))..        
11e70 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
11e80 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20  rn null;....    
11e90 20 20 20 20 20 20 20 20 20 20 20 20 53 74 72 69              Stri
11ea0 6e 67 42 75 69 6c 64 65 72 20 62 75 69 6c 64 65  ngBuilder builde
11eb0 72 20 3d 20 6e 65 77 20 53 74 72 69 6e 67 42 75  r = new StringBu
11ec0 69 6c 64 65 72 28 29 3b 0d 0a 0d 0a 20 20 20 20  ilder();....    
11ed0 20 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 65              fore
11ee0 61 63 68 20 28 73 74 72 69 6e 67 20 6e 61 6d 65  ach (string name
11ef0 20 69 6e 20 6e 61 6d 65 73 29 0d 0a 20 20 20 20   in names)..    
11f00 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
11f10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11f20 20 20 20 69 66 20 28 6e 61 6d 65 20 3d 3d 20 6e     if (name == n
11f30 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
11f40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
11f50 6e 74 69 6e 75 65 3b 0d 0a 0d 0a 20 20 20 20 20  ntinue;....     
11f60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
11f70 74 72 69 6e 67 20 6e 65 77 4e 61 6d 65 20 3d 20  tring newName = 
11f80 6e 61 6d 65 2e 54 72 69 6d 28 4b 65 79 4e 61 6d  name.Trim(KeyNam
11f90 65 53 65 70 61 72 61 74 6f 72 29 3b 0d 0a 0d 0a  eSeparator);....
11fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11fb0 20 20 20 20 69 66 20 28 53 74 72 69 6e 67 2e 49      if (String.I
11fc0 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 6e 65 77  sNullOrEmpty(new
11fd0 4e 61 6d 65 29 29 0d 0a 20 20 20 20 20 20 20 20  Name))..        
11fe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11ff0 63 6f 6e 74 69 6e 75 65 3b 0d 0a 0d 0a 20 20 20  continue;....   
12000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12010 20 69 66 20 28 62 75 69 6c 64 65 72 2e 4c 65 6e   if (builder.Len
12020 67 74 68 20 3e 20 30 29 0d 0a 20 20 20 20 20 20  gth > 0)..      
12030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12040 20 20 62 75 69 6c 64 65 72 2e 41 70 70 65 6e 64    builder.Append
12050 28 4b 65 79 4e 61 6d 65 53 65 70 61 72 61 74 6f  (KeyNameSeparato
12060 72 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  r);....         
12070 20 20 20 20 20 20 20 20 20 20 20 62 75 69 6c 64             build
12080 65 72 2e 41 70 70 65 6e 64 28 6e 65 77 4e 61 6d  er.Append(newNam
12090 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e);..           
120a0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
120b0 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
120c0 20 62 75 69 6c 64 65 72 2e 54 6f 53 74 72 69 6e   builder.ToStrin
120d0 67 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  g();..          
120e0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
120f0 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
12100 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12110 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12120 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12130 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
12140 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61        public sta
12150 74 69 63 20 73 74 72 69 6e 67 20 4a 6f 69 6e 4b  tic string JoinK
12160 65 79 4e 61 6d 65 73 28 0d 0a 20 20 20 20 20 20  eyNames(..      
12170 20 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65            MockRe
12180 67 69 73 74 72 79 4b 65 79 20 6b 65 79 2c 0d 0a  gistryKey key,..
12190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
121a0 70 61 72 61 6d 73 20 73 74 72 69 6e 67 5b 5d 20  params string[] 
121b0 6e 61 6d 65 73 0d 0a 20 20 20 20 20 20 20 20 20  names..         
121c0 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
121d0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
121e0 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
121f0 72 65 73 75 6c 74 20 3d 20 4a 6f 69 6e 4b 65 79  result = JoinKey
12200 4e 61 6d 65 73 28 6e 61 6d 65 73 29 3b 0d 0a 0d  Names(names);...
12210 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
12220 20 69 66 20 28 6b 65 79 20 21 3d 20 6e 75 6c 6c   if (key != null
12230 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
12240 20 20 20 20 20 20 20 72 65 73 75 6c 74 20 3d 20         result = 
12250 4a 6f 69 6e 4b 65 79 4e 61 6d 65 73 28 6b 65 79  JoinKeyNames(key
12260 2e 4e 61 6d 65 2c 20 72 65 73 75 6c 74 29 3b 0d  .Name, result);.
12270 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
12280 20 20 20 72 65 74 75 72 6e 20 72 65 73 75 6c 74     return result
12290 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
122a0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
122b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
122c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
122d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
122e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
122f0 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
12300 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63     public static
12310 20 73 74 72 69 6e 67 5b 5d 20 53 70 6c 69 74 4b   string[] SplitK
12320 65 79 4e 61 6d 65 28 0d 0a 20 20 20 20 20 20 20  eyName(..       
12330 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
12340 6b 65 79 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20  keyName..       
12350 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
12360 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
12370 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6b             if (k
12380 65 79 4e 61 6d 65 20 3d 3d 20 6e 75 6c 6c 29 0d  eyName == null).
12390 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
123a0 20 20 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c       return null
123b0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
123c0 20 20 20 20 20 72 65 74 75 72 6e 20 6b 65 79 4e       return keyN
123d0 61 6d 65 2e 53 70 6c 69 74 28 0d 0a 20 20 20 20  ame.Split(..    
123e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
123f0 4b 65 79 4e 61 6d 65 53 65 70 61 72 61 74 6f 72  KeyNameSeparator
12400 73 2c 20 53 74 72 69 6e 67 53 70 6c 69 74 4f 70  s, StringSplitOp
12410 74 69 6f 6e 73 2e 52 65 6d 6f 76 65 45 6d 70 74  tions.RemoveEmpt
12420 79 45 6e 74 72 69 65 73 29 3b 0d 0a 20 20 20 20  yEntries);..    
12430 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
12440 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
12450 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12460 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12470 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12480 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
12490 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
124a0 69 63 20 73 74 61 74 69 63 20 73 74 72 69 6e 67  ic static string
124b0 20 4c 61 73 74 53 75 62 4b 65 79 4e 61 6d 65 28   LastSubKeyName(
124c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
124d0 20 20 73 74 72 69 6e 67 20 6b 65 79 4e 61 6d 65    string keyName
124e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
124f0 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20    )..           
12500 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
12510 20 20 20 20 73 74 72 69 6e 67 5b 5d 20 73 75 62      string[] sub
12520 4b 65 79 4e 61 6d 65 73 20 3d 20 53 70 6c 69 74  KeyNames = Split
12530 4b 65 79 4e 61 6d 65 28 6b 65 79 4e 61 6d 65 29  KeyName(keyName)
12540 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
12550 20 20 20 20 20 69 66 20 28 28 73 75 62 4b 65 79       if ((subKey
12560 4e 61 6d 65 73 20 3d 3d 20 6e 75 6c 6c 29 20 7c  Names == null) |
12570 7c 20 28 73 75 62 4b 65 79 4e 61 6d 65 73 2e 4c  | (subKeyNames.L
12580 65 6e 67 74 68 20 3d 3d 20 30 29 29 0d 0a 20 20  ength == 0))..  
12590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
125a0 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a    return null;..
125b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
125c0 20 20 72 65 74 75 72 6e 20 73 75 62 4b 65 79 4e    return subKeyN
125d0 61 6d 65 73 5b 73 75 62 4b 65 79 4e 61 6d 65 73  ames[subKeyNames
125e0 2e 4c 65 6e 67 74 68 20 2d 20 31 5d 3b 0d 0a 20  .Length - 1];.. 
125f0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
12600 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
12610 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12620 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12630 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12640 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
12650 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b  ...            [
12660 4d 65 74 68 6f 64 49 6d 70 6c 28 4d 65 74 68 6f  MethodImpl(Metho
12670 64 49 6d 70 6c 4f 70 74 69 6f 6e 73 2e 4e 6f 49  dImplOptions.NoI
12680 6e 6c 69 6e 69 6e 67 29 5d 0d 0a 20 20 20 20 20  nlining)]..     
12690 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74         public st
126a0 61 74 69 63 20 4d 6f 63 6b 52 65 67 69 73 74 72  atic MockRegistr
126b0 79 4b 65 79 20 4f 70 65 6e 53 75 62 4b 65 79 28  yKey OpenSubKey(
126c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
126d0 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65    MockRegistryKe
126e0 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20 20  y rootKey,..    
126f0 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
12700 6e 67 20 73 75 62 4b 65 79 4e 61 6d 65 2c 0d 0a  ng subKeyName,..
12710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12720 62 6f 6f 6c 20 77 72 69 74 61 62 6c 65 2c 0d 0a  bool writable,..
12730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12740 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20  bool whatIf,..  
12750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f                bo
12760 6f 6c 20 76 65 72 62 6f 73 65 0d 0a 20 20 20 20  ol verbose..    
12770 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
12780 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
12790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
127a0 20 28 76 65 72 62 6f 73 65 29 0d 0a 20 20 20 20   (verbose)..    
127b0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
127c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
127d0 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75     TraceOps.Debu
127e0 67 41 6e 64 54 72 61 63 65 28 77 72 69 74 61 62  gAndTrace(writab
127f0 6c 65 20 3f 0d 0a 20 20 20 20 20 20 20 20 20 20  le ?..          
12800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
12810 61 63 65 50 72 69 6f 72 69 74 79 2e 48 69 67 68  acePriority.High
12820 65 73 74 20 3a 20 54 72 61 63 65 50 72 69 6f 72  est : TracePrior
12830 69 74 79 2e 48 69 67 68 65 72 2c 0d 0a 20 20 20  ity.Higher,..   
12840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12850 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61       debugCallba
12860 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63  ck, traceCallbac
12870 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  k, String.Format
12880 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
12890 20 20 20 20 20 20 20 20 20 20 20 22 72 6f 6f 74             "root
128a0 4b 65 79 20 3d 20 7b 30 7d 2c 20 73 75 62 4b 65  Key = {0}, subKe
128b0 79 4e 61 6d 65 20 3d 20 7b 31 7d 2c 20 77 72 69  yName = {1}, wri
128c0 74 61 62 6c 65 20 3d 20 7b 32 7d 22 2c 0d 0a 20  table = {2}",.. 
128d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
128e0 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61         ForDispla
128f0 79 28 72 6f 6f 74 4b 65 79 29 2c 20 46 6f 72 44  y(rootKey), ForD
12900 69 73 70 6c 61 79 28 73 75 62 4b 65 79 4e 61 6d  isplay(subKeyNam
12910 65 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e),..           
12920 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72               For
12930 44 69 73 70 6c 61 79 28 77 72 69 74 61 62 6c 65  Display(writable
12940 29 29 2c 20 74 72 61 63 65 43 61 74 65 67 6f 72  )), traceCategor
12950 79 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  y);..           
12960 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
12970 20 20 20 20 20 20 20 20 20 20 69 66 20 28 72 6f            if (ro
12980 6f 74 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  otKey == null)..
12990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
129a0 20 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b      return null;
129b0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
129c0 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
129d0 20 20 20 20 20 20 20 20 2f 2f 20 48 41 43 4b 3a          // HACK:
129e0 20 41 6c 77 61 79 73 20 66 6f 72 62 69 64 20 77   Always forbid w
129f0 72 69 74 61 62 6c 65 20 61 63 63 65 73 73 20 77  ritable access w
12a00 68 65 6e 20 6f 70 65 72 61 74 69 6e 67 20 69 6e  hen operating in
12a10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
12a20 20 20 2f 2f 20 20 20 20 20 20 20 22 77 68 61 74    //       "what
12a30 2d 69 66 22 20 6d 6f 64 65 2e 0d 0a 20 20 20 20  -if" mode...    
12a40 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
12a50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12a60 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20  MockRegistryKey 
12a70 6b 65 79 20 3d 20 72 6f 6f 74 4b 65 79 2e 4f 70  key = rootKey.Op
12a80 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20  enSubKey(..     
12a90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
12aa0 75 62 4b 65 79 4e 61 6d 65 2c 20 77 68 61 74 49  ubKeyName, whatI
12ab0 66 20 3f 20 66 61 6c 73 65 20 3a 20 77 72 69 74  f ? false : writ
12ac0 61 62 6c 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  able);....      
12ad0 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
12ae0 20 28 6b 65 79 20 21 3d 20 6e 75 6c 6c 29 20 3f   (key != null) ?
12af0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
12b00 20 20 20 20 20 20 6e 65 77 20 4d 6f 63 6b 52 65        new MockRe
12b10 67 69 73 74 72 79 4b 65 79 28 6b 65 79 2c 20 77  gistryKey(key, w
12b20 68 61 74 49 66 2c 20 66 61 6c 73 65 2c 20 66 61  hatIf, false, fa
12b30 6c 73 65 29 20 3a 20 6e 75 6c 6c 3b 0d 0a 20 20  lse) : null;..  
12b40 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
12b50 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
12b60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12b70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12b80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12b90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
12ba0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 4d  ..            [M
12bb0 65 74 68 6f 64 49 6d 70 6c 28 4d 65 74 68 6f 64  ethodImpl(Method
12bc0 49 6d 70 6c 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e  ImplOptions.NoIn
12bd0 6c 69 6e 69 6e 67 29 5d 0d 0a 20 20 20 20 20 20  lining)]..      
12be0 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61        public sta
12bf0 74 69 63 20 4d 6f 63 6b 52 65 67 69 73 74 72 79  tic MockRegistry
12c00 4b 65 79 20 43 72 65 61 74 65 53 75 62 4b 65 79  Key CreateSubKey
12c10 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
12c20 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b     MockRegistryK
12c30 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20  ey rootKey,..   
12c40 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72               str
12c50 69 6e 67 20 73 75 62 4b 65 79 4e 61 6d 65 2c 0d  ing subKeyName,.
12c60 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
12c70 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20   bool whatIf,.. 
12c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62                 b
12c90 6f 6f 6c 20 76 65 72 62 6f 73 65 0d 0a 20 20 20  ool verbose..   
12ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a               )..
12cb0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
12cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
12cd0 66 20 28 76 65 72 62 6f 73 65 29 0d 0a 20 20 20  f (verbose)..   
12ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
12cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12d00 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62      TraceOps.Deb
12d10 75 67 41 6e 64 54 72 61 63 65 28 54 72 61 63 65  ugAndTrace(Trace
12d20 50 72 69 6f 72 69 74 79 2e 48 69 67 68 65 73 74  Priority.Highest
12d30 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
12d40 20 20 20 20 20 20 20 20 20 20 20 64 65 62 75 67             debug
12d50 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43  Callback, traceC
12d60 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e  allback, String.
12d70 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
12d80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12d90 20 22 72 6f 6f 74 4b 65 79 20 3d 20 7b 30 7d 2c   "rootKey = {0},
12da0 20 73 75 62 4b 65 79 4e 61 6d 65 20 3d 20 7b 31   subKeyName = {1
12db0 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }",..           
12dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72               For
12dd0 44 69 73 70 6c 61 79 28 72 6f 6f 74 4b 65 79 29  Display(rootKey)
12de0 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 73 75 62  , ForDisplay(sub
12df0 4b 65 79 4e 61 6d 65 29 29 2c 0d 0a 20 20 20 20  KeyName)),..    
12e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12e10 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72      traceCategor
12e20 79 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  y);..           
12e30 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
12e40 20 20 20 20 20 20 20 20 20 20 69 66 20 28 72 6f            if (ro
12e50 6f 74 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  otKey == null)..
12e60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12e70 20 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b      return null;
12e80 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
12e90 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20      try..       
12ea0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
12eb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12ec0 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
12ed0 20 20 20 20 20 20 20 20 2f 2f 20 48 41 43 4b 3a          // HACK:
12ee0 20 41 6c 77 61 79 73 20 6f 70 65 6e 20 61 20 6b   Always open a k
12ef0 65 79 2c 20 72 61 74 68 65 72 20 74 68 61 6e 20  ey, rather than 
12f00 63 72 65 61 74 69 6e 67 20 6f 6e 65 20 77 68 65  creating one whe
12f10 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  n..             
12f20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
12f30 6f 70 65 72 61 74 69 6e 67 20 69 6e 20 22 77 68  operating in "wh
12f40 61 74 2d 69 66 22 20 6d 6f 64 65 2e 0d 0a 20 20  at-if" mode...  
12f50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12f60 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
12f70 20 20 20 20 20 20 20 20 20 20 69 66 20 28 77 68            if (wh
12f80 61 74 49 66 29 0d 0a 20 20 20 20 20 20 20 20 20  atIf)..         
12f90 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
12fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12fb0 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
12fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12fd0 20 20 2f 2f 20 48 41 43 4b 3a 20 41 74 74 65 6d    // HACK: Attem
12fe0 70 74 20 74 6f 20 6f 70 65 6e 20 74 68 65 20 73  pt to open the s
12ff0 70 65 63 69 66 69 65 64 20 73 75 62 2d 6b 65 79  pecified sub-key
13000 2e 20 20 49 66 0d 0a 20 20 20 20 20 20 20 20 20  .  If..         
13010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
13020 2f 20 20 20 20 20 20 20 74 68 69 73 20 66 61 69  /       this fai
13030 6c 73 2c 20 77 65 20 77 69 6c 6c 20 73 69 6d 70  ls, we will simp
13040 6c 79 20 72 65 74 75 72 6e 20 74 68 65 20 72 6f  ly return the ro
13050 6f 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ot..            
13060 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
13070 20 20 20 20 20 6b 65 79 20 69 74 73 65 6c 66 20       key itself 
13080 73 69 6e 63 65 20 6e 6f 20 77 72 69 74 65 73 20  since no writes 
13090 61 72 65 20 61 6c 6c 6f 77 65 64 20 69 6e 0d 0a  are allowed in..
130a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
130b0 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
130c0 20 22 77 68 61 74 2d 69 66 22 20 6d 6f 64 65 20   "what-if" mode 
130d0 61 6e 79 68 6f 77 2e 0d 0a 20 20 20 20 20 20 20  anyhow...       
130e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
130f0 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
13100 20 20 20 20 20 20 20 20 20 20 20 20 20 4d 6f 63               Moc
13110 6b 52 65 67 69 73 74 72 79 4b 65 79 20 6b 65 79  kRegistryKey key
13120 20 3d 20 72 6f 6f 74 4b 65 79 2e 4f 70 65 6e 53   = rootKey.OpenS
13130 75 62 4b 65 79 28 73 75 62 4b 65 79 4e 61 6d 65  ubKey(subKeyName
13140 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
13150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
13160 20 28 6b 65 79 20 21 3d 20 6e 75 6c 6c 29 0d 0a   (key != null)..
13170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13180 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
13190 72 6e 20 6b 65 79 3b 0d 0a 0d 0a 20 20 20 20 20  rn key;....     
131a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
131b0 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
131c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
131d0 2f 20 42 55 47 46 49 58 3a 20 54 68 65 20 72 65  / BUGFIX: The re
131e0 67 69 73 74 72 79 20 6b 65 79 20 77 65 20 61 72  gistry key we ar
131f0 65 20 73 75 70 70 6f 73 65 64 20 74 6f 20 63 72  e supposed to cr
13200 65 61 74 65 0d 0a 20 20 20 20 20 20 20 20 20 20  eate..          
13210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
13220 20 20 20 20 20 20 20 20 20 64 6f 65 73 20 6e 6f           does no
13230 74 20 65 78 69 73 74 20 61 6e 64 20 77 65 20 63  t exist and we c
13240 61 6e 6e 6f 74 20 63 72 65 61 74 65 20 69 74 20  annot create it 
13250 73 69 6e 63 65 0d 0a 20 20 20 20 20 20 20 20 20  since..         
13260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
13270 2f 20 20 20 20 20 20 20 20 20 74 68 69 73 20 69  /         this i
13280 73 20 22 77 68 61 74 2d 69 66 22 20 6d 6f 64 65  s "what-if" mode
13290 2e 20 20 54 68 65 20 70 72 6f 62 6c 65 6d 20 68  .  The problem h
132a0 65 72 65 20 69 73 0d 0a 20 20 20 20 20 20 20 20  ere is..        
132b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
132c0 2f 2f 20 20 20 20 20 20 20 20 20 74 68 69 73 20  //         this 
132d0 77 69 6c 6c 20 68 61 76 65 20 61 20 22 73 69 64  will have a "sid
132e0 65 2d 65 66 66 65 63 74 22 20 6f 66 20 64 69 73  e-effect" of dis
132f0 63 61 72 64 69 6e 67 0d 0a 20 20 20 20 20 20 20  carding..       
13300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13310 20 2f 2f 20 20 20 20 20 20 20 20 20 61 6e 79 20   //         any 
13320 73 75 62 2d 6b 65 79 20 6e 61 6d 65 20 76 61 6c  sub-key name val
13330 75 65 20 66 72 6f 6d 20 77 69 74 68 69 6e 20 74  ue from within t
13340 68 65 20 72 6f 6f 74 0d 0a 20 20 20 20 20 20 20  he root..       
13350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13360 20 2f 2f 20 20 20 20 20 20 20 20 20 6b 65 79 20   //         key 
13370 73 70 65 63 69 66 69 65 64 20 62 79 20 74 68 65  specified by the
13380 20 63 61 6c 6c 65 72 20 28 61 6e 64 20 74 68 65   caller (and the
13390 6e 20 70 61 73 73 65 64 0d 0a 20 20 20 20 20 20  n passed..      
133a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
133b0 20 20 2f 2f 20 20 20 20 20 20 20 20 20 74 6f 20    //         to 
133c0 74 68 65 20 4d 6f 63 6b 52 65 67 69 73 74 72 79  the MockRegistry
133d0 4b 65 79 20 63 6f 6e 73 74 72 75 63 74 6f 72 29  Key constructor)
133e0 2e 20 20 53 69 6e 63 65 0d 0a 20 20 20 20 20 20  .  Since..      
133f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13400 20 20 2f 2f 20 20 20 20 20 20 20 20 20 77 65 20    //         we 
13410 73 74 69 6c 6c 20 77 61 6e 74 20 74 6f 20 75 73  still want to us
13420 65 20 74 68 61 74 20 72 65 67 69 73 74 72 79 20  e that registry 
13430 6b 65 79 2c 20 77 65 0d 0a 20 20 20 20 20 20 20  key, we..       
13440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13450 20 2f 2f 20 20 20 20 20 20 20 20 20 6e 65 65 64   //         need
13460 20 74 6f 20 6d 69 67 72 61 74 65 20 74 68 61 74   to migrate that
13470 20 73 75 62 2d 6b 65 79 20 6e 61 6d 65 20 66 72   sub-key name fr
13480 6f 6d 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20  om the..        
13490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
134a0 2f 2f 20 20 20 20 20 20 20 20 20 72 6f 6f 74 20  //         root 
134b0 6b 65 79 2c 20 62 79 20 63 6f 6d 62 69 6e 69 6e  key, by combinin
134c0 67 20 69 74 20 77 69 74 68 20 74 68 65 20 73 75  g it with the su
134d0 62 2d 6b 65 79 0d 0a 20 20 20 20 20 20 20 20 20  b-key..         
134e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
134f0 2f 20 20 20 20 20 20 20 20 20 6e 61 6d 65 20 73  /         name s
13500 70 65 63 69 66 69 65 64 20 62 79 20 74 68 65 20  pecified by the 
13510 63 61 6c 6c 65 72 20 61 6e 64 20 75 73 65 20 74  caller and use t
13520 68 65 20 6e 65 77 0d 0a 20 20 20 20 20 20 20 20  he new..        
13530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13540 2f 2f 20 20 20 20 20 20 20 20 20 63 6f 6d 62 69  //         combi
13550 6e 65 64 20 73 75 62 2d 6b 65 79 20 6e 61 6d 65  ned sub-key name
13560 20 66 6f 72 20 74 68 65 20 63 6f 6e 73 74 72 75   for the constru
13570 63 74 6f 72 2e 0d 0a 20 20 20 20 20 20 20 20 20  ctor...         
13580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
13590 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
135a0 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
135b0 67 20 6e 65 77 53 75 62 4b 65 79 4e 61 6d 65 20  g newSubKeyName 
135c0 3d 20 73 75 62 4b 65 79 4e 61 6d 65 3b 0d 0a 0d  = subKeyName;...
135d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
135e0 20 20 20 20 20 20 20 20 20 41 64 6a 75 73 74 53           AdjustS
135f0 75 62 4b 65 79 4e 61 6d 65 46 6f 72 57 68 61 74  ubKeyNameForWhat
13600 49 66 28 72 6f 6f 74 4b 65 79 2c 20 72 65 66 20  If(rootKey, ref 
13610 6e 65 77 53 75 62 4b 65 79 4e 61 6d 65 29 3b 0d  newSubKeyName);.
13620 0a 0d 0a 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 72 65 74 75 72             retur
13640 6e 20 6e 65 77 20 4d 6f 63 6b 52 65 67 69 73 74  n new MockRegist
13650 72 79 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20  ryKey(..        
13660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13670 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 6e 65 77      rootKey, new
13680 53 75 62 4b 65 79 4e 61 6d 65 2c 20 77 68 61 74  SubKeyName, what
13690 49 66 2c 20 66 61 6c 73 65 2c 20 66 61 6c 73 65  If, false, false
136a0 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
136b0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
136c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
136d0 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  lse..           
136e0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
136f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13700 20 20 20 20 72 65 74 75 72 6e 20 6e 65 77 20 4d      return new M
13710 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 28 0d  ockRegistryKey(.
13720 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
13730 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f               roo
13740 74 4b 65 79 2e 43 72 65 61 74 65 53 75 62 4b 65  tKey.CreateSubKe
13750 79 28 73 75 62 4b 65 79 4e 61 6d 65 29 2c 20 77  y(subKeyName), w
13760 68 61 74 49 66 2c 20 66 61 6c 73 65 2c 0d 0a 20  hatIf, false,.. 
13770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13780 20 20 20 20 20 20 20 20 20 20 20 66 61 6c 73 65             false
13790 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
137a0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
137b0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
137c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 69                fi
137d0 6e 61 6c 6c 79 0d 0a 20 20 20 20 20 20 20 20 20  nally..         
137e0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
137f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4d 61                Ma
13800 79 62 65 4c 6f 67 4f 70 65 72 61 74 69 6f 6e 28  ybeLogOperation(
13810 47 65 74 4d 65 74 68 6f 64 4e 61 6d 65 28 29 2c  GetMethodName(),
13820 20 72 6f 6f 74 4b 65 79 2c 20 73 75 62 4b 65 79   rootKey, subKey
13830 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  Name);....      
13840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 75                su
13850 62 4b 65 79 73 43 72 65 61 74 65 64 2b 2b 3b 0d  bKeysCreated++;.
13860 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
13870 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
13880 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
13890 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
138a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
138b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
138c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
138d0 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
138e0 20 20 20 20 5b 4d 65 74 68 6f 64 49 6d 70 6c 28      [MethodImpl(
138f0 4d 65 74 68 6f 64 49 6d 70 6c 4f 70 74 69 6f 6e  MethodImplOption
13900 73 2e 4e 6f 49 6e 6c 69 6e 69 6e 67 29 5d 0d 0a  s.NoInlining)]..
13910 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
13920 69 63 20 73 74 61 74 69 63 20 76 6f 69 64 20 44  ic static void D
13930 65 6c 65 74 65 53 75 62 4b 65 79 28 0d 0a 20 20  eleteSubKey(..  
13940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4d 6f                Mo
13950 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 72 6f  ckRegistryKey ro
13960 6f 74 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20  otKey,..        
13970 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 73          string s
13980 75 62 4b 65 79 4e 61 6d 65 2c 0d 0a 20 20 20 20  ubKeyName,..    
13990 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
139a0 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 2c   throwOnMissing,
139b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
139c0 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a    bool whatIf,..
139d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
139e0 62 6f 6f 6c 20 76 65 72 62 6f 73 65 0d 0a 20 20  bool verbose..  
139f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d                ).
13a00 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
13a10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13a20 69 66 20 28 76 65 72 62 6f 73 65 29 0d 0a 20 20  if (verbose)..  
13a30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
13a40 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
13a50 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65       TraceOps.De
13a60 62 75 67 41 6e 64 54 72 61 63 65 28 54 72 61 63  bugAndTrace(Trac
13a70 65 50 72 69 6f 72 69 74 79 2e 48 69 67 68 65 73  ePriority.Highes
13a80 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t,..            
13a90 20 20 20 20 20 20 20 20 20 20 20 20 64 65 62 75              debu
13aa0 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65  gCallback, trace
13ab0 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67  Callback, String
13ac0 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  .Format(..      
13ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13ae0 20 20 22 72 6f 6f 74 4b 65 79 20 3d 20 7b 30 7d    "rootKey = {0}
13af0 2c 20 73 75 62 4b 65 79 4e 61 6d 65 20 3d 20 7b  , subKeyName = {
13b00 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  1}",..          
13b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f                Fo
13b20 72 44 69 73 70 6c 61 79 28 72 6f 6f 74 4b 65 79  rDisplay(rootKey
13b30 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 73 75  ), ForDisplay(su
13b40 62 4b 65 79 4e 61 6d 65 29 29 2c 0d 0a 20 20 20  bKeyName)),..   
13b50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13b60 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f       traceCatego
13b70 72 79 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ry);..          
13b80 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
13b90 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 72             if (r
13ba0 6f 6f 74 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d  ootKey == null).
13bb0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
13bc0 20 20 20 20 20 72 65 74 75 72 6e 3b 0d 0a 0d 0a       return;....
13bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13be0 69 66 20 28 21 77 68 61 74 49 66 29 0d 0a 20 20  if (!whatIf)..  
13bf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13c00 20 20 72 6f 6f 74 4b 65 79 2e 44 65 6c 65 74 65    rootKey.Delete
13c10 53 75 62 4b 65 79 28 73 75 62 4b 65 79 4e 61 6d  SubKey(subKeyNam
13c20 65 2c 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e  e, throwOnMissin
13c30 67 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  g);....         
13c40 20 20 20 20 20 20 20 4d 61 79 62 65 4c 6f 67 4f         MaybeLogO
13c50 70 65 72 61 74 69 6f 6e 28 47 65 74 4d 65 74 68  peration(GetMeth
13c60 6f 64 4e 61 6d 65 28 29 2c 20 72 6f 6f 74 4b 65  odName(), rootKe
13c70 79 2c 20 73 75 62 4b 65 79 4e 61 6d 65 29 3b 0d  y, subKeyName);.
13c80 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
13c90 20 20 20 73 75 62 4b 65 79 73 44 65 6c 65 74 65     subKeysDelete
13ca0 64 2b 2b 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  d++;..          
13cb0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
13cc0 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
13cd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
13ce0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
13cf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
13d00 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
13d10 20 20 20 20 20 20 5b 4d 65 74 68 6f 64 49 6d 70        [MethodImp
13d20 6c 28 4d 65 74 68 6f 64 49 6d 70 6c 4f 70 74 69  l(MethodImplOpti
13d30 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e 69 6e 67 29 5d  ons.NoInlining)]
13d40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
13d50 62 6c 69 63 20 73 74 61 74 69 63 20 76 6f 69 64  blic static void
13d60 20 44 65 6c 65 74 65 53 75 62 4b 65 79 54 72 65   DeleteSubKeyTre
13d70 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
13d80 20 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79      MockRegistry
13d90 4b 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20  Key rootKey,..  
13da0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
13db0 72 69 6e 67 20 73 75 62 4b 65 79 4e 61 6d 65 2c  ring subKeyName,
13dc0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
13dd0 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a    bool whatIf,..
13de0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13df0 62 6f 6f 6c 20 76 65 72 62 6f 73 65 0d 0a 20 20  bool verbose..  
13e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d                ).
13e10 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
13e20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13e30 69 66 20 28 76 65 72 62 6f 73 65 29 0d 0a 20 20  if (verbose)..  
13e40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
13e50 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
13e60 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65       TraceOps.De
13e70 62 75 67 41 6e 64 54 72 61 63 65 28 54 72 61 63  bugAndTrace(Trac
13e80 65 50 72 69 6f 72 69 74 79 2e 48 69 67 68 65 73  ePriority.Highes
13e90 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t,..            
13ea0 20 20 20 20 20 20 20 20 20 20 20 20 64 65 62 75              debu
13eb0 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65  gCallback, trace
13ec0 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67  Callback, String
13ed0 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  .Format(..      
13ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13ef0 20 20 22 72 6f 6f 74 4b 65 79 20 3d 20 7b 30 7d    "rootKey = {0}
13f00 2c 20 73 75 62 4b 65 79 4e 61 6d 65 20 3d 20 7b  , subKeyName = {
13f10 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  1}",..          
13f20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f                Fo
13f30 72 44 69 73 70 6c 61 79 28 72 6f 6f 74 4b 65 79  rDisplay(rootKey
13f40 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 73 75  ), ForDisplay(su
13f50 62 4b 65 79 4e 61 6d 65 29 29 2c 0d 0a 20 20 20  bKeyName)),..   
13f60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13f70 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f       traceCatego
13f80 72 79 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ry);..          
13f90 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
13fa0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 72             if (r
13fb0 6f 6f 74 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d  ootKey == null).
13fc0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
13fd0 20 20 20 20 20 72 65 74 75 72 6e 3b 0d 0a 0d 0a       return;....
13fe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13ff0 69 66 20 28 21 77 68 61 74 49 66 29 0d 0a 20 20  if (!whatIf)..  
14000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14010 20 20 72 6f 6f 74 4b 65 79 2e 44 65 6c 65 74 65    rootKey.Delete
14020 53 75 62 4b 65 79 54 72 65 65 28 73 75 62 4b 65  SubKeyTree(subKe
14030 79 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20  yName);....     
14040 20 20 20 20 20 20 20 20 20 20 20 4d 61 79 62 65             Maybe
14050 4c 6f 67 4f 70 65 72 61 74 69 6f 6e 28 47 65 74  LogOperation(Get
14060 4d 65 74 68 6f 64 4e 61 6d 65 28 29 2c 20 72 6f  MethodName(), ro
14070 6f 74 4b 65 79 2c 20 73 75 62 4b 65 79 4e 61 6d  otKey, subKeyNam
14080 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  e);....         
14090 20 20 20 20 20 20 20 73 75 62 4b 65 79 73 44 65         subKeysDe
140a0 6c 65 74 65 64 2b 2b 3b 0d 0a 20 20 20 20 20 20  leted++;..      
140b0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
140c0 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
140d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
140e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
140f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14100 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
14110 20 20 20 20 20 20 20 20 20 20 5b 4d 65 74 68 6f            [Metho
14120 64 49 6d 70 6c 28 4d 65 74 68 6f 64 49 6d 70 6c  dImpl(MethodImpl
14130 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e 69  Options.NoInlini
14140 6e 67 29 5d 0d 0a 20 20 20 20 20 20 20 20 20 20  ng)]..          
14150 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20    public static 
14160 73 74 72 69 6e 67 5b 5d 20 47 65 74 53 75 62 4b  string[] GetSubK
14170 65 79 4e 61 6d 65 73 28 0d 0a 20 20 20 20 20 20  eyNames(..      
14180 20 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65            MockRe
14190 67 69 73 74 72 79 4b 65 79 20 6b 65 79 2c 0d 0a  gistryKey key,..
141a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
141b0 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20  bool whatIf,..  
141c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f                bo
141d0 6f 6c 20 76 65 72 62 6f 73 65 0d 0a 20 20 20 20  ol verbose..    
141e0 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
141f0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
14200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
14210 20 28 76 65 72 62 6f 73 65 29 0d 0a 20 20 20 20   (verbose)..    
14220 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
14230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14240 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75     TraceOps.Debu
14250 67 41 6e 64 54 72 61 63 65 28 54 72 61 63 65 50  gAndTrace(TraceP
14260 72 69 6f 72 69 74 79 2e 48 69 67 68 2c 0d 0a 20  riority.High,.. 
14270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14280 20 20 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c         debugCall
14290 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62  back, traceCallb
142a0 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d  ack, String.Form
142b0 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
142c0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 6b 65               "ke
142d0 79 20 3d 20 7b 30 7d 22 2c 20 46 6f 72 44 69 73  y = {0}", ForDis
142e0 70 6c 61 79 28 6b 65 79 29 29 2c 20 74 72 61 63  play(key)), trac
142f0 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 20 20 20  eCategory);..   
14300 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
14310 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
14320 20 20 69 66 20 28 6b 65 79 20 3d 3d 20 6e 75 6c    if (key == nul
14330 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
14340 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e          return n
14350 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ull;....        
14360 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6b          return k
14370 65 79 2e 47 65 74 53 75 62 4b 65 79 4e 61 6d 65  ey.GetSubKeyName
14380 73 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  s();..          
14390 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
143a0 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
143b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
143c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
143d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
143e0 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
143f0 20 20 20 20 20 20 5b 4d 65 74 68 6f 64 49 6d 70        [MethodImp
14400 6c 28 4d 65 74 68 6f 64 49 6d 70 6c 4f 70 74 69  l(MethodImplOpti
14410 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e 69 6e 67 29 5d  ons.NoInlining)]
14420 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
14430 62 6c 69 63 20 73 74 61 74 69 63 20 6f 62 6a 65  blic static obje
14440 63 74 20 47 65 74 56 61 6c 75 65 28 0d 0a 20 20  ct GetValue(..  
14450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4d 6f                Mo
14460 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 6b 65  ckRegistryKey ke
14470 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y,..            
14480 20 20 20 20 73 74 72 69 6e 67 20 6e 61 6d 65 2c      string name,
14490 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
144a0 20 20 6f 62 6a 65 63 74 20 64 65 66 61 75 6c 74    object default
144b0 56 61 6c 75 65 2c 0d 0a 20 20 20 20 20 20 20 20  Value,..        
144c0 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61          bool wha
144d0 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  tIf,..          
144e0 20 20 20 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f        bool verbo
144f0 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  se..            
14500 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20      )..         
14510 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
14520 20 20 20 20 20 20 69 66 20 28 76 65 72 62 6f 73        if (verbos
14530 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e)..            
14540 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
14550 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
14560 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63  Ops.DebugAndTrac
14570 65 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e  e(TracePriority.
14580 48 69 67 68 2c 0d 0a 20 20 20 20 20 20 20 20 20  High,..         
14590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64                 d
145a0 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72  ebugCallback, tr
145b0 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72  aceCallback, Str
145c0 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
145d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
145e0 20 20 20 20 20 22 6b 65 79 20 3d 20 7b 30 7d 2c       "key = {0},
145f0 20 6e 61 6d 65 20 3d 20 7b 31 7d 2c 20 64 65 66   name = {1}, def
14600 61 75 6c 74 56 61 6c 75 65 20 3d 20 7b 32 7d 22  aultValue = {2}"
14610 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
14620 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69             ForDi
14630 73 70 6c 61 79 28 6b 65 79 29 2c 20 46 6f 72 44  splay(key), ForD
14640 69 73 70 6c 61 79 28 6e 61 6d 65 29 2c 0d 0a 20  isplay(name),.. 
14650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14660 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61         ForDispla
14670 79 28 64 65 66 61 75 6c 74 56 61 6c 75 65 29 29  y(defaultValue))
14680 2c 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29  , traceCategory)
14690 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
146a0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
146b0 20 20 20 20 20 20 20 20 69 66 20 28 6b 65 79 20          if (key 
146c0 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
146d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
146e0 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20  turn null;....  
146f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6f 62                ob
14700 6a 65 63 74 20 76 61 6c 75 65 20 3d 20 6b 65 79  ject value = key
14710 2e 47 65 74 56 61 6c 75 65 28 6e 61 6d 65 2c 20  .GetValue(name, 
14720 64 65 66 61 75 6c 74 56 61 6c 75 65 29 3b 0d 0a  defaultValue);..
14730 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
14740 20 20 6b 65 79 56 61 6c 75 65 73 52 65 61 64 2b    keyValuesRead+
14750 2b 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  +;....          
14760 20 20 20 20 20 20 72 65 74 75 72 6e 20 76 61 6c        return val
14770 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
14780 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
14790 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
147a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
147b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
147c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
147d0 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
147e0 20 20 20 20 20 5b 4d 65 74 68 6f 64 49 6d 70 6c       [MethodImpl
147f0 28 4d 65 74 68 6f 64 49 6d 70 6c 4f 70 74 69 6f  (MethodImplOptio
14800 6e 73 2e 4e 6f 49 6e 6c 69 6e 69 6e 67 29 5d 0d  ns.NoInlining)].
14810 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
14820 6c 69 63 20 73 74 61 74 69 63 20 76 6f 69 64 20  lic static void 
14830 53 65 74 56 61 6c 75 65 28 0d 0a 20 20 20 20 20  SetValue(..     
14840 20 20 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52             MockR
14850 65 67 69 73 74 72 79 4b 65 79 20 6b 65 79 2c 0d  egistryKey key,.
14860 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
14870 20 73 74 72 69 6e 67 20 6e 61 6d 65 2c 0d 0a 20   string name,.. 
14880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6f                 o
14890 62 6a 65 63 74 20 76 61 6c 75 65 2c 0d 0a 20 20  bject value,..  
148a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f                bo
148b0 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20  ol whatIf,..    
148c0 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
148d0 20 76 65 72 62 6f 73 65 0d 0a 20 20 20 20 20 20   verbose..      
148e0 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
148f0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
14900 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
14910 76 65 72 62 6f 73 65 29 0d 0a 20 20 20 20 20 20  verbose)..      
14920 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
14930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14940 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41   TraceOps.DebugA
14950 6e 64 54 72 61 63 65 28 54 72 61 63 65 50 72 69  ndTrace(TracePri
14960 6f 72 69 74 79 2e 48 69 67 68 65 73 74 2c 0d 0a  ority.Highest,..
14970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14980 20 20 20 20 20 20 20 20 64 65 62 75 67 43 61 6c          debugCal
14990 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c  lback, traceCall
149a0 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72  back, String.For
149b0 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
149c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 6b                "k
149d0 65 79 20 3d 20 7b 30 7d 2c 20 6e 61 6d 65 20 3d  ey = {0}, name =
149e0 20 7b 31 7d 2c 20 76 61 6c 75 65 20 3d 20 7b 32   {1}, value = {2
149f0 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }",..           
14a00 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72               For
14a10 44 69 73 70 6c 61 79 28 6b 65 79 29 2c 20 46 6f  Display(key), Fo
14a20 72 44 69 73 70 6c 61 79 28 6e 61 6d 65 29 2c 20  rDisplay(name), 
14a30 46 6f 72 44 69 73 70 6c 61 79 28 76 61 6c 75 65  ForDisplay(value
14a40 29 29 2c 0d 0a 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 74 72 61               tra
14a60 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 20 20  ceCategory);..  
14a70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
14a80 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
14a90 20 20 20 69 66 20 28 6b 65 79 20 3d 3d 20 6e 75     if (key == nu
14aa0 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
14ab0 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 3b           return;
14ac0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
14ad0 20 20 20 20 69 66 20 28 21 77 68 61 74 49 66 29      if (!whatIf)
14ae0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
14af0 20 20 20 20 20 20 6b 65 79 2e 53 65 74 56 61 6c        key.SetVal
14b00 75 65 28 6e 61 6d 65 2c 20 76 61 6c 75 65 29 3b  ue(name, value);
14b10 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
14b20 20 20 20 20 4d 61 79 62 65 4c 6f 67 4f 70 65 72      MaybeLogOper
14b30 61 74 69 6f 6e 28 47 65 74 4d 65 74 68 6f 64 4e  ation(GetMethodN
14b40 61 6d 65 28 29 2c 20 6b 65 79 2c 20 6e 61 6d 65  ame(), key, name
14b50 2c 20 76 61 6c 75 65 29 3b 0d 0a 0d 0a 20 20 20  , value);....   
14b60 20 20 20 20 20 20 20 20 20 20 20 20 20 6b 65 79               key
14b70 56 61 6c 75 65 73 57 72 69 74 74 65 6e 2b 2b 3b  ValuesWritten++;
14b80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
14b90 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
14ba0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14bb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14bc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14bd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14be0 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
14bf0 20 20 5b 4d 65 74 68 6f 64 49 6d 70 6c 28 4d 65    [MethodImpl(Me
14c00 74 68 6f 64 49 6d 70 6c 4f 70 74 69 6f 6e 73 2e  thodImplOptions.
14c10 4e 6f 49 6e 6c 69 6e 69 6e 67 29 5d 0d 0a 20 20  NoInlining)]..  
14c20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
14c30 20 73 74 61 74 69 63 20 76 6f 69 64 20 44 65 6c   static void Del
14c40 65 74 65 56 61 6c 75 65 28 0d 0a 20 20 20 20 20  eteValue(..     
14c50 20 20 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52             MockR
14c60 65 67 69 73 74 72 79 4b 65 79 20 6b 65 79 2c 0d  egistryKey key,.
14c70 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
14c80 20 73 74 72 69 6e 67 20 6e 61 6d 65 2c 0d 0a 20   string name,.. 
14c90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62                 b
14ca0 6f 6f 6c 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69  ool throwOnMissi
14cb0 6e 67 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ng,..           
14cc0 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66       bool whatIf
14cd0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
14ce0 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 0d     bool verbose.
14cf0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
14d00 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   )..            
14d10 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
14d20 20 20 20 69 66 20 28 76 65 72 62 6f 73 65 29 0d     if (verbose).
14d30 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
14d40 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
14d50 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73          TraceOps
14d60 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 54  .DebugAndTrace(T
14d70 72 61 63 65 50 72 69 6f 72 69 74 79 2e 48 69 67  racePriority.Hig
14d80 68 65 73 74 2c 0d 0a 20 20 20 20 20 20 20 20 20  hest,..         
14d90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64                 d
14da0 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72  ebugCallback, tr
14db0 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72  aceCallback, Str
14dc0 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
14dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14de0 20 20 20 20 20 22 6b 65 79 20 3d 20 7b 30 7d 2c       "key = {0},
14df0 20 6e 61 6d 65 20 3d 20 7b 31 7d 22 2c 20 46 6f   name = {1}", Fo
14e00 72 44 69 73 70 6c 61 79 28 6b 65 79 29 2c 0d 0a  rDisplay(key),..
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 20 46 6f 72 44 69 73 70 6c          ForDispl
14e30 61 79 28 6e 61 6d 65 29 29 2c 20 74 72 61 63 65  ay(name)), trace
14e40 43 61 74 65 67 6f 72 79 29 3b 0d 0a 20 20 20 20  Category);..    
14e50 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
14e60 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
14e70 20 69 66 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c   if (key == null
14e80 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
14e90 20 20 20 20 20 20 20 72 65 74 75 72 6e 3b 0d 0a         return;..
14ea0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
14eb0 20 20 69 66 20 28 21 77 68 61 74 49 66 29 0d 0a    if (!whatIf)..
14ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14ed0 20 20 20 20 6b 65 79 2e 44 65 6c 65 74 65 56 61      key.DeleteVa
14ee0 6c 75 65 28 6e 61 6d 65 2c 20 74 68 72 6f 77 4f  lue(name, throwO
14ef0 6e 4d 69 73 73 69 6e 67 29 3b 0d 0a 0d 0a 20 20  nMissing);....  
14f00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4d 61                Ma
14f10 79 62 65 4c 6f 67 4f 70 65 72 61 74 69 6f 6e 28  ybeLogOperation(
14f20 47 65 74 4d 65 74 68 6f 64 4e 61 6d 65 28 29 2c  GetMethodName(),
14f30 20 6b 65 79 2c 20 6e 61 6d 65 2c 20 6e 75 6c 6c   key, name, null
14f40 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
14f50 20 20 20 20 20 20 6b 65 79 56 61 6c 75 65 73 44        keyValuesD
14f60 65 6c 65 74 65 64 2b 2b 3b 0d 0a 20 20 20 20 20  eleted++;..     
14f70 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
14f80 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
14f90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14fa0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14fb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14fc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
14fd0 20 20 20 20 20 20 20 20 20 20 20 5b 4d 65 74 68             [Meth
14fe0 6f 64 49 6d 70 6c 28 4d 65 74 68 6f 64 49 6d 70  odImpl(MethodImp
14ff0 6c 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e  lOptions.NoInlin
15000 69 6e 67 29 5d 0d 0a 20 20 20 20 20 20 20 20 20  ing)]..         
15010 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63     public static
15020 20 69 6e 74 20 57 72 69 74 65 4f 70 65 72 61 74   int WriteOperat
15030 69 6f 6e 4c 69 73 74 28 0d 0a 20 20 20 20 20 20  ionList(..      
15040 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
15050 20 66 69 6c 65 4e 61 6d 65 2c 0d 0a 20 20 20 20   fileName,..    
15060 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
15070 20 68 65 61 64 65 72 2c 0d 0a 20 20 20 20 20 20   header,..      
15080 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76            bool v
15090 65 72 62 6f 73 65 0d 0a 20 20 20 20 20 20 20 20  erbose..        
150a0 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
150b0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
150c0 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 63 6f            int co
150d0 75 6e 74 20 3d 20 30 3b 0d 0a 0d 0a 20 20 20 20  unt = 0;....    
150e0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
150f0 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45  String.IsNullOrE
15100 6d 70 74 79 28 66 69 6c 65 4e 61 6d 65 29 29 0d  mpty(fileName)).
15110 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
15120 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
15130 20 20 20 20 20 20 20 20 69 66 20 28 76 65 72 62          if (verb
15140 6f 73 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ose)..          
15150 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
15160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15170 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65       TraceOps.De
15180 62 75 67 41 6e 64 54 72 61 63 65 28 54 72 61 63  bugAndTrace(Trac
15190 65 50 72 69 6f 72 69 74 79 2e 48 69 67 68 65 73  ePriority.Highes
151a0 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t,..            
151b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
151c0 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74  debugCallback, t
151d0 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20  raceCallback,.. 
151e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
151f0 20 20 20 20 20 20 20 20 20 20 20 22 52 65 67 69             "Regi
15200 73 74 72 79 20 6f 70 65 72 61 74 69 6f 6e 20 6c  stry operation l
15210 6f 67 20 66 69 6c 65 20 6e 61 6d 65 20 6e 6f 74  og file name not
15220 20 73 65 74 2e 22 2c 0d 0a 20 20 20 20 20 20 20   set.",..       
15230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15240 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f       traceCatego
15250 72 79 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ry);..          
15260 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
15270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15280 20 20 20 72 65 74 75 72 6e 20 63 6f 75 6e 74 3b     return count;
15290 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
152a0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
152b0 20 20 20 20 20 20 20 6c 6f 63 6b 20 28 73 79 6e         lock (syn
152c0 63 52 6f 6f 74 29 20 2f 2a 20 54 52 41 4e 53 41  cRoot) /* TRANSA
152d0 43 54 49 4f 4e 41 4c 20 2a 2f 0d 0a 20 20 20 20  CTIONAL */..    
152e0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
152f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15300 20 20 20 69 66 20 28 6f 70 65 72 61 74 69 6f 6e     if (operation
15310 4c 69 73 74 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  List == null).. 
15320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15330 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
15340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
15350 20 28 76 65 72 62 6f 73 65 29 0d 0a 20 20 20 20   (verbose)..    
15360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15370 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
15380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15390 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75     TraceOps.Debu
153a0 67 41 6e 64 54 72 61 63 65 28 54 72 61 63 65 50  gAndTrace(TraceP
153b0 72 69 6f 72 69 74 79 2e 48 69 67 68 65 73 74 2c  riority.Highest,
153c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
153d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
153e0 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c    debugCallback,
153f0 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 0d   traceCallback,.
15400 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
15410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15420 20 22 52 65 67 69 73 74 72 79 20 6f 70 65 72 61   "Registry opera
15430 74 69 6f 6e 20 6c 69 73 74 20 69 73 20 69 6e 76  tion list is inv
15440 61 6c 69 64 2e 22 2c 0d 0a 20 20 20 20 20 20 20  alid.",..       
15450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15460 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
15470 74 65 67 6f 72 79 29 3b 0d 0a 20 20 20 20 20 20  tegory);..      
15480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15490 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
154a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
154b0 65 74 75 72 6e 20 63 6f 75 6e 74 3b 0d 0a 20 20  eturn count;..  
154c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
154d0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
154e0 20 20 20 20 20 20 20 20 20 20 20 75 73 69 6e 67             using
154f0 20 28 53 74 72 65 61 6d 57 72 69 74 65 72 20 73   (StreamWriter s
15500 74 72 65 61 6d 57 72 69 74 65 72 20 3d 20 6e 65  treamWriter = ne
15510 77 20 53 74 72 65 61 6d 57 72 69 74 65 72 28 0d  w StreamWriter(.
15520 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
15530 20 20 20 20 20 20 20 20 20 20 20 20 20 66 69 6c               fil
15540 65 4e 61 6d 65 29 29 0d 0a 20 20 20 20 20 20 20  eName))..       
15550 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
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 69 66 20 28 68 65 61 64          if (head
15580 65 72 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  er)..           
15590 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
155a0 20 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 20 20 20 73 74 72 65              stre
155c0 61 6d 57 72 69 74 65 72 2e 57 72 69 74 65 4c 69  amWriter.WriteLi
155d0 6e 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ne(..           
155e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
155f0 20 20 20 20 20 52 65 67 69 73 74 72 79 4f 70 65       RegistryOpe
15600 72 61 74 69 6f 6e 2e 47 65 74 48 65 61 64 65 72  ration.GetHeader
15610 4c 69 6e 65 28 29 29 3b 0d 0a 20 20 20 20 20 20  Line());..      
15620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15630 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
15640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66                 f
15650 6f 72 65 61 63 68 20 28 52 65 67 69 73 74 72 79  oreach (Registry
15660 4f 70 65 72 61 74 69 6f 6e 20 6f 70 65 72 61 74  Operation operat
15670 69 6f 6e 20 69 6e 20 6f 70 65 72 61 74 69 6f 6e  ion in operation
15680 4c 69 73 74 29 0d 0a 20 20 20 20 20 20 20 20 20  List)..         
15690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
156a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
156b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
156c0 20 28 6f 70 65 72 61 74 69 6f 6e 20 3d 3d 20 6e   (operation == n
156d0 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
156e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
156f0 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d        continue;.
15700 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
15710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
15720 74 72 65 61 6d 57 72 69 74 65 72 2e 57 72 69 74  treamWriter.Writ
15730 65 4c 69 6e 65 28 6f 70 65 72 61 74 69 6f 6e 2e  eLine(operation.
15740 54 6f 53 74 72 69 6e 67 28 29 29 3b 0d 0a 20 20  ToString());..  
15750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15760 20 20 20 20 20 20 20 20 20 20 63 6f 75 6e 74 2b            count+
15770 2b 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  +;..            
15780 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
15790 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
157a0 20 20 20 20 20 20 20 20 20 73 74 72 65 61 6d 57           streamW
157b0 72 69 74 65 72 2e 46 6c 75 73 68 28 29 3b 0d 0a  riter.Flush();..
157c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
157d0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
157e0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
157f0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
15800 76 65 72 62 6f 73 65 29 0d 0a 20 20 20 20 20 20  verbose)..      
15810 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
15820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15830 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41   TraceOps.DebugA
15840 6e 64 54 72 61 63 65 28 54 72 61 63 65 50 72 69  ndTrace(TracePri
15850 6f 72 69 74 79 2e 48 69 67 68 65 73 74 2c 0d 0a  ority.Highest,..
15860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15870 20 20 20 20 20 20 20 20 64 65 62 75 67 43 61 6c          debugCal
15880 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c  lback, traceCall
15890 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72  back, String.For
158a0 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
158b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 57                "W
158c0 72 6f 74 65 20 7b 30 7d 20 72 65 67 69 73 74 72  rote {0} registr
158d0 79 20 6f 70 65 72 61 74 69 6f 6e 73 20 74 6f 20  y operations to 
158e0 69 74 73 20 6c 6f 67 20 66 69 6c 65 2e 22 2c 0d  its log file.",.
158f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
15900 20 20 20 20 20 20 20 20 20 63 6f 75 6e 74 29 2c           count),
15910 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
15920 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
15930 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
15940 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 63 6f         return co
15950 75 6e 74 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  unt;..          
15960 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
15970 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20   #endregion.... 
15980 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
15990 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
159a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
159b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
159c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
159d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 72  ..            #r
159e0 65 67 69 6f 6e 20 50 72 69 76 61 74 65 20 53 74  egion Private St
159f0 61 74 69 63 20 4d 65 74 68 6f 64 73 0d 0a 20 20  atic Methods..  
15a00 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
15a10 65 20 73 74 61 74 69 63 20 76 6f 69 64 20 41 64  e static void Ad
15a20 6a 75 73 74 53 75 62 4b 65 79 4e 61 6d 65 46 6f  justSubKeyNameFo
15a30 72 57 68 61 74 49 66 28 0d 0a 20 20 20 20 20 20  rWhatIf(..      
15a40 20 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65            MockRe
15a50 67 69 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65  gistryKey rootKe
15a60 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y,..            
15a70 20 20 20 20 72 65 66 20 73 74 72 69 6e 67 20 73      ref string s
15a80 75 62 4b 65 79 4e 61 6d 65 0d 0a 20 20 20 20 20  ubKeyName..     
15a90 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
15aa0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
15ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
15ac0 28 72 6f 6f 74 4b 65 79 20 3d 3d 20 6e 75 6c 6c  (rootKey == null
15ad0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
15ae0 20 20 20 20 20 20 20 72 65 74 75 72 6e 3b 0d 0a         return;..
15af0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
15b00 20 20 73 74 72 69 6e 67 20 72 6f 6f 74 4b 65 79    string rootKey
15b10 53 75 62 4b 65 79 4e 61 6d 65 20 3d 20 72 6f 6f  SubKeyName = roo
15b20 74 4b 65 79 2e 53 75 62 4b 65 79 4e 61 6d 65 3b  tKey.SubKeyName;
15b30 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
15b40 20 20 20 20 69 66 20 28 72 6f 6f 74 4b 65 79 53      if (rootKeyS
15b50 75 62 4b 65 79 4e 61 6d 65 20 3d 3d 20 6e 75 6c  ubKeyName == nul
15b60 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
15b70 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 3b 0d          return;.
15b80 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
15b90 20 20 20 73 75 62 4b 65 79 4e 61 6d 65 20 3d 20     subKeyName = 
15ba0 28 73 75 62 4b 65 79 4e 61 6d 65 20 21 3d 20 6e  (subKeyName != n
15bb0 75 6c 6c 29 20 3f 0d 0a 20 20 20 20 20 20 20 20  ull) ?..        
15bc0 20 20 20 20 20 20 20 20 20 20 20 20 4a 6f 69 6e              Join
15bd0 4b 65 79 4e 61 6d 65 73 28 72 6f 6f 74 4b 65 79  KeyNames(rootKey
15be0 53 75 62 4b 65 79 4e 61 6d 65 2c 20 73 75 62 4b  SubKeyName, subK
15bf0 65 79 4e 61 6d 65 29 20 3a 0d 0a 20 20 20 20 20  eyName) :..     
15c00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
15c10 6f 6f 74 4b 65 79 53 75 62 4b 65 79 4e 61 6d 65  ootKeySubKeyName
15c20 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
15c30 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
15c40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15c50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15c60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15c70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15c80 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
15c90 20 20 20 5b 4d 65 74 68 6f 64 49 6d 70 6c 28 4d     [MethodImpl(M
15ca0 65 74 68 6f 64 49 6d 70 6c 4f 70 74 69 6f 6e 73  ethodImplOptions
15cb0 2e 4e 6f 49 6e 6c 69 6e 69 6e 67 29 5d 0d 0a 20  .NoInlining)].. 
15cc0 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
15cd0 74 65 20 73 74 61 74 69 63 20 73 74 72 69 6e 67  te static string
15ce0 20 47 65 74 4d 65 74 68 6f 64 4e 61 6d 65 28 29   GetMethodName()
15cf0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
15d00 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
15d10 20 72 65 74 75 72 6e 20 54 72 61 63 65 4f 70 73   return TraceOps
15d20 2e 47 65 74 4d 65 74 68 6f 64 4e 61 6d 65 28 6e  .GetMethodName(n
15d30 75 6c 6c 2c 20 31 29 3b 0d 0a 20 20 20 20 20 20  ull, 1);..      
15d40 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
15d50 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
15d60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15d70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15d80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15d90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
15da0 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
15db0 65 20 73 74 61 74 69 63 20 76 6f 69 64 20 4d 61  e static void Ma
15dc0 79 62 65 4c 6f 67 4f 70 65 72 61 74 69 6f 6e 28  ybeLogOperation(
15dd0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
15de0 20 20 73 74 72 69 6e 67 20 6d 65 74 68 6f 64 4e    string methodN
15df0 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ame,..          
15e00 20 20 20 20 20 20 4d 6f 63 6b 52 65 67 69 73 74        MockRegist
15e10 72 79 4b 65 79 20 6b 65 79 2c 0d 0a 20 20 20 20  ryKey key,..    
15e20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
15e30 6e 67 20 73 75 62 4b 65 79 4e 61 6d 65 0d 0a 20  ng subKeyName.. 
15e40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29                 )
15e50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
15e60 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
15e70 20 4d 61 79 62 65 4c 6f 67 4f 70 65 72 61 74 69   MaybeLogOperati
15e80 6f 6e 28 6d 65 74 68 6f 64 4e 61 6d 65 2c 20 6b  on(methodName, k
15e90 65 79 2c 20 73 75 62 4b 65 79 4e 61 6d 65 2c 20  ey, subKeyName, 
15ea0 6e 75 6c 6c 2c 20 6e 75 6c 6c 29 3b 0d 0a 20 20  null, null);..  
15eb0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
15ec0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
15ed0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15ee0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15ef0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15f00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
15f10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
15f20 69 76 61 74 65 20 73 74 61 74 69 63 20 76 6f 69  ivate static voi
15f30 64 20 4d 61 79 62 65 4c 6f 67 4f 70 65 72 61 74  d MaybeLogOperat
15f40 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ion(..          
15f50 20 20 20 20 20 20 73 74 72 69 6e 67 20 6d 65 74        string met
15f60 68 6f 64 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20  hodName,..      
15f70 20 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65            MockRe
15f80 67 69 73 74 72 79 4b 65 79 20 6b 65 79 2c 0d 0a  gistryKey key,..
15f90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15fa0 73 74 72 69 6e 67 20 76 61 6c 75 65 4e 61 6d 65  string valueName
15fb0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
15fc0 20 20 20 6f 62 6a 65 63 74 20 76 61 6c 75 65 0d     object value.
15fd0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
15fe0 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   )..            
15ff0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
16000 20 20 20 4d 61 79 62 65 4c 6f 67 4f 70 65 72 61     MaybeLogOpera
16010 74 69 6f 6e 28 6d 65 74 68 6f 64 4e 61 6d 65 2c  tion(methodName,
16020 20 6b 65 79 2c 20 6e 75 6c 6c 2c 20 76 61 6c 75   key, null, valu
16030 65 4e 61 6d 65 2c 20 76 61 6c 75 65 29 3b 0d 0a  eName, value);..
16040 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
16050 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
16060 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16070 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16080 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16090 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
160a0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
160b0 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 76  private static v
160c0 6f 69 64 20 4d 61 79 62 65 4c 6f 67 4f 70 65 72  oid MaybeLogOper
160d0 61 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20  ation(..        
160e0 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6d          string m
160f0 65 74 68 6f 64 4e 61 6d 65 2c 0d 0a 20 20 20 20  ethodName,..    
16100 20 20 20 20 20 20 20 20 20 20 20 20 4d 6f 63 6b              Mock
16110 52 65 67 69 73 74 72 79 4b 65 79 20 6b 65 79 2c  RegistryKey key,
16120 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
16130 20 20 73 74 72 69 6e 67 20 73 75 62 4b 65 79 4e    string subKeyN
16140 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ame,..          
16150 20 20 20 20 20 20 73 74 72 69 6e 67 20 76 61 6c        string val
16160 75 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20  ueName,..       
16170 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20           object 
16180 76 61 6c 75 65 0d 0a 20 20 20 20 20 20 20 20 20  value..         
16190 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
161a0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
161b0 20 20 20 20 20 20 20 20 20 6c 6f 63 6b 20 28 73           lock (s
161c0 79 6e 63 52 6f 6f 74 29 20 2f 2a 20 54 52 41 4e  yncRoot) /* TRAN
161d0 53 41 43 54 49 4f 4e 41 4c 20 2a 2f 0d 0a 20 20  SACTIONAL */..  
161e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
161f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
16200 20 20 20 20 20 69 66 20 28 6f 70 65 72 61 74 69       if (operati
16210 6f 6e 4c 69 73 74 20 3d 3d 20 6e 75 6c 6c 29 0d  onList == null).
16220 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
16230 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 3b           return;
16240 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
16250 20 20 20 20 20 20 20 20 69 66 20 28 6d 65 74 68          if (meth
16260 6f 64 4e 61 6d 65 20 21 3d 20 6e 75 6c 6c 29 0d  odName != null).
16270 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
16280 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
16290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
162a0 73 74 72 69 6e 67 20 74 79 70 65 50 72 65 66 69  string typePrefi
162b0 78 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61  x = String.Forma
162c0 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
162d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
162e0 22 7b 30 7d 7b 31 7d 22 2c 20 74 79 70 65 6f 66  "{0}{1}", typeof
162f0 28 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 29  (RegistryHelper)
16300 2e 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20  .Name,..        
16310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16320 20 20 20 20 54 79 70 65 2e 44 65 6c 69 6d 69 74      Type.Delimit
16330 65 72 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  er);....        
16340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16350 69 66 20 28 6d 65 74 68 6f 64 4e 61 6d 65 2e 53  if (methodName.S
16360 74 61 72 74 73 57 69 74 68 28 0d 0a 20 20 20 20  tartsWith(..    
16370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16380 20 20 20 20 20 20 20 20 20 20 20 20 74 79 70 65              type
16390 50 72 65 66 69 78 2c 20 53 74 72 69 6e 67 43 6f  Prefix, StringCo
163a0 6d 70 61 72 69 73 6f 6e 2e 4f 72 64 69 6e 61 6c  mparison.Ordinal
163b0 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
163c0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
163d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
163e0 20 20 20 20 20 20 20 20 20 20 20 6d 65 74 68 6f             metho
163f0 64 4e 61 6d 65 20 3d 20 6d 65 74 68 6f 64 4e 61  dName = methodNa
16400 6d 65 2e 53 75 62 73 74 72 69 6e 67 28 0d 0a 20  me.Substring(.. 
16410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
16430 79 70 65 50 72 65 66 69 78 2e 4c 65 6e 67 74 68  ypePrefix.Length
16440 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
16450 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
16460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16470 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
16480 20 20 20 20 20 20 20 20 20 20 20 20 6f 70 65 72              oper
16490 61 74 69 6f 6e 4c 69 73 74 2e 41 64 64 28 6e 65  ationList.Add(ne
164a0 77 20 52 65 67 69 73 74 72 79 4f 70 65 72 61 74  w RegistryOperat
164b0 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ion(..          
164c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6d 65                me
164d0 74 68 6f 64 4e 61 6d 65 2c 20 6b 65 79 2c 20 73  thodName, key, s
164e0 75 62 4b 65 79 4e 61 6d 65 2c 20 76 61 6c 75 65  ubKeyName, value
164f0 4e 61 6d 65 2c 20 76 61 6c 75 65 29 29 3b 0d 0a  Name, value));..
16500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16510 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
16520 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 65  ..            #e
16530 6e 64 72 65 67 69 6f 6e 0d 0a 20 20 20 20 20 20  ndregion..      
16540 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e    }..        #en
16550 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20  dregion....     
16560 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
16570 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16580 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16590 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
165a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
165b0 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 52 65        #region Re
165c0 67 69 73 74 72 79 4f 70 65 72 61 74 69 6f 6e 4c  gistryOperationL
165d0 69 73 74 20 43 6c 61 73 73 0d 0a 20 20 20 20 20  ist Class..     
165e0 20 20 20 5b 53 65 72 69 61 6c 69 7a 61 62 6c 65     [Serializable
165f0 28 29 5d 0d 0a 20 20 20 20 20 20 20 20 70 72 69  ()]..        pri
16600 76 61 74 65 20 73 65 61 6c 65 64 20 63 6c 61 73  vate sealed clas
16610 73 20 52 65 67 69 73 74 72 79 4f 70 65 72 61 74  s RegistryOperat
16620 69 6f 6e 4c 69 73 74 20 3a 0d 0a 20 20 20 20 20  ionList :..     
16630 20 20 20 20 20 20 20 4c 69 73 74 3c 52 65 67 69         List<Regi
16640 73 74 72 79 4f 70 65 72 61 74 69 6f 6e 3e 2c 20  stryOperation>, 
16650 49 44 69 73 70 6f 73 61 62 6c 65 0d 0a 20 20 20  IDisposable..   
16660 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
16670 20 20 20 20 23 72 65 67 69 6f 6e 20 50 75 62 6c      #region Publ
16680 69 63 20 43 6f 6e 73 74 72 75 63 74 6f 72 73 0d  ic Constructors.
16690 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
166a0 6c 69 63 20 52 65 67 69 73 74 72 79 4f 70 65 72  lic RegistryOper
166b0 61 74 69 6f 6e 4c 69 73 74 28 29 0d 0a 20 20 20  ationList()..   
166c0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
166d0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64              // d
166e0 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20  o nothing...    
166f0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
16700 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f         #endregio
16710 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n....           
16720 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
16730 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16740 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16750 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16760 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
16770 20 20 20 20 23 72 65 67 69 6f 6e 20 49 44 69 73      #region IDis
16780 70 6f 73 61 62 6c 65 20 22 50 61 74 74 65 72 6e  posable "Pattern
16790 22 20 4d 65 6d 62 65 72 73 0d 0a 20 20 20 20 20  " Members..     
167a0 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 62         private b
167b0 6f 6f 6c 20 64 69 73 70 6f 73 65 64 3b 0d 0a 20  ool disposed;.. 
167c0 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
167d0 74 65 20 76 6f 69 64 20 43 68 65 63 6b 44 69 73  te void CheckDis
167e0 70 6f 73 65 64 28 29 20 2f 2a 20 74 68 72 6f 77  posed() /* throw
167f0 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   */..           
16800 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
16810 20 20 20 20 69 66 20 28 21 64 69 73 70 6f 73 65      if (!dispose
16820 64 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  d)..            
16830 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 3b 0d          return;.
16840 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
16850 20 20 20 74 68 72 6f 77 20 6e 65 77 20 4f 62 6a     throw new Obj
16860 65 63 74 44 69 73 70 6f 73 65 64 45 78 63 65 70  ectDisposedExcep
16870 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20  tion(..         
16880 20 20 20 20 20 20 20 20 20 20 20 74 79 70 65 6f             typeo
16890 66 28 52 65 67 69 73 74 72 79 4f 70 65 72 61 74  f(RegistryOperat
168a0 69 6f 6e 4c 69 73 74 29 2e 4e 61 6d 65 29 3b 0d  ionList).Name);.
168b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
168c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
168d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
168e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
168f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16900 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16910 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
16920 20 70 72 69 76 61 74 65 20 2f 2a 20 70 72 6f 74   private /* prot
16930 65 63 74 65 64 20 76 69 72 74 75 61 6c 20 2a 2f  ected virtual */
16940 20 76 6f 69 64 20 44 69 73 70 6f 73 65 28 0d 0a   void Dispose(..
16950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16960 62 6f 6f 6c 20 64 69 73 70 6f 73 69 6e 67 0d 0a  bool disposing..
16970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16980 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
16990 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
169a0 20 20 69 66 20 28 21 64 69 73 70 6f 73 65 64 29    if (!disposed)
169b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
169c0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
169d0 20 20 20 20 20 20 20 20 20 69 66 20 28 64 69 73           if (dis
169e0 70 6f 73 69 6e 67 29 0d 0a 20 20 20 20 20 20 20  posing)..       
169f0 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
16a00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16a10 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
16a20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16a30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 20 20  ////////////..  
16a40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16a50 20 20 20 20 20 20 2f 2f 20 64 69 73 70 6f 73 65        // dispose
16a60 20 6d 61 6e 61 67 65 64 20 72 65 73 6f 75 72 63   managed resourc
16a70 65 73 20 68 65 72 65 2e 2e 2e 0d 0a 20 20 20 20  es here.....    
16a80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16a90 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
16aa0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16ab0 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
16ac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16ad0 20 20 20 20 66 6f 72 65 61 63 68 20 28 52 65 67      foreach (Reg
16ae0 69 73 74 72 79 4f 70 65 72 61 74 69 6f 6e 20 6f  istryOperation o
16af0 70 65 72 61 74 69 6f 6e 20 69 6e 20 74 68 69 73  peration in this
16b00 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
16b10 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
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 69 66 20 28 6f 70            if (op
16b40 65 72 61 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29  eration == null)
16b50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
16b60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16b70 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 0d 0a 20    continue;.... 
16b80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16b90 20 20 20 20 20 20 20 20 20 20 20 6f 70 65 72 61             opera
16ba0 74 69 6f 6e 2e 44 69 73 70 6f 73 65 28 29 3b 0d  tion.Dispose();.
16bb0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
16bc0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
16bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16be0 20 20 20 20 20 20 43 6c 65 61 72 28 29 3b 0d 0a        Clear();..
16bf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16c00 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
16c10 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f               ///
16c20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16c30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16c40 2f 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ///..           
16c50 20 20 20 20 20 20 20 20 20 2f 2f 20 72 65 6c 65           // rele
16c60 61 73 65 20 75 6e 6d 61 6e 61 67 65 64 20 72 65  ase unmanaged re
16c70 73 6f 75 72 63 65 73 20 68 65 72 65 2e 2e 2e 0d  sources here....
16c80 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
16c90 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
16ca0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16cb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
16cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16cd0 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
16ce0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f             // NO
16cf0 54 45 3a 20 54 68 69 73 20 6f 62 6a 65 63 74 20  TE: This object 
16d00 69 73 20 6e 6f 77 20 64 69 73 70 6f 73 65 64 2e  is now disposed.
16d10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
16d20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
16d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 69                di
16d40 73 70 6f 73 65 64 20 3d 20 74 72 75 65 3b 0d 0a  sposed = true;..
16d50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16d60 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
16d70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 65  ..            #e
16d80 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20  ndregion....    
16d90 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
16da0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16db0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16dc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16dd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
16de0 20 20 20 20 20 20 20 20 20 20 20 23 72 65 67 69             #regi
16df0 6f 6e 20 49 44 69 73 70 6f 73 61 62 6c 65 20 4d  on IDisposable M
16e00 65 6d 62 65 72 73 0d 0a 20 20 20 20 20 20 20 20  embers..        
16e10 20 20 20 20 70 75 62 6c 69 63 20 76 6f 69 64 20      public void 
16e20 44 69 73 70 6f 73 65 28 29 0d 0a 20 20 20 20 20  Dispose()..     
16e30 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
16e40 20 20 20 20 20 20 20 20 20 20 44 69 73 70 6f 73            Dispos
16e50 65 28 74 72 75 65 29 3b 0d 0a 20 20 20 20 20 20  e(true);..      
16e60 20 20 20 20 20 20 20 20 20 20 47 43 2e 53 75 70            GC.Sup
16e70 70 72 65 73 73 46 69 6e 61 6c 69 7a 65 28 74 68  pressFinalize(th
16e80 69 73 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  is);..          
16e90 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
16ea0 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20   #endregion.... 
16eb0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
16ec0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16ed0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16ee0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16ef0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
16f00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 72  ..            #r
16f10 65 67 69 6f 6e 20 44 65 73 74 72 75 63 74 6f 72  egion Destructor
16f20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7e 52  ..            ~R
16f30 65 67 69 73 74 72 79 4f 70 65 72 61 74 69 6f 6e  egistryOperation
16f40 4c 69 73 74 28 29 0d 0a 20 20 20 20 20 20 20 20  List()..        
16f50 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
16f60 20 20 20 20 20 20 20 44 69 73 70 6f 73 65 28 66         Dispose(f
16f70 61 6c 73 65 29 3b 0d 0a 20 20 20 20 20 20 20 20  alse);..        
16f80 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
16f90 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 20     #endregion.. 
16fa0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
16fb0 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a    #endregion....
16fc0 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
16fd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16fe0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16ff0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17000 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
17010 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69  ...        #regi
17020 6f 6e 20 52 65 67 69 73 74 72 79 4f 70 65 72 61  on RegistryOpera
17030 74 69 6f 6e 20 43 6c 61 73 73 0d 0a 20 20 20 20  tion Class..    
17040 20 20 20 20 70 72 69 76 61 74 65 20 73 65 61 6c      private seal
17050 65 64 20 63 6c 61 73 73 20 52 65 67 69 73 74 72  ed class Registr
17060 79 4f 70 65 72 61 74 69 6f 6e 0d 0a 20 20 20 20  yOperation..    
17070 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
17080 20 20 20 23 72 65 67 69 6f 6e 20 50 72 69 76 61     #region Priva
17090 74 65 20 43 6f 6e 73 74 61 6e 74 73 0d 0a 20 20  te Constants..  
170a0 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
170b0 65 20 63 6f 6e 73 74 20 63 68 61 72 20 46 69 65  e const char Fie
170c0 6c 64 44 65 6c 69 6d 69 74 65 72 20 3d 20 27 5c  ldDelimiter = '\
170d0 74 27 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  t';..           
170e0 20 70 72 69 76 61 74 65 20 63 6f 6e 73 74 20 73   private const s
170f0 74 72 69 6e 67 20 4c 69 73 74 45 6c 65 6d 65 6e  tring ListElemen
17100 74 44 65 6c 69 6d 69 74 65 72 20 3d 20 22 2c 20  tDelimiter = ", 
17110 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ";..            
17120 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20  #endregion....  
17130 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
17140 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17150 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17160 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17170 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
17180 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 72 65  .            #re
17190 67 69 6f 6e 20 50 75 62 6c 69 63 20 43 6f 6e 73  gion Public Cons
171a0 74 72 75 63 74 6f 72 73 0d 0a 20 20 20 20 20 20  tructors..      
171b0 20 20 20 20 20 20 70 75 62 6c 69 63 20 52 65 67        public Reg
171c0 69 73 74 72 79 4f 70 65 72 61 74 69 6f 6e 28 0d  istryOperation(.
171d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
171e0 20 73 74 72 69 6e 67 20 6d 65 74 68 6f 64 4e 61   string methodNa
171f0 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me,..           
17200 20 20 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72       MockRegistr
17210 79 4b 65 79 20 6b 65 79 2c 0d 0a 20 20 20 20 20  yKey key,..     
17220 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
17230 67 20 73 75 62 4b 65 79 4e 61 6d 65 2c 0d 0a 20  g subKeyName,.. 
17240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
17250 74 72 69 6e 67 20 76 61 6c 75 65 4e 61 6d 65 2c  tring valueName,
17260 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
17270 20 20 6f 62 6a 65 63 74 20 76 61 6c 75 65 0d 0a    object value..
17280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17290 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
172a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
172b0 20 20 74 68 69 73 2e 6d 65 74 68 6f 64 4e 61 6d    this.methodNam
172c0 65 20 3d 20 6d 65 74 68 6f 64 4e 61 6d 65 3b 0d  e = methodName;.
172d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
172e0 20 74 68 69 73 2e 73 75 62 4b 65 79 4e 61 6d 65   this.subKeyName
172f0 20 3d 20 73 75 62 4b 65 79 4e 61 6d 65 3b 0d 0a   = subKeyName;..
17300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17310 74 68 69 73 2e 76 61 6c 75 65 4e 61 6d 65 20 3d  this.valueName =
17320 20 76 61 6c 75 65 4e 61 6d 65 3b 0d 0a 20 20 20   valueName;..   
17330 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69               thi
17340 73 2e 76 61 6c 75 65 20 3d 20 76 61 6c 75 65 3b  s.value = value;
17350 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
17360 20 20 20 20 53 65 74 4b 65 79 28 6b 65 79 29 3b      SetKey(key);
17370 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
17380 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e  .            #en
17390 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20  dregion....     
173a0 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
173b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
173c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
173d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
173e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
173f0 20 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f            #regio
17400 6e 20 50 72 69 76 61 74 65 20 4d 65 74 68 6f 64  n Private Method
17410 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  s..            p
17420 72 69 76 61 74 65 20 76 6f 69 64 20 53 65 74 4b  rivate void SetK
17430 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ey(..           
17440 20 20 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72       MockRegistr
17450 79 4b 65 79 20 6b 65 79 0d 0a 20 20 20 20 20 20  yKey key..      
17460 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
17470 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
17480 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
17490 6b 65 79 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20  key != null)..  
174a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
174b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
174c0 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
174d0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
174e0 4e 4f 54 45 3a 20 4d 61 6b 65 20 73 75 72 65 20  NOTE: Make sure 
174f0 74 68 69 73 20 63 6f 70 79 20 6f 66 20 74 68 65  this copy of the
17500 20 72 6f 6f 74 20 72 65 67 69 73 74 72 79 20 6b   root registry k
17510 65 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ey..            
17520 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
17530 20 63 61 6e 6e 6f 74 20 62 65 20 75 73 65 64 20   cannot be used 
17540 74 6f 20 61 63 63 69 64 65 6e 74 61 6c 6c 79 20  to accidentally 
17550 6d 61 6b 65 20 72 65 67 69 73 74 72 79 0d 0a 20  make registry.. 
17560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17570 20 20 20 2f 2f 20 20 20 20 20 20 20 63 68 61 6e     //       chan
17580 67 65 73 2e 20 20 41 6c 73 6f 2c 20 70 72 65 76  ges.  Also, prev
17590 65 6e 74 20 74 68 69 73 20 4d 6f 63 6b 52 65 67  ent this MockReg
175a0 69 73 74 72 79 4b 65 79 0d 0a 20 20 20 20 20 20  istryKey..      
175b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
175c0 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 66 72         object fr
175d0 6f 6d 20 63 6c 6f 73 69 6e 67 20 69 74 73 20 75  om closing its u
175e0 6e 64 65 72 6c 79 69 6e 67 20 72 65 67 69 73 74  nderlying regist
175f0 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ry..            
17600 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
17610 20 6b 65 79 20 61 73 20 77 65 20 77 69 6c 6c 20   key as we will 
17620 6e 65 65 64 20 69 74 20 6c 61 74 65 72 2e 20 20  need it later.  
17630 54 68 69 73 20 69 6e 73 74 61 6e 63 65 0d 0a 20  This instance.. 
17640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17650 20 20 20 2f 2f 20 20 20 20 20 20 20 77 69 6c 6c     //       will
17660 20 63 6c 6f 73 65 20 69 74 2e 0d 0a 20 20 20 20   close it...    
17670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17680 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
17690 20 20 20 20 20 20 20 20 74 68 69 73 2e 6b 65 79          this.key
176a0 20 3d 20 6b 65 79 2e 43 6c 6f 6e 65 28 74 72 75   = key.Clone(tru
176b0 65 2c 20 74 72 75 65 2c 20 74 72 75 65 29 3b 0d  e, true, true);.
176c0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
176d0 20 20 20 20 20 20 20 6b 65 79 2e 44 69 73 61 62         key.Disab
176e0 6c 65 43 6c 6f 73 65 28 29 3b 0d 0a 20 20 20 20  leClose();..    
176f0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
17700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
17710 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  lse..           
17720 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
17730 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73              this
17740 2e 6b 65 79 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20  .key = null;..  
17750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
17760 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
17770 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e 64              #end
17780 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20  region....      
17790 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
177a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
177b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
177c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
177d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
177e0 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e           #region
177f0 20 50 75 62 6c 69 63 20 50 72 6f 70 65 72 74 69   Public Properti
17800 65 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  es..            
17810 70 72 69 76 61 74 65 20 73 74 72 69 6e 67 20 6d  private string m
17820 65 74 68 6f 64 4e 61 6d 65 3b 0d 0a 20 20 20 20  ethodName;..    
17830 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73          public s
17840 74 72 69 6e 67 20 4d 65 74 68 6f 64 4e 61 6d 65  tring MethodName
17850 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
17860 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
17870 20 67 65 74 20 7b 20 43 68 65 63 6b 44 69 73 70   get { CheckDisp
17880 6f 73 65 64 28 29 3b 20 72 65 74 75 72 6e 20 6d  osed(); return m
17890 65 74 68 6f 64 4e 61 6d 65 3b 20 7d 0d 0a 20 20  ethodName; }..  
178a0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
178b0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
178c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
178d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
178e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
178f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
17900 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
17910 69 76 61 74 65 20 4d 6f 63 6b 52 65 67 69 73 74  ivate MockRegist
17920 72 79 4b 65 79 20 6b 65 79 3b 0d 0a 20 20 20 20  ryKey key;..    
17930 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 4d          public M
17940 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 4b  ockRegistryKey K
17950 65 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ey..            
17960 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
17970 20 20 20 67 65 74 20 7b 20 43 68 65 63 6b 44 69     get { CheckDi
17980 73 70 6f 73 65 64 28 29 3b 20 72 65 74 75 72 6e  sposed(); return
17990 20 6b 65 79 3b 20 7d 0d 0a 20 20 20 20 20 20 20   key; }..       
179a0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
179b0 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
179c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
179d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
179e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
179f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
17a00 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65           private
17a10 20 73 74 72 69 6e 67 20 73 75 62 4b 65 79 4e 61   string subKeyNa
17a20 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me;..           
17a30 20 70 75 62 6c 69 63 20 73 74 72 69 6e 67 20 53   public string S
17a40 75 62 4b 65 79 4e 61 6d 65 0d 0a 20 20 20 20 20  ubKeyName..     
17a50 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
17a60 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20            get { 
17a70 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b  CheckDisposed();
17a80 20 72 65 74 75 72 6e 20 73 75 62 4b 65 79 4e 61   return subKeyNa
17a90 6d 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  me; }..         
17aa0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
17ab0 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
17ac0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17ad0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17ae0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17af0 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
17b00 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
17b10 74 72 69 6e 67 20 76 61 6c 75 65 4e 61 6d 65 3b  tring valueName;
17b20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
17b30 62 6c 69 63 20 73 74 72 69 6e 67 20 56 61 6c 75  blic string Valu
17b40 65 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 20  eName..         
17b50 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
17b60 20 20 20 20 20 20 67 65 74 20 7b 20 43 68 65 63        get { Chec
17b70 6b 44 69 73 70 6f 73 65 64 28 29 3b 20 72 65 74  kDisposed(); ret
17b80 75 72 6e 20 76 61 6c 75 65 4e 61 6d 65 3b 20 7d  urn valueName; }
17b90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
17ba0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
17bb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17bc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17bd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17be0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17bf0 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
17c00 20 20 70 72 69 76 61 74 65 20 6f 62 6a 65 63 74    private object
17c10 20 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20   value;..       
17c20 20 20 20 20 20 70 75 62 6c 69 63 20 6f 62 6a 65       public obje
17c30 63 74 20 56 61 6c 75 65 0d 0a 20 20 20 20 20 20  ct Value..      
17c40 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
17c50 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 43           get { C
17c60 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 20  heckDisposed(); 
17c70 72 65 74 75 72 6e 20 76 61 6c 75 65 3b 20 7d 0d  return value; }.
17c80 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
17c90 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e 64              #end
17ca0 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20  region....      
17cb0 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
17cc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17cd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17ce0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17cf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
17d00 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e           #region
17d10 20 50 75 62 6c 69 63 20 53 74 61 74 69 63 20 4d   Public Static M
17d20 65 74 68 6f 64 73 0d 0a 20 20 20 20 20 20 20 20  ethods..        
17d30 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69      public stati
17d40 63 20 73 74 72 69 6e 67 20 47 65 74 48 65 61 64  c string GetHead
17d50 65 72 4c 69 6e 65 28 29 0d 0a 20 20 20 20 20 20  erLine()..      
17d60 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
17d70 20 20 20 20 20 20 20 20 20 53 74 72 69 6e 67 42           StringB
17d80 75 69 6c 64 65 72 20 62 75 69 6c 64 65 72 20 3d  uilder builder =
17d90 20 6e 65 77 20 53 74 72 69 6e 67 42 75 69 6c 64   new StringBuild
17da0 65 72 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  er();....       
17db0 20 20 20 20 20 20 20 20 20 62 75 69 6c 64 65 72           builder
17dc0 2e 41 70 70 65 6e 64 28 22 4d 65 74 68 6f 64 4e  .Append("MethodN
17dd0 61 6d 65 22 29 3b 0d 0a 20 20 20 20 20 20 20 20  ame");..        
17de0 20 20 20 20 20 20 20 20 62 75 69 6c 64 65 72 2e          builder.
17df0 41 70 70 65 6e 64 28 46 69 65 6c 64 44 65 6c 69  Append(FieldDeli
17e00 6d 69 74 65 72 29 3b 0d 0a 20 20 20 20 20 20 20  miter);..       
17e10 20 20 20 20 20 20 20 20 20 62 75 69 6c 64 65 72           builder
17e20 2e 41 70 70 65 6e 64 28 22 4b 65 79 22 29 3b 0d  .Append("Key");.
17e30 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
17e40 20 62 75 69 6c 64 65 72 2e 41 70 70 65 6e 64 28   builder.Append(
17e50 46 69 65 6c 64 44 65 6c 69 6d 69 74 65 72 29 3b  FieldDelimiter);
17e60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
17e70 20 20 62 75 69 6c 64 65 72 2e 41 70 70 65 6e 64    builder.Append
17e80 28 22 53 75 62 4b 65 79 4e 61 6d 65 22 29 3b 0d  ("SubKeyName");.
17e90 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
17ea0 20 62 75 69 6c 64 65 72 2e 41 70 70 65 6e 64 28   builder.Append(
17eb0 46 69 65 6c 64 44 65 6c 69 6d 69 74 65 72 29 3b  FieldDelimiter);
17ec0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
17ed0 20 20 62 75 69 6c 64 65 72 2e 41 70 70 65 6e 64    builder.Append
17ee0 28 22 56 61 6c 75 65 4e 61 6d 65 22 29 3b 0d 0a  ("ValueName");..
17ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17f00 62 75 69 6c 64 65 72 2e 41 70 70 65 6e 64 28 46  builder.Append(F
17f10 69 65 6c 64 44 65 6c 69 6d 69 74 65 72 29 3b 0d  ieldDelimiter);.
17f20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
17f30 20 62 75 69 6c 64 65 72 2e 41 70 70 65 6e 64 28   builder.Append(
17f40 22 56 61 6c 75 65 22 29 3b 0d 0a 0d 0a 20 20 20  "Value");....   
17f50 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
17f60 75 72 6e 20 62 75 69 6c 64 65 72 2e 54 6f 53 74  urn builder.ToSt
17f70 72 69 6e 67 28 29 3b 0d 0a 20 20 20 20 20 20 20  ring();..       
17f80 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
17f90 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
17fa0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
17fb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17fc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17fd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17fe0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17ff0 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
18000 20 23 72 65 67 69 6f 6e 20 53 79 73 74 65 6d 2e   #region System.
18010 4f 62 6a 65 63 74 20 4f 76 65 72 72 69 64 65 73  Object Overrides
18020 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
18030 62 6c 69 63 20 6f 76 65 72 72 69 64 65 20 73 74  blic override st
18040 72 69 6e 67 20 54 6f 53 74 72 69 6e 67 28 29 0d  ring ToString().
18050 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
18060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18070 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b  CheckDisposed();
18080 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
18090 20 20 20 20 53 74 72 69 6e 67 42 75 69 6c 64 65      StringBuilde
180a0 72 20 62 75 69 6c 64 65 72 20 3d 20 6e 65 77 20  r builder = new 
180b0 53 74 72 69 6e 67 42 75 69 6c 64 65 72 28 29 3b  StringBuilder();
180c0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
180d0 20 20 20 20 62 75 69 6c 64 65 72 2e 41 70 70 65      builder.Appe
180e0 6e 64 28 46 6f 72 44 69 73 70 6c 61 79 28 6d 65  nd(ForDisplay(me
180f0 74 68 6f 64 4e 61 6d 65 29 29 3b 0d 0a 20 20 20  thodName));..   
18100 20 20 20 20 20 20 20 20 20 20 20 20 20 62 75 69               bui
18110 6c 64 65 72 2e 41 70 70 65 6e 64 28 46 69 65 6c  lder.Append(Fiel
18120 64 44 65 6c 69 6d 69 74 65 72 29 3b 0d 0a 20 20  dDelimiter);..  
18130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 75                bu
18140 69 6c 64 65 72 2e 41 70 70 65 6e 64 28 46 6f 72  ilder.Append(For
18150 44 69 73 70 6c 61 79 28 6b 65 79 29 29 3b 0d 0a  Display(key));..
18160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18170 62 75 69 6c 64 65 72 2e 41 70 70 65 6e 64 28 46  builder.Append(F
18180 69 65 6c 64 44 65 6c 69 6d 69 74 65 72 29 3b 0d  ieldDelimiter);.
18190 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
181a0 20 62 75 69 6c 64 65 72 2e 41 70 70 65 6e 64 28   builder.Append(
181b0 46 6f 72 44 69 73 70 6c 61 79 28 73 75 62 4b 65  ForDisplay(subKe
181c0 79 4e 61 6d 65 29 29 3b 0d 0a 20 20 20 20 20 20  yName));..      
181d0 20 20 20 20 20 20 20 20 20 20 62 75 69 6c 64 65            builde
181e0 72 2e 41 70 70 65 6e 64 28 46 69 65 6c 64 44 65  r.Append(FieldDe
181f0 6c 69 6d 69 74 65 72 29 3b 0d 0a 20 20 20 20 20  limiter);..     
18200 20 20 20 20 20 20 20 20 20 20 20 62 75 69 6c 64             build
18210 65 72 2e 41 70 70 65 6e 64 28 46 6f 72 44 69 73  er.Append(ForDis
18220 70 6c 61 79 28 76 61 6c 75 65 4e 61 6d 65 29 29  play(valueName))
18230 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
18240 20 20 20 62 75 69 6c 64 65 72 2e 41 70 70 65 6e     builder.Appen
18250 64 28 46 69 65 6c 64 44 65 6c 69 6d 69 74 65 72  d(FieldDelimiter
18260 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
18270 20 20 20 20 20 20 62 75 69 6c 64 65 72 2e 41 70        builder.Ap
18280 70 65 6e 64 28 46 6f 72 44 69 73 70 6c 61 79 28  pend(ForDisplay(
18290 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 2e  MockRegistryKey.
182a0 56 61 6c 75 65 54 6f 53 74 72 69 6e 67 28 0d 0a  ValueToString(..
182b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
182c0 20 20 20 20 76 61 6c 75 65 2c 20 4c 69 73 74 45      value, ListE
182d0 6c 65 6d 65 6e 74 44 65 6c 69 6d 69 74 65 72 2c  lementDelimiter,
182e0 20 44 69 73 70 6c 61 79 4e 75 6c 6c 29 29 29 3b   DisplayNull)));
182f0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
18300 20 20 20 20 72 65 74 75 72 6e 20 62 75 69 6c 64      return build
18310 65 72 2e 54 6f 53 74 72 69 6e 67 28 29 3b 0d 0a  er.ToString();..
18320 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
18330 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
18340 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18350 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18360 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18370 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18380 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
18390 70 75 62 6c 69 63 20 6f 76 65 72 72 69 64 65 20  public override 
183a0 62 6f 6f 6c 20 45 71 75 61 6c 73 28 0d 0a 20 20  bool Equals(..  
183b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6f 62                ob
183c0 6a 65 63 74 20 6f 62 6a 0d 0a 20 20 20 20 20 20  ject obj..      
183d0 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
183e0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
183f0 20 20 20 20 20 20 20 20 20 20 20 20 43 68 65 63              Chec
18400 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 0d 0a  kDisposed();....
18410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18420 52 65 67 69 73 74 72 79 4f 70 65 72 61 74 69 6f  RegistryOperatio
18430 6e 20 6f 70 65 72 61 74 69 6f 6e 20 3d 20 6f 62  n operation = ob
18440 6a 20 61 73 20 52 65 67 69 73 74 72 79 4f 70 65  j as RegistryOpe
18450 72 61 74 69 6f 6e 3b 0d 0a 0d 0a 20 20 20 20 20  ration;....     
18460 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6f             if (o
18470 70 65 72 61 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c  peration == null
18480 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
18490 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
184a0 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  lse;....        
184b0 20 20 20 20 20 20 20 20 69 66 20 28 21 53 74 72          if (!Str
184c0 69 6e 67 2e 45 71 75 61 6c 73 28 6f 70 65 72 61  ing.Equals(opera
184d0 74 69 6f 6e 2e 6d 65 74 68 6f 64 4e 61 6d 65 2c  tion.methodName,
184e0 20 6d 65 74 68 6f 64 4e 61 6d 65 29 29 0d 0a 20   methodName)).. 
184f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18500 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
18510 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
18520 20 20 20 20 69 66 20 28 21 4d 6f 63 6b 52 65 67      if (!MockReg
18530 69 73 74 72 79 4b 65 79 2e 45 71 75 61 6c 73 28  istryKey.Equals(
18540 6f 70 65 72 61 74 69 6f 6e 2e 6b 65 79 2c 20 6b  operation.key, k
18550 65 79 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ey))..          
18560 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
18570 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20   false;....     
18580 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21             if (!
18590 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 2e  MockRegistryKey.
185a0 4e 61 6d 65 45 71 75 61 6c 73 28 0d 0a 20 20 20  NameEquals(..   
185b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
185c0 20 20 20 20 20 6f 70 65 72 61 74 69 6f 6e 2e 73       operation.s
185d0 75 62 4b 65 79 4e 61 6d 65 2c 20 73 75 62 4b 65  ubKeyName, subKe
185e0 79 4e 61 6d 65 29 29 0d 0a 20 20 20 20 20 20 20  yName))..       
185f0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
18600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18610 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20  return false;.. 
18620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
18630 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
18640 20 20 20 20 69 66 20 28 21 53 74 72 69 6e 67 2e      if (!String.
18650 45 71 75 61 6c 73 28 6f 70 65 72 61 74 69 6f 6e  Equals(operation
18660 2e 76 61 6c 75 65 4e 61 6d 65 2c 20 76 61 6c 75  .valueName, valu
18670 65 4e 61 6d 65 29 29 0d 0a 20 20 20 20 20 20 20  eName))..       
18680 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
18690 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20  urn false;....  
186a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
186b0 20 28 21 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b   (!MockRegistryK
186c0 65 79 2e 56 61 6c 75 65 45 71 75 61 6c 73 28 6f  ey.ValueEquals(o
186d0 70 65 72 61 74 69 6f 6e 2e 76 61 6c 75 65 2c 20  peration.value, 
186e0 76 61 6c 75 65 29 29 0d 0a 20 20 20 20 20 20 20  value))..       
186f0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
18700 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20  urn false;....  
18710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
18720 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20  turn true;..    
18730 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
18740 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
18750 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18760 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18770 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18780 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
18790 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
187a0 69 63 20 6f 76 65 72 72 69 64 65 20 69 6e 74 20  ic override int 
187b0 47 65 74 48 61 73 68 43 6f 64 65 28 29 0d 0a 20  GetHashCode().. 
187c0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
187d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43 68                Ch
187e0 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a  eckDisposed();..
187f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
18800 20 20 69 6e 74 20 72 65 73 75 6c 74 20 3d 20 30    int result = 0
18810 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
18820 20 20 20 20 20 69 66 20 28 6d 65 74 68 6f 64 4e       if (methodN
18830 61 6d 65 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20  ame != null)..  
18840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18850 20 20 72 65 73 75 6c 74 20 5e 3d 20 6d 65 74 68    result ^= meth
18860 6f 64 4e 61 6d 65 2e 47 65 74 48 61 73 68 43 6f  odName.GetHashCo
18870 64 65 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  de();....       
18880 20 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 20           result 
18890 5e 3d 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b  ^= MockRegistryK
188a0 65 79 2e 47 65 74 48 61 73 68 43 6f 64 65 28 6b  ey.GetHashCode(k
188b0 65 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ey);....        
188c0 20 20 20 20 20 20 20 20 69 66 20 28 73 75 62 4b          if (subK
188d0 65 79 4e 61 6d 65 20 21 3d 20 6e 75 6c 6c 29 0d  eyName != null).
188e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
188f0 20 20 20 20 20 72 65 73 75 6c 74 20 5e 3d 20 73       result ^= s
18900 75 62 4b 65 79 4e 61 6d 65 2e 47 65 74 48 61 73  ubKeyName.GetHas
18910 68 43 6f 64 65 28 29 3b 0d 0a 0d 0a 20 20 20 20  hCode();....    
18920 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
18930 76 61 6c 75 65 4e 61 6d 65 20 21 3d 20 6e 75 6c  valueName != nul
18940 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
18950 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 20 5e          result ^
18960 3d 20 76 61 6c 75 65 4e 61 6d 65 2e 47 65 74 48  = valueName.GetH
18970 61 73 68 43 6f 64 65 28 29 3b 0d 0a 0d 0a 20 20  ashCode();....  
18980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
18990 73 75 6c 74 20 5e 3d 20 4d 6f 63 6b 52 65 67 69  sult ^= MockRegi
189a0 73 74 72 79 4b 65 79 2e 56 61 6c 75 65 48 61 73  stryKey.ValueHas
189b0 68 43 6f 64 65 28 76 61 6c 75 65 29 3b 0d 0a 0d  hCode(value);...
189c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
189d0 20 72 65 74 75 72 6e 20 72 65 73 75 6c 74 3b 0d   return result;.
189e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
189f0 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e 64              #end
18a00 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20  region....      
18a10 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
18a20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18a30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18a40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18a50 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
18a60 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e           #region
18a70 20 49 44 69 73 70 6f 73 61 62 6c 65 20 22 50 61   IDisposable "Pa
18a80 74 74 65 72 6e 22 20 4d 65 6d 62 65 72 73 0d 0a  ttern" Members..
18a90 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76              priv
18aa0 61 74 65 20 62 6f 6f 6c 20 64 69 73 70 6f 73 65  ate bool dispose
18ab0 64 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  d;..            
18ac0 70 72 69 76 61 74 65 20 76 6f 69 64 20 43 68 65  private void Che
18ad0 63 6b 44 69 73 70 6f 73 65 64 28 29 20 2f 2a 20  ckDisposed() /* 
18ae0 74 68 72 6f 77 20 2a 2f 0d 0a 20 20 20 20 20 20  throw */..      
18af0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
18b00 20 20 20 20 20 20 20 20 20 69 66 20 28 21 64 69           if (!di
18b10 73 70 6f 73 65 64 29 0d 0a 20 20 20 20 20 20 20  sposed)..       
18b20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
18b30 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  urn;....        
18b40 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65          throw ne
18b50 77 20 4f 62 6a 65 63 74 44 69 73 70 6f 73 65 64  w ObjectDisposed
18b60 45 78 63 65 70 74 69 6f 6e 28 0d 0a 20 20 20 20  Exception(..    
18b70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18b80 74 79 70 65 6f 66 28 52 65 67 69 73 74 72 79 4f  typeof(RegistryO
18b90 70 65 72 61 74 69 6f 6e 29 2e 4e 61 6d 65 29 3b  peration).Name);
18ba0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
18bb0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
18bc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18bd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18be0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18bf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18c00 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
18c10 20 20 70 72 69 76 61 74 65 20 2f 2a 20 70 72 6f    private /* pro
18c20 74 65 63 74 65 64 20 76 69 72 74 75 61 6c 20 2a  tected virtual *
18c30 2f 20 76 6f 69 64 20 44 69 73 70 6f 73 65 28 0d  / void Dispose(.
18c40 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
18c50 20 62 6f 6f 6c 20 64 69 73 70 6f 73 69 6e 67 0d   bool disposing.
18c60 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
18c70 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   )..            
18c80 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
18c90 20 20 20 69 66 20 28 21 64 69 73 70 6f 73 65 64     if (!disposed
18ca0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
18cb0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
18cc0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 64 69            if (di
18cd0 73 70 6f 73 69 6e 67 29 0d 0a 20 20 20 20 20 20  sposing)..      
18ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
18cf0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
18d00 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
18d10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18d20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 20  /////////////.. 
18d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18d40 20 20 20 20 20 20 20 2f 2f 20 64 69 73 70 6f 73         // dispos
18d50 65 20 6d 61 6e 61 67 65 64 20 72 65 73 6f 75 72  e managed resour
18d60 63 65 73 20 68 65 72 65 2e 2e 2e 0d 0a 20 20 20  ces here.....   
18d70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18d80 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
18d90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18da0 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
18db0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18dc0 20 20 20 20 20 69 66 20 28 6b 65 79 20 21 3d 20       if (key != 
18dd0 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
18de0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
18df0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
18e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6b 65                ke
18e10 79 2e 43 6c 6f 73 65 28 29 3b 0d 0a 20 20 20 20  y.Close();..    
18e20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18e30 20 20 20 20 20 20 20 20 6b 65 79 20 3d 20 6e 75          key = nu
18e40 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll;..           
18e50 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
18e60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18e70 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
18e80 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f               ///
18e90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18ea0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18eb0 2f 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ///..           
18ec0 20 20 20 20 20 20 20 20 20 2f 2f 20 72 65 6c 65           // rele
18ed0 61 73 65 20 75 6e 6d 61 6e 61 67 65 64 20 72 65  ase unmanaged re
18ee0 73 6f 75 72 63 65 73 20 68 65 72 65 2e 2e 2e 0d  sources here....
18ef0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
18f00 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
18f10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18f20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
18f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18f40 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
18f50 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f             // NO
18f60 54 45 3a 20 54 68 69 73 20 6f 62 6a 65 63 74 20  TE: This object 
18f70 69 73 20 6e 6f 77 20 64 69 73 70 6f 73 65 64 2e  is now disposed.
18f80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
18f90 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
18fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 69                di
18fb0 73 70 6f 73 65 64 20 3d 20 74 72 75 65 3b 0d 0a  sposed = true;..
18fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18fd0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
18fe0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 65  ..            #e
18ff0 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20  ndregion....    
19000 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
19010 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19020 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19030 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19040 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
19050 20 20 20 20 20 20 20 20 20 20 20 23 72 65 67 69             #regi
19060 6f 6e 20 49 44 69 73 70 6f 73 61 62 6c 65 20 4d  on IDisposable M
19070 65 6d 62 65 72 73 0d 0a 20 20 20 20 20 20 20 20  embers..        
19080 20 20 20 20 70 75 62 6c 69 63 20 76 6f 69 64 20      public void 
19090 44 69 73 70 6f 73 65 28 29 0d 0a 20 20 20 20 20  Dispose()..     
190a0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
190b0 20 20 20 20 20 20 20 20 20 20 44 69 73 70 6f 73            Dispos
190c0 65 28 74 72 75 65 29 3b 0d 0a 20 20 20 20 20 20  e(true);..      
190d0 20 20 20 20 20 20 20 20 20 20 47 43 2e 53 75 70            GC.Sup
190e0 70 72 65 73 73 46 69 6e 61 6c 69 7a 65 28 74 68  pressFinalize(th
190f0 69 73 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  is);..          
19100 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
19110 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20   #endregion.... 
19120 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
19130 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19140 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19150 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19160 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
19170 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 72  ..            #r
19180 65 67 69 6f 6e 20 44 65 73 74 72 75 63 74 6f 72  egion Destructor
19190 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7e 52  ..            ~R
191a0 65 67 69 73 74 72 79 4f 70 65 72 61 74 69 6f 6e  egistryOperation
191b0 28 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ()..            
191c0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
191d0 20 20 20 44 69 73 70 6f 73 65 28 66 61 6c 73 65     Dispose(false
191e0 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
191f0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  }..            #
19200 65 6e 64 72 65 67 69 6f 6e 0d 0a 20 20 20 20 20  endregion..     
19210 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65     }..        #e
19220 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20  ndregion....    
19230 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
19240 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19250 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19260 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19270 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
19280 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 53         #region S
19290 74 72 69 6e 67 4c 69 73 74 20 43 6c 61 73 73 0d  tringList Class.
192a0 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65  .        private
192b0 20 73 65 61 6c 65 64 20 63 6c 61 73 73 20 53 74   sealed class St
192c0 72 69 6e 67 4c 69 73 74 20 3a 20 4c 69 73 74 3c  ringList : List<
192d0 73 74 72 69 6e 67 3e 0d 0a 20 20 20 20 20 20 20  string>..       
192e0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
192f0 70 75 62 6c 69 63 20 53 74 72 69 6e 67 4c 69 73  public StringLis
19300 74 28 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  t()..           
19310 20 20 20 20 20 3a 20 62 61 73 65 28 29 0d 0a 20       : base().. 
19320 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
19330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
19340 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20   do nothing...  
19350 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
19360 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
19370 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19380 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19390 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
193a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
193b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
193c0 62 6c 69 63 20 53 74 72 69 6e 67 4c 69 73 74 28  blic StringList(
193d0 49 45 6e 75 6d 65 72 61 62 6c 65 3c 73 74 72 69  IEnumerable<stri
193e0 6e 67 3e 20 63 6f 6c 6c 65 63 74 69 6f 6e 29 0d  ng> collection).
193f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
19400 20 3a 20 62 61 73 65 28 63 6f 6c 6c 65 63 74 69   : base(collecti
19410 6f 6e 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  on)..           
19420 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
19430 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e      // do nothin
19440 67 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  g...            
19450 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  }..        }..  
19460 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
19470 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
19480 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19490 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
194a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
194b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
194c0 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23  ///....        #
194d0 72 65 67 69 6f 6e 20 53 74 72 69 6e 67 44 69 63  region StringDic
194e0 74 69 6f 6e 61 72 79 20 43 6c 61 73 73 0d 0a 20  tionary Class.. 
194f0 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
19500 65 61 6c 65 64 20 63 6c 61 73 73 20 53 74 72 69  ealed class Stri
19510 6e 67 44 69 63 74 69 6f 6e 61 72 79 20 3a 20 44  ngDictionary : D
19520 69 63 74 69 6f 6e 61 72 79 3c 73 74 72 69 6e 67  ictionary<string
19530 2c 20 73 74 72 69 6e 67 3e 0d 0a 20 20 20 20 20  , string>..     
19540 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
19550 20 20 70 75 62 6c 69 63 20 53 74 72 69 6e 67 44    public StringD
19560 69 63 74 69 6f 6e 61 72 79 28 29 0d 0a 20 20 20  ictionary()..   
19570 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
19580 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64              // d
19590 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20  o nothing...    
195a0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
195b0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65     }..        #e
195c0 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20  ndregion....    
195d0 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
195e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
195f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19600 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19610 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
19620 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 56         #region V
19630 65 72 73 69 6f 6e 4c 69 73 74 20 43 6c 61 73 73  ersionList Class
19640 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
19650 65 20 73 65 61 6c 65 64 20 63 6c 61 73 73 20 56  e sealed class V
19660 65 72 73 69 6f 6e 4c 69 73 74 20 3a 20 4c 69 73  ersionList : Lis
19670 74 3c 56 65 72 73 69 6f 6e 3e 0d 0a 20 20 20 20  t<Version>..    
19680 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
19690 20 20 20 70 75 62 6c 69 63 20 56 65 72 73 69 6f     public Versio
196a0 6e 4c 69 73 74 28 29 0d 0a 20 20 20 20 20 20 20  nList()..       
196b0 20 20 20 20 20 20 20 20 20 3a 20 62 61 73 65 28           : base(
196c0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
196d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
196e0 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e    // do nothing.
196f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
19700 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
19710 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19720 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19730 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19740 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19750 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
19760 20 20 70 75 62 6c 69 63 20 56 65 72 73 69 6f 6e    public Version
19770 4c 69 73 74 28 49 45 6e 75 6d 65 72 61 62 6c 65  List(IEnumerable
19780 3c 56 65 72 73 69 6f 6e 3e 20 63 6f 6c 6c 65 63  <Version> collec
19790 74 69 6f 6e 29 0d 0a 20 20 20 20 20 20 20 20 20  tion)..         
197a0 20 20 20 20 20 20 20 3a 20 62 61 73 65 28 63 6f         : base(co
197b0 6c 6c 65 63 74 69 6f 6e 29 0d 0a 20 20 20 20 20  llection)..     
197c0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
197d0 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20            // do 
197e0 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20  nothing...      
197f0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
19800 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64   }..        #end
19810 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20  region....      
19820 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
19830 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19840 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19850 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19860 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
19870 20 20 20 20 20 23 72 65 67 69 6f 6e 20 56 65 72       #region Ver
19880 73 69 6f 6e 4d 61 70 20 43 6c 61 73 73 0d 0a 20  sionMap Class.. 
19890 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
198a0 65 61 6c 65 64 20 63 6c 61 73 73 20 56 65 72 73  ealed class Vers
198b0 69 6f 6e 4d 61 70 20 3a 20 44 69 63 74 69 6f 6e  ionMap : Diction
198c0 61 72 79 3c 73 74 72 69 6e 67 2c 20 56 65 72 73  ary<string, Vers
198d0 69 6f 6e 4c 69 73 74 3e 0d 0a 20 20 20 20 20 20  ionList>..      
198e0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
198f0 20 70 75 62 6c 69 63 20 56 65 72 73 69 6f 6e 4d   public VersionM
19900 61 70 28 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ap()..          
19910 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
19920 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69       // do nothi
19930 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ng...           
19940 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20   }..        }.. 
19950 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f         #endregio
19960 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  n....        ///
19970 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19980 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19990 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
199a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
199b0 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
199c0 23 72 65 67 69 6f 6e 20 50 61 63 6b 61 67 65 20  #region Package 
199d0 43 6c 61 73 73 0d 0a 20 20 20 20 20 20 20 20 69  Class..        i
199e0 6e 74 65 72 6e 61 6c 20 73 65 61 6c 65 64 20 63  nternal sealed c
199f0 6c 61 73 73 20 50 61 63 6b 61 67 65 0d 0a 20 20  lass Package..  
19a00 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
19a10 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50 75 62       #region Pub
19a20 6c 69 63 20 43 6f 6e 73 74 72 75 63 74 6f 72 73  lic Constructors
19a30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
19a40 62 6c 69 63 20 50 61 63 6b 61 67 65 28 29 0d 0a  blic Package()..
19a50 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
19a60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
19a70 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20  / do nothing... 
19a80 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
19a90 20 20 20 20 20 20 20 20 20 20 23 65 6e 64 72 65            #endre
19aa0 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20  gion....        
19ab0 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
19ac0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19ad0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19ae0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19af0 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
19b00 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50         #region P
19b10 75 62 6c 69 63 20 50 72 6f 70 65 72 74 69 65 73  ublic Properties
19b20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
19b30 69 76 61 74 65 20 73 74 72 69 6e 67 20 70 72 6f  ivate string pro
19b40 76 69 64 65 72 49 6e 76 61 72 69 61 6e 74 4e 61  viderInvariantNa
19b50 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me;..           
19b60 20 70 75 62 6c 69 63 20 73 74 72 69 6e 67 20 50   public string P
19b70 72 6f 76 69 64 65 72 49 6e 76 61 72 69 61 6e 74  roviderInvariant
19b80 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 20 20  Name..          
19b90 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
19ba0 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72       get { retur
19bb0 6e 20 70 72 6f 76 69 64 65 72 49 6e 76 61 72 69  n providerInvari
19bc0 61 6e 74 4e 61 6d 65 3b 20 7d 0d 0a 20 20 20 20  antName; }..    
19bd0 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20              set 
19be0 7b 20 70 72 6f 76 69 64 65 72 49 6e 76 61 72 69  { providerInvari
19bf0 61 6e 74 4e 61 6d 65 20 3d 20 76 61 6c 75 65 3b  antName = value;
19c00 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
19c10 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
19c20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
19c30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19c40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19c50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19c60 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
19c70 20 20 20 20 70 72 69 76 61 74 65 20 73 74 72 69      private stri
19c80 6e 67 20 66 61 63 74 6f 72 79 54 79 70 65 4e 61  ng factoryTypeNa
19c90 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me;..           
19ca0 20 70 75 62 6c 69 63 20 73 74 72 69 6e 67 20 46   public string F
19cb0 61 63 74 6f 72 79 54 79 70 65 4e 61 6d 65 0d 0a  actoryTypeName..
19cc0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
19cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67                 g
19ce0 65 74 20 7b 20 72 65 74 75 72 6e 20 66 61 63 74  et { return fact
19cf0 6f 72 79 54 79 70 65 4e 61 6d 65 3b 20 7d 0d 0a  oryTypeName; }..
19d00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19d10 73 65 74 20 7b 20 66 61 63 74 6f 72 79 54 79 70  set { factoryTyp
19d20 65 4e 61 6d 65 20 3d 20 76 61 6c 75 65 3b 20 7d  eName = value; }
19d30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
19d40 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
19d50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19d60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19d70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19d80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19d90 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
19da0 20 20 70 72 69 76 61 74 65 20 41 73 73 65 6d 62    private Assemb
19db0 6c 79 4e 61 6d 65 20 70 72 6f 76 69 64 65 72 41  lyName providerA
19dc0 73 73 65 6d 62 6c 79 4e 61 6d 65 3b 0d 0a 20 20  ssemblyName;..  
19dd0 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
19de0 20 41 73 73 65 6d 62 6c 79 4e 61 6d 65 20 50 72   AssemblyName Pr
19df0 6f 76 69 64 65 72 41 73 73 65 6d 62 6c 79 4e 61  oviderAssemblyNa
19e00 6d 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  me..            
19e10 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
19e20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20     get { return 
19e30 70 72 6f 76 69 64 65 72 41 73 73 65 6d 62 6c 79  providerAssembly
19e40 4e 61 6d 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20  Name; }..       
19e50 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 70           set { p
19e60 72 6f 76 69 64 65 72 41 73 73 65 6d 62 6c 79 4e  roviderAssemblyN
19e70 61 6d 65 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a  ame = value; }..
19e80 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
19e90 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
19ea0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19eb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19ec0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19ed0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19ee0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
19ef0 70 72 69 76 61 74 65 20 41 73 73 65 6d 62 6c 79  private Assembly
19f00 4e 61 6d 65 20 64 65 73 69 67 6e 65 72 41 73 73  Name designerAss
19f10 65 6d 62 6c 79 4e 61 6d 65 3b 0d 0a 20 20 20 20  emblyName;..    
19f20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 41          public A
19f30 73 73 65 6d 62 6c 79 4e 61 6d 65 20 44 65 73 69  ssemblyName Desi
19f40 67 6e 65 72 41 73 73 65 6d 62 6c 79 4e 61 6d 65  gnerAssemblyName
19f50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
19f60 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
19f70 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 64 65   get { return de
19f80 73 69 67 6e 65 72 41 73 73 65 6d 62 6c 79 4e 61  signerAssemblyNa
19f90 6d 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  me; }..         
19fa0 20 20 20 20 20 20 20 73 65 74 20 7b 20 64 65 73         set { des
19fb0 69 67 6e 65 72 41 73 73 65 6d 62 6c 79 4e 61 6d  ignerAssemblyNam
19fc0 65 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20  e = value; }..  
19fd0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
19fe0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
19ff0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a000 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a010 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a020 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
1a030 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
1a040 69 76 61 74 65 20 62 6f 6f 6c 20 67 6c 6f 62 61  ivate bool globa
1a050 6c 41 73 73 65 6d 62 6c 79 43 61 63 68 65 3b 0d  lAssemblyCache;.
1a060 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
1a070 6c 69 63 20 62 6f 6f 6c 20 47 6c 6f 62 61 6c 41  lic bool GlobalA
1a080 73 73 65 6d 62 6c 79 43 61 63 68 65 0d 0a 20 20  ssemblyCache..  
1a090 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
1a0a0 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74               get
1a0b0 20 7b 20 72 65 74 75 72 6e 20 67 6c 6f 62 61 6c   { return global
1a0c0 41 73 73 65 6d 62 6c 79 43 61 63 68 65 3b 20 7d  AssemblyCache; }
1a0d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1a0e0 20 20 73 65 74 20 7b 20 67 6c 6f 62 61 6c 41 73    set { globalAs
1a0f0 73 65 6d 62 6c 79 43 61 63 68 65 20 3d 20 76 61  semblyCache = va
1a100 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  lue; }..        
1a110 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
1a120 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
1a130 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a140 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a150 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a160 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
1a170 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
1a180 47 75 69 64 20 70 61 63 6b 61 67 65 49 64 3b 0d  Guid packageId;.
1a190 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
1a1a0 6c 69 63 20 47 75 69 64 20 50 61 63 6b 61 67 65  lic Guid Package
1a1b0 49 64 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  Id..            
1a1c0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
1a1d0 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20     get { return 
1a1e0 70 61 63 6b 61 67 65 49 64 3b 20 7d 0d 0a 20 20  packageId; }..  
1a1f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65                se
1a200 74 20 7b 20 70 61 63 6b 61 67 65 49 64 20 3d 20  t { packageId = 
1a210 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20  value; }..      
1a220 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
1a230 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
1a240 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a250 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a260 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a270 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
1a280 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
1a290 65 20 47 75 69 64 20 73 65 72 76 69 63 65 49 64  e Guid serviceId
1a2a0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ;..            p
1a2b0 75 62 6c 69 63 20 47 75 69 64 20 53 65 72 76 69  ublic Guid Servi
1a2c0 63 65 49 64 0d 0a 20 20 20 20 20 20 20 20 20 20  ceId..          
1a2d0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
1a2e0 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72       get { retur
1a2f0 6e 20 73 65 72 76 69 63 65 49 64 3b 20 7d 0d 0a  n serviceId; }..
1a300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a310 73 65 74 20 7b 20 73 65 72 76 69 63 65 49 64 20  set { serviceId 
1a320 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20  = value; }..    
1a330 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
1a340 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
1a350 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a360 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a370 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a380 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
1a390 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76              priv
1a3a0 61 74 65 20 47 75 69 64 20 64 61 74 61 53 6f 75  ate Guid dataSou
1a3b0 72 63 65 49 64 3b 0d 0a 20 20 20 20 20 20 20 20  rceId;..        
1a3c0 20 20 20 20 70 75 62 6c 69 63 20 47 75 69 64 20      public Guid 
1a3d0 44 61 74 61 53 6f 75 72 63 65 49 64 0d 0a 20 20  DataSourceId..  
1a3e0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
1a3f0 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74               get
1a400 20 7b 20 72 65 74 75 72 6e 20 64 61 74 61 53 6f   { return dataSo
1a410 75 72 63 65 49 64 3b 20 7d 0d 0a 20 20 20 20 20  urceId; }..     
1a420 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b             set {
1a430 20 64 61 74 61 53 6f 75 72 63 65 49 64 20 3d 20   dataSourceId = 
1a440 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20  value; }..      
1a450 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
1a460 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
1a470 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a480 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a490 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a4a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
1a4b0 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
1a4c0 65 20 47 75 69 64 20 64 61 74 61 50 72 6f 76 69  e Guid dataProvi
1a4d0 64 65 72 49 64 3b 0d 0a 20 20 20 20 20 20 20 20  derId;..        
1a4e0 20 20 20 20 70 75 62 6c 69 63 20 47 75 69 64 20      public Guid 
1a4f0 44 61 74 61 50 72 6f 76 69 64 65 72 49 64 0d 0a  DataProviderId..
1a500 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
1a510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67                 g
1a520 65 74 20 7b 20 72 65 74 75 72 6e 20 64 61 74 61  et { return data
1a530 50 72 6f 76 69 64 65 72 49 64 3b 20 7d 0d 0a 20  ProviderId; }.. 
1a540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
1a550 65 74 20 7b 20 64 61 74 61 50 72 6f 76 69 64 65  et { dataProvide
1a560 72 49 64 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a  rId = value; }..
1a570 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
1a580 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
1a590 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a5a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a5b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a5c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a5d0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1a5e0 70 72 69 76 61 74 65 20 47 75 69 64 20 61 64 6f  private Guid ado
1a5f0 4e 65 74 54 65 63 68 6e 6f 6c 6f 67 79 49 64 3b  NetTechnologyId;
1a600 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
1a610 62 6c 69 63 20 47 75 69 64 20 41 64 6f 4e 65 74  blic Guid AdoNet
1a620 54 65 63 68 6e 6f 6c 6f 67 79 49 64 0d 0a 20 20  TechnologyId..  
1a630 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
1a640 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74               get
1a650 20 7b 20 72 65 74 75 72 6e 20 61 64 6f 4e 65 74   { return adoNet
1a660 54 65 63 68 6e 6f 6c 6f 67 79 49 64 3b 20 7d 0d  TechnologyId; }.
1a670 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1a680 20 73 65 74 20 7b 20 61 64 6f 4e 65 74 54 65 63   set { adoNetTec
1a690 68 6e 6f 6c 6f 67 79 49 64 20 3d 20 76 61 6c 75  hnologyId = valu
1a6a0 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  e; }..          
1a6b0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
1a6c0 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 20 20 20   #endregion..   
1a6d0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
1a6e0 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20  #endregion....  
1a6f0 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
1a700 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a710 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a720 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a730 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
1a740 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e  .        #region
1a750 20 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 43   Configuration C
1a760 6c 61 73 73 0d 0a 20 20 20 20 20 20 20 20 70 72  lass..        pr
1a770 69 76 61 74 65 20 73 65 61 6c 65 64 20 63 6c 61  ivate sealed cla
1a780 73 73 20 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e  ss Configuration
1a790 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
1a7a0 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e           #region
1a7b0 20 50 72 69 76 61 74 65 20 43 6f 6e 73 74 61 6e   Private Constan
1a7c0 74 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ts..            
1a7d0 70 72 69 76 61 74 65 20 63 6f 6e 73 74 20 63 68  private const ch
1a7e0 61 72 20 53 77 69 74 63 68 20 3d 20 27 2d 27 3b  ar Switch = '-';
1a7f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
1a800 69 76 61 74 65 20 63 6f 6e 73 74 20 63 68 61 72  ivate const char
1a810 20 41 6c 74 53 77 69 74 63 68 20 3d 20 27 2f 27   AltSwitch = '/'
1a820 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
1a830 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
1a840 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a850 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a860 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a870 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
1a880 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74      private stat
1a890 69 63 20 72 65 61 64 6f 6e 6c 79 20 63 68 61 72  ic readonly char
1a8a0 5b 5d 20 53 77 69 74 63 68 43 68 61 72 73 20 3d  [] SwitchChars =
1a8b0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
1a8c0 20 20 20 20 53 77 69 74 63 68 2c 20 41 6c 74 53      Switch, AltS
1a8d0 77 69 74 63 68 0d 0a 20 20 20 20 20 20 20 20 20  witch..         
1a8e0 20 20 20 7d 3b 0d 0a 0d 0a 20 20 20 20 20 20 20     };....       
1a8f0 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
1a900 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a910 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a920 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a930 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
1a940 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
1a950 63 6f 6e 73 74 20 73 74 72 69 6e 67 20 49 6e 76  const string Inv
1a960 61 72 69 61 6e 74 4e 61 6d 65 20 3d 20 22 53 79  ariantName = "Sy
1a970 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65  stem.Data.SQLite
1a980 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ";..            
1a990 70 72 69 76 61 74 65 20 63 6f 6e 73 74 20 73 74  private const st
1a9a0 72 69 6e 67 20 45 66 36 49 6e 76 61 72 69 61 6e  ring Ef6Invarian
1a9b0 74 4e 61 6d 65 20 3d 20 22 53 79 73 74 65 6d 2e  tName = "System.
1a9c0 44 61 74 61 2e 53 51 4c 69 74 65 2e 45 46 36 22  Data.SQLite.EF6"
1a9d0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
1a9e0 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
1a9f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1aa00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1aa10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1aa20 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
1aa30 20 20 20 20 70 72 69 76 61 74 65 20 63 6f 6e 73      private cons
1aa40 74 20 73 74 72 69 6e 67 20 46 61 63 74 6f 72 79  t string Factory
1aa50 54 79 70 65 4e 61 6d 65 20 3d 0d 0a 20 20 20 20  TypeName =..    
1aa60 20 20 20 20 20 20 20 20 20 20 20 20 22 53 79 73              "Sys
1aa70 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e  tem.Data.SQLite.
1aa80 53 51 4c 69 74 65 46 61 63 74 6f 72 79 22 3b 0d  SQLiteFactory";.
1aa90 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
1aaa0 72 69 76 61 74 65 20 63 6f 6e 73 74 20 73 74 72  rivate const str
1aab0 69 6e 67 20 45 66 36 46 61 63 74 6f 72 79 54 79  ing Ef6FactoryTy
1aac0 70 65 4e 61 6d 65 20 3d 0d 0a 20 20 20 20 20 20  peName =..      
1aad0 20 20 20 20 20 20 20 20 20 20 22 53 79 73 74 65            "Syste
1aae0 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 45 46  m.Data.SQLite.EF
1aaf0 36 2e 53 51 4c 69 74 65 50 72 6f 76 69 64 65 72  6.SQLiteProvider
1ab00 46 61 63 74 6f 72 79 22 3b 0d 0a 20 20 20 20 20  Factory";..     
1ab10 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f         #endregio
1ab20 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n....           
1ab30 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
1ab40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ab50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ab60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ab70 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
1ab80 20 20 20 20 23 72 65 67 69 6f 6e 20 50 72 69 76      #region Priv
1ab90 61 74 65 20 53 74 61 74 69 63 20 44 61 74 61 0d  ate Static Data.
1aba0 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69  .            pri
1abb0 76 61 74 65 20 73 74 61 74 69 63 20 41 73 73 65  vate static Asse
1abc0 6d 62 6c 79 20 73 79 73 74 65 6d 45 66 36 41 73  mbly systemEf6As
1abd0 73 65 6d 62 6c 79 3b 0d 0a 20 20 20 20 20 20 20  sembly;..       
1abe0 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d       #endregion.
1abf0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
1ac00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ac10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ac20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ac30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ac40 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
1ac50 20 20 23 72 65 67 69 6f 6e 20 50 72 69 76 61 74    #region Privat
1ac60 65 20 44 61 74 61 0d 0a 20 20 20 20 20 20 20 20  e Data..        
1ac70 20 20 20 20 70 72 69 76 61 74 65 20 41 73 73 65      private Asse
1ac80 6d 62 6c 79 4e 61 6d 65 20 63 6f 72 65 41 73 73  mblyName coreAss
1ac90 65 6d 62 6c 79 4e 61 6d 65 3b 0d 0a 20 20 20 20  emblyName;..    
1aca0 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
1acb0 41 73 73 65 6d 62 6c 79 4e 61 6d 65 20 6c 69 6e  AssemblyName lin
1acc0 71 41 73 73 65 6d 62 6c 79 4e 61 6d 65 3b 0d 0a  qAssemblyName;..
1acd0 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76              priv
1ace0 61 74 65 20 41 73 73 65 6d 62 6c 79 4e 61 6d 65  ate AssemblyName
1acf0 20 65 66 36 41 73 73 65 6d 62 6c 79 4e 61 6d 65   ef6AssemblyName
1ad00 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ;..            p
1ad10 72 69 76 61 74 65 20 41 73 73 65 6d 62 6c 79 4e  rivate AssemblyN
1ad20 61 6d 65 20 64 65 73 69 67 6e 65 72 41 73 73 65  ame designerAsse
1ad30 6d 62 6c 79 4e 61 6d 65 3b 0d 0a 20 20 20 20 20  mblyName;..     
1ad40 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f         #endregio
1ad50 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n....           
1ad60 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
1ad70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ad80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ad90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ada0 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
1adb0 20 20 20 20 23 72 65 67 69 6f 6e 20 50 72 69 76      #region Priv
1adc0 61 74 65 20 43 6f 6e 73 74 72 75 63 74 6f 72 73  ate Constructors
1add0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
1ade0 69 76 61 74 65 20 43 6f 6e 66 69 67 75 72 61 74  ivate Configurat
1adf0 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ion(..          
1ae00 20 20 20 20 20 20 41 73 73 65 6d 62 6c 79 20 61        Assembly a
1ae10 73 73 65 6d 62 6c 79 2c 0d 0a 20 20 20 20 20 20  ssembly,..      
1ae20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
1ae30 20 6c 6f 67 46 69 6c 65 4e 61 6d 65 2c 0d 0a 20   logFileName,.. 
1ae40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
1ae50 74 72 69 6e 67 20 72 65 67 69 73 74 72 79 4c 6f  tring registryLo
1ae60 67 46 69 6c 65 4e 61 6d 65 2c 0d 0a 20 20 20 20  gFileName,..    
1ae70 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
1ae80 6e 67 20 64 69 72 65 63 74 6f 72 79 2c 0d 0a 20  ng directory,.. 
1ae90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
1aea0 74 72 69 6e 67 20 63 6f 72 65 46 69 6c 65 4e 61  tring coreFileNa
1aeb0 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me,..           
1aec0 20 20 20 20 20 73 74 72 69 6e 67 20 6c 69 6e 71       string linq
1aed0 46 69 6c 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20  FileName,..     
1aee0 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
1aef0 67 20 65 66 36 46 69 6c 65 4e 61 6d 65 2c 0d 0a  g ef6FileName,..
1af00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1af10 73 74 72 69 6e 67 20 64 65 73 69 67 6e 65 72 46  string designerF
1af20 69 6c 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20  ileName,..      
1af30 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
1af40 20 72 65 67 69 73 74 72 79 56 65 72 73 69 6f 6e   registryVersion
1af50 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
1af60 20 20 20 73 74 72 69 6e 67 20 63 6f 6e 66 69 67     string config
1af70 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20  Version,..      
1af80 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
1af90 20 76 73 56 65 72 73 69 6f 6e 53 75 66 66 69 78   vsVersionSuffix
1afa0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
1afb0 20 20 20 73 74 72 69 6e 67 20 64 65 62 75 67 46     string debugF
1afc0 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20  ormat,..        
1afd0 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 74          string t
1afe0 72 61 63 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20  raceFormat,..   
1aff0 20 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 73               Ins
1b000 74 61 6c 6c 46 6c 61 67 73 20 69 6e 73 74 61 6c  tallFlags instal
1b010 6c 46 6c 61 67 73 2c 0d 0a 20 20 20 20 20 20 20  lFlags,..       
1b020 20 20 20 20 20 20 20 20 20 50 72 6f 76 69 64 65           Provide
1b030 72 46 6c 61 67 73 20 70 72 6f 76 69 64 65 72 46  rFlags providerF
1b040 6c 61 67 73 2c 0d 0a 20 20 20 20 20 20 20 20 20  lags,..         
1b050 20 20 20 20 20 20 20 54 72 61 63 65 50 72 69 6f         TracePrio
1b060 72 69 74 79 20 64 65 62 75 67 50 72 69 6f 72 69  rity debugPriori
1b070 74 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ty,..           
1b080 20 20 20 20 20 54 72 61 63 65 50 72 69 6f 72 69       TracePriori
1b090 74 79 20 74 72 61 63 65 50 72 69 6f 72 69 74 79  ty tracePriority
1b0a0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
1b0b0 20 20 20 62 6f 6f 6c 20 70 65 72 55 73 65 72 2c     bool perUser,
1b0c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1b0d0 20 20 62 6f 6f 6c 20 69 6e 73 74 61 6c 6c 2c 0d    bool install,.
1b0e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1b0f0 20 62 6f 6f 6c 20 77 6f 77 36 34 2c 0d 0a 20 20   bool wow64,..  
1b100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f                bo
1b110 6f 6c 20 6e 6f 52 75 6e 74 69 6d 65 56 65 72 73  ol noRuntimeVers
1b120 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ion,..          
1b130 20 20 20 20 20 20 62 6f 6f 6c 20 6e 6f 44 65 73        bool noDes
1b140 6b 74 6f 70 2c 0d 0a 20 20 20 20 20 20 20 20 20  ktop,..         
1b150 20 20 20 20 20 20 20 62 6f 6f 6c 20 6e 6f 43 6f         bool noCo
1b160 6d 70 61 63 74 2c 0d 0a 20 20 20 20 20 20 20 20  mpact,..        
1b170 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 6e 6f 4e          bool noN
1b180 65 74 46 78 32 30 2c 0d 0a 20 20 20 20 20 20 20  etFx20,..       
1b190 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 6e 6f           bool no
1b1a0 4e 65 74 46 78 33 35 2c 0d 0a 20 20 20 20 20 20  NetFx35,..      
1b1b0 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 6e            bool n
1b1c0 6f 4e 65 74 46 78 34 30 2c 0d 0a 20 20 20 20 20  oNetFx40,..     
1b1d0 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
1b1e0 6e 6f 4e 65 74 46 78 34 35 2c 0d 0a 20 20 20 20  noNetFx45,..    
1b1f0 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
1b200 20 6e 6f 4e 65 74 46 78 34 35 31 2c 0d 0a 20 20   noNetFx451,..  
1b210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f                bo
1b220 6f 6c 20 6e 6f 4e 65 74 46 78 34 35 32 2c 0d 0a  ol noNetFx452,..
1b230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b240 62 6f 6f 6c 20 6e 6f 4e 65 74 46 78 34 36 2c 0d  bool noNetFx46,.
1b250 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1b260 20 62 6f 6f 6c 20 6e 6f 4e 65 74 46 78 34 36 31   bool noNetFx461
1b270 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
1b280 20 20 20 62 6f 6f 6c 20 6e 6f 4e 65 74 46 78 34     bool noNetFx4
1b290 36 32 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  62,..           
1b2a0 20 20 20 20 20 62 6f 6f 6c 20 6e 6f 4e 65 74 46       bool noNetF
1b2b0 78 34 37 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  x47,..          
1b2c0 20 20 20 20 20 20 62 6f 6f 6c 20 6e 6f 4e 65 74        bool noNet
1b2d0 46 78 34 37 31 2c 0d 0a 20 20 20 20 20 20 20 20  Fx471,..        
1b2e0 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 6e 6f 56          bool noV
1b2f0 73 32 30 30 35 2c 0d 0a 20 20 20 20 20 20 20 20  s2005,..        
1b300 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 6e 6f 56          bool noV
1b310 73 32 30 30 38 2c 0d 0a 20 20 20 20 20 20 20 20  s2008,..        
1b320 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 6e 6f 56          bool noV
1b330 73 32 30 31 30 2c 0d 0a 20 20 20 20 20 20 20 20  s2010,..        
1b340 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 6e 6f 56          bool noV
1b350 73 32 30 31 32 2c 0d 0a 20 20 20 20 20 20 20 20  s2012,..        
1b360 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 6e 6f 56          bool noV
1b370 73 32 30 31 33 2c 0d 0a 20 20 20 20 20 20 20 20  s2013,..        
1b380 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 6e 6f 56          bool noV
1b390 73 32 30 31 35 2c 0d 0a 20 20 20 20 20 20 20 20  s2015,..        
1b3a0 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 6e 6f 56          bool noV
1b3b0 73 32 30 31 37 2c 0d 0a 20 20 20 20 20 20 20 20  s2017,..        
1b3c0 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 6e 6f 54          bool noT
1b3d0 72 61 63 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  race,..         
1b3e0 20 20 20 20 20 20 20 62 6f 6f 6c 20 6e 6f 43 6f         bool noCo
1b3f0 6e 73 6f 6c 65 2c 0d 0a 20 20 20 20 20 20 20 20  nsole,..        
1b400 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 6e 6f 4c          bool noL
1b410 6f 67 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  og,..           
1b420 20 20 20 20 20 62 6f 6f 6c 20 74 68 72 6f 77 4f       bool throwO
1b430 6e 4d 69 73 73 69 6e 67 2c 0d 0a 20 20 20 20 20  nMissing,..     
1b440 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
1b450 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20  whatIf,..       
1b460 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 64 65           bool de
1b470 62 75 67 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  bug,..          
1b480 20 20 20 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f        bool verbo
1b490 73 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se,..           
1b4a0 20 20 20 20 20 62 6f 6f 6c 20 63 6f 6e 66 69 72       bool confir
1b4b0 6d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  m..             
1b4c0 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20     )..          
1b4d0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
1b4e0 20 20 20 20 20 74 68 69 73 2e 61 73 73 65 6d 62       this.assemb
1b4f0 6c 79 20 3d 20 61 73 73 65 6d 62 6c 79 3b 0d 0a  ly = assembly;..
1b500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b510 74 68 69 73 2e 6c 6f 67 46 69 6c 65 4e 61 6d 65  this.logFileName
1b520 20 3d 20 6c 6f 67 46 69 6c 65 4e 61 6d 65 3b 0d   = logFileName;.
1b530 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1b540 20 74 68 69 73 2e 72 65 67 69 73 74 72 79 4c 6f   this.registryLo
1b550 67 46 69 6c 65 4e 61 6d 65 20 3d 20 72 65 67 69  gFileName = regi
1b560 73 74 72 79 4c 6f 67 46 69 6c 65 4e 61 6d 65 3b  stryLogFileName;
1b570 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1b580 20 20 74 68 69 73 2e 64 69 72 65 63 74 6f 72 79    this.directory
1b590 20 3d 20 64 69 72 65 63 74 6f 72 79 3b 0d 0a 20   = directory;.. 
1b5a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
1b5b0 68 69 73 2e 63 6f 72 65 46 69 6c 65 4e 61 6d 65  his.coreFileName
1b5c0 20 3d 20 63 6f 72 65 46 69 6c 65 4e 61 6d 65 3b   = coreFileName;
1b5d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1b5e0 20 20 74 68 69 73 2e 6c 69 6e 71 46 69 6c 65 4e    this.linqFileN
1b5f0 61 6d 65 20 3d 20 6c 69 6e 71 46 69 6c 65 4e 61  ame = linqFileNa
1b600 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me;..           
1b610 20 20 20 20 20 74 68 69 73 2e 65 66 36 46 69 6c       this.ef6Fil
1b620 65 4e 61 6d 65 20 3d 20 65 66 36 46 69 6c 65 4e  eName = ef6FileN
1b630 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ame;..          
1b640 20 20 20 20 20 20 74 68 69 73 2e 64 65 73 69 67        this.desig
1b650 6e 65 72 46 69 6c 65 4e 61 6d 65 20 3d 20 64 65  nerFileName = de
1b660 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65 3b 0d  signerFileName;.
1b670 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1b680 20 74 68 69 73 2e 72 65 67 69 73 74 72 79 56 65   this.registryVe
1b690 72 73 69 6f 6e 20 3d 20 72 65 67 69 73 74 72 79  rsion = registry
1b6a0 56 65 72 73 69 6f 6e 3b 0d 0a 20 20 20 20 20 20  Version;..      
1b6b0 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 63            this.c
1b6c0 6f 6e 66 69 67 56 65 72 73 69 6f 6e 20 3d 20 63  onfigVersion = c
1b6d0 6f 6e 66 69 67 56 65 72 73 69 6f 6e 3b 0d 0a 20  onfigVersion;.. 
1b6e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
1b6f0 68 69 73 2e 76 73 56 65 72 73 69 6f 6e 53 75 66  his.vsVersionSuf
1b700 66 69 78 20 3d 20 76 73 56 65 72 73 69 6f 6e 53  fix = vsVersionS
1b710 75 66 66 69 78 3b 0d 0a 20 20 20 20 20 20 20 20  uffix;..        
1b720 20 20 20 20 20 20 20 20 74 68 69 73 2e 64 65 62          this.deb
1b730 75 67 46 6f 72 6d 61 74 20 3d 20 64 65 62 75 67  ugFormat = debug
1b740 46 6f 72 6d 61 74 3b 0d 0a 20 20 20 20 20 20 20  Format;..       
1b750 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 74 72           this.tr
1b760 61 63 65 46 6f 72 6d 61 74 20 3d 20 74 72 61 63  aceFormat = trac
1b770 65 46 6f 72 6d 61 74 3b 0d 0a 20 20 20 20 20 20  eFormat;..      
1b780 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 69            this.i
1b790 6e 73 74 61 6c 6c 46 6c 61 67 73 20 3d 20 69 6e  nstallFlags = in
1b7a0 73 74 61 6c 6c 46 6c 61 67 73 3b 0d 0a 20 20 20  stallFlags;..   
1b7b0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69               thi
1b7c0 73 2e 70 72 6f 76 69 64 65 72 46 6c 61 67 73 20  s.providerFlags 
1b7d0 3d 20 70 72 6f 76 69 64 65 72 46 6c 61 67 73 3b  = providerFlags;
1b7e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1b7f0 20 20 74 68 69 73 2e 64 65 62 75 67 50 72 69 6f    this.debugPrio
1b800 72 69 74 79 20 3d 20 64 65 62 75 67 50 72 69 6f  rity = debugPrio
1b810 72 69 74 79 3b 0d 0a 20 20 20 20 20 20 20 20 20  rity;..         
1b820 20 20 20 20 20 20 20 74 68 69 73 2e 74 72 61 63         this.trac
1b830 65 50 72 69 6f 72 69 74 79 20 3d 20 74 72 61 63  ePriority = trac
1b840 65 50 72 69 6f 72 69 74 79 3b 0d 0a 20 20 20 20  ePriority;..    
1b850 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73              this
1b860 2e 70 65 72 55 73 65 72 20 3d 20 70 65 72 55 73  .perUser = perUs
1b870 65 72 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  er;..           
1b880 20 20 20 20 20 74 68 69 73 2e 69 6e 73 74 61 6c       this.instal
1b890 6c 20 3d 20 69 6e 73 74 61 6c 6c 3b 0d 0a 20 20  l = install;..  
1b8a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
1b8b0 69 73 2e 77 6f 77 36 34 20 3d 20 77 6f 77 36 34  is.wow64 = wow64
1b8c0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
1b8d0 20 20 20 74 68 69 73 2e 6e 6f 52 75 6e 74 69 6d     this.noRuntim
1b8e0 65 56 65 72 73 69 6f 6e 20 3d 20 6e 6f 52 75 6e  eVersion = noRun
1b8f0 74 69 6d 65 56 65 72 73 69 6f 6e 3b 0d 0a 20 20  timeVersion;..  
1b900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
1b910 69 73 2e 6e 6f 44 65 73 6b 74 6f 70 20 3d 20 6e  is.noDesktop = n
1b920 6f 44 65 73 6b 74 6f 70 3b 0d 0a 20 20 20 20 20  oDesktop;..     
1b930 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e             this.
1b940 6e 6f 43 6f 6d 70 61 63 74 20 3d 20 6e 6f 43 6f  noCompact = noCo
1b950 6d 70 61 63 74 3b 0d 0a 20 20 20 20 20 20 20 20  mpact;..        
1b960 20 20 20 20 20 20 20 20 74 68 69 73 2e 6e 6f 4e          this.noN
1b970 65 74 46 78 32 30 20 3d 20 6e 6f 4e 65 74 46 78  etFx20 = noNetFx
1b980 32 30 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  20;..           
1b990 20 20 20 20 20 74 68 69 73 2e 6e 6f 4e 65 74 46       this.noNetF
1b9a0 78 33 35 20 3d 20 6e 6f 4e 65 74 46 78 33 35 3b  x35 = noNetFx35;
1b9b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1b9c0 20 20 74 68 69 73 2e 6e 6f 4e 65 74 46 78 34 30    this.noNetFx40
1b9d0 20 3d 20 6e 6f 4e 65 74 46 78 34 30 3b 0d 0a 20   = noNetFx40;.. 
1b9e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
1b9f0 68 69 73 2e 6e 6f 4e 65 74 46 78 34 35 20 3d 20  his.noNetFx45 = 
1ba00 6e 6f 4e 65 74 46 78 34 35 3b 0d 0a 20 20 20 20  noNetFx45;..    
1ba10 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73              this
1ba20 2e 6e 6f 4e 65 74 46 78 34 35 31 20 3d 20 6e 6f  .noNetFx451 = no
1ba30 4e 65 74 46 78 34 35 31 3b 0d 0a 20 20 20 20 20  NetFx451;..     
1ba40 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e             this.
1ba50 6e 6f 4e 65 74 46 78 34 35 32 20 3d 20 6e 6f 4e  noNetFx452 = noN
1ba60 65 74 46 78 34 35 32 3b 0d 0a 20 20 20 20 20 20  etFx452;..      
1ba70 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 6e            this.n
1ba80 6f 4e 65 74 46 78 34 36 20 3d 20 6e 6f 4e 65 74  oNetFx46 = noNet
1ba90 46 78 34 36 3b 0d 0a 20 20 20 20 20 20 20 20 20  Fx46;..         
1baa0 20 20 20 20 20 20 20 74 68 69 73 2e 6e 6f 4e 65         this.noNe
1bab0 74 46 78 34 36 31 20 3d 20 6e 6f 4e 65 74 46 78  tFx461 = noNetFx
1bac0 34 36 31 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  461;..          
1bad0 20 20 20 20 20 20 74 68 69 73 2e 6e 6f 4e 65 74        this.noNet
1bae0 46 78 34 36 32 20 3d 20 6e 6f 4e 65 74 46 78 34  Fx462 = noNetFx4
1baf0 36 32 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  62;..           
1bb00 20 20 20 20 20 74 68 69 73 2e 6e 6f 4e 65 74 46       this.noNetF
1bb10 78 34 37 20 3d 20 6e 6f 4e 65 74 46 78 34 37 3b  x47 = noNetFx47;
1bb20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1bb30 20 20 74 68 69 73 2e 6e 6f 4e 65 74 46 78 34 37    this.noNetFx47
1bb40 31 20 3d 20 6e 6f 4e 65 74 46 78 34 37 31 3b 0d  1 = noNetFx471;.
1bb50 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1bb60 20 74 68 69 73 2e 6e 6f 56 73 32 30 30 35 20 3d   this.noVs2005 =
1bb70 20 6e 6f 56 73 32 30 30 35 3b 0d 0a 20 20 20 20   noVs2005;..    
1bb80 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73              this
1bb90 2e 6e 6f 56 73 32 30 30 38 20 3d 20 6e 6f 56 73  .noVs2008 = noVs
1bba0 32 30 30 38 3b 0d 0a 20 20 20 20 20 20 20 20 20  2008;..         
1bbb0 20 20 20 20 20 20 20 74 68 69 73 2e 6e 6f 56 73         this.noVs
1bbc0 32 30 31 30 20 3d 20 6e 6f 56 73 32 30 31 30 3b  2010 = noVs2010;
1bbd0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1bbe0 20 20 74 68 69 73 2e 6e 6f 56 73 32 30 31 32 20    this.noVs2012 
1bbf0 3d 20 6e 6f 56 73 32 30 31 32 3b 0d 0a 20 20 20  = noVs2012;..   
1bc00 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69               thi
1bc10 73 2e 6e 6f 56 73 32 30 31 33 20 3d 20 6e 6f 56  s.noVs2013 = noV
1bc20 73 32 30 31 33 3b 0d 0a 20 20 20 20 20 20 20 20  s2013;..        
1bc30 20 20 20 20 20 20 20 20 74 68 69 73 2e 6e 6f 56          this.noV
1bc40 73 32 30 31 35 20 3d 20 6e 6f 56 73 32 30 31 35  s2015 = noVs2015
1bc50 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
1bc60 20 20 20 74 68 69 73 2e 6e 6f 56 73 32 30 31 37     this.noVs2017
1bc70 20 3d 20 6e 6f 56 73 32 30 31 37 3b 0d 0a 20 20   = noVs2017;..  
1bc80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
1bc90 69 73 2e 6e 6f 54 72 61 63 65 20 3d 20 6e 6f 54  is.noTrace = noT
1bca0 72 61 63 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  race;..         
1bcb0 20 20 20 20 20 20 20 74 68 69 73 2e 6e 6f 43 6f         this.noCo
1bcc0 6e 73 6f 6c 65 20 3d 20 6e 6f 43 6f 6e 73 6f 6c  nsole = noConsol
1bcd0 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
1bce0 20 20 20 20 74 68 69 73 2e 6e 6f 4c 6f 67 20 3d      this.noLog =
1bcf0 20 6e 6f 4c 6f 67 3b 0d 0a 20 20 20 20 20 20 20   noLog;..       
1bd00 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 74 68           this.th
1bd10 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 20 3d 20 74  rowOnMissing = t
1bd20 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 3b 0d 0a  hrowOnMissing;..
1bd30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bd40 74 68 69 73 2e 77 68 61 74 49 66 20 3d 20 77 68  this.whatIf = wh
1bd50 61 74 49 66 3b 0d 0a 20 20 20 20 20 20 20 20 20  atIf;..         
1bd60 20 20 20 20 20 20 20 74 68 69 73 2e 64 65 62 75         this.debu
1bd70 67 20 3d 20 64 65 62 75 67 3b 0d 0a 20 20 20 20  g = debug;..    
1bd80 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73              this
1bd90 2e 76 65 72 62 6f 73 65 20 3d 20 76 65 72 62 6f  .verbose = verbo
1bda0 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se;..           
1bdb0 20 20 20 20 20 74 68 69 73 2e 63 6f 6e 66 69 72       this.confir
1bdc0 6d 20 3d 20 63 6f 6e 66 69 72 6d 3b 0d 0a 20 20  m = confirm;..  
1bdd0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
1bde0 20 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67           #endreg
1bdf0 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ion....         
1be00 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
1be10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1be20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1be30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1be40 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
1be50 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50 72        #region Pr
1be60 69 76 61 74 65 20 53 74 61 74 69 63 20 4d 65 74  ivate Static Met
1be70 68 6f 64 73 0d 0a 20 20 20 20 20 20 20 20 20 20  hods..          
1be80 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63    private static
1be90 20 76 6f 69 64 20 47 65 74 44 65 66 61 75 6c 74   void GetDefault
1bea0 46 69 6c 65 4e 61 6d 65 73 28 0d 0a 20 20 20 20  FileNames(..    
1beb0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20              ref 
1bec0 73 74 72 69 6e 67 20 64 69 72 65 63 74 6f 72 79  string directory
1bed0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
1bee0 20 20 20 72 65 66 20 73 74 72 69 6e 67 20 63 6f     ref string co
1bef0 72 65 46 69 6c 65 4e 61 6d 65 2c 0d 0a 20 20 20  reFileName,..   
1bf00 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66               ref
1bf10 20 73 74 72 69 6e 67 20 6c 69 6e 71 46 69 6c 65   string linqFile
1bf20 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  Name,..         
1bf30 20 20 20 20 20 20 20 72 65 66 20 73 74 72 69 6e         ref strin
1bf40 67 20 65 66 36 46 69 6c 65 4e 61 6d 65 2c 0d 0a  g ef6FileName,..
1bf50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bf60 72 65 66 20 73 74 72 69 6e 67 20 64 65 73 69 67  ref string desig
1bf70 6e 65 72 46 69 6c 65 4e 61 6d 65 0d 0a 20 20 20  nerFileName..   
1bf80 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a               )..
1bf90 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
1bfa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
1bfb0 66 20 28 74 68 69 73 41 73 73 65 6d 62 6c 79 20  f (thisAssembly 
1bfc0 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
1bfd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
1bfe0 74 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  turn;....       
1bff0 20 20 20 20 20 20 20 20 20 64 69 72 65 63 74 6f           directo
1c000 72 79 20 3d 20 50 61 74 68 2e 47 65 74 44 69 72  ry = Path.GetDir
1c010 65 63 74 6f 72 79 4e 61 6d 65 28 74 68 69 73 41  ectoryName(thisA
1c020 73 73 65 6d 62 6c 79 2e 4c 6f 63 61 74 69 6f 6e  ssembly.Location
1c030 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
1c040 20 20 20 20 20 20 69 66 20 28 53 74 72 69 6e 67        if (String
1c050 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 64  .IsNullOrEmpty(d
1c060 69 72 65 63 74 6f 72 79 29 29 0d 0a 20 20 20 20  irectory))..    
1c070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c080 72 65 74 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20  return;....     
1c090 20 20 20 20 20 20 20 20 20 20 20 63 6f 72 65 46             coreF
1c0a0 69 6c 65 4e 61 6d 65 20 3d 20 50 61 74 68 2e 43  ileName = Path.C
1c0b0 6f 6d 62 69 6e 65 28 64 69 72 65 63 74 6f 72 79  ombine(directory
1c0c0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
1c0d0 20 20 20 20 20 20 20 49 6e 73 74 61 6c 6c 65 72         Installer
1c0e0 2e 43 6f 72 65 46 69 6c 65 4e 61 6d 65 29 3b 0d  .CoreFileName);.
1c0f0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
1c100 20 20 20 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 20     linqFileName 
1c110 3d 20 50 61 74 68 2e 43 6f 6d 62 69 6e 65 28 64  = Path.Combine(d
1c120 69 72 65 63 74 6f 72 79 2c 0d 0a 20 20 20 20 20  irectory,..     
1c130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 49                 I
1c140 6e 73 74 61 6c 6c 65 72 2e 4c 69 6e 71 46 69 6c  nstaller.LinqFil
1c150 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20  eName);....     
1c160 20 20 20 20 20 20 20 20 20 20 20 65 66 36 46 69             ef6Fi
1c170 6c 65 4e 61 6d 65 20 3d 20 50 61 74 68 2e 43 6f  leName = Path.Co
1c180 6d 62 69 6e 65 28 64 69 72 65 63 74 6f 72 79 2c  mbine(directory,
1c190 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1c1a0 20 20 20 20 20 20 49 6e 73 74 61 6c 6c 65 72 2e        Installer.
1c1b0 45 66 36 46 69 6c 65 4e 61 6d 65 29 3b 0d 0a 0d  Ef6FileName);...
1c1c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1c1d0 20 64 65 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d   designerFileNam
1c1e0 65 20 3d 20 50 61 74 68 2e 43 6f 6d 62 69 6e 65  e = Path.Combine
1c1f0 28 64 69 72 65 63 74 6f 72 79 2c 0d 0a 20 20 20  (directory,..   
1c200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c210 20 49 6e 73 74 61 6c 6c 65 72 2e 44 65 73 69 67   Installer.Desig
1c220 6e 65 72 46 69 6c 65 4e 61 6d 65 29 3b 0d 0a 20  nerFileName);.. 
1c230 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
1c240 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
1c250 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c260 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c270 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c280 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
1c290 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
1c2a0 72 69 76 61 74 65 20 73 74 61 74 69 63 20 62 6f  rivate static bo
1c2b0 6f 6c 20 43 68 65 63 6b 4f 70 74 69 6f 6e 28 0d  ol CheckOption(.
1c2c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1c2d0 20 72 65 66 20 73 74 72 69 6e 67 20 61 72 67 0d   ref string arg.
1c2e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1c2f0 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   )..            
1c300 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
1c310 20 20 20 73 74 72 69 6e 67 20 72 65 73 75 6c 74     string result
1c320 20 3d 20 61 72 67 3b 0d 0a 0d 0a 20 20 20 20 20   = arg;....     
1c330 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21             if (!
1c340 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45  String.IsNullOrE
1c350 6d 70 74 79 28 72 65 73 75 6c 74 29 29 0d 0a 20  mpty(result)).. 
1c360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
1c370 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1c380 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
1c390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
1c3a0 20 4e 4f 54 45 3a 20 52 65 6d 6f 76 65 20 61 6c   NOTE: Remove al
1c3b0 6c 20 6c 65 61 64 69 6e 67 20 73 77 69 74 63 68  l leading switch
1c3c0 20 63 68 61 72 73 2e 0d 0a 20 20 20 20 20 20 20   chars...       
1c3d0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
1c3e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1c3f0 20 20 20 20 20 72 65 73 75 6c 74 20 3d 20 72 65       result = re
1c400 73 75 6c 74 2e 54 72 69 6d 53 74 61 72 74 28 53  sult.TrimStart(S
1c410 77 69 74 63 68 43 68 61 72 73 29 3b 0d 0a 0d 0a  witchChars);....
1c420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c430 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
1c440 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e              // N
1c450 4f 54 45 3a 20 48 6f 77 20 6d 61 6e 79 20 63 68  OTE: How many ch
1c460 61 72 73 20 77 65 72 65 20 72 65 6d 6f 76 65 64  ars were removed
1c470 3f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ?..             
1c480 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
1c490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
1c4a0 6e 74 20 63 6f 75 6e 74 20 3d 20 61 72 67 2e 4c  nt count = arg.L
1c4b0 65 6e 67 74 68 20 2d 20 72 65 73 75 6c 74 2e 4c  ength - result.L
1c4c0 65 6e 67 74 68 3b 0d 0a 0d 0a 20 20 20 20 20 20  ength;....      
1c4d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
1c4e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1c4f0 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 57        // NOTE: W
1c500 61 73 20 74 68 65 72 65 20 61 74 20 6c 65 61 73  as there at leas
1c510 74 20 6f 6e 65 3f 0d 0a 20 20 20 20 20 20 20 20  t one?..        
1c520 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
1c530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c540 20 20 20 20 69 66 20 28 63 6f 75 6e 74 20 3e 20      if (count > 
1c550 30 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  0)..            
1c560 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
1c570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c580 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
1c590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1c5a0 2f 20 4e 4f 54 45 3a 20 4f 6b 2c 20 72 65 70 6c  / NOTE: Ok, repl
1c5b0 61 63 65 20 74 68 65 69 72 20 6f 72 69 67 69 6e  ace their origin
1c5c0 61 6c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  al..            
1c5d0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
1c5e0 20 20 20 20 20 61 72 67 75 6d 65 6e 74 2e 0d 0a       argument...
1c5f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c600 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
1c610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c620 20 20 20 20 61 72 67 20 3d 20 72 65 73 75 6c 74      arg = result
1c630 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
1c640 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
1c650 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1c660 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45           // NOTE
1c670 3a 20 59 65 73 2c 20 74 68 69 73 20 69 73 20 61  : Yes, this is a
1c680 20 73 77 69 74 63 68 2e 0d 0a 20 20 20 20 20 20   switch...      
1c690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c6a0 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
1c6b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
1c6c0 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20  turn true;..    
1c6d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c6e0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
1c6f0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
1c700 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
1c710 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alse;..         
1c720 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
1c730 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
1c740 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c750 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c760 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c770 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
1c780 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
1c790 74 61 74 69 63 20 62 6f 6f 6c 20 4d 61 74 63 68  tatic bool Match
1c7a0 4f 70 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20  Option(..       
1c7b0 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
1c7c0 61 72 67 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  arg,..          
1c7d0 20 20 20 20 20 20 73 74 72 69 6e 67 20 6f 70 74        string opt
1c7e0 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ion..           
1c7f0 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
1c800 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
1c810 20 20 20 20 20 20 20 69 66 20 28 28 61 72 67 20         if ((arg 
1c820 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20 28 6f 70 74  == null) || (opt
1c830 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 29 0d 0a 20  ion == null)).. 
1c840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c850 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
1c860 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1c870 20 20 20 20 72 65 74 75 72 6e 20 53 74 72 69 6e      return Strin
1c880 67 2e 43 6f 6d 70 61 72 65 28 61 72 67 2c 20 30  g.Compare(arg, 0
1c890 2c 20 6f 70 74 69 6f 6e 2c 20 30 2c 0d 0a 20 20  , option, 0,..  
1c8a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c8b0 20 20 61 72 67 2e 4c 65 6e 67 74 68 2c 20 53 74    arg.Length, St
1c8c0 72 69 6e 67 43 6f 6d 70 61 72 69 73 6f 6e 2e 4f  ringComparison.O
1c8d0 72 64 69 6e 61 6c 49 67 6e 6f 72 65 43 61 73 65  rdinalIgnoreCase
1c8e0 29 20 3d 3d 20 30 3b 0d 0a 20 20 20 20 20 20 20  ) == 0;..       
1c8f0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
1c900 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
1c910 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c920 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c930 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c940 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
1c950 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65           private
1c960 20 73 74 61 74 69 63 20 62 6f 6f 6c 3f 20 50 61   static bool? Pa
1c970 72 73 65 42 6f 6f 6c 65 61 6e 28 0d 0a 20 20 20  rseBoolean(..   
1c980 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72               str
1c990 69 6e 67 20 74 65 78 74 0d 0a 20 20 20 20 20 20  ing text..      
1c9a0 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
1c9b0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
1c9c0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
1c9d0 21 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72  !String.IsNullOr
1c9e0 45 6d 70 74 79 28 74 65 78 74 29 29 0d 0a 20 20  Empty(text))..  
1c9f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
1ca00 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1ca10 20 20 20 20 20 62 6f 6f 6c 20 76 61 6c 75 65 3b       bool value;
1ca20 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1ca30 20 20 20 20 20 20 20 20 69 66 20 28 62 6f 6f 6c          if (bool
1ca40 2e 54 72 79 50 61 72 73 65 28 74 65 78 74 2c 20  .TryParse(text, 
1ca50 6f 75 74 20 76 61 6c 75 65 29 29 0d 0a 20 20 20  out value))..   
1ca60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ca70 20 20 20 20 20 72 65 74 75 72 6e 20 76 61 6c 75       return valu
1ca80 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
1ca90 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
1caa0 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
1cab0 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20  null;..         
1cac0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
1cad0 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
1cae0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1caf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1cb00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1cb10 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
1cb20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
1cb30 74 61 74 69 63 20 6f 62 6a 65 63 74 20 50 61 72  tatic object Par
1cb40 73 65 45 6e 75 6d 28 0d 0a 20 20 20 20 20 20 20  seEnum(..       
1cb50 20 20 20 20 20 20 20 20 20 54 79 70 65 20 65 6e           Type en
1cb60 75 6d 54 79 70 65 2c 0d 0a 20 20 20 20 20 20 20  umType,..       
1cb70 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
1cb80 74 65 78 74 2c 0d 0a 20 20 20 20 20 20 20 20 20  text,..         
1cb90 20 20 20 20 20 20 20 62 6f 6f 6c 20 6e 6f 43 61         bool noCa
1cba0 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  se..            
1cbb0 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20      )..         
1cbc0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
1cbd0 20 20 20 20 20 20 69 66 20 28 28 65 6e 75 6d 54        if ((enumT
1cbe0 79 70 65 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20  ype == null) || 
1cbf0 21 65 6e 75 6d 54 79 70 65 2e 49 73 45 6e 75 6d  !enumType.IsEnum
1cc00 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
1cc10 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 75         return nu
1cc20 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ll;....         
1cc30 20 20 20 20 20 20 20 69 66 20 28 21 53 74 72 69         if (!Stri
1cc40 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79  ng.IsNullOrEmpty
1cc50 28 74 65 78 74 29 29 0d 0a 20 20 20 20 20 20 20  (text))..       
1cc60 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
1cc70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cc80 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20  try..           
1cc90 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
1cca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ccb0 20 20 20 20 72 65 74 75 72 6e 20 45 6e 75 6d 2e      return Enum.
1ccc0 50 61 72 73 65 28 65 6e 75 6d 54 79 70 65 2c 20  Parse(enumType, 
1ccd0 74 65 78 74 2c 20 6e 6f 43 61 73 65 29 3b 0d 0a  text, noCase);..
1cce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ccf0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
1cd00 20 20 20 20 20 20 20 20 20 20 20 63 61 74 63 68             catch
1cd10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1cd20 20 20 20 20 20 20 7b 0d 0a 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 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d   // do nothing..
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 20 20 20 20 20 20 20 20       }..        
1cd70 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
1cd80 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
1cd90 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20  urn null;..     
1cda0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
1cdb0 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
1cdc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1cdd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1cde0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1cdf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
1ce00 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
1ce10 74 65 20 73 74 61 74 69 63 20 62 6f 6f 6c 20 49  te static bool I
1ce20 73 53 79 73 74 65 6d 45 66 36 41 73 73 65 6d 62  sSystemEf6Assemb
1ce30 6c 79 47 6c 6f 62 61 6c 28 29 0d 0a 20 20 20 20  lyGlobal()..    
1ce40 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
1ce50 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 73             if (s
1ce60 79 73 74 65 6d 45 66 36 41 73 73 65 6d 62 6c 79  ystemEf6Assembly
1ce70 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
1ce80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
1ce90 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a  eturn false;....
1cea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ceb0 72 65 74 75 72 6e 20 73 79 73 74 65 6d 45 66 36  return systemEf6
1cec0 41 73 73 65 6d 62 6c 79 2e 47 6c 6f 62 61 6c 41  Assembly.GlobalA
1ced0 73 73 65 6d 62 6c 79 43 61 63 68 65 3b 0d 0a 20  ssemblyCache;.. 
1cee0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
1cef0 20 20 20 20 20 20 20 20 20 20 23 65 6e 64 72 65            #endre
1cf00 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20  gion....        
1cf10 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
1cf20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1cf30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1cf40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1cf50 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
1cf60 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50         #region P
1cf70 75 62 6c 69 63 20 53 74 61 74 69 63 20 4d 65 74  ublic Static Met
1cf80 68 6f 64 73 0d 0a 20 20 20 20 20 20 20 20 20 20  hods..          
1cf90 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20    public static 
1cfa0 76 6f 69 64 20 42 72 65 61 6b 49 6e 74 6f 44 65  void BreakIntoDe
1cfb0 62 75 67 67 65 72 28 29 0d 0a 20 20 20 20 20 20  bugger()..      
1cfc0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
1cfd0 20 20 20 20 20 20 20 20 20 43 6f 6e 73 6f 6c 65           Console
1cfe0 2e 57 72 69 74 65 4c 69 6e 65 28 0d 0a 20 20 20  .WriteLine(..   
1cff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d000 20 22 41 74 74 61 63 68 20 61 20 64 65 62 75 67   "Attach a debug
1d010 67 65 72 20 74 6f 20 70 72 6f 63 65 73 73 20 7b  ger to process {
1d020 30 7d 20 61 6e 64 20 70 72 65 73 73 20 22 20 2b  0} and press " +
1d030 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1d040 20 20 20 20 20 20 22 61 6e 79 20 6b 65 79 20 74        "any key t
1d050 6f 20 63 6f 6e 74 69 6e 75 65 2e 22 2c 20 28 74  o continue.", (t
1d060 68 69 73 50 72 6f 63 65 73 73 20 21 3d 20 6e 75  hisProcess != nu
1d070 6c 6c 29 20 3f 0d 0a 20 20 20 20 20 20 20 20 20  ll) ?..         
1d080 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73 50             thisP
1d090 72 6f 63 65 73 73 2e 49 64 2e 54 6f 53 74 72 69  rocess.Id.ToStri
1d0a0 6e 67 28 29 20 3a 20 22 3c 75 6e 6b 6e 6f 77 6e  ng() : "<unknown
1d0b0 3e 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  >");....        
1d0c0 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20          try..   
1d0d0 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
1d0e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d0f0 20 20 20 20 43 6f 6e 73 6f 6c 65 2e 52 65 61 64      Console.Read
1d100 4b 65 79 28 74 72 75 65 29 3b 20 2f 2a 20 74 68  Key(true); /* th
1d110 72 6f 77 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20  row */..        
1d120 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
1d130 20 20 20 20 20 20 20 20 20 20 20 63 61 74 63 68             catch
1d140 20 28 49 6e 76 61 6c 69 64 4f 70 65 72 61 74 69   (InvalidOperati
1d150 6f 6e 45 78 63 65 70 74 69 6f 6e 29 20 2f 2f 20  onException) // 
1d160 43 6f 6e 73 6f 6c 65 2e 52 65 61 64 4b 65 79 0d  Console.ReadKey.
1d170 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1d180 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
1d190 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f          // do no
1d1a0 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20  thing...        
1d1b0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
1d1c0 20 20 20 20 20 20 20 20 20 20 20 20 20 44 65 62               Deb
1d1d0 75 67 67 65 72 2e 42 72 65 61 6b 28 29 3b 0d 0a  ugger.Break();..
1d1e0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
1d1f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 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 2f  ////////////////
1d220 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d230 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d240 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1d250 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 43 6f  public static Co
1d260 6e 66 69 67 75 72 61 74 69 6f 6e 20 43 72 65 61  nfiguration Crea
1d270 74 65 44 65 66 61 75 6c 74 28 29 0d 0a 20 20 20  teDefault()..   
1d280 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
1d290 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
1d2a0 6e 67 20 64 69 72 65 63 74 6f 72 79 20 3d 20 6e  ng directory = n
1d2b0 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ull;..          
1d2c0 20 20 20 20 20 20 73 74 72 69 6e 67 20 63 6f 72        string cor
1d2d0 65 46 69 6c 65 4e 61 6d 65 20 3d 20 6e 75 6c 6c  eFileName = null
1d2e0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
1d2f0 20 20 20 73 74 72 69 6e 67 20 6c 69 6e 71 46 69     string linqFi
1d300 6c 65 4e 61 6d 65 20 3d 20 6e 75 6c 6c 3b 0d 0a  leName = null;..
1d310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d320 73 74 72 69 6e 67 20 65 66 36 46 69 6c 65 4e 61  string ef6FileNa
1d330 6d 65 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20  me = null;..    
1d340 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
1d350 6e 67 20 64 65 73 69 67 6e 65 72 46 69 6c 65 4e  ng designerFileN
1d360 61 6d 65 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20  ame = null;.... 
1d370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 47                 G
1d380 65 74 44 65 66 61 75 6c 74 46 69 6c 65 4e 61 6d  etDefaultFileNam
1d390 65 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  es(..           
1d3a0 20 20 20 20 20 20 20 20 20 72 65 66 20 64 69 72           ref dir
1d3b0 65 63 74 6f 72 79 2c 20 72 65 66 20 63 6f 72 65  ectory, ref core
1d3c0 46 69 6c 65 4e 61 6d 65 2c 20 72 65 66 20 6c 69  FileName, ref li
1d3d0 6e 71 46 69 6c 65 4e 61 6d 65 2c 0d 0a 20 20 20  nqFileName,..   
1d3e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d3f0 20 72 65 66 20 65 66 36 46 69 6c 65 4e 61 6d 65   ref ef6FileName
1d400 2c 20 72 65 66 20 64 65 73 69 67 6e 65 72 46 69  , ref designerFi
1d410 6c 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20  leName);....    
1d420 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
1d430 72 6e 20 6e 65 77 20 43 6f 6e 66 69 67 75 72 61  rn new Configura
1d440 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20  tion(..         
1d450 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73 41             thisA
1d460 73 73 65 6d 62 6c 79 2c 20 6e 75 6c 6c 2c 20 6e  ssembly, null, n
1d470 75 6c 6c 2c 20 64 69 72 65 63 74 6f 72 79 2c 20  ull, directory, 
1d480 63 6f 72 65 46 69 6c 65 4e 61 6d 65 2c 0d 0a 20  coreFileName,.. 
1d490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d4a0 20 20 20 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 2c     linqFileName,
1d4b0 20 65 66 36 46 69 6c 65 4e 61 6d 65 2c 20 64 65   ef6FileName, de
1d4c0 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65 2c 20  signerFileName, 
1d4d0 6e 75 6c 6c 2c 20 6e 75 6c 6c 2c 0d 0a 20 20 20  null, null,..   
1d4e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d4f0 20 6e 75 6c 6c 2c 20 54 72 61 63 65 4f 70 73 2e   null, TraceOps.
1d500 44 65 62 75 67 46 6f 72 6d 61 74 2c 20 54 72 61  DebugFormat, Tra
1d510 63 65 4f 70 73 2e 54 72 61 63 65 46 6f 72 6d 61  ceOps.TraceForma
1d520 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t,..            
1d530 20 20 20 20 20 20 20 20 49 6e 73 74 61 6c 6c 46          InstallF
1d540 6c 61 67 73 2e 44 65 66 61 75 6c 74 2c 20 50 72  lags.Default, Pr
1d550 6f 76 69 64 65 72 46 6c 61 67 73 2e 44 65 66 61  oviderFlags.Defa
1d560 75 6c 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ult,..          
1d570 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 50            TraceP
1d580 72 69 6f 72 69 74 79 2e 44 65 66 61 75 6c 74 2c  riority.Default,
1d590 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 44   TracePriority.D
1d5a0 65 66 61 75 6c 74 2c 20 66 61 6c 73 65 2c 20 74  efault, false, t
1d5b0 72 75 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  rue,..          
1d5c0 20 20 20 20 20 20 20 20 20 20 66 61 6c 73 65 2c            false,
1d5d0 20 66 61 6c 73 65 2c 20 66 61 6c 73 65 2c 20 66   false, false, f
1d5e0 61 6c 73 65 2c 20 66 61 6c 73 65 2c 20 66 61 6c  alse, false, fal
1d5f0 73 65 2c 20 66 61 6c 73 65 2c 20 66 61 6c 73 65  se, false, false
1d600 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
1d610 20 20 20 20 20 20 20 66 61 6c 73 65 2c 20 66 61         false, fa
1d620 6c 73 65 2c 20 66 61 6c 73 65 2c 20 66 61 6c 73  lse, false, fals
1d630 65 2c 20 66 61 6c 73 65 2c 20 66 61 6c 73 65 2c  e, false, false,
1d640 20 66 61 6c 73 65 2c 20 66 61 6c 73 65 2c 0d 0a   false, false,..
1d650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d660 20 20 20 20 66 61 6c 73 65 2c 20 66 61 6c 73 65      false, false
1d670 2c 20 66 61 6c 73 65 2c 20 66 61 6c 73 65 2c 20  , false, false, 
1d680 66 61 6c 73 65 2c 20 66 61 6c 73 65 2c 20 66 61  false, false, fa
1d690 6c 73 65 2c 20 66 61 6c 73 65 2c 0d 0a 20 20 20  lse, false,..   
1d6a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d6b0 20 66 61 6c 73 65 2c 20 74 72 75 65 2c 20 74 72   false, true, tr
1d6c0 75 65 2c 20 66 61 6c 73 65 2c 20 66 61 6c 73 65  ue, false, false
1d6d0 2c 20 66 61 6c 73 65 29 3b 0d 0a 20 20 20 20 20  , false);..     
1d6e0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
1d6f0 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
1d700 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d710 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d720 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d730 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
1d740 20 20 20 20 20 20 20 20 20 20 20 5b 4d 65 74 68             [Meth
1d750 6f 64 49 6d 70 6c 28 4d 65 74 68 6f 64 49 6d 70  odImpl(MethodImp
1d760 6c 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e  lOptions.NoInlin
1d770 69 6e 67 29 5d 0d 0a 20 20 20 20 20 20 20 20 20  ing)]..         
1d780 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63     public static
1d790 20 62 6f 6f 6c 20 46 72 6f 6d 41 72 67 73 28 0d   bool FromArgs(.
1d7a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1d7b0 20 73 74 72 69 6e 67 5b 5d 20 61 72 67 73 2c 0d   string[] args,.
1d7c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1d7d0 20 62 6f 6f 6c 20 73 74 72 69 63 74 2c 0d 0a 20   bool strict,.. 
1d7e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
1d7f0 65 66 20 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e  ef Configuration
1d800 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2c 0d   configuration,.
1d810 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1d820 20 72 65 66 20 73 74 72 69 6e 67 20 65 72 72 6f   ref string erro
1d830 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  r..             
1d840 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20     )..          
1d850 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
1d860 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20       try..      
1d870 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
1d880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d890 20 69 66 20 28 61 72 67 73 20 3d 3d 20 6e 75 6c   if (args == nul
1d8a0 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
1d8b0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
1d8c0 72 6e 20 74 72 75 65 3b 0d 0a 0d 0a 20 20 20 20  rn true;....    
1d8d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d8e0 69 66 20 28 63 6f 6e 66 69 67 75 72 61 74 69 6f  if (configuratio
1d8f0 6e 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  n == null)..    
1d900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d910 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f      configuratio
1d920 6e 20 3d 20 43 6f 6e 66 69 67 75 72 61 74 69 6f  n = Configuratio
1d930 6e 2e 43 72 65 61 74 65 44 65 66 61 75 6c 74 28  n.CreateDefault(
1d940 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
1d950 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 6c 65            int le
1d960 6e 67 74 68 20 3d 20 61 72 67 73 2e 4c 65 6e 67  ngth = args.Leng
1d970 74 68 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  th;....         
1d980 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 20 28             for (
1d990 69 6e 74 20 69 6e 64 65 78 20 3d 20 30 3b 20 69  int index = 0; i
1d9a0 6e 64 65 78 20 3c 20 6c 65 6e 67 74 68 3b 20 69  ndex < length; i
1d9b0 6e 64 65 78 2b 2b 29 0d 0a 20 20 20 20 20 20 20  ndex++)..       
1d9c0 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
1d9d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d9e0 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 61          string a
1d9f0 72 67 20 3d 20 61 72 67 73 5b 69 6e 64 65 78 5d  rg = args[index]
1da00 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
1da10 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
1da20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1da30 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45           // NOTE
1da40 3a 20 53 6b 69 70 20 61 6e 79 20 61 72 67 75 6d  : Skip any argum
1da50 65 6e 74 20 74 68 61 74 20 69 73 20 6e 75 6c 6c  ent that is null
1da60 20 28 3f 29 20 6f 72 20 61 6e 20 65 6d 70 74 79   (?) or an empty
1da70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1da80 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
1da90 20 20 20 73 74 72 69 6e 67 2e 0d 0a 20 20 20 20     string...    
1daa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dab0 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
1dac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dad0 69 66 20 28 53 74 72 69 6e 67 2e 49 73 4e 75 6c  if (String.IsNul
1dae0 6c 4f 72 45 6d 70 74 79 28 61 72 67 29 29 0d 0a  lOrEmpty(arg))..
1daf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1db00 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74              cont
1db10 69 6e 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  inue;....       
1db20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1db30 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
1db40 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
1db50 4e 4f 54 45 3a 20 57 65 20 61 72 65 20 67 6f 69  NOTE: We are goi
1db60 6e 67 20 74 6f 20 6d 6f 64 69 66 79 20 74 68 65  ng to modify the
1db70 20 6f 72 69 67 69 6e 61 6c 20 61 72 67 75 6d 65   original argume
1db80 6e 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  nt..            
1db90 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
1dba0 20 20 20 20 20 62 79 20 72 65 6d 6f 76 69 6e 67       by removing
1dbb0 20 61 6e 79 20 6c 65 61 64 69 6e 67 20 6f 70 74   any leading opt
1dbc0 69 6f 6e 20 63 68 61 72 61 63 74 65 72 73 3b 0d  ion characters;.
1dbd0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1dbe0 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
1dbf0 20 20 74 68 65 72 65 66 6f 72 65 2c 20 77 65 20    therefore, we 
1dc00 75 73 65 20 61 20 6e 65 77 20 73 74 72 69 6e 67  use a new string
1dc10 20 74 6f 20 68 6f 6c 64 20 74 68 65 0d 0a 20 20   to hold the..  
1dc20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dc30 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 6d        //       m
1dc40 6f 64 69 66 69 65 64 20 61 72 67 75 6d 65 6e 74  odified argument
1dc50 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
1dc60 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
1dc70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dc80 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6e 65         string ne
1dc90 77 41 72 67 20 3d 20 61 72 67 3b 0d 0a 0d 0a 20  wArg = arg;.... 
1dca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dcb0 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
1dcc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dcd0 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 41 6c 6c 20     // NOTE: All 
1dce0 74 68 65 20 73 75 70 70 6f 72 74 65 64 20 63 6f  the supported co
1dcf0 6d 6d 61 6e 64 20 6c 69 6e 65 20 6f 70 74 69 6f  mmand line optio
1dd00 6e 73 20 6d 75 73 74 0d 0a 20 20 20 20 20 20 20  ns must..       
1dd10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dd20 20 2f 2f 20 20 20 20 20 20 20 62 65 67 69 6e 20   //       begin 
1dd30 77 69 74 68 20 61 6e 20 6f 70 74 69 6f 6e 20 63  with an option c
1dd40 68 61 72 61 63 74 65 72 20 28 65 2e 67 2e 20 61  haracter (e.g. a
1dd50 20 6d 69 6e 75 73 0d 0a 20 20 20 20 20 20 20 20   minus..        
1dd60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dd70 2f 2f 20 20 20 20 20 20 20 6f 72 20 66 6f 72 77  //       or forw
1dd80 61 72 64 20 73 6c 61 73 68 29 3b 20 61 74 74 65  ard slash); atte
1dd90 6d 70 74 20 74 6f 20 76 61 6c 69 64 61 74 65 20  mpt to validate 
1dda0 74 68 61 74 0d 0a 20 20 20 20 20 20 20 20 20 20  that..          
1ddb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
1ddc0 20 20 20 20 20 20 20 6e 6f 77 2e 20 20 49 66 20         now.  If 
1ddd0 77 65 20 66 61 69 6c 20 69 6e 20 73 74 72 69 63  we fail in stric
1dde0 74 20 6d 6f 64 65 2c 20 77 65 20 61 72 65 20 64  t mode, we are d
1ddf0 6f 6e 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  one;..          
1de00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
1de10 20 20 20 20 20 20 20 6f 74 68 65 72 77 69 73 65         otherwise
1de20 2c 20 6a 75 73 74 20 73 6b 69 70 20 74 68 69 73  , just skip this
1de30 20 61 72 67 75 6d 65 6e 74 20 61 6e 64 20 61 64   argument and ad
1de40 76 61 6e 63 65 0d 0a 20 20 20 20 20 20 20 20 20  vance..         
1de50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1de60 2f 20 20 20 20 20 20 20 74 6f 20 74 68 65 20 6e  /       to the n
1de70 65 78 74 20 6f 6e 65 2e 0d 0a 20 20 20 20 20 20  ext one...      
1de80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1de90 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
1dea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
1deb0 20 28 21 43 68 65 63 6b 4f 70 74 69 6f 6e 28 72   (!CheckOption(r
1dec0 65 66 20 6e 65 77 41 72 67 29 29 0d 0a 20 20 20  ef newArg))..   
1ded0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dee0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
1def0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1df00 20 20 20 20 65 72 72 6f 72 20 3d 20 54 72 61 63      error = Trac
1df10 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61  eOps.DebugAndTra
1df20 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ce(..           
1df30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1df40 20 20 20 20 20 54 72 61 63 65 50 72 69 6f 72 69       TracePriori
1df50 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75 67  ty.Lowest, debug
1df60 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20  Callback,..     
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 20 20 20 74 72 61 63 65             trace
1df90 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67  Callback, String
1dfa0 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  .Format(..      
1dfb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dfc0 20 20 20 20 20 20 20 20 20 20 22 55 6e 73 75 70            "Unsup
1dfd0 70 6f 72 74 65 64 20 63 6f 6d 6d 61 6e 64 20 6c  ported command l
1dfe0 69 6e 65 20 61 72 67 75 6d 65 6e 74 3a 20 7b 30  ine argument: {0
1dff0 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }",..           
1e000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e010 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28       ForDisplay(
1e020 61 72 67 29 29 2c 20 74 72 61 63 65 43 61 74 65  arg)), traceCate
1e030 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
1e040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e050 20 20 20 20 20 20 69 66 20 28 73 74 72 69 63 74        if (strict
1e060 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
1e070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e080 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
1e090 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1e0a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e0b0 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20  continue;..     
1e0c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e0d0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
1e0e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e0f0 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
1e100 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e              // N
1e110 4f 54 45 3a 20 41 6c 6c 20 74 68 65 20 73 75 70  OTE: All the sup
1e120 70 6f 72 74 65 64 20 63 6f 6d 6d 61 6e 64 20 6c  ported command l
1e130 69 6e 65 20 6f 70 74 69 6f 6e 73 20 6d 75 73 74  ine options must
1e140 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1e150 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
1e160 20 20 20 68 61 76 65 20 61 20 76 61 6c 75 65 3b     have a value;
1e170 20 74 68 65 72 65 66 6f 72 65 2c 20 61 74 74 65   therefore, atte
1e180 6d 70 74 20 74 6f 20 61 64 76 61 6e 63 65 0d 0a  mpt to advance..
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 20 2f 2f 20 20 20 20 20 20          //      
1e1b0 20 74 6f 20 69 74 20 6e 6f 77 2e 20 20 49 66 20   to it now.  If 
1e1c0 77 65 20 66 61 69 6c 2c 20 77 65 20 61 72 65 20  we fail, we are 
1e1d0 64 6f 6e 65 2e 0d 0a 20 20 20 20 20 20 20 20 20  done...         
1e1e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1e1f0 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
1e200 20 20 20 20 20 20 20 20 20 20 20 69 6e 64 65 78             index
1e210 2b 2b 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ++;....         
1e220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
1e230 66 20 28 69 6e 64 65 78 20 3e 3d 20 6c 65 6e 67  f (index >= leng
1e240 74 68 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  th)..           
1e250 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
1e260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e270 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
1e280 72 20 3d 20 54 72 61 63 65 4f 70 73 2e 44 65 62  r = TraceOps.Deb
1e290 75 67 41 6e 64 54 72 61 63 65 28 0d 0a 20 20 20  ugAndTrace(..   
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 20 20 20 54 72 61               Tra
1e2c0 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73  cePriority.Lowes
1e2d0 74 2c 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b  t, debugCallback
1e2e0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
1e2f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e300 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b     traceCallback
1e310 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  , String.Format(
1e320 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1e330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e340 20 20 22 4d 69 73 73 69 6e 67 20 76 61 6c 75 65    "Missing value
1e350 20 66 6f 72 20 6f 70 74 69 6f 6e 3a 20 7b 30 7d   for option: {0}
1e360 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
1e370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e380 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 61      ForDisplay(a
1e390 72 67 29 29 2c 20 74 72 61 63 65 43 61 74 65 67  rg)), traceCateg
1e3a0 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
1e3b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e3c0 20 20 20 20 20 69 66 20 28 73 74 72 69 63 74 29       if (strict)
1e3d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1e3e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e3f0 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
1e400 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
1e410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62                 b
1e420 72 65 61 6b 3b 0d 0a 20 20 20 20 20 20 20 20 20  reak;..         
1e430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
1e440 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1e450 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
1e460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e470 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a          // NOTE:
1e480 20 47 72 61 62 20 74 68 65 20 74 65 78 74 75 61   Grab the textua
1e490 6c 20 76 61 6c 75 65 20 6f 66 20 74 68 69 73 20  l value of this 
1e4a0 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 0d 0a 20 20  command line..  
1e4b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e4c0 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 6f        //       o
1e4d0 70 74 69 6f 6e 2e 0d 0a 20 20 20 20 20 20 20 20  ption...        
1e4e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e4f0 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
1e500 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
1e510 6e 67 20 74 65 78 74 20 3d 20 61 72 67 73 5b 69  ng text = args[i
1e520 6e 64 65 78 5d 3b 0d 0a 0d 0a 20 20 20 20 20 20  ndex];....      
1e530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e540 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
1e550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
1e560 20 4e 4f 54 45 3a 20 46 69 67 75 72 65 20 6f 75   NOTE: Figure ou
1e570 74 20 77 68 69 63 68 20 63 6f 6d 6d 61 6e 64 20  t which command 
1e580 6c 69 6e 65 20 6f 70 74 69 6f 6e 20 74 68 69 73  line option this
1e590 20 69 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20   is..           
1e5a0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
1e5b0 20 20 20 20 20 20 28 62 61 73 65 64 20 6f 6e 20        (based on 
1e5c0 61 20 70 61 72 74 69 61 6c 20 6e 61 6d 65 20 6d  a partial name m
1e5d0 61 74 63 68 29 20 61 6e 64 20 74 68 65 6e 20 74  atch) and then t
1e5e0 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ry..            
1e5f0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
1e600 20 20 20 20 20 74 6f 20 69 6e 74 65 72 70 72 65       to interpre
1e610 74 20 74 68 65 20 74 65 78 74 75 61 6c 20 76 61  t the textual va
1e620 6c 75 65 20 61 73 20 74 68 65 20 63 6f 72 72 65  lue as the corre
1e630 63 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ct..            
1e640 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
1e650 20 20 20 20 20 74 79 70 65 2e 0d 0a 20 20 20 20       type...    
1e660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e670 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
1e680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e690 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28  if (MatchOption(
1e6a0 6e 65 77 41 72 67 2c 20 22 62 72 65 61 6b 22 29  newArg, "break")
1e6b0 29 0d 0a 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 7b 0d 0a 20 20             {..  
1e6d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e6e0 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 3f 20            bool? 
1e6f0 76 61 6c 75 65 20 3d 20 50 61 72 73 65 42 6f 6f  value = ParseBoo
1e700 6c 65 61 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a 20  lean(text);.... 
1e710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e720 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76             if (v
1e730 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  alue == null).. 
1e740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e750 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
1e760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72                er
1e780 72 6f 72 20 3d 20 54 72 61 63 65 4f 70 73 2e 44  ror = TraceOps.D
1e790 65 62 75 67 41 6e 64 54 72 61 63 65 28 0d 0a 20  ebugAndTrace(.. 
1e7a0 20 20 20 20 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 20 20 20 54 72 61 63 65 50 72 69 6f 72 69 74 79     TracePriority
1e7d0 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75 67 43 61  .Lowest, debugCa
1e7e0 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20  llback,..       
1e7f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e800 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
1e810 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69  ceCallback, Stri
1e820 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20  ng.Format(..    
1e830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e850 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20 62 6f 6f  "Invalid {0} boo
1e860 6c 65 61 6e 20 76 61 6c 75 65 3a 20 7b 31 7d 22  lean value: {1}"
1e870 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
1e880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e890 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61         ForDispla
1e8a0 79 28 61 72 67 29 2c 20 46 6f 72 44 69 73 70 6c  y(arg), ForDispl
1e8b0 61 79 28 74 65 78 74 29 29 2c 0d 0a 20 20 20 20  ay(text)),..    
1e8c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e8d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e8e0 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
1e8f0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
1e900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e910 20 20 20 69 66 20 28 73 74 72 69 63 74 29 0d 0a     if (strict)..
1e920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e940 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
1e950 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
1e960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e970 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a       continue;..
1e980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e990 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
1e9a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1e9b0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
1e9c0 28 28 62 6f 6f 6c 29 76 61 6c 75 65 29 0d 0a 20  ((bool)value).. 
1e9d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e9e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 42                 B
1e9f0 72 65 61 6b 49 6e 74 6f 44 65 62 75 67 67 65 72  reakIntoDebugger
1ea00 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ();..           
1ea10 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
1ea20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ea30 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20          else if 
1ea40 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77  (MatchOption(new
1ea50 41 72 67 2c 20 22 63 6f 6e 66 69 67 56 65 72 73  Arg, "configVers
1ea60 69 6f 6e 22 29 29 0d 0a 20 20 20 20 20 20 20 20  ion"))..        
1ea70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ea80 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
1ea90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
1eaa0 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 63 6f 6e  onfiguration.con
1eab0 66 69 67 56 65 72 73 69 6f 6e 20 3d 20 74 65 78  figVersion = tex
1eac0 74 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t;..            
1ead0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
1eae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1eaf0 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28         else if (
1eb00 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41  MatchOption(newA
1eb10 72 67 2c 20 22 63 6f 6e 66 69 72 6d 22 29 29 0d  rg, "confirm")).
1eb20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1eb30 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
1eb40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1eb50 20 20 20 20 20 20 20 20 62 6f 6f 6c 3f 20 76 61          bool? va
1eb60 6c 75 65 20 3d 20 50 61 72 73 65 42 6f 6f 6c 65  lue = ParseBoole
1eb70 61 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a 20 20 20  an(text);....   
1eb80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1eb90 20 20 20 20 20 20 20 20 20 69 66 20 28 76 61 6c           if (val
1eba0 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ue == null)..   
1ebb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ebc0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
1ebd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ebe0 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
1ebf0 72 20 3d 20 54 72 61 63 65 4f 70 73 2e 44 65 62  r = TraceOps.Deb
1ec00 75 67 41 6e 64 54 72 61 63 65 28 0d 0a 20 20 20  ugAndTrace(..   
1ec10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ec20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ec30 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c   TracePriority.L
1ec40 6f 77 65 73 74 2c 20 64 65 62 75 67 43 61 6c 6c  owest, debugCall
1ec50 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20  back,..         
1ec60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ec70 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
1ec80 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67  Callback, String
1ec90 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  .Format(..      
1eca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ecb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 49                "I
1ecc0 6e 76 61 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c 65  nvalid {0} boole
1ecd0 61 6e 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d  an value: {1}",.
1ece0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1ecf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ed00 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28       ForDisplay(
1ed10 61 72 67 29 2c 20 46 6f 72 44 69 73 70 6c 61 79  arg), ForDisplay
1ed20 28 74 65 78 74 29 29 2c 0d 0a 20 20 20 20 20 20  (text)),..      
1ed30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ed40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
1ed50 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d  aceCategory);...
1ed60 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1ed70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ed80 20 69 66 20 28 73 74 72 69 63 74 29 0d 0a 20 20   if (strict)..  
1ed90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1eda0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1edb0 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
1edc0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
1edd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ede0 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20     continue;..  
1edf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ee00 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
1ee10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ee20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69             confi
1ee30 67 75 72 61 74 69 6f 6e 2e 63 6f 6e 66 69 72 6d  guration.confirm
1ee40 20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d   = (bool)value;.
1ee50 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1ee60 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
1ee70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ee80 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61 74      else if (Mat
1ee90 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c  chOption(newArg,
1eea0 20 22 63 6f 72 65 46 69 6c 65 4e 61 6d 65 22 29   "coreFileName")
1eeb0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
1eec0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
1eed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1eee0 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67            config
1eef0 75 72 61 74 69 6f 6e 2e 63 6f 72 65 46 69 6c 65  uration.coreFile
1ef00 4e 61 6d 65 20 3d 20 74 65 78 74 3b 0d 0a 20 20  Name = text;..  
1ef10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ef20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
1ef30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ef40 20 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f   else if (MatchO
1ef50 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 64  ption(newArg, "d
1ef60 65 62 75 67 22 29 29 0d 0a 20 20 20 20 20 20 20  ebug"))..       
1ef70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ef80 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
1ef90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1efa0 62 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d 20 50 61  bool? value = Pa
1efb0 72 73 65 42 6f 6f 6c 65 61 6e 28 74 65 78 74 29  rseBoolean(text)
1efc0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
1efd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1efe0 20 69 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75   if (value == nu
1eff0 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
1f000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f010 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
1f020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f030 20 20 20 20 65 72 72 6f 72 20 3d 20 54 72 61 63      error = Trac
1f040 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61  eOps.DebugAndTra
1f050 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ce(..           
1f060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f070 20 20 20 20 20 20 20 20 20 54 72 61 63 65 50 72           TracePr
1f080 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64  iority.Lowest, d
1f090 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20  ebugCallback,.. 
1f0a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f0b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f0c0 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b     traceCallback
1f0d0 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  , String.Format(
1f0e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1f0f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f100 20 20 20 20 20 20 22 49 6e 76 61 6c 69 64 20 7b        "Invalid {
1f110 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65  0} boolean value
1f120 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20  : {1}",..       
1f130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f140 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72               For
1f150 44 69 73 70 6c 61 79 28 61 72 67 29 2c 20 46 6f  Display(arg), Fo
1f160 72 44 69 73 70 6c 61 79 28 74 65 78 74 29 29 2c  rDisplay(text)),
1f170 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1f180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f190 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67        traceCateg
1f1a0 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
1f1b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f1c0 20 20 20 20 20 20 20 20 20 69 66 20 28 73 74 72           if (str
1f1d0 69 63 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ict)..          
1f1e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f1f0 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
1f200 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20   false;....     
1f210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f220 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69             conti
1f230 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  nue;..          
1f240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f250 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
1f260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f270 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e     configuration
1f280 2e 64 65 62 75 67 20 3d 20 28 62 6f 6f 6c 29 76  .debug = (bool)v
1f290 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alue;..         
1f2a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
1f2b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1f2c0 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69            else i
1f2d0 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e  f (MatchOption(n
1f2e0 65 77 41 72 67 2c 20 22 64 65 62 75 67 46 6f 72  ewArg, "debugFor
1f2f0 6d 61 74 22 29 29 0d 0a 20 20 20 20 20 20 20 20  mat"))..        
1f300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f310 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
1f320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
1f330 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 64 65 62  onfiguration.deb
1f340 75 67 46 6f 72 6d 61 74 20 3d 20 74 65 78 74 3b  ugFormat = text;
1f350 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1f360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
1f370 61 63 65 4f 70 73 2e 44 65 62 75 67 46 6f 72 6d  aceOps.DebugForm
1f380 61 74 20 3d 20 63 6f 6e 66 69 67 75 72 61 74 69  at = configurati
1f390 6f 6e 2e 64 65 62 75 67 46 6f 72 6d 61 74 3b 0d  on.debugFormat;.
1f3a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1f3b0 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
1f3c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f3d0 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61 74      else if (Mat
1f3e0 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c  chOption(newArg,
1f3f0 20 22 64 65 62 75 67 50 72 69 6f 72 69 74 79 22   "debugPriority"
1f400 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
1f410 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
1f420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f430 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63             objec
1f440 74 20 76 61 6c 75 65 20 3d 20 50 61 72 73 65 45  t value = ParseE
1f450 6e 75 6d 28 0d 0a 20 20 20 20 20 20 20 20 20 20  num(..          
1f460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f470 20 20 20 20 20 20 74 79 70 65 6f 66 28 54 72 61        typeof(Tra
1f480 63 65 50 72 69 6f 72 69 74 79 29 2c 20 74 65 78  cePriority), tex
1f490 74 2c 20 74 72 75 65 29 3b 0d 0a 0d 0a 20 20 20  t, true);....   
1f4a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f4b0 20 20 20 20 20 20 20 20 20 69 66 20 28 76 61 6c           if (val
1f4c0 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ue == null)..   
1f4d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f4e0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
1f4f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f500 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
1f510 72 20 3d 20 54 72 61 63 65 4f 70 73 2e 44 65 62  r = TraceOps.Deb
1f520 75 67 41 6e 64 54 72 61 63 65 28 0d 0a 20 20 20  ugAndTrace(..   
1f530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f550 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c   TracePriority.L
1f560 6f 77 65 73 74 2c 20 64 65 62 75 67 43 61 6c 6c  owest, debugCall
1f570 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20  back,..         
1f580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f590 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
1f5a0 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67  Callback, String
1f5b0 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  .Format(..      
1f5c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f5d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 49                "I
1f5e0 6e 76 61 6c 69 64 20 7b 30 7d 20 76 61 6c 75 65  nvalid {0} value
1f5f0 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20  : {1}",..       
1f600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f610 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72               For
1f620 44 69 73 70 6c 61 79 28 61 72 67 29 2c 20 46 6f  Display(arg), Fo
1f630 72 44 69 73 70 6c 61 79 28 74 65 78 74 29 29 2c  rDisplay(text)),
1f640 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1f650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f660 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67        traceCateg
1f670 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
1f680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f690 20 20 20 20 20 20 20 20 20 69 66 20 28 73 74 72           if (str
1f6a0 69 63 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ict)..          
1f6b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f6c0 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
1f6d0 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20   false;....     
1f6e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f6f0 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69             conti
1f700 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  nue;..          
1f710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f720 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
1f730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f740 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e     configuration
1f750 2e 64 65 62 75 67 50 72 69 6f 72 69 74 79 20 3d  .debugPriority =
1f760 20 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 29   (TracePriority)
1f770 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20  value;..        
1f780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f790 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62      TraceOps.Deb
1f7a0 75 67 50 72 69 6f 72 69 74 79 20 3d 20 63 6f 6e  ugPriority = con
1f7b0 66 69 67 75 72 61 74 69 6f 6e 2e 64 65 62 75 67  figuration.debug
1f7c0 50 72 69 6f 72 69 74 79 3b 0d 0a 20 20 20 20 20  Priority;..     
1f7d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f7e0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
1f7f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c                el
1f800 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69  se if (MatchOpti
1f810 6f 6e 28 6e 65 77 41 72 67 2c 20 22 64 65 73 69  on(newArg, "desi
1f820 67 6e 65 72 46 69 6c 65 4e 61 6d 65 22 29 29 0d  gnerFileName")).
1f830 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1f840 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
1f850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f860 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72          configur
1f870 61 74 69 6f 6e 2e 64 65 73 69 67 6e 65 72 46 69  ation.designerFi
1f880 6c 65 4e 61 6d 65 20 3d 20 74 65 78 74 3b 0d 0a  leName = text;..
1f890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f8a0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
1f8b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f8c0 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61 74 63     else if (Matc
1f8d0 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20  hOption(newArg, 
1f8e0 22 64 69 72 65 63 74 6f 72 79 22 29 29 0d 0a 20  "directory")).. 
1f8f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f900 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
1f910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f920 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74        configurat
1f930 69 6f 6e 2e 64 69 72 65 63 74 6f 72 79 20 3d 20  ion.directory = 
1f940 74 65 78 74 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  text;....       
1f950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f960 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
1f970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f980 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 2a 53       // NOTE: *S
1f990 50 45 43 49 41 4c 2a 20 4d 75 73 74 20 72 65 66  PECIAL* Must ref
1f9a0 72 65 73 68 20 74 68 65 20 66 69 6c 65 20 6e 61  resh the file na
1f9b0 6d 65 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20  mes..           
1f9c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f9d0 20 2f 2f 20 20 20 20 20 20 20 68 65 72 65 20 62   //       here b
1f9e0 65 63 61 75 73 65 20 74 68 65 20 75 6e 64 65 72  ecause the under
1f9f0 6c 79 69 6e 67 20 64 69 72 65 63 74 6f 72 79 0d  lying directory.
1fa00 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1fa10 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
1fa20 20 20 20 20 20 20 68 61 73 20 63 68 61 6e 67 65        has change
1fa30 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  d...            
1fa40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fa50 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
1fa60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fa70 73 74 72 69 6e 67 20 63 6f 72 65 46 69 6c 65 4e  string coreFileN
1fa80 61 6d 65 20 3d 20 63 6f 6e 66 69 67 75 72 61 74  ame = configurat
1fa90 69 6f 6e 2e 63 6f 72 65 46 69 6c 65 4e 61 6d 65  ion.coreFileName
1faa0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
1fab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fac0 20 69 66 20 28 21 53 74 72 69 6e 67 2e 49 73 4e   if (!String.IsN
1fad0 75 6c 6c 4f 72 45 6d 70 74 79 28 63 6f 72 65 46  ullOrEmpty(coreF
1fae0 69 6c 65 4e 61 6d 65 29 29 0d 0a 20 20 20 20 20  ileName))..     
1faf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fb00 20 20 20 20 20 20 20 20 20 20 20 63 6f 72 65 46             coreF
1fb10 69 6c 65 4e 61 6d 65 20 3d 20 50 61 74 68 2e 47  ileName = Path.G
1fb20 65 74 46 69 6c 65 4e 61 6d 65 28 63 6f 72 65 46  etFileName(coreF
1fb30 69 6c 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20  ileName);....   
1fb40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fb50 20 20 20 20 20 20 20 20 20 69 66 20 28 53 74 72           if (Str
1fb60 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74  ing.IsNullOrEmpt
1fb70 79 28 63 6f 72 65 46 69 6c 65 4e 61 6d 65 29 29  y(coreFileName))
1fb80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1fb90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fba0 20 20 63 6f 72 65 46 69 6c 65 4e 61 6d 65 20 3d    coreFileName =
1fbb0 20 49 6e 73 74 61 6c 6c 65 72 2e 43 6f 72 65 46   Installer.CoreF
1fbc0 69 6c 65 4e 61 6d 65 3b 0d 0a 0d 0a 20 20 20 20  ileName;....    
1fbd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fbe0 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72          configur
1fbf0 61 74 69 6f 6e 2e 63 6f 72 65 46 69 6c 65 4e 61  ation.coreFileNa
1fc00 6d 65 20 3d 20 50 61 74 68 2e 43 6f 6d 62 69 6e  me = Path.Combin
1fc10 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
1fc20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fc30 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f      configuratio
1fc40 6e 2e 64 69 72 65 63 74 6f 72 79 2c 20 63 6f 72  n.directory, cor
1fc50 65 46 69 6c 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20  eFileName);.... 
1fc60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fc70 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
1fc80 67 20 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 20 3d  g linqFileName =
1fc90 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6c   configuration.l
1fca0 69 6e 71 46 69 6c 65 4e 61 6d 65 3b 0d 0a 0d 0a  inqFileName;....
1fcb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fcc0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
1fcd0 21 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72  !String.IsNullOr
1fce0 45 6d 70 74 79 28 6c 69 6e 71 46 69 6c 65 4e 61  Empty(linqFileNa
1fcf0 6d 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  me))..          
1fd00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fd10 20 20 20 20 20 20 6c 69 6e 71 46 69 6c 65 4e 61        linqFileNa
1fd20 6d 65 20 3d 20 50 61 74 68 2e 47 65 74 46 69 6c  me = Path.GetFil
1fd30 65 4e 61 6d 65 28 6c 69 6e 71 46 69 6c 65 4e 61  eName(linqFileNa
1fd40 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  me);....        
1fd50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fd60 20 20 20 20 69 66 20 28 53 74 72 69 6e 67 2e 49      if (String.I
1fd70 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 6c 69 6e  sNullOrEmpty(lin
1fd80 71 46 69 6c 65 4e 61 6d 65 29 29 0d 0a 20 20 20  qFileName))..   
1fd90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fda0 20 20 20 20 20 20 20 20 20 20 20 20 20 6c 69 6e               lin
1fdb0 71 46 69 6c 65 4e 61 6d 65 20 3d 20 49 6e 73 74  qFileName = Inst
1fdc0 61 6c 6c 65 72 2e 4c 69 6e 71 46 69 6c 65 4e 61  aller.LinqFileNa
1fdd0 6d 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  me;....         
1fde0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fdf0 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e     configuration
1fe00 2e 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 20 3d 20  .linqFileName = 
1fe10 50 61 74 68 2e 43 6f 6d 62 69 6e 65 28 0d 0a 20  Path.Combine(.. 
1fe20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fe30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
1fe40 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 64 69 72  onfiguration.dir
1fe50 65 63 74 6f 72 79 2c 20 6c 69 6e 71 46 69 6c 65  ectory, linqFile
1fe60 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  Name);....      
1fe70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fe80 20 20 20 20 20 20 73 74 72 69 6e 67 20 65 66 36        string ef6
1fe90 46 69 6c 65 4e 61 6d 65 20 3d 20 63 6f 6e 66 69  FileName = confi
1fea0 67 75 72 61 74 69 6f 6e 2e 65 66 36 46 69 6c 65  guration.ef6File
1feb0 4e 61 6d 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  Name;....       
1fec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fed0 20 20 20 20 20 69 66 20 28 21 53 74 72 69 6e 67       if (!String
1fee0 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 65  .IsNullOrEmpty(e
1fef0 66 36 46 69 6c 65 4e 61 6d 65 29 29 0d 0a 20 20  f6FileName))..  
1ff00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ff10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 66                ef
1ff20 36 46 69 6c 65 4e 61 6d 65 20 3d 20 50 61 74 68  6FileName = Path
1ff30 2e 47 65 74 46 69 6c 65 4e 61 6d 65 28 65 66 36  .GetFileName(ef6
1ff40 46 69 6c 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20  FileName);....  
1ff50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ff60 20 20 20 20 20 20 20 20 20 20 69 66 20 28 53 74            if (St
1ff70 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70  ring.IsNullOrEmp
1ff80 74 79 28 65 66 36 46 69 6c 65 4e 61 6d 65 29 29  ty(ef6FileName))
1ff90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1ffa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ffb0 20 20 65 66 36 46 69 6c 65 4e 61 6d 65 20 3d 20    ef6FileName = 
1ffc0 49 6e 73 74 61 6c 6c 65 72 2e 45 66 36 46 69 6c  Installer.Ef6Fil
1ffd0 65 4e 61 6d 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  eName;....      
1ffe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fff0 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74        configurat
20000 69 6f 6e 2e 65 66 36 46 69 6c 65 4e 61 6d 65 20  ion.ef6FileName 
20010 3d 20 50 61 74 68 2e 43 6f 6d 62 69 6e 65 28 0d  = Path.Combine(.
20020 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
20030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20040 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 64   configuration.d
20050 69 72 65 63 74 6f 72 79 2c 20 65 66 36 46 69 6c  irectory, ef6Fil
20060 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20  eName);....     
20070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20080 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 64 65         string de
20090 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65 20 3d  signerFileName =
200a0 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 64   configuration.d
200b0 65 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65 3b  esignerFileName;
200c0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
200d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
200e0 69 66 20 28 21 53 74 72 69 6e 67 2e 49 73 4e 75  if (!String.IsNu
200f0 6c 6c 4f 72 45 6d 70 74 79 28 64 65 73 69 67 6e  llOrEmpty(design
20100 65 72 46 69 6c 65 4e 61 6d 65 29 29 0d 0a 20 20  erFileName))..  
20110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65                de
20130 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65 20 3d  signerFileName =
20140 20 50 61 74 68 2e 47 65 74 46 69 6c 65 4e 61 6d   Path.GetFileNam
20150 65 28 64 65 73 69 67 6e 65 72 46 69 6c 65 4e 61  e(designerFileNa
20160 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  me);....        
20170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20180 20 20 20 20 69 66 20 28 53 74 72 69 6e 67 2e 49      if (String.I
20190 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 64 65 73  sNullOrEmpty(des
201a0 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65 29 29 0d  ignerFileName)).
201b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
201c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
201d0 20 64 65 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d   designerFileNam
201e0 65 20 3d 20 49 6e 73 74 61 6c 6c 65 72 2e 44 65  e = Installer.De
201f0 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65 3b 0d  signerFileName;.
20200 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
20210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
20220 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 64 65 73  onfiguration.des
20230 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65 20 3d 20  ignerFileName = 
20240 50 61 74 68 2e 43 6f 6d 62 69 6e 65 28 0d 0a 20  Path.Combine(.. 
20250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
20270 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 64 69 72  onfiguration.dir
20280 65 63 74 6f 72 79 2c 20 64 65 73 69 67 6e 65 72  ectory, designer
20290 46 69 6c 65 4e 61 6d 65 29 3b 0d 0a 20 20 20 20  FileName);..    
202a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
202b0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
202c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
202d0 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74  lse if (MatchOpt
202e0 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 65 66 36  ion(newArg, "ef6
202f0 46 69 6c 65 4e 61 6d 65 22 29 29 0d 0a 20 20 20  FileName"))..   
20300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20310 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
20320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20330 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f      configuratio
20340 6e 2e 65 66 36 46 69 6c 65 4e 61 6d 65 20 3d 20  n.ef6FileName = 
20350 74 65 78 74 3b 0d 0a 20 20 20 20 20 20 20 20 20  text;..         
20360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
20370 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
20380 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69            else i
20390 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e  f (MatchOption(n
203a0 65 77 41 72 67 2c 20 22 69 6e 73 74 61 6c 6c 22  ewArg, "install"
203b0 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
203c0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
203d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
203e0 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 3f             bool?
203f0 20 76 61 6c 75 65 20 3d 20 50 61 72 73 65 42 6f   value = ParseBo
20400 6f 6c 65 61 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a  olean(text);....
20410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20420 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
20430 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  value == null)..
20440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20450 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
20460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
20480 72 72 6f 72 20 3d 20 54 72 61 63 65 4f 70 73 2e  rror = TraceOps.
20490 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 0d 0a  DebugAndTrace(..
204a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
204b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
204c0 20 20 20 20 54 72 61 63 65 50 72 69 6f 72 69 74      TracePriorit
204d0 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75 67 43  y.Lowest, debugC
204e0 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20  allback,..      
204f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
20510 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72  aceCallback, Str
20520 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
20530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20550 20 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20 62 6f   "Invalid {0} bo
20560 6f 6c 65 61 6e 20 76 61 6c 75 65 3a 20 7b 31 7d  olean value: {1}
20570 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
20580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20590 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c          ForDispl
205a0 61 79 28 61 72 67 29 2c 20 46 6f 72 44 69 73 70  ay(arg), ForDisp
205b0 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a 20 20 20  lay(text)),..   
205c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
205d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
205e0 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
205f0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
20600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20610 20 20 20 20 69 66 20 28 73 74 72 69 63 74 29 0d      if (strict).
20620 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
20630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20640 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
20650 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e;....          
20660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20670 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d        continue;.
20680 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
20690 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
206a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
206b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
206c0 6e 66 69 67 75 72 61 74 69 6f 6e 2e 69 6e 73 74  nfiguration.inst
206d0 61 6c 6c 20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75  all = (bool)valu
206e0 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
206f0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
20700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20710 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28         else if (
20720 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41  MatchOption(newA
20730 72 67 2c 20 22 69 6e 73 74 61 6c 6c 46 6c 61 67  rg, "installFlag
20740 73 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  s"))..          
20750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
20760 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
20770 20 20 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a               obj
20780 65 63 74 20 76 61 6c 75 65 20 3d 20 50 61 72 73  ect value = Pars
20790 65 45 6e 75 6d 28 0d 0a 20 20 20 20 20 20 20 20  eEnum(..        
207a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
207b0 20 20 20 20 20 20 20 20 74 79 70 65 6f 66 28 49          typeof(I
207c0 6e 73 74 61 6c 6c 46 6c 61 67 73 29 2c 20 74 65  nstallFlags), te
207d0 78 74 2c 20 74 72 75 65 29 3b 0d 0a 0d 0a 20 20  xt, true);....  
207e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
207f0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76 61            if (va
20800 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  lue == null)..  
20810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20820 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
20830 20 20 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 20 20 20 65 72 72               err
20850 6f 72 20 3d 20 54 72 61 63 65 4f 70 73 2e 44 65  or = TraceOps.De
20860 62 75 67 41 6e 64 54 72 61 63 65 28 0d 0a 20 20  bugAndTrace(..  
20870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20890 20 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e    TracePriority.
208a0 4c 6f 77 65 73 74 2c 20 64 65 62 75 67 43 61 6c  Lowest, debugCal
208b0 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20  lback,..        
208c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
208d0 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
208e0 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e  eCallback, Strin
208f0 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
20900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
20920 49 6e 76 61 6c 69 64 20 7b 30 7d 20 76 61 6c 75  Invalid {0} valu
20930 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20  e: {1}",..      
20940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f                Fo
20960 72 44 69 73 70 6c 61 79 28 61 72 67 29 2c 20 46  rDisplay(arg), F
20970 6f 72 44 69 73 70 6c 61 79 28 74 65 78 74 29 29  orDisplay(text))
20980 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
20990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
209a0 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65         traceCate
209b0 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
209c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
209d0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 73 74            if (st
209e0 72 69 63 74 29 0d 0a 20 20 20 20 20 20 20 20 20  rict)..         
209f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20a00 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
20a10 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20  n false;....    
20a20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20a30 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74              cont
20a40 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  inue;..         
20a50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20a60 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
20a70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20a80 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f      configuratio
20a90 6e 2e 69 6e 73 74 61 6c 6c 46 6c 61 67 73 20 3d  n.installFlags =
20aa0 20 28 49 6e 73 74 61 6c 6c 46 6c 61 67 73 29 76   (InstallFlags)v
20ab0 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alue;..         
20ac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
20ad0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
20ae0 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69            else i
20af0 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e  f (MatchOption(n
20b00 65 77 41 72 67 2c 20 22 6c 69 6e 71 46 69 6c 65  ewArg, "linqFile
20b10 4e 61 6d 65 22 29 29 0d 0a 20 20 20 20 20 20 20  Name"))..       
20b20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20b30 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
20b40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20b50 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6c 69  configuration.li
20b60 6e 71 46 69 6c 65 4e 61 6d 65 20 3d 20 74 65 78  nqFileName = tex
20b70 74 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t;..            
20b80 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
20b90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20ba0 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28         else if (
20bb0 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41  MatchOption(newA
20bc0 72 67 2c 20 22 6c 6f 67 46 69 6c 65 4e 61 6d 65  rg, "logFileName
20bd0 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  "))..           
20be0 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
20bf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20c00 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66              conf
20c10 69 67 75 72 61 74 69 6f 6e 2e 6c 6f 67 46 69 6c  iguration.logFil
20c20 65 4e 61 6d 65 20 3d 20 74 65 78 74 3b 0d 0a 20  eName = text;.. 
20c30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20c40 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
20c50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20c60 20 20 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68    else if (Match
20c70 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22  Option(newArg, "
20c80 6e 6f 43 6f 6d 70 61 63 74 22 29 29 0d 0a 20 20  noCompact"))..  
20c90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20ca0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
20cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20cc0 20 20 20 20 20 62 6f 6f 6c 3f 20 76 61 6c 75 65       bool? value
20cd0 20 3d 20 50 61 72 73 65 42 6f 6f 6c 65 61 6e 28   = ParseBoolean(
20ce0 74 65 78 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  text);....      
20cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20d00 20 20 20 20 20 20 69 66 20 28 76 61 6c 75 65 20        if (value 
20d10 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
20d20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20d30 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
20d40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20d50 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d           error =
20d60 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41   TraceOps.DebugA
20d70 6e 64 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20  ndTrace(..      
20d80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20d90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
20da0 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65  acePriority.Lowe
20db0 73 74 2c 20 64 65 62 75 67 43 61 6c 6c 62 61 63  st, debugCallbac
20dc0 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  k,..            
20dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20de0 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c          traceCal
20df0 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f  lback, String.Fo
20e00 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
20e10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20e20 20 20 20 20 20 20 20 20 20 20 20 22 49 6e 76 61             "Inva
20e30 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20  lid {0} boolean 
20e40 76 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20  value: {1}",..  
20e50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20e60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20e70 20 20 46 6f 72 44 69 73 70 6c 61 79 28 61 72 67    ForDisplay(arg
20e80 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 74 65  ), ForDisplay(te
20e90 78 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  xt)),..         
20ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20eb0 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
20ec0 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  Category);....  
20ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
20ef0 20 28 73 74 72 69 63 74 29 0d 0a 20 20 20 20 20   (strict)..     
20f00 20 20 20 20 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 20 20 20 72                 r
20f20 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a  eturn false;....
20f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20f40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20f50 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20  continue;..     
20f60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20f70 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
20f80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20f90 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72          configur
20fa0 61 74 69 6f 6e 2e 6e 6f 43 6f 6d 70 61 63 74 20  ation.noCompact 
20fb0 3d 20 28 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a  = (bool)value;..
20fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20fd0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
20fe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20ff0 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61 74 63     else if (Matc
21000 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20  hOption(newArg, 
21010 22 6e 6f 43 6f 6e 73 6f 6c 65 22 29 29 0d 0a 20  "noConsole")).. 
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 7b 0d 0a 20 20 20 20 20 20         {..      
21040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21050 20 20 20 20 20 20 62 6f 6f 6c 3f 20 76 61 6c 75        bool? valu
21060 65 20 3d 20 50 61 72 73 65 42 6f 6f 6c 65 61 6e  e = ParseBoolean
21070 28 74 65 78 74 29 3b 0d 0a 0d 0a 20 20 20 20 20  (text);....     
21080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21090 20 20 20 20 20 20 20 69 66 20 28 76 61 6c 75 65         if (value
210a0 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
210b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
210c0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
210d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
210e0 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20            error 
210f0 3d 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67  = TraceOps.Debug
21100 41 6e 64 54 72 61 63 65 28 0d 0a 20 20 20 20 20  AndTrace(..     
21110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
21130 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77  racePriority.Low
21140 65 73 74 2c 20 64 65 62 75 67 43 61 6c 6c 62 61  est, debugCallba
21150 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ck,..           
21160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21170 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
21180 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46  llback, String.F
21190 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
211a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
211b0 20 20 20 20 20 20 20 20 20 20 20 20 22 49 6e 76              "Inv
211c0 61 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e  alid {0} boolean
211d0 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20   value: {1}",.. 
211e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
211f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21200 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 61 72     ForDisplay(ar
21210 67 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 74  g), ForDisplay(t
21220 65 78 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20  ext)),..        
21230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21240 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
21250 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20  eCategory);.... 
21260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
21280 66 20 28 73 74 72 69 63 74 29 0d 0a 20 20 20 20  f (strict)..    
21290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
212a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
212b0 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d  return false;...
212c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
212d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
212e0 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20   continue;..    
212f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21300 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
21310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21320 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75           configu
21330 72 61 74 69 6f 6e 2e 6e 6f 43 6f 6e 73 6f 6c 65  ration.noConsole
21340 20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d   = (bool)value;.
21350 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
21360 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
21370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21380 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61 74      else if (Mat
21390 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c  chOption(newArg,
213a0 20 22 6e 6f 44 65 73 6b 74 6f 70 22 29 29 0d 0a   "noDesktop"))..
213b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
213c0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
213d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
213e0 20 20 20 20 20 20 20 62 6f 6f 6c 3f 20 76 61 6c         bool? val
213f0 75 65 20 3d 20 50 61 72 73 65 42 6f 6f 6c 65 61  ue = ParseBoolea
21400 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a 20 20 20 20  n(text);....    
21410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21420 20 20 20 20 20 20 20 20 69 66 20 28 76 61 6c 75          if (valu
21430 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  e == null)..    
21440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21450 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
21460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21470 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72             error
21480 20 3d 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75   = TraceOps.Debu
21490 67 41 6e 64 54 72 61 63 65 28 0d 0a 20 20 20 20  gAndTrace(..    
214a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
214b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
214c0 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f  TracePriority.Lo
214d0 77 65 73 74 2c 20 64 65 62 75 67 43 61 6c 6c 62  west, debugCallb
214e0 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ack,..          
214f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21500 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
21510 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e  allback, String.
21520 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
21530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21540 20 20 20 20 20 20 20 20 20 20 20 20 20 22 49 6e               "In
21550 76 61 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c 65 61  valid {0} boolea
21560 6e 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a  n value: {1}",..
21570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21590 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 61      ForDisplay(a
215a0 72 67 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28  rg), ForDisplay(
215b0 74 65 78 74 29 29 2c 0d 0a 20 20 20 20 20 20 20  text)),..       
215c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
215d0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
215e0 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
215f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21610 69 66 20 28 73 74 72 69 63 74 29 0d 0a 20 20 20  if (strict)..   
21620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21640 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
21650 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
21660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21670 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20    continue;..   
21680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21690 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
216a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
216b0 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67            config
216c0 75 72 61 74 69 6f 6e 2e 6e 6f 44 65 73 6b 74 6f  uration.noDeskto
216d0 70 20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75 65 3b  p = (bool)value;
216e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
216f0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
21700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21710 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61       else if (Ma
21720 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67  tchOption(newArg
21730 2c 20 22 6e 6f 4c 6f 67 22 29 29 0d 0a 20 20 20  , "noLog"))..   
21740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21750 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
21760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21770 20 20 20 20 62 6f 6f 6c 3f 20 76 61 6c 75 65 20      bool? value 
21780 3d 20 50 61 72 73 65 42 6f 6f 6c 65 61 6e 28 74  = ParseBoolean(t
21790 65 78 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ext);....       
217a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
217b0 20 20 20 20 20 69 66 20 28 76 61 6c 75 65 20 3d       if (value =
217c0 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
217d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
217e0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
217f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21800 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20          error = 
21810 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e  TraceOps.DebugAn
21820 64 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20  dTrace(..       
21830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21840 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61               Tra
21850 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73  cePriority.Lowes
21860 74 2c 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b  t, debugCallback
21870 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
21880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21890 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c         traceCall
218a0 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72  back, String.For
218b0 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
218c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
218d0 20 20 20 20 20 20 20 20 20 20 22 49 6e 76 61 6c            "Inval
218e0 69 64 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76  id {0} boolean v
218f0 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20  alue: {1}",..   
21900 20 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 20 20 20                  
21920 20 46 6f 72 44 69 73 70 6c 61 79 28 61 72 67 29   ForDisplay(arg)
21930 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 74 65 78  , ForDisplay(tex
21940 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  t)),..          
21950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21960 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
21970 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20  ategory);....   
21980 20 20 20 20 20 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 69 66 20               if 
219a0 28 73 74 72 69 63 74 29 0d 0a 20 20 20 20 20 20  (strict)..      
219b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
219c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
219d0 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20  turn false;.... 
219e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
219f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
21a00 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20  ontinue;..      
21a10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21a20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
21a30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21a40 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61         configura
21a50 74 69 6f 6e 2e 6e 6f 4c 6f 67 20 3d 20 28 62 6f  tion.noLog = (bo
21a60 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20  ol)value;..     
21a70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21a80 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
21a90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c                el
21aa0 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69  se if (MatchOpti
21ab0 6f 6e 28 6e 65 77 41 72 67 2c 20 22 6e 6f 4e 65  on(newArg, "noNe
21ac0 74 46 78 32 30 22 29 29 0d 0a 20 20 20 20 20 20  tFx20"))..      
21ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21ae0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
21af0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21b00 20 62 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d 20 50   bool? value = P
21b10 61 72 73 65 42 6f 6f 6c 65 61 6e 28 74 65 78 74  arseBoolean(text
21b20 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
21b30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21b40 20 20 69 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e    if (value == n
21b50 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
21b60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21b70 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
21b80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21b90 20 20 20 20 20 65 72 72 6f 72 20 3d 20 54 72 61       error = Tra
21ba0 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72  ceOps.DebugAndTr
21bb0 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ace(..          
21bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21bd0 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 50            TraceP
21be0 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20  riority.Lowest, 
21bf0 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a  debugCallback,..
21c00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21c10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21c20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63      traceCallbac
21c30 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  k, String.Format
21c40 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
21c50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21c60 20 20 20 20 20 20 20 22 49 6e 76 61 6c 69 64 20         "Invalid 
21c70 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75  {0} boolean valu
21c80 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20  e: {1}",..      
21c90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f                Fo
21cb0 72 44 69 73 70 6c 61 79 28 61 72 67 29 2c 20 46  rDisplay(arg), F
21cc0 6f 72 44 69 73 70 6c 61 79 28 74 65 78 74 29 29  orDisplay(text))
21cd0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
21ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21cf0 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65         traceCate
21d00 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
21d10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21d20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 73 74            if (st
21d30 72 69 63 74 29 0d 0a 20 20 20 20 20 20 20 20 20  rict)..         
21d40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21d50 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
21d60 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20  n false;....    
21d70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21d80 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74              cont
21d90 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  inue;..         
21da0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21db0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
21dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21dd0 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f      configuratio
21de0 6e 2e 6e 6f 4e 65 74 46 78 32 30 20 3d 20 28 62  n.noNetFx20 = (b
21df0 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20  ool)value;..    
21e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21e10 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
21e20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
21e30 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74  lse if (MatchOpt
21e40 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 6e 6f 4e  ion(newArg, "noN
21e50 65 74 46 78 33 35 22 29 29 0d 0a 20 20 20 20 20  etFx35"))..     
21e60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21e70 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
21e80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21e90 20 20 62 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d 20    bool? value = 
21ea0 50 61 72 73 65 42 6f 6f 6c 65 61 6e 28 74 65 78  ParseBoolean(tex
21eb0 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  t);....         
21ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21ed0 20 20 20 69 66 20 28 76 61 6c 75 65 20 3d 3d 20     if (value == 
21ee0 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
21ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21f00 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
21f10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21f20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 54 72        error = Tr
21f30 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54  aceOps.DebugAndT
21f40 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20  race(..         
21f50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21f60 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
21f70 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c  Priority.Lowest,
21f80 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d   debugCallback,.
21f90 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
21fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21fb0 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61       traceCallba
21fc0 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ck, String.Forma
21fd0 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
21fe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21ff0 20 20 20 20 20 20 20 20 22 49 6e 76 61 6c 69 64          "Invalid
22000 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 61 6c   {0} boolean val
22010 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20  ue: {1}",..     
22020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46                 F
22040 6f 72 44 69 73 70 6c 61 79 28 61 72 67 29 2c 20  orDisplay(arg), 
22050 46 6f 72 44 69 73 70 6c 61 79 28 74 65 78 74 29  ForDisplay(text)
22060 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
22070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22080 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74          traceCat
22090 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20  egory);....     
220a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
220b0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 73             if (s
220c0 74 72 69 63 74 29 0d 0a 20 20 20 20 20 20 20 20  trict)..        
220d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
220e0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
220f0 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20  rn false;....   
22100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22110 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
22120 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20  tinue;..        
22130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22140 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
22150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22160 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69       configurati
22170 6f 6e 2e 6e 6f 4e 65 74 46 78 33 35 20 3d 20 28  on.noNetFx35 = (
22180 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20 20 20  bool)value;..   
22190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
221a0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
221b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
221c0 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70  else if (MatchOp
221d0 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 6e 6f  tion(newArg, "no
221e0 4e 65 74 46 78 34 30 22 29 29 0d 0a 20 20 20 20  NetFx40"))..    
221f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22200 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
22210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22220 20 20 20 62 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d     bool? value =
22230 20 50 61 72 73 65 42 6f 6f 6c 65 61 6e 28 74 65   ParseBoolean(te
22240 78 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  xt);....        
22250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22260 20 20 20 20 69 66 20 28 76 61 6c 75 65 20 3d 3d      if (value ==
22270 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
22280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22290 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
222a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
222b0 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 54         error = T
222c0 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64  raceOps.DebugAnd
222d0 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20  Trace(..        
222e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
222f0 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
22300 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74  ePriority.Lowest
22310 2c 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c  , debugCallback,
22320 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
22330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22340 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62        traceCallb
22350 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d  ack, String.Form
22360 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
22370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22380 20 20 20 20 20 20 20 20 20 22 49 6e 76 61 6c 69           "Invali
22390 64 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 61  d {0} boolean va
223a0 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20  lue: {1}",..    
223b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
223c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
223d0 46 6f 72 44 69 73 70 6c 61 79 28 61 72 67 29 2c  ForDisplay(arg),
223e0 20 46 6f 72 44 69 73 70 6c 61 79 28 74 65 78 74   ForDisplay(text
223f0 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  )),..           
22400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22410 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
22420 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
22430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22440 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
22450 73 74 72 69 63 74 29 0d 0a 20 20 20 20 20 20 20  strict)..       
22460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22470 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
22480 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20  urn false;....  
22490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
224a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
224b0 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20  ntinue;..       
224c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
224d0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
224e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
224f0 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74        configurat
22500 69 6f 6e 2e 6e 6f 4e 65 74 46 78 34 30 20 3d 20  ion.noNetFx40 = 
22510 28 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20 20  (bool)value;..  
22520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22530 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
22540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22550 20 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f   else if (MatchO
22560 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 6e  ption(newArg, "n
22570 6f 4e 65 74 46 78 34 35 22 29 29 0d 0a 20 20 20  oNetFx45"))..   
22580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22590 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
225a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
225b0 20 20 20 20 62 6f 6f 6c 3f 20 76 61 6c 75 65 20      bool? value 
225c0 3d 20 50 61 72 73 65 42 6f 6f 6c 65 61 6e 28 74  = ParseBoolean(t
225d0 65 78 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ext);....       
225e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
225f0 20 20 20 20 20 69 66 20 28 76 61 6c 75 65 20 3d       if (value =
22600 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
22610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22620 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
22630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22640 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20          error = 
22650 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e  TraceOps.DebugAn
22660 64 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20  dTrace(..       
22670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22680 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61               Tra
22690 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73  cePriority.Lowes
226a0 74 2c 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b  t, debugCallback
226b0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
226c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
226d0 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c         traceCall
226e0 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72  back, String.For
226f0 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
22700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22710 20 20 20 20 20 20 20 20 20 20 22 49 6e 76 61 6c            "Inval
22720 69 64 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76  id {0} boolean v
22730 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20  alue: {1}",..   
22740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22760 20 46 6f 72 44 69 73 70 6c 61 79 28 61 72 67 29   ForDisplay(arg)
22770 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 74 65 78  , ForDisplay(tex
22780 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  t)),..          
22790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
227a0 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
227b0 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20  ategory);....   
227c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
227d0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
227e0 28 73 74 72 69 63 74 29 0d 0a 20 20 20 20 20 20  (strict)..      
227f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
22810 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20  turn false;.... 
22820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
22840 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20  ontinue;..      
22850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22860 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
22870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22880 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61         configura
22890 74 69 6f 6e 2e 6e 6f 4e 65 74 46 78 34 35 20 3d  tion.noNetFx45 =
228a0 20 28 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20   (bool)value;.. 
228b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
228c0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
228d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
228e0 20 20 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68    else if (Match
228f0 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22  Option(newArg, "
22900 6e 6f 4e 65 74 46 78 34 35 31 22 29 29 0d 0a 20  noNetFx451")).. 
22910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22920 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
22930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22940 20 20 20 20 20 20 62 6f 6f 6c 3f 20 76 61 6c 75        bool? valu
22950 65 20 3d 20 50 61 72 73 65 42 6f 6f 6c 65 61 6e  e = ParseBoolean
22960 28 74 65 78 74 29 3b 0d 0a 0d 0a 20 20 20 20 20  (text);....     
22970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22980 20 20 20 20 20 20 20 69 66 20 28 76 61 6c 75 65         if (value
22990 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
229a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
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 20 20 20 20 20 20                  
229d0 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20            error 
229e0 3d 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67  = TraceOps.Debug
229f0 41 6e 64 54 72 61 63 65 28 0d 0a 20 20 20 20 20  AndTrace(..     
22a00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22a10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
22a20 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77  racePriority.Low
22a30 65 73 74 2c 20 64 65 62 75 67 43 61 6c 6c 62 61  est, debugCallba
22a40 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ck,..           
22a50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22a60 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
22a70 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46  llback, String.F
22a80 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
22a90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22aa0 20 20 20 20 20 20 20 20 20 20 20 20 22 49 6e 76              "Inv
22ab0 61 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e  alid {0} boolean
22ac0 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20   value: {1}",.. 
22ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22af0 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 61 72     ForDisplay(ar
22b00 67 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 74  g), ForDisplay(t
22b10 65 78 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20  ext)),..        
22b20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22b30 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
22b40 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20  eCategory);.... 
22b50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22b60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
22b70 66 20 28 73 74 72 69 63 74 29 0d 0a 20 20 20 20  f (strict)..    
22b80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22b90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22ba0 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d  return false;...
22bb0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
22bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22bd0 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20   continue;..    
22be0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22bf0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
22c00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22c10 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75           configu
22c20 72 61 74 69 6f 6e 2e 6e 6f 4e 65 74 46 78 34 35  ration.noNetFx45
22c30 31 20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75 65 3b  1 = (bool)value;
22c40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
22c50 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
22c60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22c70 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61       else if (Ma
22c80 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67  tchOption(newArg
22c90 2c 20 22 6e 6f 4e 65 74 46 78 34 35 32 22 29 29  , "noNetFx452"))
22ca0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
22cb0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
22cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22cd0 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 3f 20 76           bool? v
22ce0 61 6c 75 65 20 3d 20 50 61 72 73 65 42 6f 6f 6c  alue = ParseBool
22cf0 65 61 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a 20 20  ean(text);....  
22d00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22d10 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76 61            if (va
22d20 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  lue == null)..  
22d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22d40 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
22d50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22d60 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
22d70 6f 72 20 3d 20 54 72 61 63 65 4f 70 73 2e 44 65  or = TraceOps.De
22d80 62 75 67 41 6e 64 54 72 61 63 65 28 0d 0a 20 20  bugAndTrace(..  
22d90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22da0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22db0 20 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e    TracePriority.
22dc0 4c 6f 77 65 73 74 2c 20 64 65 62 75 67 43 61 6c  Lowest, debugCal
22dd0 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20  lback,..        
22de0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22df0 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
22e00 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e  eCallback, Strin
22e10 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
22e20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22e30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
22e40 49 6e 76 61 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c  Invalid {0} bool
22e50 65 61 6e 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c  ean value: {1}",
22e60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
22e70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22e80 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79        ForDisplay
22e90 28 61 72 67 29 2c 20 46 6f 72 44 69 73 70 6c 61  (arg), ForDispla
22ea0 79 28 74 65 78 74 29 29 2c 0d 0a 20 20 20 20 20  y(text)),..     
22eb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
22ed0 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
22ee0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
22ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22f00 20 20 69 66 20 28 73 74 72 69 63 74 29 0d 0a 20    if (strict).. 
22f10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22f20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22f30 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
22f40 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
22f50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22f60 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20      continue;.. 
22f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22f80 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
22f90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22fa0 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66              conf
22fb0 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 4e 65 74 46  iguration.noNetF
22fc0 78 34 35 32 20 3d 20 28 62 6f 6f 6c 29 76 61 6c  x452 = (bool)val
22fd0 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
22fe0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
22ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23000 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20          else if 
23010 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77  (MatchOption(new
23020 41 72 67 2c 20 22 6e 6f 4e 65 74 46 78 34 36 22  Arg, "noNetFx46"
23030 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
23040 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
23050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23060 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 3f             bool?
23070 20 76 61 6c 75 65 20 3d 20 50 61 72 73 65 42 6f   value = ParseBo
23080 6f 6c 65 61 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a  olean(text);....
23090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
230a0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
230b0 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  value == null)..
230c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
230d0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
230e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
230f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
23100 72 72 6f 72 20 3d 20 54 72 61 63 65 4f 70 73 2e  rror = TraceOps.
23110 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 0d 0a  DebugAndTrace(..
23120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23140 20 20 20 20 54 72 61 63 65 50 72 69 6f 72 69 74      TracePriorit
23150 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75 67 43  y.Lowest, debugC
23160 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20  allback,..      
23170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
23190 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72  aceCallback, Str
231a0 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
231b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
231c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
231d0 20 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20 62 6f   "Invalid {0} bo
231e0 6f 6c 65 61 6e 20 76 61 6c 75 65 3a 20 7b 31 7d  olean value: {1}
231f0 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
23200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23210 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c          ForDispl
23220 61 79 28 61 72 67 29 2c 20 46 6f 72 44 69 73 70  ay(arg), ForDisp
23230 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a 20 20 20  lay(text)),..   
23240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23260 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
23270 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
23280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23290 20 20 20 20 69 66 20 28 73 74 72 69 63 74 29 0d      if (strict).
232a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
232b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
232c0 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
232d0 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e;....          
232e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
232f0 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d        continue;.
23300 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
23310 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
23320 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
23330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
23340 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 4e 65  nfiguration.noNe
23350 74 46 78 34 36 20 3d 20 28 62 6f 6f 6c 29 76 61  tFx46 = (bool)va
23360 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lue;..          
23370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
23380 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
23390 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66           else if
233a0 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65   (MatchOption(ne
233b0 77 41 72 67 2c 20 22 6e 6f 4e 65 74 46 78 34 36  wArg, "noNetFx46
233c0 31 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  1"))..          
233d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
233e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
233f0 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f               boo
23400 6c 3f 20 76 61 6c 75 65 20 3d 20 50 61 72 73 65  l? value = Parse
23410 42 6f 6f 6c 65 61 6e 28 74 65 78 74 29 3b 0d 0a  Boolean(text);..
23420 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
23430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
23440 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29   (value == null)
23450 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
23460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
23470 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
23480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23490 20 65 72 72 6f 72 20 3d 20 54 72 61 63 65 4f 70   error = TraceOp
234a0 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28  s.DebugAndTrace(
234b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
234c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
234d0 20 20 20 20 20 20 54 72 61 63 65 50 72 69 6f 72        TracePrior
234e0 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75  ity.Lowest, debu
234f0 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20  gCallback,..    
23500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23520 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53  traceCallback, S
23530 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
23540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23560 20 20 20 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20     "Invalid {0} 
23570 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 3a 20 7b  boolean value: {
23580 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  1}",..          
23590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
235a0 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73            ForDis
235b0 70 6c 61 79 28 61 72 67 29 2c 20 46 6f 72 44 69  play(arg), ForDi
235c0 73 70 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a 20  splay(text)),.. 
235d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
235e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
235f0 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
23600 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
23610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23620 20 20 20 20 20 20 69 66 20 28 73 74 72 69 63 74        if (strict
23630 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
23640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23650 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
23660 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  lse;....        
23670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23680 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65          continue
23690 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
236a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
236b0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
236c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
236d0 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f  configuration.no
236e0 4e 65 74 46 78 34 36 31 20 3d 20 28 62 6f 6f 6c  NetFx461 = (bool
236f0 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20  )value;..       
23700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23710 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
23720 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65              else
23730 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e   if (MatchOption
23740 28 6e 65 77 41 72 67 2c 20 22 6e 6f 4e 65 74 46  (newArg, "noNetF
23750 78 34 36 32 22 29 29 0d 0a 20 20 20 20 20 20 20  x462"))..       
23760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23770 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
23780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23790 62 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d 20 50 61  bool? value = Pa
237a0 72 73 65 42 6f 6f 6c 65 61 6e 28 74 65 78 74 29  rseBoolean(text)
237b0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
237c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
237d0 20 69 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75   if (value == nu
237e0 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
237f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23800 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
23810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23820 20 20 20 20 65 72 72 6f 72 20 3d 20 54 72 61 63      error = Trac
23830 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61  eOps.DebugAndTra
23840 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ce(..           
23850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23860 20 20 20 20 20 20 20 20 20 54 72 61 63 65 50 72           TracePr
23870 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64  iority.Lowest, d
23880 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20  ebugCallback,.. 
23890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
238a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
238b0 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b     traceCallback
238c0 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  , String.Format(
238d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
238e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
238f0 20 20 20 20 20 20 22 49 6e 76 61 6c 69 64 20 7b        "Invalid {
23900 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65  0} boolean value
23910 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20  : {1}",..       
23920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23930 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72               For
23940 44 69 73 70 6c 61 79 28 61 72 67 29 2c 20 46 6f  Display(arg), Fo
23950 72 44 69 73 70 6c 61 79 28 74 65 78 74 29 29 2c  rDisplay(text)),
23960 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
23970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23980 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67        traceCateg
23990 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
239a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
239b0 20 20 20 20 20 20 20 20 20 69 66 20 28 73 74 72           if (str
239c0 69 63 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ict)..          
239d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
239e0 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
239f0 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20   false;....     
23a00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23a10 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69             conti
23a20 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  nue;..          
23a30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23a40 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
23a50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23a60 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e     configuration
23a70 2e 6e 6f 4e 65 74 46 78 34 36 32 20 3d 20 28 62  .noNetFx462 = (b
23a80 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20  ool)value;..    
23a90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23aa0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
23ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
23ac0 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74  lse if (MatchOpt
23ad0 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 6e 6f 4e  ion(newArg, "noN
23ae0 65 74 46 78 34 37 22 29 29 0d 0a 20 20 20 20 20  etFx47"))..     
23af0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23b00 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
23b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23b20 20 20 62 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d 20    bool? value = 
23b30 50 61 72 73 65 42 6f 6f 6c 65 61 6e 28 74 65 78  ParseBoolean(tex
23b40 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  t);....         
23b50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23b60 20 20 20 69 66 20 28 76 61 6c 75 65 20 3d 3d 20     if (value == 
23b70 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
23b80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23b90 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
23ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23bb0 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 54 72        error = Tr
23bc0 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54  aceOps.DebugAndT
23bd0 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20  race(..         
23be0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23bf0 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
23c00 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c  Priority.Lowest,
23c10 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d   debugCallback,.
23c20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
23c30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23c40 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61       traceCallba
23c50 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ck, String.Forma
23c60 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
23c70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23c80 20 20 20 20 20 20 20 20 22 49 6e 76 61 6c 69 64          "Invalid
23c90 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 61 6c   {0} boolean val
23ca0 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20  ue: {1}",..     
23cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46                 F
23cd0 6f 72 44 69 73 70 6c 61 79 28 61 72 67 29 2c 20  orDisplay(arg), 
23ce0 46 6f 72 44 69 73 70 6c 61 79 28 74 65 78 74 29  ForDisplay(text)
23cf0 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
23d00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23d10 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74          traceCat
23d20 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20  egory);....     
23d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23d40 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 73             if (s
23d50 74 72 69 63 74 29 0d 0a 20 20 20 20 20 20 20 20  trict)..        
23d60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23d70 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
23d80 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20  rn false;....   
23d90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23da0 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
23db0 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20  tinue;..        
23dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23dd0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
23de0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23df0 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69       configurati
23e00 6f 6e 2e 6e 6f 4e 65 74 46 78 34 37 20 3d 20 28  on.noNetFx47 = (
23e10 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20 20 20  bool)value;..   
23e20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23e30 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
23e40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23e50 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70  else if (MatchOp
23e60 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 6e 6f  tion(newArg, "no
23e70 4e 65 74 46 78 34 37 31 22 29 29 0d 0a 20 20 20  NetFx471"))..   
23e80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23e90 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
23ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23eb0 20 20 20 20 62 6f 6f 6c 3f 20 76 61 6c 75 65 20      bool? value 
23ec0 3d 20 50 61 72 73 65 42 6f 6f 6c 65 61 6e 28 74  = ParseBoolean(t
23ed0 65 78 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ext);....       
23ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23ef0 20 20 20 20 20 69 66 20 28 76 61 6c 75 65 20 3d       if (value =
23f00 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
23f10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
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 20 20 20 20 20 20 20 20                  
23f40 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20          error = 
23f50 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e  TraceOps.DebugAn
23f60 64 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20  dTrace(..       
23f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23f80 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61               Tra
23f90 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73  cePriority.Lowes
23fa0 74 2c 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b  t, debugCallback
23fb0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
23fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23fd0 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c         traceCall
23fe0 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72  back, String.For
23ff0 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
24000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24010 20 20 20 20 20 20 20 20 20 20 22 49 6e 76 61 6c            "Inval
24020 69 64 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76  id {0} boolean v
24030 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20  alue: {1}",..   
24040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24060 20 46 6f 72 44 69 73 70 6c 61 79 28 61 72 67 29   ForDisplay(arg)
24070 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 74 65 78  , ForDisplay(tex
24080 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  t)),..          
24090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
240a0 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
240b0 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20  ategory);....   
240c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
240d0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
240e0 28 73 74 72 69 63 74 29 0d 0a 20 20 20 20 20 20  (strict)..      
240f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
24110 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20  turn false;.... 
24120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
24140 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20  ontinue;..      
24150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24160 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
24170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24180 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61         configura
24190 74 69 6f 6e 2e 6e 6f 4e 65 74 46 78 34 37 31 20  tion.noNetFx471 
241a0 3d 20 28 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a  = (bool)value;..
241b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
241c0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
241d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
241e0 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61 74 63     else if (Matc
241f0 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20  hOption(newArg, 
24200 22 6e 6f 52 75 6e 74 69 6d 65 56 65 72 73 69 6f  "noRuntimeVersio
24210 6e 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  n"))..          
24220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
24230 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
24240 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f               boo
24250 6c 3f 20 76 61 6c 75 65 20 3d 20 50 61 72 73 65  l? value = Parse
24260 42 6f 6f 6c 65 61 6e 28 74 65 78 74 29 3b 0d 0a  Boolean(text);..
24270 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
24280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
24290 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29   (value == null)
242a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
242b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
242c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
242d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
242e0 20 65 72 72 6f 72 20 3d 20 54 72 61 63 65 4f 70   error = TraceOp
242f0 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28  s.DebugAndTrace(
24300 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
24310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24320 20 20 20 20 20 20 54 72 61 63 65 50 72 69 6f 72        TracePrior
24330 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75  ity.Lowest, debu
24340 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20  gCallback,..    
24350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24370 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53  traceCallback, S
24380 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
24390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
243a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
243b0 20 20 20 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20     "Invalid {0} 
243c0 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 3a 20 7b  boolean value: {
243d0 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  1}",..          
243e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
243f0 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73            ForDis
24400 70 6c 61 79 28 61 72 67 29 2c 20 46 6f 72 44 69  play(arg), ForDi
24410 73 70 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a 20  splay(text)),.. 
24420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24440 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
24450 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
24460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24470 20 20 20 20 20 20 69 66 20 28 73 74 72 69 63 74        if (strict
24480 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
24490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
244a0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
244b0 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  lse;....        
244c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
244d0 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65          continue
244e0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
244f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
24500 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
24510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24520 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f  configuration.no
24530 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 20 3d  RuntimeVersion =
24540 20 28 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20   (bool)value;.. 
24550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24560 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
24570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24580 20 20 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68    else if (Match
24590 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22  Option(newArg, "
245a0 6e 6f 54 72 61 63 65 22 29 29 0d 0a 20 20 20 20  noTrace"))..    
245b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
245c0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
245d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
245e0 20 20 20 62 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d     bool? value =
245f0 20 50 61 72 73 65 42 6f 6f 6c 65 61 6e 28 74 65   ParseBoolean(te
24600 78 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  xt);....        
24610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24620 20 20 20 20 69 66 20 28 76 61 6c 75 65 20 3d 3d      if (value ==
24630 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
24640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24650 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
24660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24670 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 54         error = T
24680 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64  raceOps.DebugAnd
24690 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20  Trace(..        
246a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
246b0 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
246c0 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74  ePriority.Lowest
246d0 2c 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c  , debugCallback,
246e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
246f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24700 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62        traceCallb
24710 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d  ack, String.Form
24720 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
24730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24740 20 20 20 20 20 20 20 20 20 22 49 6e 76 61 6c 69           "Invali
24750 64 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 61  d {0} boolean va
24760 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20  lue: {1}",..    
24770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24790 46 6f 72 44 69 73 70 6c 61 79 28 61 72 67 29 2c  ForDisplay(arg),
247a0 20 46 6f 72 44 69 73 70 6c 61 79 28 74 65 78 74   ForDisplay(text
247b0 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  )),..           
247c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
247d0 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
247e0 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
247f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24800 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
24810 73 74 72 69 63 74 29 0d 0a 20 20 20 20 20 20 20  strict)..       
24820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24830 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
24840 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20  urn false;....  
24850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
24870 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20  ntinue;..       
24880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24890 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
248a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
248b0 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74        configurat
248c0 69 6f 6e 2e 6e 6f 54 72 61 63 65 20 3d 20 28 62  ion.noTrace = (b
248d0 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20  ool)value;..    
248e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
248f0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
24900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
24910 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74  lse if (MatchOpt
24920 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 6e 6f 56  ion(newArg, "noV
24930 73 32 30 30 35 22 29 29 0d 0a 20 20 20 20 20 20  s2005"))..      
24940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24950 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
24960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24970 20 62 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d 20 50   bool? value = P
24980 61 72 73 65 42 6f 6f 6c 65 61 6e 28 74 65 78 74  arseBoolean(text
24990 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
249a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
249b0 20 20 69 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e    if (value == n
249c0 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
249d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
249e0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
249f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24a00 20 20 20 20 20 65 72 72 6f 72 20 3d 20 54 72 61       error = Tra
24a10 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72  ceOps.DebugAndTr
24a20 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ace(..          
24a30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24a40 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 50            TraceP
24a50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20  riority.Lowest, 
24a60 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a  debugCallback,..
24a70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24a80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24a90 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63      traceCallbac
24aa0 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  k, String.Format
24ab0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
24ac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24ad0 20 20 20 20 20 20 20 22 49 6e 76 61 6c 69 64 20         "Invalid 
24ae0 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75  {0} boolean valu
24af0 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20  e: {1}",..      
24b00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f                Fo
24b20 72 44 69 73 70 6c 61 79 28 61 72 67 29 2c 20 46  rDisplay(arg), F
24b30 6f 72 44 69 73 70 6c 61 79 28 74 65 78 74 29 29  orDisplay(text))
24b40 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
24b50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24b60 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65         traceCate
24b70 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
24b80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24b90 20 20 20 20 20 20 20 20 20 20 69 66 20 28 73 74            if (st
24ba0 72 69 63 74 29 0d 0a 20 20 20 20 20 20 20 20 20  rict)..         
24bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24bc0 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
24bd0 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20  n false;....    
24be0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24bf0 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74              cont
24c00 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  inue;..         
24c10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24c20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
24c30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24c40 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f      configuratio
24c50 6e 2e 6e 6f 56 73 32 30 30 35 20 3d 20 28 62 6f  n.noVs2005 = (bo
24c60 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20  ol)value;..     
24c70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24c80 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
24c90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c                el
24ca0 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69  se if (MatchOpti
24cb0 6f 6e 28 6e 65 77 41 72 67 2c 20 22 6e 6f 56 73  on(newArg, "noVs
24cc0 32 30 30 38 22 29 29 0d 0a 20 20 20 20 20 20 20  2008"))..       
24cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24ce0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
24cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24d00 62 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d 20 50 61  bool? value = Pa
24d10 72 73 65 42 6f 6f 6c 65 61 6e 28 74 65 78 74 29  rseBoolean(text)
24d20 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
24d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24d40 20 69 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75   if (value == nu
24d50 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
24d60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24d70 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
24d80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24d90 20 20 20 20 65 72 72 6f 72 20 3d 20 54 72 61 63      error = Trac
24da0 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61  eOps.DebugAndTra
24db0 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ce(..           
24dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24dd0 20 20 20 20 20 20 20 20 20 54 72 61 63 65 50 72           TracePr
24de0 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64  iority.Lowest, d
24df0 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20  ebugCallback,.. 
24e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24e10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24e20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b     traceCallback
24e30 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  , String.Format(
24e40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
24e50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24e60 20 20 20 20 20 20 22 49 6e 76 61 6c 69 64 20 7b        "Invalid {
24e70 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65  0} boolean value
24e80 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20  : {1}",..       
24e90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72               For
24eb0 44 69 73 70 6c 61 79 28 61 72 67 29 2c 20 46 6f  Display(arg), Fo
24ec0 72 44 69 73 70 6c 61 79 28 74 65 78 74 29 29 2c  rDisplay(text)),
24ed0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
24ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24ef0 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67        traceCateg
24f00 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
24f10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24f20 20 20 20 20 20 20 20 20 20 69 66 20 28 73 74 72           if (str
24f30 69 63 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ict)..          
24f40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24f50 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
24f60 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20   false;....     
24f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24f80 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69             conti
24f90 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  nue;..          
24fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24fb0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
24fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24fd0 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e     configuration
24fe0 2e 6e 6f 56 73 32 30 30 38 20 3d 20 28 62 6f 6f  .noVs2008 = (boo
24ff0 6c 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20  l)value;..      
25000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25010 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
25020 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73               els
25030 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f  e if (MatchOptio
25040 6e 28 6e 65 77 41 72 67 2c 20 22 6e 6f 56 73 32  n(newArg, "noVs2
25050 30 31 30 22 29 29 0d 0a 20 20 20 20 20 20 20 20  010"))..        
25060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25070 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
25080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62                 b
25090 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d 20 50 61 72  ool? value = Par
250a0 73 65 42 6f 6f 6c 65 61 6e 28 74 65 78 74 29 3b  seBoolean(text);
250b0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
250c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
250d0 69 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c  if (value == nul
250e0 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
250f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25100 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
25110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25120 20 20 20 65 72 72 6f 72 20 3d 20 54 72 61 63 65     error = Trace
25130 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63  Ops.DebugAndTrac
25140 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
25150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25160 20 20 20 20 20 20 20 20 54 72 61 63 65 50 72 69          TracePri
25170 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65  ority.Lowest, de
25180 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20  bugCallback,..  
25190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
251a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
251b0 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c    traceCallback,
251c0 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d   String.Format(.
251d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
251e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
251f0 20 20 20 20 20 22 49 6e 76 61 6c 69 64 20 7b 30       "Invalid {0
25200 7d 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 3a  } boolean value:
25210 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20   {1}",..        
25220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25230 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44              ForD
25240 69 73 70 6c 61 79 28 61 72 67 29 2c 20 46 6f 72  isplay(arg), For
25250 44 69 73 70 6c 61 79 28 74 65 78 74 29 29 2c 0d  Display(text)),.
25260 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
25270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25280 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f       traceCatego
25290 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
252a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
252b0 20 20 20 20 20 20 20 20 69 66 20 28 73 74 72 69          if (stri
252c0 63 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ct)..           
252d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
252e0 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
252f0 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  false;....      
25300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25310 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e            contin
25320 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
25330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25340 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
25350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25360 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e    configuration.
25370 6e 6f 56 73 32 30 31 30 20 3d 20 28 62 6f 6f 6c  noVs2010 = (bool
25380 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20  )value;..       
25390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
253a0 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
253b0 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65              else
253c0 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e   if (MatchOption
253d0 28 6e 65 77 41 72 67 2c 20 22 6e 6f 56 73 32 30  (newArg, "noVs20
253e0 31 32 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20  12"))..         
253f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
25400 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
25410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f                bo
25420 6f 6c 3f 20 76 61 6c 75 65 20 3d 20 50 61 72 73  ol? value = Pars
25430 65 42 6f 6f 6c 65 61 6e 28 74 65 78 74 29 3b 0d  eBoolean(text);.
25440 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
25450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
25460 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c  f (value == null
25470 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
25480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
25490 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
254a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
254b0 20 20 65 72 72 6f 72 20 3d 20 54 72 61 63 65 4f    error = TraceO
254c0 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65  ps.DebugAndTrace
254d0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
254e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
254f0 20 20 20 20 20 20 20 54 72 61 63 65 50 72 69 6f         TracePrio
25500 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62  rity.Lowest, deb
25510 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20  ugCallback,..   
25520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25540 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20   traceCallback, 
25550 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
25560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25580 20 20 20 20 22 49 6e 76 61 6c 69 64 20 7b 30 7d      "Invalid {0}
25590 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 3a 20   boolean value: 
255a0 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  {1}",..         
255b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
255c0 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69             ForDi
255d0 73 70 6c 61 79 28 61 72 67 29 2c 20 46 6f 72 44  splay(arg), ForD
255e0 69 73 70 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a  isplay(text)),..
255f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25610 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72      traceCategor
25620 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
25630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25640 20 20 20 20 20 20 20 69 66 20 28 73 74 72 69 63         if (stric
25650 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t)..            
25660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25670 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
25680 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  alse;....       
25690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
256a0 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75           continu
256b0 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
256c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
256d0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
256e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
256f0 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e   configuration.n
25700 6f 56 73 32 30 31 32 20 3d 20 28 62 6f 6f 6c 29  oVs2012 = (bool)
25710 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20  value;..        
25720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25730 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
25740 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20             else 
25750 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28  if (MatchOption(
25760 6e 65 77 41 72 67 2c 20 22 6e 6f 56 73 32 30 31  newArg, "noVs201
25770 33 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  3"))..          
25780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
25790 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
257a0 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f               boo
257b0 6c 3f 20 76 61 6c 75 65 20 3d 20 50 61 72 73 65  l? value = Parse
257c0 42 6f 6f 6c 65 61 6e 28 74 65 78 74 29 3b 0d 0a  Boolean(text);..
257d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
257e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
257f0 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29   (value == null)
25800 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
25810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
25820 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
25830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25840 20 65 72 72 6f 72 20 3d 20 54 72 61 63 65 4f 70   error = TraceOp
25850 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28  s.DebugAndTrace(
25860 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
25870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25880 20 20 20 20 20 20 54 72 61 63 65 50 72 69 6f 72        TracePrior
25890 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75  ity.Lowest, debu
258a0 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20  gCallback,..    
258b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
258c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
258d0 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53  traceCallback, S
258e0 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
258f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25910 20 20 20 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20     "Invalid {0} 
25920 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 3a 20 7b  boolean value: {
25930 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  1}",..          
25940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25950 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73            ForDis
25960 70 6c 61 79 28 61 72 67 29 2c 20 46 6f 72 44 69  play(arg), ForDi
25970 73 70 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a 20  splay(text)),.. 
25980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
259a0 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
259b0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
259c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
259d0 20 20 20 20 20 20 69 66 20 28 73 74 72 69 63 74        if (strict
259e0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
259f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25a00 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
25a10 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  lse;....        
25a20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25a30 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65          continue
25a40 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
25a50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
25a60 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
25a70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25a80 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f  configuration.no
25a90 56 73 32 30 31 33 20 3d 20 28 62 6f 6f 6c 29 76  Vs2013 = (bool)v
25aa0 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alue;..         
25ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
25ac0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
25ad0 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69            else i
25ae0 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e  f (MatchOption(n
25af0 65 77 41 72 67 2c 20 22 6e 6f 56 73 32 30 31 35  ewArg, "noVs2015
25b00 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  "))..           
25b10 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
25b20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25b30 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
25b40 3f 20 76 61 6c 75 65 20 3d 20 50 61 72 73 65 42  ? value = ParseB
25b50 6f 6f 6c 65 61 6e 28 74 65 78 74 29 3b 0d 0a 0d  oolean(text);...
25b60 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
25b70 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
25b80 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d  (value == null).
25b90 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
25ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
25bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25bd0 65 72 72 6f 72 20 3d 20 54 72 61 63 65 4f 70 73  error = TraceOps
25be0 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 0d  .DebugAndTrace(.
25bf0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
25c00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25c10 20 20 20 20 20 54 72 61 63 65 50 72 69 6f 72 69       TracePriori
25c20 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75 67  ty.Lowest, debug
25c30 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20  Callback,..     
25c40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25c50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
25c60 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74  raceCallback, St
25c70 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
25c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25c90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25ca0 20 20 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20 62    "Invalid {0} b
25cb0 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 3a 20 7b 31  oolean value: {1
25cc0 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }",..           
25cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25ce0 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70           ForDisp
25cf0 6c 61 79 28 61 72 67 29 2c 20 46 6f 72 44 69 73  lay(arg), ForDis
25d00 70 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a 20 20  play(text)),..  
25d10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25d20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25d30 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29    traceCategory)
25d40 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
25d50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25d60 20 20 20 20 20 69 66 20 28 73 74 72 69 63 74 29       if (strict)
25d70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
25d80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25d90 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
25da0 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  se;....         
25db0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25dc0 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b         continue;
25dd0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
25de0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
25df0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
25e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
25e10 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 56  onfiguration.noV
25e20 73 32 30 31 35 20 3d 20 28 62 6f 6f 6c 29 76 61  s2015 = (bool)va
25e30 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lue;..          
25e40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
25e50 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
25e60 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66           else if
25e70 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65   (MatchOption(ne
25e80 77 41 72 67 2c 20 22 6e 6f 56 73 32 30 31 37 22  wArg, "noVs2017"
25e90 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
25ea0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
25eb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25ec0 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 3f             bool?
25ed0 20 76 61 6c 75 65 20 3d 20 50 61 72 73 65 42 6f   value = ParseBo
25ee0 6f 6c 65 61 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a  olean(text);....
25ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25f00 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
25f10 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  value == null)..
25f20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25f30 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
25f40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25f50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
25f60 72 72 6f 72 20 3d 20 54 72 61 63 65 4f 70 73 2e  rror = TraceOps.
25f70 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 0d 0a  DebugAndTrace(..
25f80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25f90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25fa0 20 20 20 20 54 72 61 63 65 50 72 69 6f 72 69 74      TracePriorit
25fb0 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75 67 43  y.Lowest, debugC
25fc0 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20  allback,..      
25fd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25fe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
25ff0 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72  aceCallback, Str
26000 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
26010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26030 20 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20 62 6f   "Invalid {0} bo
26040 6f 6c 65 61 6e 20 76 61 6c 75 65 3a 20 7b 31 7d  olean value: {1}
26050 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
26060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26070 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c          ForDispl
26080 61 79 28 61 72 67 29 2c 20 46 6f 72 44 69 73 70  ay(arg), ForDisp
26090 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a 20 20 20  lay(text)),..   
260a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
260b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
260c0 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
260d0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
260e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
260f0 20 20 20 20 69 66 20 28 73 74 72 69 63 74 29 0d      if (strict).
26100 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
26110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26120 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
26130 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e;....          
26140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26150 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d        continue;.
26160 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
26170 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
26180 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
26190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
261a0 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 56 73  nfiguration.noVs
261b0 32 30 31 37 20 3d 20 28 62 6f 6f 6c 29 76 61 6c  2017 = (bool)val
261c0 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
261d0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
261e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
261f0 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20          else if 
26200 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77  (MatchOption(new
26210 41 72 67 2c 20 22 70 65 72 55 73 65 72 22 29 29  Arg, "perUser"))
26220 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
26230 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
26240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26250 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 3f 20 76           bool? v
26260 61 6c 75 65 20 3d 20 50 61 72 73 65 42 6f 6f 6c  alue = ParseBool
26270 65 61 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a 20 20  ean(text);....  
26280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26290 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76 61            if (va
262a0 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  lue == null)..  
262b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
262c0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
262d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
262e0 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
262f0 6f 72 20 3d 20 54 72 61 63 65 4f 70 73 2e 44 65  or = TraceOps.De
26300 62 75 67 41 6e 64 54 72 61 63 65 28 0d 0a 20 20  bugAndTrace(..  
26310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26330 20 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e    TracePriority.
26340 4c 6f 77 65 73 74 2c 20 64 65 62 75 67 43 61 6c  Lowest, debugCal
26350 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20  lback,..        
26360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26370 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
26380 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e  eCallback, Strin
26390 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
263a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
263b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
263c0 49 6e 76 61 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c  Invalid {0} bool
263d0 65 61 6e 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c  ean value: {1}",
263e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
263f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26400 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79        ForDisplay
26410 28 61 72 67 29 2c 20 46 6f 72 44 69 73 70 6c 61  (arg), ForDispla
26420 79 28 74 65 78 74 29 29 2c 0d 0a 20 20 20 20 20  y(text)),..     
26430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
26450 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
26460 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
26470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26480 20 20 69 66 20 28 73 74 72 69 63 74 29 0d 0a 20    if (strict).. 
26490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
264a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
264b0 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
264c0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
264d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
264e0 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20      continue;.. 
264f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26500 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
26510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26520 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66              conf
26530 69 67 75 72 61 74 69 6f 6e 2e 70 65 72 55 73 65  iguration.perUse
26540 72 20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75 65 3b  r = (bool)value;
26550 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
26560 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
26570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26580 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61       else if (Ma
26590 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67  tchOption(newArg
265a0 2c 20 22 70 72 6f 76 69 64 65 72 46 6c 61 67 73  , "providerFlags
265b0 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  "))..           
265c0 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
265d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
265e0 20 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65              obje
265f0 63 74 20 76 61 6c 75 65 20 3d 20 50 61 72 73 65  ct value = Parse
26600 45 6e 75 6d 28 0d 0a 20 20 20 20 20 20 20 20 20  Enum(..         
26610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26620 20 20 20 20 20 20 20 74 79 70 65 6f 66 28 50 72         typeof(Pr
26630 6f 76 69 64 65 72 46 6c 61 67 73 29 2c 20 74 65  oviderFlags), te
26640 78 74 2c 20 74 72 75 65 29 3b 0d 0a 0d 0a 20 20  xt, true);....  
26650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26660 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76 61            if (va
26670 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  lue == null)..  
26680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26690 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
266a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
266b0 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
266c0 6f 72 20 3d 20 54 72 61 63 65 4f 70 73 2e 44 65  or = TraceOps.De
266d0 62 75 67 41 6e 64 54 72 61 63 65 28 0d 0a 20 20  bugAndTrace(..  
266e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
266f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26700 20 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e    TracePriority.
26710 4c 6f 77 65 73 74 2c 20 64 65 62 75 67 43 61 6c  Lowest, debugCal
26720 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20  lback,..        
26730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26740 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
26750 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e  eCallback, Strin
26760 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
26770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
26790 49 6e 76 61 6c 69 64 20 7b 30 7d 20 76 61 6c 75  Invalid {0} valu
267a0 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20  e: {1}",..      
267b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
267c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f                Fo
267d0 72 44 69 73 70 6c 61 79 28 61 72 67 29 2c 20 46  rDisplay(arg), F
267e0 6f 72 44 69 73 70 6c 61 79 28 74 65 78 74 29 29  orDisplay(text))
267f0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
26800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26810 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65         traceCate
26820 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
26830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26840 20 20 20 20 20 20 20 20 20 20 69 66 20 28 73 74            if (st
26850 72 69 63 74 29 0d 0a 20 20 20 20 20 20 20 20 20  rict)..         
26860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26870 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
26880 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20  n false;....    
26890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
268a0 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74              cont
268b0 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  inue;..         
268c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
268d0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
268e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
268f0 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f      configuratio
26900 6e 2e 70 72 6f 76 69 64 65 72 46 6c 61 67 73 20  n.providerFlags 
26910 3d 20 28 50 72 6f 76 69 64 65 72 46 6c 61 67 73  = (ProviderFlags
26920 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20  )value;..       
26930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26940 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
26950 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65              else
26960 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e   if (MatchOption
26970 28 6e 65 77 41 72 67 2c 20 22 72 65 67 69 73 74  (newArg, "regist
26980 72 79 4c 6f 67 46 69 6c 65 4e 61 6d 65 22 29 29  ryLogFileName"))
26990 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
269a0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
269b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
269c0 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75           configu
269d0 72 61 74 69 6f 6e 2e 72 65 67 69 73 74 72 79 4c  ration.registryL
269e0 6f 67 46 69 6c 65 4e 61 6d 65 20 3d 20 74 65 78  ogFileName = tex
269f0 74 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t;..            
26a00 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
26a10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26a20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28         else if (
26a30 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41  MatchOption(newA
26a40 72 67 2c 20 22 72 65 67 69 73 74 72 79 56 65 72  rg, "registryVer
26a50 73 69 6f 6e 22 29 29 0d 0a 20 20 20 20 20 20 20  sion"))..       
26a60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26a70 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
26a80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26a90 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 72 65  configuration.re
26aa0 67 69 73 74 72 79 56 65 72 73 69 6f 6e 20 3d 20  gistryVersion = 
26ab0 74 65 78 74 3b 0d 0a 20 20 20 20 20 20 20 20 20  text;..         
26ac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
26ad0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
26ae0 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69            else i
26af0 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e  f (MatchOption(n
26b00 65 77 41 72 67 2c 20 22 73 74 72 69 63 74 22 29  ewArg, "strict")
26b10 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
26b20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
26b30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26b40 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 3f 20            bool? 
26b50 76 61 6c 75 65 20 3d 20 50 61 72 73 65 42 6f 6f  value = ParseBoo
26b60 6c 65 61 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a 20  lean(text);.... 
26b70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26b80 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76             if (v
26b90 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  alue == null).. 
26ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26bb0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
26bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72                er
26be0 72 6f 72 20 3d 20 54 72 61 63 65 4f 70 73 2e 44  ror = TraceOps.D
26bf0 65 62 75 67 41 6e 64 54 72 61 63 65 28 0d 0a 20  ebugAndTrace(.. 
26c00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26c10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26c20 20 20 20 54 72 61 63 65 50 72 69 6f 72 69 74 79     TracePriority
26c30 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75 67 43 61  .Lowest, debugCa
26c40 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20  llback,..       
26c50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26c60 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
26c70 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69  ceCallback, Stri
26c80 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20  ng.Format(..    
26c90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26cb0 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20 62 6f 6f  "Invalid {0} boo
26cc0 6c 65 61 6e 20 76 61 6c 75 65 3a 20 7b 31 7d 22  lean value: {1}"
26cd0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
26ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26cf0 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61         ForDispla
26d00 79 28 61 72 67 29 2c 20 46 6f 72 44 69 73 70 6c  y(arg), ForDispl
26d10 61 79 28 74 65 78 74 29 29 2c 0d 0a 20 20 20 20  ay(text)),..    
26d20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26d40 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
26d50 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
26d60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26d70 20 20 20 69 66 20 28 73 74 72 69 63 74 29 0d 0a     if (strict)..
26d80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26d90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26da0 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
26db0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
26dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26dd0 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a       continue;..
26de0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26df0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
26e00 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
26e10 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
26e20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
26e30 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
26e40 4e 4f 54 45 3a 20 41 6c 6c 6f 77 20 74 68 65 20  NOTE: Allow the 
26e50 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 20 61 72 67  command line arg
26e60 75 6d 65 6e 74 73 20 74 6f 0d 0a 20 20 20 20 20  uments to..     
26e70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26e80 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
26e90 6f 76 65 72 72 69 64 65 20 74 68 65 20 22 73 74  override the "st
26ea0 72 69 63 74 6e 65 73 73 22 20 73 65 74 74 69 6e  rictness" settin
26eb0 67 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  g..             
26ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
26ed0 2f 20 20 20 20 20 20 20 70 72 6f 76 69 64 65 64  /       provided
26ee0 20 62 79 20 6f 75 72 20 63 61 6c 6c 65 72 2e 0d   by our caller..
26ef0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
26f00 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
26f10 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
26f20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72               str
26f30 69 63 74 20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75  ict = (bool)valu
26f40 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
26f50 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
26f60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26f70 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28         else if (
26f80 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41  MatchOption(newA
26f90 72 67 2c 20 22 74 68 72 6f 77 4f 6e 4d 69 73 73  rg, "throwOnMiss
26fa0 69 6e 67 22 29 29 0d 0a 20 20 20 20 20 20 20 20  ing"))..        
26fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26fc0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
26fd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62                 b
26fe0 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d 20 50 61 72  ool? value = Par
26ff0 73 65 42 6f 6f 6c 65 61 6e 28 74 65 78 74 29 3b  seBoolean(text);
27000 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
27010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27020 69 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c  if (value == nul
27030 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
27040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27050 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
27060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27070 20 20 20 65 72 72 6f 72 20 3d 20 54 72 61 63 65     error = Trace
27080 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63  Ops.DebugAndTrac
27090 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
270a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
270b0 20 20 20 20 20 20 20 20 54 72 61 63 65 50 72 69          TracePri
270c0 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65  ority.Lowest, de
270d0 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20  bugCallback,..  
270e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
270f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27100 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c    traceCallback,
27110 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d   String.Format(.
27120 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
27130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27140 20 20 20 20 20 22 49 6e 76 61 6c 69 64 20 7b 30       "Invalid {0
27150 7d 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 3a  } boolean value:
27160 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20   {1}",..        
27170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27180 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44              ForD
27190 69 73 70 6c 61 79 28 61 72 67 29 2c 20 46 6f 72  isplay(arg), For
271a0 44 69 73 70 6c 61 79 28 74 65 78 74 29 29 2c 0d  Display(text)),.
271b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
271c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
271d0 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f       traceCatego
271e0 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
271f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27200 20 20 20 20 20 20 20 20 69 66 20 28 73 74 72 69          if (stri
27210 63 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ct)..           
27220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27230 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
27240 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  false;....      
27250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27260 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e            contin
27270 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
27280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27290 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
272a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
272b0 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e    configuration.
272c0 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 20 3d  throwOnMissing =
272d0 20 28 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20   (bool)value;.. 
272e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
272f0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
27300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27310 20 20 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68    else if (Match
27320 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22  Option(newArg, "
27330 74 72 61 63 65 46 6f 72 6d 61 74 22 29 29 0d 0a  traceFormat"))..
27340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27350 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
27360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27370 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61         configura
27380 74 69 6f 6e 2e 74 72 61 63 65 46 6f 72 6d 61 74  tion.traceFormat
27390 20 3d 20 74 65 78 74 3b 0d 0a 20 20 20 20 20 20   = text;..      
273a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
273b0 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 54        TraceOps.T
273c0 72 61 63 65 46 6f 72 6d 61 74 20 3d 20 63 6f 6e  raceFormat = con
273d0 66 69 67 75 72 61 74 69 6f 6e 2e 74 72 61 63 65  figuration.trace
273e0 46 6f 72 6d 61 74 3b 0d 0a 20 20 20 20 20 20 20  Format;..       
273f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27400 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
27410 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65              else
27420 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e   if (MatchOption
27430 28 6e 65 77 41 72 67 2c 20 22 74 72 61 63 65 50  (newArg, "traceP
27440 72 69 6f 72 69 74 79 22 29 29 0d 0a 20 20 20 20  riority"))..    
27450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27460 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
27470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27480 20 20 20 6f 62 6a 65 63 74 20 76 61 6c 75 65 20     object value 
27490 3d 20 50 61 72 73 65 45 6e 75 6d 28 0d 0a 20 20  = ParseEnum(..  
274a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
274b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 79                ty
274c0 70 65 6f 66 28 54 72 61 63 65 50 72 69 6f 72 69  peof(TracePriori
274d0 74 79 29 2c 20 74 65 78 74 2c 20 74 72 75 65 29  ty), text, true)
274e0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
274f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27500 20 69 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75   if (value == nu
27510 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
27520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27530 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
27540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27550 20 20 20 20 65 72 72 6f 72 20 3d 20 54 72 61 63      error = Trac
27560 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61  eOps.DebugAndTra
27570 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ce(..           
27580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27590 20 20 20 20 20 20 20 20 20 54 72 61 63 65 50 72           TracePr
275a0 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64  iority.Lowest, d
275b0 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20  ebugCallback,.. 
275c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
275d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
275e0 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b     traceCallback
275f0 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  , String.Format(
27600 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
27610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27620 20 20 20 20 20 20 22 49 6e 76 61 6c 69 64 20 7b        "Invalid {
27630 30 7d 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d  0} value: {1}",.
27640 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
27650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27660 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28       ForDisplay(
27670 61 72 67 29 2c 20 46 6f 72 44 69 73 70 6c 61 79  arg), ForDisplay
27680 28 74 65 78 74 29 29 2c 0d 0a 20 20 20 20 20 20  (text)),..      
27690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
276a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
276b0 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d  aceCategory);...
276c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
276d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
276e0 20 69 66 20 28 73 74 72 69 63 74 29 0d 0a 20 20   if (strict)..  
276f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27710 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
27720 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
27730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27740 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20     continue;..  
27750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27760 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
27770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27780 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69             confi
27790 67 75 72 61 74 69 6f 6e 2e 74 72 61 63 65 50 72  guration.tracePr
277a0 69 6f 72 69 74 79 20 3d 20 28 54 72 61 63 65 50  iority = (TraceP
277b0 72 69 6f 72 69 74 79 29 76 61 6c 75 65 3b 0d 0a  riority)value;..
277c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
277d0 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
277e0 65 4f 70 73 2e 54 72 61 63 65 50 72 69 6f 72 69  eOps.TracePriori
277f0 74 79 20 3d 20 63 6f 6e 66 69 67 75 72 61 74 69  ty = configurati
27800 6f 6e 2e 74 72 61 63 65 50 72 69 6f 72 69 74 79  on.tracePriority
27810 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
27820 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
27830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27840 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d        else if (M
27850 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72  atchOption(newAr
27860 67 2c 20 22 76 65 72 62 6f 73 65 22 29 29 0d 0a  g, "verbose"))..
27870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27880 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
27890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
278a0 20 20 20 20 20 20 20 62 6f 6f 6c 3f 20 76 61 6c         bool? val
278b0 75 65 20 3d 20 50 61 72 73 65 42 6f 6f 6c 65 61  ue = ParseBoolea
278c0 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a 20 20 20 20  n(text);....    
278d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
278e0 20 20 20 20 20 20 20 20 69 66 20 28 76 61 6c 75          if (valu
278f0 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  e == null)..    
27900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27910 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 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 20 20 20 20 20 65 72 72 6f 72             error
27940 20 3d 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75   = TraceOps.Debu
27950 67 41 6e 64 54 72 61 63 65 28 0d 0a 20 20 20 20  gAndTrace(..    
27960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27980 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f  TracePriority.Lo
27990 77 65 73 74 2c 20 64 65 62 75 67 43 61 6c 6c 62  west, debugCallb
279a0 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ack,..          
279b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
279c0 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
279d0 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e  allback, String.
279e0 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
279f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27a00 20 20 20 20 20 20 20 20 20 20 20 20 20 22 49 6e               "In
27a10 76 61 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c 65 61  valid {0} boolea
27a20 6e 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a  n value: {1}",..
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 20 20 20 20 20 20 20 20                  
27a50 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 61      ForDisplay(a
27a60 72 67 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28  rg), ForDisplay(
27a70 74 65 78 74 29 29 2c 0d 0a 20 20 20 20 20 20 20  text)),..       
27a80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27a90 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
27aa0 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
27ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27ac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27ad0 69 66 20 28 73 74 72 69 63 74 29 0d 0a 20 20 20  if (strict)..   
27ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27af0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27b00 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
27b10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
27b20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27b30 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20    continue;..   
27b40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27b50 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
27b60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27b70 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67            config
27b80 75 72 61 74 69 6f 6e 2e 76 65 72 62 6f 73 65 20  uration.verbose 
27b90 3d 20 28 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a  = (bool)value;..
27ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27bb0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
27bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27bd0 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61 74 63     else if (Matc
27be0 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20  hOption(newArg, 
27bf0 22 76 73 56 65 72 73 69 6f 6e 53 75 66 66 69 78  "vsVersionSuffix
27c00 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  "))..           
27c10 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
27c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27c30 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66              conf
27c40 69 67 75 72 61 74 69 6f 6e 2e 76 73 56 65 72 73  iguration.vsVers
27c50 69 6f 6e 53 75 66 66 69 78 20 3d 20 74 65 78 74  ionSuffix = text
27c60 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
27c70 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
27c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27c90 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d        else if (M
27ca0 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72  atchOption(newAr
27cb0 67 2c 20 22 77 68 61 74 49 66 22 29 29 0d 0a 20  g, "whatIf")).. 
27cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27cd0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
27ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27cf0 20 20 20 20 20 20 62 6f 6f 6c 3f 20 76 61 6c 75        bool? valu
27d00 65 20 3d 20 50 61 72 73 65 42 6f 6f 6c 65 61 6e  e = ParseBoolean
27d10 28 74 65 78 74 29 3b 0d 0a 0d 0a 20 20 20 20 20  (text);....     
27d20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27d30 20 20 20 20 20 20 20 69 66 20 28 76 61 6c 75 65         if (value
27d40 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
27d50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27d60 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
27d70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27d80 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20            error 
27d90 3d 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67  = TraceOps.Debug
27da0 41 6e 64 54 72 61 63 65 28 0d 0a 20 20 20 20 20  AndTrace(..     
27db0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
27dd0 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77  racePriority.Low
27de0 65 73 74 2c 20 64 65 62 75 67 43 61 6c 6c 62 61  est, debugCallba
27df0 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ck,..           
27e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27e10 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
27e20 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46  llback, String.F
27e30 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
27e40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27e50 20 20 20 20 20 20 20 20 20 20 20 20 22 49 6e 76              "Inv
27e60 61 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e  alid {0} boolean
27e70 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20   value: {1}",.. 
27e80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27e90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27ea0 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 61 72     ForDisplay(ar
27eb0 67 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 74  g), ForDisplay(t
27ec0 65 78 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20  ext)),..        
27ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27ee0 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
27ef0 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20  eCategory);.... 
27f00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27f10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
27f20 66 20 28 73 74 72 69 63 74 29 0d 0a 20 20 20 20  f (strict)..    
27f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27f40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27f50 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d  return false;...
27f60 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
27f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27f80 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20   continue;..    
27f90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27fa0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
27fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27fc0 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75           configu
27fd0 72 61 74 69 6f 6e 2e 77 68 61 74 49 66 20 3d 20  ration.whatIf = 
27fe0 28 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20 20  (bool)value;..  
27ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28000 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
28010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28020 20 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f   else if (MatchO
28030 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 77  ption(newArg, "w
28040 6f 77 36 34 22 29 29 0d 0a 20 20 20 20 20 20 20  ow64"))..       
28050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28060 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
28070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28080 62 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d 20 50 61  bool? value = Pa
28090 72 73 65 42 6f 6f 6c 65 61 6e 28 74 65 78 74 29  rseBoolean(text)
280a0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
280b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
280c0 20 69 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75   if (value == nu
280d0 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
280e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
280f0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
28100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28110 20 20 20 20 65 72 72 6f 72 20 3d 20 54 72 61 63      error = Trac
28120 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61  eOps.DebugAndTra
28130 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ce(..           
28140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28150 20 20 20 20 20 20 20 20 20 54 72 61 63 65 50 72           TracePr
28160 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64  iority.Lowest, d
28170 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20  ebugCallback,.. 
28180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
281a0 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b     traceCallback
281b0 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  , String.Format(
281c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
281d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
281e0 20 20 20 20 20 20 22 49 6e 76 61 6c 69 64 20 7b        "Invalid {
281f0 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65  0} boolean value
28200 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20  : {1}",..       
28210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28220 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72               For
28230 44 69 73 70 6c 61 79 28 61 72 67 29 2c 20 46 6f  Display(arg), Fo
28240 72 44 69 73 70 6c 61 79 28 74 65 78 74 29 29 2c  rDisplay(text)),
28250 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
28260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28270 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67        traceCateg
28280 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
28290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
282a0 20 20 20 20 20 20 20 20 20 69 66 20 28 73 74 72           if (str
282b0 69 63 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ict)..          
282c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
282d0 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
282e0 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20   false;....     
282f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28300 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69             conti
28310 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  nue;..          
28320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28330 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
28340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28350 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e     configuration
28360 2e 77 6f 77 36 34 20 3d 20 28 62 6f 6f 6c 29 76  .wow64 = (bool)v
28370 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alue;..         
28380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
28390 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
283a0 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a            else..
283b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
283c0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
283d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
283e0 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 54         error = T
283f0 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64  raceOps.DebugAnd
28400 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20  Trace(..        
28410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28420 20 20 20 20 20 20 20 20 54 72 61 63 65 50 72 69          TracePri
28430 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65  ority.Lowest, de
28440 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20  bugCallback,..  
28450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
28470 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72  aceCallback, Str
28480 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
28490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
284a0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 55 6e               "Un
284b0 73 75 70 70 6f 72 74 65 64 20 63 6f 6d 6d 61 6e  supported comman
284c0 64 20 6c 69 6e 65 20 6f 70 74 69 6f 6e 3a 20 7b  d line option: {
284d0 30 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  0}",..          
284e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
284f0 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79        ForDisplay
28500 28 61 72 67 29 29 2c 20 74 72 61 63 65 43 61 74  (arg)), traceCat
28510 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20  egory);....     
28520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28530 20 20 20 20 20 20 20 69 66 20 28 73 74 72 69 63         if (stric
28540 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t)..            
28550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28560 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
28570 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
28580 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
28590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
285a0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
285b0 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
285c0 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20  n true;..       
285d0 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
285e0 20 20 20 20 20 20 20 20 20 20 20 20 63 61 74 63              catc
285f0 68 20 28 45 78 63 65 70 74 69 6f 6e 20 65 29 0d  h (Exception e).
28600 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
28610 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
28620 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73          TraceOps
28630 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 54  .DebugAndTrace(T
28640 72 61 63 65 50 72 69 6f 72 69 74 79 2e 48 69 67  racePriority.Hig
28650 68 65 73 74 2c 0d 0a 20 20 20 20 20 20 20 20 20  hest,..         
28660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64                 d
28670 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72  ebugCallback, tr
28680 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 65 2c 20  aceCallback, e, 
28690 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
286a0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
286b0 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22         error = "
286c0 46 61 69 6c 65 64 20 74 6f 20 6d 6f 64 69 66 79  Failed to modify
286d0 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 22   configuration."
286e0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
286f0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
28700 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
28710 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alse;..         
28720 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
28730 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
28740 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28750 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28760 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28770 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
28780 20 20 20 20 20 20 20 5b 4d 65 74 68 6f 64 49 6d         [MethodIm
28790 70 6c 28 4d 65 74 68 6f 64 49 6d 70 6c 4f 70 74  pl(MethodImplOpt
287a0 69 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e 69 6e 67 29  ions.NoInlining)
287b0 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ]..            p
287c0 75 62 6c 69 63 20 73 74 61 74 69 63 20 62 6f 6f  ublic static boo
287d0 6c 20 50 72 6f 63 65 73 73 28 0d 0a 20 20 20 20  l Process(..    
287e0 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
287f0 6e 67 5b 5d 20 61 72 67 73 2c 0d 0a 20 20 20 20  ng[] args,..    
28800 20 20 20 20 20 20 20 20 20 20 20 20 43 6f 6e 66              Conf
28810 69 67 75 72 61 74 69 6f 6e 20 63 6f 6e 66 69 67  iguration config
28820 75 72 61 74 69 6f 6e 2c 0d 0a 20 20 20 20 20 20  uration,..      
28830 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 73            bool s
28840 74 72 69 63 74 2c 0d 0a 20 20 20 20 20 20 20 20  trict,..        
28850 20 20 20 20 20 20 20 20 72 65 66 20 73 74 72 69          ref stri
28860 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20 20 20 20  ng error..      
28870 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
28880 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
28890 20 20 20 20 20 20 20 20 20 20 20 20 74 72 79 0d              try.
288a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
288b0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
288c0 20 20 20 20 20 20 20 20 69 66 20 28 63 6f 6e 66          if (conf
288d0 69 67 75 72 61 74 69 6f 6e 20 3d 3d 20 6e 75 6c  iguration == nul
288e0 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
288f0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
28900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28910 20 20 20 65 72 72 6f 72 20 3d 20 22 49 6e 76 61     error = "Inva
28920 6c 69 64 20 63 6f 6e 66 69 67 75 72 61 74 69 6f  lid configuratio
28930 6e 2e 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  n.";..          
28940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
28950 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20  turn false;..   
28960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28970 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
28980 20 20 20 20 20 20 20 20 20 20 41 73 73 65 6d 62            Assemb
28990 6c 79 20 61 73 73 65 6d 62 6c 79 20 3d 20 63 6f  ly assembly = co
289a0 6e 66 69 67 75 72 61 74 69 6f 6e 2e 61 73 73 65  nfiguration.asse
289b0 6d 62 6c 79 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  mbly;....       
289c0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
289d0 28 61 73 73 65 6d 62 6c 79 20 3d 3d 20 6e 75 6c  (assembly == nul
289e0 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
289f0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
28a00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28a10 20 20 20 65 72 72 6f 72 20 3d 20 22 49 6e 76 61     error = "Inva
28a20 6c 69 64 20 61 73 73 65 6d 62 6c 79 2e 22 3b 0d  lid assembly.";.
28a30 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
28a40 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
28a50 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20  false;..        
28a60 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
28a70 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
28a80 20 20 20 20 20 69 66 20 28 21 63 6f 6e 66 69 67       if (!config
28a90 75 72 61 74 69 6f 6e 2e 6e 6f 54 72 61 63 65 29  uration.noTrace)
28aa0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
28ab0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
28ac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28ad0 20 69 66 20 28 21 63 6f 6e 66 69 67 75 72 61 74   if (!configurat
28ae0 69 6f 6e 2e 6e 6f 4c 6f 67 20 26 26 0d 0a 20 20  ion.noLog &&..  
28af0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28b00 20 20 20 20 20 20 20 20 20 20 53 74 72 69 6e 67            String
28b10 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 63  .IsNullOrEmpty(c
28b20 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6c 6f 67  onfiguration.log
28b30 46 69 6c 65 4e 61 6d 65 29 29 0d 0a 20 20 20 20  FileName))..    
28b40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28b50 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
28b60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28b70 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
28b80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28b90 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 55 73 65 20     // NOTE: Use 
28ba0 74 68 65 20 64 65 66 61 75 6c 74 20 6c 6f 67 20  the default log 
28bb0 66 69 6c 65 20 6e 61 6d 65 2e 0d 0a 20 20 20 20  file name...    
28bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28bd0 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
28be0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28bf0 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72          configur
28c00 61 74 69 6f 6e 2e 6c 6f 67 46 69 6c 65 4e 61 6d  ation.logFileNam
28c10 65 20 3d 20 47 65 74 4c 6f 67 46 69 6c 65 4e 61  e = GetLogFileNa
28c20 6d 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me(..           
28c30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28c40 20 20 20 20 20 22 74 72 61 63 65 22 29 3b 0d 0a       "trace");..
28c50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28c60 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
28c70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28c80 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
28c90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28ca0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28cb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
28cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28cd0 20 20 20 20 20 20 20 20 69 66 20 28 21 63 6f 6e          if (!con
28ce0 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 43 6f 6e  figuration.noCon
28cf0 73 6f 6c 65 29 0d 0a 20 20 20 20 20 20 20 20 20  sole)..         
28d00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
28d10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
28d20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
28d30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
28d40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
28d50 20 4e 4f 54 45 3a 20 49 6e 20 76 65 72 62 6f 73   NOTE: In verbos
28d60 65 20 6d 6f 64 65 2c 20 64 65 62 75 67 20 6f 75  e mode, debug ou
28d70 74 70 75 74 20 28 74 68 61 74 20 6d 65 65 74 73  tput (that meets
28d80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
28d90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
28da0 20 20 20 20 20 20 20 74 68 65 20 63 6f 6e 66 69         the confi
28db0 67 75 72 65 64 20 70 72 69 6f 72 69 74 79 20 63  gured priority c
28dc0 72 69 74 65 72 69 61 29 20 77 69 6c 6c 20 62 65  riteria) will be
28dd0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
28de0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
28df0 20 20 20 20 20 20 20 64 69 73 70 6c 61 79 65 64         displayed
28e00 20 74 6f 20 74 68 65 20 63 6f 6e 73 6f 6c 65 3b   to the console;
28e10 20 6f 74 68 65 72 77 69 73 65 2c 20 74 72 61 63   otherwise, trac
28e20 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e..             
28e30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
28e40 2f 20 20 20 20 20 20 20 6f 75 74 70 75 74 20 28  /       output (
28e50 74 68 61 74 20 6d 65 65 74 73 20 74 68 65 20 63  that meets the c
28e60 6f 6e 66 69 67 75 72 65 64 20 70 72 69 6f 72 69  onfigured priori
28e70 74 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ty..            
28e80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28e90 2f 2f 20 20 20 20 20 20 20 63 72 69 74 65 72 69  //       criteri
28ea0 61 29 20 77 69 6c 6c 20 62 65 20 64 69 73 70 6c  a) will be displ
28eb0 61 79 65 64 20 74 6f 20 74 68 65 20 63 6f 6e 73  ayed to the cons
28ec0 6f 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  ole...          
28ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28ee0 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
28ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28f00 20 20 69 66 20 28 63 6f 6e 66 69 67 75 72 61 74    if (configurat
28f10 69 6f 6e 2e 64 65 62 75 67 29 0d 0a 20 20 20 20  ion.debug)..    
28f20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28f30 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
28f40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28f50 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
28f60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
28f80 2f 20 4e 4f 54 45 3a 20 41 64 64 20 74 68 65 20  / NOTE: Add the 
28f90 63 6f 6e 73 6f 6c 65 20 74 72 61 63 65 20 6c 69  console trace li
28fa0 73 74 65 6e 65 72 20 74 6f 20 74 68 65 0d 0a 20  stener to the.. 
28fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
28fd0 2f 20 20 20 20 20 20 20 6c 69 73 74 20 6f 66 20  /       list of 
28fe0 74 72 61 63 65 20 6c 69 73 74 65 6e 65 72 73 20  trace listeners 
28ff0 6d 61 69 6e 74 61 69 6e 65 64 20 62 79 0d 0a 20  maintained by.. 
29000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
29020 2f 20 20 20 20 20 20 20 74 68 65 20 54 72 61 63  /       the Trac
29030 65 4f 70 73 20 63 6c 61 73 73 20 28 69 2e 65 2e  eOps class (i.e.
29040 20 6f 6e 6c 79 20 6d 65 73 73 61 67 65 73 0d 0a   only messages..
29050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29070 2f 2f 20 20 20 20 20 20 20 74 68 61 74 20 6d 65  //       that me
29080 65 74 20 74 68 65 20 64 65 62 75 67 20 70 72 69  et the debug pri
29090 6f 72 69 74 79 20 77 69 6c 6c 20 62 65 0d 0a 20  ority will be.. 
290a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
290b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
290c0 2f 20 20 20 20 20 20 20 73 65 65 6e 20 6f 6e 20  /       seen on 
290d0 74 68 65 20 63 6f 6e 73 6f 6c 65 29 2e 0d 0a 20  the console)... 
290e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
290f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
29100 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
29110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29120 20 20 20 54 72 61 63 65 4f 70 73 2e 53 65 74 75     TraceOps.Setu
29130 70 44 65 62 75 67 4c 69 73 74 65 6e 65 72 73 28  pDebugListeners(
29140 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
29150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29160 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
29170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
29180 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  lse..           
29190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
291a0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
291b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
291c0 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
291d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
291e0 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a          // NOTE:
291f0 20 41 64 64 20 74 68 65 20 63 6f 6e 73 6f 6c 65   Add the console
29200 20 74 72 61 63 65 20 6c 69 73 74 65 6e 65 72 20   trace listener 
29210 74 6f 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20  to the..        
29220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29230 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
29240 20 6c 69 73 74 20 6f 66 20 62 75 69 6c 74 2d 69   list of built-i
29250 6e 20 74 72 61 63 65 20 6c 69 73 74 65 6e 65 72  n trace listener
29260 73 20 28 69 2e 65 2e 0d 0a 20 20 20 20 20 20 20  s (i.e...       
29270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29280 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
29290 20 20 6f 6e 6c 79 20 6d 65 73 73 61 67 65 73 20    only messages 
292a0 74 68 61 74 20 6d 65 65 74 20 74 68 65 20 74 72  that meet the tr
292b0 61 63 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ace..           
292c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
292d0 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 70 72       //       pr
292e0 69 6f 72 69 74 79 20 77 69 6c 6c 20 62 65 20 73  iority will be s
292f0 65 65 6e 20 6f 6e 20 74 68 65 20 63 6f 6e 73 6f  een on the conso
29300 6c 65 29 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  le)...          
29310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29320 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
29330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29340 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 2e            Trace.
29350 4c 69 73 74 65 6e 65 72 73 2e 41 64 64 28 6e 65  Listeners.Add(ne
29360 77 20 43 6f 6e 73 6f 6c 65 54 72 61 63 65 4c 69  w ConsoleTraceLi
29370 73 74 65 6e 65 72 28 29 29 3b 0d 0a 20 20 20 20  stener());..    
29380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29390 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
293a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
293b0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
293c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
293d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
293e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
293f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29400 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
29410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29420 20 20 20 69 66 20 28 21 63 6f 6e 66 69 67 75 72     if (!configur
29430 61 74 69 6f 6e 2e 6e 6f 4c 6f 67 20 26 26 0d 0a  ation.noLog &&..
29440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29450 20 20 20 20 20 20 20 20 20 20 20 20 21 53 74 72              !Str
29460 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74  ing.IsNullOrEmpt
29470 79 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e  y(configuration.
29480 6c 6f 67 46 69 6c 65 4e 61 6d 65 29 29 0d 0a 20  logFileName)).. 
29490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
294a0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
294b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
294c0 20 20 20 20 20 20 54 72 61 63 65 2e 4c 69 73 74        Trace.List
294d0 65 6e 65 72 73 2e 41 64 64 28 6e 65 77 20 54 65  eners.Add(new Te
294e0 78 74 57 72 69 74 65 72 54 72 61 63 65 4c 69 73  xtWriterTraceLis
294f0 74 65 6e 65 72 28 0d 0a 20 20 20 20 20 20 20 20  tener(..        
29500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29510 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72          configur
29520 61 74 69 6f 6e 2e 6c 6f 67 46 69 6c 65 4e 61 6d  ation.logFileNam
29530 65 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  e));....        
29540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29550 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
29560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29570 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 54 65 63      // NOTE: Tec
29580 68 6e 69 63 61 6c 6c 79 2c 20 77 65 20 63 72 65  hnically, we cre
29590 61 74 65 64 20 74 68 65 20 6c 6f 67 20 66 69 6c  ated the log fil
295a0 65 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e...            
295b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
295c0 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
295d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
295e0 66 69 6c 65 73 43 72 65 61 74 65 64 2b 2b 3b 0d  filesCreated++;.
295f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
29600 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
29610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29620 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
29630 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
29640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29650 20 2f 2f 20 4e 4f 54 45 3a 20 44 75 6d 70 20 74   // NOTE: Dump t
29660 68 65 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  he configuration
29670 20 6e 6f 77 20 69 6e 20 63 61 73 65 20 77 65 20   now in case we 
29680 6e 65 65 64 20 74 6f 0d 0a 20 20 20 20 20 20 20  need to..       
29690 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
296a0 20 20 20 20 20 20 74 72 6f 75 62 6c 65 73 68 6f        troublesho
296b0 6f 74 20 61 6e 79 20 69 73 73 75 65 73 2e 0d 0a  ot any issues...
296c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
296d0 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
296e0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
296f0 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 64 65  configuration.de
29700 62 75 67 50 72 69 6f 72 69 74 79 20 3c 3d 20 54  bugPriority <= T
29710 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4d 65 64  racePriority.Med
29720 69 75 6d 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ium)..          
29730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
29740 6e 66 69 67 75 72 61 74 69 6f 6e 2e 44 75 6d 70  nfiguration.Dump
29750 28 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 29 3b  (debugCallback);
29760 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
29770 20 20 20 20 20 20 20 20 69 66 20 28 63 6f 6e 66          if (conf
29780 69 67 75 72 61 74 69 6f 6e 2e 74 72 61 63 65 50  iguration.traceP
29790 72 69 6f 72 69 74 79 20 3c 3d 20 54 72 61 63 65  riority <= Trace
297a0 50 72 69 6f 72 69 74 79 2e 4d 65 64 69 75 6d 29  Priority.Medium)
297b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
297c0 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67            config
297d0 75 72 61 74 69 6f 6e 2e 44 75 6d 70 28 74 72 61  uration.Dump(tra
297e0 63 65 43 61 6c 6c 62 61 63 6b 29 3b 0d 0a 0d 0a  ceCallback);....
297f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29800 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
29810 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e              // N
29820 4f 54 45 3a 20 53 68 6f 77 20 77 68 65 72 65 20  OTE: Show where 
29830 77 65 20 61 72 65 20 72 75 6e 6e 69 6e 67 20 66  we are running f
29840 72 6f 6d 20 61 6e 64 20 68 6f 77 20 77 65 20 77  rom and how we w
29850 65 72 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ere..           
29860 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
29870 20 20 69 6e 76 6f 6b 65 64 2e 0d 0a 20 20 20 20    invoked...    
29880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29890 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
298a0 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6c          string l
298b0 6f 63 61 74 69 6f 6e 20 3d 20 61 73 73 65 6d 62  ocation = assemb
298c0 6c 79 2e 4c 6f 63 61 74 69 6f 6e 3b 0d 0a 0d 0a  ly.Location;....
298d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
298e0 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62      TraceOps.Deb
298f0 75 67 41 6e 64 54 72 61 63 65 28 54 72 61 63 65  ugAndTrace(Trace
29900 50 72 69 6f 72 69 74 79 2e 4d 65 64 69 75 6d 4c  Priority.MediumL
29910 6f 77 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ow,..           
29920 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65 62               deb
29930 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63  ugCallback, trac
29940 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e  eCallback, Strin
29950 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
29960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29970 20 20 20 22 52 75 6e 6e 69 6e 67 20 65 78 65 63     "Running exec
29980 75 74 61 62 6c 65 20 69 73 3a 20 7b 30 7d 22 2c  utable is: {0}",
29990 20 46 6f 72 44 69 73 70 6c 61 79 28 6c 6f 63 61   ForDisplay(loca
299a0 74 69 6f 6e 29 29 2c 0d 0a 20 20 20 20 20 20 20  tion)),..       
299b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
299c0 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
299d0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
299e0 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73          TraceOps
299f0 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 54  .DebugAndTrace(T
29a00 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4d 65 64  racePriority.Med
29a10 69 75 6d 4c 6f 77 2c 0d 0a 20 20 20 20 20 20 20  iumLow,..       
29a20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29a30 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20   debugCallback, 
29a40 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53  traceCallback, S
29a50 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
29a60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29a70 20 20 20 20 20 20 20 22 4f 72 69 67 69 6e 61 6c         "Original
29a80 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 20 69 73   command line is
29a90 3a 20 7b 30 7d 22 2c 0d 0a 20 20 20 20 20 20 20  : {0}",..       
29aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29ab0 20 45 6e 76 69 72 6f 6e 6d 65 6e 74 2e 43 6f 6d   Environment.Com
29ac0 6d 61 6e 64 4c 69 6e 65 29 2c 20 74 72 61 63 65  mandLine), trace
29ad0 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  Category);....  
29ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29af0 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67    TraceOps.Debug
29b00 41 6e 64 54 72 61 63 65 28 54 72 61 63 65 50 72  AndTrace(TracePr
29b10 69 6f 72 69 74 79 2e 4d 65 64 69 75 6d 4c 6f 77  iority.MediumLow
29b20 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
29b30 20 20 20 20 20 20 20 20 20 20 20 64 65 62 75 67             debug
29b40 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43  Callback, traceC
29b50 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e  allback, String.
29b60 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
29b70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29b80 20 22 52 75 6e 6e 69 6e 67 20 70 72 6f 63 65 73   "Running proces
29b90 73 20 69 73 20 7b 30 7d 2e 22 2c 20 49 73 36 34  s is {0}.", Is64
29ba0 42 69 74 50 72 6f 63 65 73 73 28 29 20 3f 0d 0a  BitProcess() ?..
29bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29bc0 20 20 20 20 20 20 20 20 20 20 20 20 22 36 34 2d              "64-
29bd0 62 69 74 22 20 3a 20 22 33 32 2d 62 69 74 22 29  bit" : "32-bit")
29be0 2c 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29  , traceCategory)
29bf0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
29c00 20 20 20 20 20 20 20 20 20 69 66 20 28 21 63 6f           if (!co
29c10 6e 66 69 67 75 72 61 74 69 6f 6e 2e 77 68 61 74  nfiguration.what
29c20 49 66 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  If)..           
29c30 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
29c40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29c50 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
29c60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29c70 2f 2f 20 4e 4f 54 45 3a 20 49 66 20 74 68 65 20  // NOTE: If the 
29c80 64 65 62 75 67 67 65 72 20 69 73 20 61 74 74 61  debugger is atta
29c90 63 68 65 64 20 61 6e 64 20 22 77 68 61 74 2d 69  ched and "what-i
29ca0 66 22 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  f"..            
29cb0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
29cc0 20 20 20 20 20 6d 6f 64 65 20 69 73 20 5b 6e 6f       mode is [no
29cd0 77 5d 20 64 69 73 61 62 6c 65 64 2c 20 69 73 73  w] disabled, iss
29ce0 75 65 20 61 20 77 61 72 6e 69 6e 67 2e 0d 0a 20  ue a warning... 
29cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29d00 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
29d10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29d20 20 20 20 69 66 20 28 44 65 62 75 67 67 65 72 2e     if (Debugger.
29d30 49 73 41 74 74 61 63 68 65 64 29 0d 0a 20 20 20  IsAttached)..   
29d40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29d50 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
29d60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29d70 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62      TraceOps.Deb
29d80 75 67 41 6e 64 54 72 61 63 65 28 54 72 61 63 65  ugAndTrace(Trace
29d90 50 72 69 6f 72 69 74 79 2e 4d 65 64 69 75 6d 48  Priority.MediumH
29da0 69 67 68 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  igh,..          
29db0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29dc0 20 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62        debugCallb
29dd0 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61  ack, traceCallba
29de0 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ck,..           
29df0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29e00 20 20 20 20 20 22 46 6f 72 63 65 64 20 74 6f 20       "Forced to 
29e10 64 69 73 61 62 6c 65 20 5c 22 77 68 61 74 2d 69  disable \"what-i
29e20 66 5c 22 20 6d 6f 64 65 20 77 69 74 68 20 22 20  f\" mode with " 
29e30 2b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  +..             
29e40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29e50 20 20 20 22 64 65 62 75 67 67 65 72 20 61 74 74     "debugger att
29e60 61 63 68 65 64 2e 22 2c 20 74 72 61 63 65 43 61  ached.", traceCa
29e70 74 65 67 6f 72 79 29 3b 0d 0a 20 20 20 20 20 20  tegory);..      
29e80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29e90 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
29ea0 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
29eb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29ec0 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20  else..          
29ed0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
29ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29ef0 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65       TraceOps.De
29f00 62 75 67 41 6e 64 54 72 61 63 65 28 54 72 61 63  bugAndTrace(Trac
29f10 65 50 72 69 6f 72 69 74 79 2e 4d 65 64 69 75 6d  ePriority.Medium
29f20 48 69 67 68 2c 0d 0a 20 20 20 20 20 20 20 20 20  High,..         
29f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29f40 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b     debugCallback
29f50 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c  , traceCallback,
29f60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
29f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 4e                "N
29f80 6f 20 61 63 74 75 61 6c 20 63 68 61 6e 67 65 73  o actual changes
29f90 20 77 69 6c 6c 20 62 65 20 6d 61 64 65 20 74 6f   will be made to
29fa0 20 74 68 69 73 20 22 20 2b 0d 0a 20 20 20 20 20   this " +..     
29fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29fc0 20 20 20 20 20 20 20 22 73 79 73 74 65 6d 20 62         "system b
29fd0 65 63 61 75 73 65 20 5c 22 77 68 61 74 2d 69 66  ecause \"what-if
29fe0 5c 22 20 6d 6f 64 65 20 69 73 20 65 6e 61 62 6c  \" mode is enabl
29ff0 65 64 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  ed.",..         
2a000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a010 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
2a020 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
2a030 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
2a040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a050 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
2a060 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45           // NOTE
2a070 3a 20 49 66 20 74 68 65 20 72 65 67 69 73 74 72  : If the registr
2a080 79 20 6c 6f 67 20 66 69 6c 65 20 6e 61 6d 65 20  y log file name 
2a090 68 61 73 20 62 65 65 6e 20 73 65 74 2c 20 69 74  has been set, it
2a0a0 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  s..             
2a0b0 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
2a0c0 76 61 6c 75 65 20 77 69 6c 6c 20 62 65 20 75 73  value will be us
2a0d0 65 64 20 76 65 72 62 61 74 69 6d 20 61 73 20 74  ed verbatim as t
2a0e0 68 65 20 70 6c 61 63 65 20 77 68 65 72 65 0d 0a  he place where..
2a0f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a100 20 20 20 20 2f 2f 20 20 20 20 20 20 20 61 6c 6c      //       all
2a110 20 72 65 67 69 73 74 72 79 20 77 72 69 74 65 20   registry write 
2a120 6f 70 65 72 61 74 69 6f 6e 73 20 77 69 6c 6c 20  operations will 
2a130 28 65 76 65 6e 74 75 61 6c 6c 79 29 0d 0a 20 20  (eventually)..  
2a140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a150 20 20 2f 2f 20 20 20 20 20 20 20 62 65 20 6c 6f    //       be lo
2a160 67 67 65 64 2e 20 20 4d 61 6b 65 20 73 75 72 65  gged.  Make sure
2a170 20 74 68 65 20 72 65 67 69 73 74 72 79 20 68 65   the registry he
2a180 6c 70 65 72 20 63 6c 61 73 73 0d 0a 20 20 20 20  lper class..    
2a190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a1a0 2f 2f 20 20 20 20 20 20 20 68 61 73 20 61 20 76  //       has a v
2a1b0 61 6c 69 64 20 6f 70 65 72 61 74 69 6f 6e 20 6c  alid operation l
2a1c0 69 73 74 3b 20 6f 74 68 65 72 77 69 73 65 2c 20  ist; otherwise, 
2a1d0 69 74 20 77 69 6c 6c 0d 0a 20 20 20 20 20 20 20  it will..       
2a1e0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
2a1f0 20 20 20 20 20 20 6e 6f 74 20 70 65 72 66 6f 72        not perfor
2a200 6d 20 61 6e 79 20 6c 6f 67 67 69 6e 67 2e 0d 0a  m any logging...
2a210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a220 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
2a230 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
2a240 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 72 65  configuration.re
2a250 67 69 73 74 72 79 4c 6f 67 46 69 6c 65 4e 61 6d  gistryLogFileNam
2a260 65 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  e != null)..    
2a270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a280 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
2a290 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73             Regis
2a2a0 74 72 79 48 65 6c 70 65 72 2e 45 6e 61 62 6c 65  tryHelper.Enable
2a2b0 4f 72 44 69 73 61 62 6c 65 4f 70 65 72 61 74 69  OrDisableOperati
2a2c0 6f 6e 4c 69 73 74 28 74 72 75 65 29 3b 0d 0a 0d  onList(true);...
2a2d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2a2e0 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70           TraceOp
2a2f0 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28  s.DebugAndTrace(
2a300 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4d 65  TracePriority.Me
2a310 64 69 75 6d 48 69 67 68 2c 0d 0a 20 20 20 20 20  diumHigh,..     
2a320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a330 20 20 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c         debugCall
2a340 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62  back, traceCallb
2a350 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d  ack, String.Form
2a360 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
2a370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a380 20 22 52 65 67 69 73 74 72 79 20 6c 6f 67 67 69   "Registry loggi
2a390 6e 67 20 74 6f 20 66 69 6c 65 20 7b 30 7d 20 65  ng to file {0} e
2a3a0 6e 61 62 6c 65 64 2e 22 2c 0d 0a 20 20 20 20 20  nabled.",..     
2a3b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a3c0 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61         ForDispla
2a3d0 79 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e  y(configuration.
2a3e0 72 65 67 69 73 74 72 79 4c 6f 67 46 69 6c 65 4e  registryLogFileN
2a3f0 61 6d 65 29 29 2c 0d 0a 20 20 20 20 20 20 20 20  ame)),..        
2a400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a410 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72      traceCategor
2a420 79 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  y);..           
2a430 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
2a440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a450 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
2a460 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54            // NOT
2a470 45 3a 20 49 66 20 74 68 65 20 63 6f 6d 6d 61 6e  E: If the comman
2a480 64 20 6c 69 6e 65 20 68 61 73 20 6e 6f 74 20 62  d line has not b
2a490 65 65 6e 20 6d 61 6e 75 61 6c 6c 79 0d 0a 20 20  een manually..  
2a4a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a4b0 20 20 2f 2f 20 20 20 20 20 20 20 63 6f 6e 66 69    //       confi
2a4c0 72 6d 65 64 20 28 69 2e 65 2e 20 76 69 61 20 74  rmed (i.e. via t
2a4d0 68 65 20 65 78 70 6c 69 63 69 74 20 63 6f 6d 6d  he explicit comm
2a4e0 61 6e 64 20 6c 69 6e 65 0d 0a 20 20 20 20 20 20  and line..      
2a4f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
2a500 20 20 20 20 20 20 20 6f 70 74 69 6f 6e 29 2c 20         option), 
2a510 74 68 65 6e 20 73 74 6f 70 20 70 72 6f 63 65 73  then stop proces
2a520 73 69 6e 67 20 6e 6f 77 2e 20 20 57 65 20 65 6e  sing now.  We en
2a530 66 6f 72 63 65 0d 0a 20 20 20 20 20 20 20 20 20  force..         
2a540 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
2a550 20 20 20 20 74 68 69 73 20 72 75 6c 65 20 73 6f      this rule so
2a560 20 74 68 61 74 20 73 69 6d 70 6c 79 20 64 6f 75   that simply dou
2a570 62 6c 65 2d 63 6c 69 63 6b 69 6e 67 20 74 68 65  ble-clicking the
2a580 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2a590 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 65        //       e
2a5a0 78 65 63 75 74 61 62 6c 65 20 77 69 6c 6c 20 6e  xecutable will n
2a5b0 6f 74 20 72 65 73 75 6c 74 20 69 6e 20 61 6e 79  ot result in any
2a5c0 20 63 68 61 6e 67 65 73 20 62 65 69 6e 67 0d 0a   changes being..
2a5d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a5e0 20 20 20 20 2f 2f 20 20 20 20 20 20 20 6d 61 64      //       mad
2a5f0 65 20 74 6f 20 74 68 65 20 73 79 73 74 65 6d 2e  e to the system.
2a600 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2a610 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
2a620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
2a630 20 28 21 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e   (!configuration
2a640 2e 63 6f 6e 66 69 72 6d 29 0d 0a 20 20 20 20 20  .confirm)..     
2a650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
2a660 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2a670 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20            error 
2a680 3d 20 22 43 61 6e 6e 6f 74 20 63 6f 6e 74 69 6e  = "Cannot contin
2a690 75 65 2c 20 74 68 65 20 5c 22 63 6f 6e 66 69 72  ue, the \"confir
2a6a0 6d 5c 22 20 6f 70 74 69 6f 6e 20 69 73 20 22 20  m\" option is " 
2a6b0 2b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  +..             
2a6c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
2a6d0 6e 6f 74 20 65 6e 61 62 6c 65 64 2e 22 3b 0d 0a  not enabled.";..
2a6e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2a6f0 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
2a700 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20   false;..       
2a710 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
2a720 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2a730 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75        return tru
2a740 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
2a750 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
2a760 20 20 20 20 20 20 20 63 61 74 63 68 20 28 45 78         catch (Ex
2a770 63 65 70 74 69 6f 6e 20 65 29 0d 0a 20 20 20 20  ception e)..    
2a780 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
2a790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a7a0 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75     TraceOps.Debu
2a7b0 67 41 6e 64 54 72 61 63 65 28 54 72 61 63 65 50  gAndTrace(TraceP
2a7c0 72 69 6f 72 69 74 79 2e 48 69 67 68 65 73 74 2c  riority.Highest,
2a7d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2a7e0 20 20 20 20 20 20 20 20 20 20 64 65 62 75 67 43            debugC
2a7f0 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61  allback, traceCa
2a800 6c 6c 62 61 63 6b 2c 20 65 2c 20 74 72 61 63 65  llback, e, trace
2a810 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  Category);....  
2a820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a830 20 20 65 72 72 6f 72 20 3d 20 22 46 61 69 6c 65    error = "Faile
2a840 64 20 74 6f 20 70 72 6f 63 65 73 73 20 63 6f 6e  d to process con
2a850 66 69 67 75 72 61 74 69 6f 6e 2e 22 3b 0d 0a 20  figuration.";.. 
2a860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
2a870 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2a880 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
2a890 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
2a8a0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2a8b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a8c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a8d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a8e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a8f0 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
2a900 20 20 20 5b 4d 65 74 68 6f 64 49 6d 70 6c 28 4d     [MethodImpl(M
2a910 65 74 68 6f 64 49 6d 70 6c 4f 70 74 69 6f 6e 73  ethodImplOptions
2a920 2e 4e 6f 49 6e 6c 69 6e 69 6e 67 29 5d 0d 0a 20  .NoInlining)].. 
2a930 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
2a940 63 20 73 74 61 74 69 63 20 62 6f 6f 6c 20 43 68  c static bool Ch
2a950 65 63 6b 52 75 6e 74 69 6d 65 56 65 72 73 69 6f  eckRuntimeVersio
2a960 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n(..            
2a970 20 20 20 20 43 6f 6e 66 69 67 75 72 61 74 69 6f      Configuratio
2a980 6e 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2c  n configuration,
2a990 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2a9a0 20 20 62 6f 6f 6c 20 73 74 72 69 63 74 2c 0d 0a    bool strict,..
2a9b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a9c0 72 65 66 20 73 74 72 69 6e 67 20 65 72 72 6f 72  ref string error
2a9d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2a9e0 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20    )..           
2a9f0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
2aa00 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20      try..       
2aa10 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
2aa20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2aa30 69 66 20 28 63 6f 6e 66 69 67 75 72 61 74 69 6f  if (configuratio
2aa40 6e 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  n == null)..    
2aa50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2aa60 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
2aa70 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72             error
2aa80 20 3d 20 22 49 6e 76 61 6c 69 64 20 63 6f 6e 66   = "Invalid conf
2aa90 69 67 75 72 61 74 69 6f 6e 2e 22 3b 0d 0a 20 20  iguration.";..  
2aaa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2aab0 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
2aac0 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se;..           
2aad0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
2aae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2aaf0 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
2ab00 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54            // NOT
2ab10 45 3a 20 57 68 61 74 20 76 65 72 73 69 6f 6e 20  E: What version 
2ab20 6f 66 20 74 68 65 20 72 75 6e 74 69 6d 65 20 77  of the runtime w
2ab30 61 73 20 74 68 65 20 63 6f 72 65 20 28 70 72 69  as the core (pri
2ab40 6d 61 72 79 29 0d 0a 20 20 20 20 20 20 20 20 20  mary)..         
2ab50 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
2ab60 20 20 20 20 61 73 73 65 6d 62 6c 79 20 63 6f 6d      assembly com
2ab70 70 69 6c 65 64 20 61 67 61 69 6e 73 74 20 28 65  piled against (e
2ab80 2e 67 2e 20 22 76 32 2e 30 2e 35 30 37 32 37 22  .g. "v2.0.50727"
2ab90 20 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20   or..           
2aba0 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
2abb0 20 20 22 76 34 2e 30 2e 33 30 33 31 39 22 29 2e    "v4.0.30319").
2abc0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2abd0 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
2abe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
2abf0 72 69 6e 67 20 63 6f 72 65 49 6d 61 67 65 52 75  ring coreImageRu
2ac00 6e 74 69 6d 65 56 65 72 73 69 6f 6e 20 3d 20 47  ntimeVersion = G
2ac10 65 74 49 6d 61 67 65 52 75 6e 74 69 6d 65 56 65  etImageRuntimeVe
2ac20 72 73 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20  rsion(..        
2ac30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ac40 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 63 6f  configuration.co
2ac50 72 65 46 69 6c 65 4e 61 6d 65 29 3b 0d 0a 0d 0a  reFileName);....
2ac60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ac70 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
2ac80 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e              // N
2ac90 4f 54 45 3a 20 57 65 20 61 6c 6c 6f 77 20 74 68  OTE: We allow th
2aca0 65 20 61 63 74 75 61 6c 20 69 6d 61 67 65 20 72  e actual image r
2acb0 75 6e 74 69 6d 65 20 63 68 65 63 6b 69 6e 67 20  untime checking 
2acc0 74 6f 20 62 65 0d 0a 20 20 20 20 20 20 20 20 20  to be..         
2acd0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
2ace0 20 20 20 20 62 79 70 61 73 73 65 64 20 76 69 61      bypassed via
2acf0 20 74 68 65 20 22 2d 6e 6f 52 75 6e 74 69 6d 65   the "-noRuntime
2ad00 56 65 72 73 69 6f 6e 22 20 63 6f 6d 6d 61 6e 64  Version" command
2ad10 20 6c 69 6e 65 0d 0a 20 20 20 20 20 20 20 20 20   line..         
2ad20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
2ad30 20 20 20 20 6f 70 74 69 6f 6e 2e 20 20 54 68 65      option.  The
2ad40 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 20 6f 70   command line op
2ad50 74 69 6f 6e 20 69 73 20 69 6e 74 65 6e 64 65 64  tion is intended
2ad60 20 66 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20   for..          
2ad70 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
2ad80 20 20 20 65 78 70 65 72 74 20 75 73 65 20 6f 6e     expert use on
2ad90 6c 79 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ly...           
2ada0 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
2adb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2adc0 20 69 66 20 28 63 6f 6e 66 69 67 75 72 61 74 69   if (configurati
2add0 6f 6e 2e 6e 6f 52 75 6e 74 69 6d 65 56 65 72 73  on.noRuntimeVers
2ade0 69 6f 6e 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ion)..          
2adf0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
2ae00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ae10 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65       TraceOps.De
2ae20 62 75 67 41 6e 64 54 72 61 63 65 28 54 72 61 63  bugAndTrace(Trac
2ae30 65 50 72 69 6f 72 69 74 79 2e 4d 65 64 69 75 6d  ePriority.Medium
2ae40 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
2ae50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64                 d
2ae60 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72  ebugCallback, tr
2ae70 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72  aceCallback, Str
2ae80 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
2ae90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2aea0 20 20 20 20 20 20 20 20 20 22 41 73 73 65 6d 62           "Assemb
2aeb0 6c 79 20 69 73 20 63 6f 6d 70 69 6c 65 64 20 66  ly is compiled f
2aec0 6f 72 20 74 68 65 20 2e 4e 45 54 20 46 72 61 6d  or the .NET Fram
2aed0 65 77 6f 72 6b 20 7b 30 7d 3b 20 22 20 2b 0d 0a  ework {0}; " +..
2aee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2aef0 20 20 20 20 20 20 20 20 20 20 20 20 22 68 6f 77              "how
2af00 65 76 65 72 2c 20 69 6e 73 74 61 6c 6c 61 74 69  ever, installati
2af10 6f 6e 20 72 65 73 74 72 69 63 74 69 6f 6e 73 20  on restrictions 
2af20 62 61 73 65 64 20 6f 6e 20 74 68 69 73 20 22 20  based on this " 
2af30 2b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  +..             
2af40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
2af50 66 61 63 74 20 68 61 76 65 20 62 65 65 6e 20 64  fact have been d
2af60 69 73 61 62 6c 65 64 20 76 69 61 20 74 68 65 20  isabled via the 
2af70 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 2e 22 2c 0d  command line.",.
2af80 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2af90 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 72               cor
2afa0 65 49 6d 61 67 65 52 75 6e 74 69 6d 65 56 65 72  eImageRuntimeVer
2afb0 73 69 6f 6e 29 2c 20 74 72 61 63 65 43 61 74 65  sion), traceCate
2afc0 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
2afd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2afe0 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a    return true;..
2aff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b000 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
2b010 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
2b020 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2b030 20 20 20 20 20 2f 2f 20 54 4f 44 4f 3a 20 52 65       // TODO: Re
2b040 73 74 72 69 63 74 20 74 68 65 20 63 6f 6e 66 69  strict the confi
2b050 67 75 72 61 74 69 6f 6e 20 62 61 73 65 64 20 6f  guration based o
2b060 6e 20 77 68 69 63 68 20 69 6d 61 67 65 0d 0a 20  n which image.. 
2b070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b080 20 20 20 2f 2f 20 20 20 20 20 20 20 72 75 6e 74     //       runt
2b090 69 6d 65 20 76 65 72 73 69 6f 6e 73 20 28 77 68  ime versions (wh
2b0a0 69 63 68 20 6d 6f 72 65 2d 6f 72 2d 6c 65 73 73  ich more-or-less
2b0b0 20 63 6f 72 72 65 73 70 6f 6e 64 0d 0a 20 20 20   correspond..   
2b0c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b0d0 20 2f 2f 20 20 20 20 20 20 20 74 6f 20 2e 4e 45   //       to .NE
2b0e0 54 20 46 72 61 6d 65 77 6f 72 6b 20 76 65 72 73  T Framework vers
2b0f0 69 6f 6e 73 29 20 61 72 65 20 73 75 70 70 6f 72  ions) are suppor
2b100 74 65 64 20 62 79 20 74 68 65 0d 0a 20 20 20 20  ted by the..    
2b110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b120 2f 2f 20 20 20 20 20 20 20 76 65 72 73 69 6f 6e  //       version
2b130 73 20 6f 66 20 56 69 73 75 61 6c 20 53 74 75 64  s of Visual Stud
2b140 69 6f 20 74 68 61 74 20 61 72 65 20 69 6e 73 74  io that are inst
2b150 61 6c 6c 65 64 2e 0d 0a 20 20 20 20 20 20 20 20  alled...        
2b160 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
2b170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b180 20 20 20 20 69 66 20 28 53 74 72 69 6e 67 2e 49      if (String.I
2b190 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 63 6f 72  sNullOrEmpty(cor
2b1a0 65 49 6d 61 67 65 52 75 6e 74 69 6d 65 56 65 72  eImageRuntimeVer
2b1b0 73 69 6f 6e 29 29 0d 0a 20 20 20 20 20 20 20 20  sion))..        
2b1c0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
2b1d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b1e0 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22         error = "
2b1f0 69 6e 76 61 6c 69 64 20 63 6f 72 65 20 66 69 6c  invalid core fil
2b200 65 20 69 6d 61 67 65 20 72 75 6e 74 69 6d 65 20  e image runtime 
2b210 76 65 72 73 69 6f 6e 22 3b 0d 0a 20 20 20 20 20  version";..     
2b220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b230 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
2b240 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2b250 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
2b260 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73               els
2b270 65 20 69 66 20 28 53 74 72 69 6e 67 2e 45 71 75  e if (String.Equ
2b280 61 6c 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20  als(..          
2b290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b2a0 20 20 63 6f 72 65 49 6d 61 67 65 52 75 6e 74 69    coreImageRunti
2b2b0 6d 65 56 65 72 73 69 6f 6e 2c 20 43 4c 52 76 32  meVersion, CLRv2
2b2c0 49 6d 61 67 65 52 75 6e 74 69 6d 65 56 65 72 73  ImageRuntimeVers
2b2d0 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ion,..          
2b2e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b2f0 20 20 53 74 72 69 6e 67 43 6f 6d 70 61 72 69 73    StringComparis
2b300 6f 6e 2e 4f 72 64 69 6e 61 6c 29 29 0d 0a 20 20  on.Ordinal))..  
2b310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b320 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
2b330 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
2b340 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2b350 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45           // NOTE
2b360 3a 20 46 6f 72 20 74 68 65 20 43 4c 52 20 76 32  : For the CLR v2
2b370 2e 30 20 72 75 6e 74 69 6d 65 2c 20 6d 61 6b 65  .0 runtime, make
2b380 20 73 75 72 65 20 77 65 20 64 69 73 61 62 6c 65   sure we disable
2b390 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2b3a0 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
2b3b0 20 20 20 61 6e 79 20 61 74 74 65 6d 70 74 20 74     any attempt t
2b3c0 6f 20 75 73 65 20 69 74 20 66 6f 72 20 74 68 69  o use it for thi
2b3d0 6e 67 73 20 74 68 61 74 20 72 65 71 75 69 72 65  ngs that require
2b3e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2b3f0 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
2b400 20 20 20 61 6e 20 61 73 73 65 6d 62 6c 79 20 63     an assembly c
2b410 6f 6d 70 69 6c 65 64 20 66 6f 72 20 74 68 65 20  ompiled for the 
2b420 43 4c 52 20 76 34 2e 30 2e 20 20 49 74 20 69 73  CLR v4.0.  It is
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 2f 2f 20 20 20 20            //    
2b450 20 20 20 75 6e 63 65 72 74 61 69 6e 20 69 66 20     uncertain if 
2b460 74 68 69 73 20 69 73 20 61 63 74 75 61 6c 6c 79  this is actually
2b470 20 61 20 70 72 6f 62 6c 65 6d 20 69 6e 0d 0a 20   a problem in.. 
2b480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b490 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
2b4a0 70 72 61 63 74 69 63 65 20 61 73 20 74 68 65 20  practice as the 
2b4b0 43 4c 52 20 76 34 2e 30 20 63 61 6e 20 6c 6f 61  CLR v4.0 can loa
2b4c0 64 20 61 6e 64 20 75 73 65 20 61 6e 0d 0a 20 20  d and use an..  
2b4d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b4e0 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 61        //       a
2b4f0 73 73 65 6d 62 6c 79 20 63 6f 6d 70 69 6c 65 64  ssembly compiled
2b500 20 77 69 74 68 20 74 68 65 20 43 4c 52 20 76 32   with the CLR v2
2b510 2e 30 3b 20 68 6f 77 65 76 65 72 2c 0d 0a 20 20  .0; however,..  
2b520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b530 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 73        //       s
2b540 69 6e 63 65 20 74 68 69 73 20 70 72 6f 6a 65 63  ince this projec
2b550 74 20 6f 66 66 65 72 73 20 62 6f 74 68 20 63 6f  t offers both co
2b560 6e 66 69 67 75 72 61 74 69 6f 6e 73 2c 0d 0a 20  nfigurations,.. 
2b570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b580 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
2b590 77 65 20 63 75 72 72 65 6e 74 6c 79 20 64 69 73  we currently dis
2b5a0 61 6c 6c 6f 77 20 74 68 69 73 20 6d 69 73 6d 61  allow this misma
2b5b0 74 63 68 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  tch...          
2b5c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
2b5d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2b5e0 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67            config
2b5f0 75 72 61 74 69 6f 6e 2e 6e 6f 4e 65 74 46 78 34  uration.noNetFx4
2b600 30 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20  0 = true;..     
2b610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b620 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e     configuration
2b630 2e 6e 6f 4e 65 74 46 78 34 35 20 3d 20 74 72 75  .noNetFx45 = tru
2b640 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
2b650 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66              conf
2b660 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 4e 65 74 46  iguration.noNetF
2b670 78 34 35 31 20 3d 20 74 72 75 65 3b 0d 0a 20 20  x451 = true;..  
2b680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b690 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74        configurat
2b6a0 69 6f 6e 2e 6e 6f 4e 65 74 46 78 34 35 32 20 3d  ion.noNetFx452 =
2b6b0 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20   true;..        
2b6c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b6d0 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f  configuration.no
2b6e0 4e 65 74 46 78 34 36 20 3d 20 74 72 75 65 3b 0d  NetFx46 = true;.
2b6f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2b700 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75           configu
2b710 72 61 74 69 6f 6e 2e 6e 6f 4e 65 74 46 78 34 36  ration.noNetFx46
2b720 31 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20  1 = true;..     
2b730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b740 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e     configuration
2b750 2e 6e 6f 4e 65 74 46 78 34 36 32 20 3d 20 74 72  .noNetFx462 = tr
2b760 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
2b770 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
2b780 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 4e 65 74  figuration.noNet
2b790 46 78 34 37 20 3d 20 74 72 75 65 3b 0d 0a 20 20  Fx47 = true;..  
2b7a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b7b0 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74        configurat
2b7c0 69 6f 6e 2e 6e 6f 4e 65 74 46 78 34 37 31 20 3d  ion.noNetFx471 =
2b7d0 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20   true;..        
2b7e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b7f0 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f  configuration.no
2b800 56 73 32 30 31 30 20 3d 20 74 72 75 65 3b 0d 0a  Vs2010 = true;..
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 63 6f 6e 66 69 67 75 72          configur
2b830 61 74 69 6f 6e 2e 6e 6f 56 73 32 30 31 32 20 3d  ation.noVs2012 =
2b840 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20   true;..        
2b850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b860 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f  configuration.no
2b870 56 73 32 30 31 33 20 3d 20 74 72 75 65 3b 0d 0a  Vs2013 = true;..
2b880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b890 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72          configur
2b8a0 61 74 69 6f 6e 2e 6e 6f 56 73 32 30 31 35 20 3d  ation.noVs2015 =
2b8b0 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20   true;..        
2b8c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b8d0 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f  configuration.no
2b8e0 56 73 32 30 31 37 20 3d 20 74 72 75 65 3b 0d 0a  Vs2017 = true;..
2b8f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2b900 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f            TraceO
2b910 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65  ps.DebugAndTrace
2b920 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4d  (TracePriority.M
2b930 65 64 69 75 6d 2c 0d 0a 20 20 20 20 20 20 20 20  edium,..        
2b940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b950 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63      debugCallbac
2b960 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b  k, traceCallback
2b970 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  , String.Format(
2b980 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2b990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 41                "A
2b9a0 73 73 65 6d 62 6c 79 20 69 73 20 63 6f 6d 70 69  ssembly is compi
2b9b0 6c 65 64 20 66 6f 72 20 74 68 65 20 2e 4e 45 54  led for the .NET
2b9c0 20 46 72 61 6d 65 77 6f 72 6b 20 7b 30 7d 2c 20   Framework {0}, 
2b9d0 22 20 2b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  " +..           
2b9e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b9f0 20 22 73 75 70 70 6f 72 74 20 66 6f 72 20 74 68   "support for th
2ba00 65 20 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72 6b  e .NET Framework
2ba10 20 7b 31 7d 20 69 73 20 6e 6f 77 20 64 69 73 61   {1} is now disa
2ba20 62 6c 65 64 2e 22 2c 0d 0a 20 20 20 20 20 20 20  bled.",..       
2ba30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ba40 20 20 20 20 20 43 4c 52 76 32 49 6d 61 67 65 52       CLRv2ImageR
2ba50 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 2c 20 43  untimeVersion, C
2ba60 4c 52 76 34 49 6d 61 67 65 52 75 6e 74 69 6d 65  LRv4ImageRuntime
2ba70 56 65 72 73 69 6f 6e 29 2c 0d 0a 20 20 20 20 20  Version),..     
2ba80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ba90 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65         traceCate
2baa0 67 6f 72 79 29 3b 0d 0a 20 20 20 20 20 20 20 20  gory);..        
2bab0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
2bac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bad0 20 20 20 65 6c 73 65 20 69 66 20 28 53 74 72 69     else if (Stri
2bae0 6e 67 2e 45 71 75 61 6c 73 28 0d 0a 20 20 20 20  ng.Equals(..    
2baf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bb00 20 20 20 20 20 20 20 20 63 6f 72 65 49 6d 61 67          coreImag
2bb10 65 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 2c  eRuntimeVersion,
2bb20 20 43 4c 52 76 34 49 6d 61 67 65 52 75 6e 74 69   CLRv4ImageRunti
2bb30 6d 65 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20  meVersion,..    
2bb40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bb50 20 20 20 20 20 20 20 20 53 74 72 69 6e 67 43 6f          StringCo
2bb60 6d 70 61 72 69 73 6f 6e 2e 4f 72 64 69 6e 61 6c  mparison.Ordinal
2bb70 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
2bb80 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
2bb90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bba0 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
2bbb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
2bbc0 2f 20 4e 4f 54 45 3a 20 46 6f 72 20 74 68 65 20  / NOTE: For the 
2bbd0 43 4c 52 20 76 34 2e 30 20 72 75 6e 74 69 6d 65  CLR v4.0 runtime
2bbe0 2c 20 6d 61 6b 65 20 73 75 72 65 20 77 65 20 64  , make sure we d
2bbf0 69 73 61 62 6c 65 0d 0a 20 20 20 20 20 20 20 20  isable..        
2bc00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bc10 2f 2f 20 20 20 20 20 20 20 61 6e 79 20 61 74 74  //       any att
2bc20 65 6d 70 74 20 74 6f 20 75 73 65 20 69 74 20 66  empt to use it f
2bc30 6f 72 20 74 68 69 6e 67 73 20 74 68 61 74 20 72  or things that r
2bc40 65 71 75 69 72 65 0d 0a 20 20 20 20 20 20 20 20  equire..        
2bc50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bc60 2f 2f 20 20 20 20 20 20 20 61 6e 20 61 73 73 65  //       an asse
2bc70 6d 62 6c 79 20 63 6f 6d 70 69 6c 65 64 20 66 6f  mbly compiled fo
2bc80 72 20 74 68 65 20 43 4c 52 20 76 32 2e 30 2e 0d  r the CLR v2.0..
2bc90 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2bca0 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
2bcb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bcc0 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69       configurati
2bcd0 6f 6e 2e 6e 6f 4e 65 74 46 78 32 30 20 3d 20 74  on.noNetFx20 = t
2bce0 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  rue;..          
2bcf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
2bd00 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 4e 65  nfiguration.noNe
2bd10 74 46 78 33 35 20 3d 20 74 72 75 65 3b 0d 0a 20  tFx35 = true;.. 
2bd20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bd30 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61         configura
2bd40 74 69 6f 6e 2e 6e 6f 56 73 32 30 30 35 20 3d 20  tion.noVs2005 = 
2bd50 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  true;..         
2bd60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
2bd70 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 56  onfiguration.noV
2bd80 73 32 30 30 38 20 3d 20 74 72 75 65 3b 0d 0a 0d  s2008 = true;...
2bd90 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2bda0 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70           TraceOp
2bdb0 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28  s.DebugAndTrace(
2bdc0 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4d 65  TracePriority.Me
2bdd0 64 69 75 6d 2c 0d 0a 20 20 20 20 20 20 20 20 20  dium,..         
2bde0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bdf0 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b     debugCallback
2be00 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c  , traceCallback,
2be10 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d   String.Format(.
2be20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2be30 20 20 20 20 20 20 20 20 20 20 20 20 20 22 41 73               "As
2be40 73 65 6d 62 6c 79 20 69 73 20 63 6f 6d 70 69 6c  sembly is compil
2be50 65 64 20 66 6f 72 20 74 68 65 20 2e 4e 45 54 20  ed for the .NET 
2be60 46 72 61 6d 65 77 6f 72 6b 20 7b 30 7d 2c 20 22  Framework {0}, "
2be70 20 2b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   +..            
2be80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2be90 22 73 75 70 70 6f 72 74 20 66 6f 72 20 74 68 65  "support for the
2bea0 20 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72 6b 20   .NET Framework 
2beb0 7b 31 7d 20 69 73 20 6e 6f 77 20 64 69 73 61 62  {1} is now disab
2bec0 6c 65 64 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20  led.",..        
2bed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bee0 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 43      ForDisplay(C
2bef0 4c 52 76 34 49 6d 61 67 65 52 75 6e 74 69 6d 65  LRv4ImageRuntime
2bf00 56 65 72 73 69 6f 6e 29 2c 0d 0a 20 20 20 20 20  Version),..     
2bf10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bf20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61         ForDispla
2bf30 79 28 43 4c 52 76 32 49 6d 61 67 65 52 75 6e 74  y(CLRv2ImageRunt
2bf40 69 6d 65 56 65 72 73 69 6f 6e 29 29 2c 0d 0a 20  imeVersion)),.. 
2bf50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bf60 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
2bf70 43 61 74 65 67 6f 72 79 29 3b 0d 0a 20 20 20 20  Category);..    
2bf80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bf90 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
2bfa0 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20         else..   
2bfb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bfc0 20 7b 0d 0a 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 65 72 72 6f              erro
2bfe0 72 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61  r = String.Forma
2bff0 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
2c000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c010 22 75 6e 73 75 70 70 6f 72 74 65 64 20 63 6f 72  "unsupported cor
2c020 65 20 66 69 6c 65 20 69 6d 61 67 65 20 72 75 6e  e file image run
2c030 74 69 6d 65 20 76 65 72 73 69 6f 6e 20 22 20 2b  time version " +
2c040 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2c050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 7b                "{
2c060 30 7d 2c 20 6d 75 73 74 20 62 65 20 7b 31 7d 20  0}, must be {1} 
2c070 6f 72 20 7b 32 7d 22 2c 0d 0a 20 20 20 20 20 20  or {2}",..      
2c080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c090 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79        ForDisplay
2c0a0 28 63 6f 72 65 49 6d 61 67 65 52 75 6e 74 69 6d  (coreImageRuntim
2c0b0 65 56 65 72 73 69 6f 6e 29 2c 0d 0a 20 20 20 20  eVersion),..    
2c0c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c0d0 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c          ForDispl
2c0e0 61 79 28 43 4c 52 76 32 49 6d 61 67 65 52 75 6e  ay(CLRv2ImageRun
2c0f0 74 69 6d 65 56 65 72 73 69 6f 6e 29 2c 0d 0a 20  timeVersion),.. 
2c100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c110 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69             ForDi
2c120 73 70 6c 61 79 28 43 4c 52 76 34 49 6d 61 67 65  splay(CLRv4Image
2c130 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 29 29  RuntimeVersion))
2c140 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
2c150 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
2c160 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20  urn false;..    
2c170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c180 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
2c190 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
2c1a0 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  true;..         
2c1b0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
2c1c0 20 20 20 20 20 20 20 20 20 20 63 61 74 63 68 20            catch 
2c1d0 28 45 78 63 65 70 74 69 6f 6e 20 65 29 0d 0a 20  (Exception e).. 
2c1e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
2c1f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2c200 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44        TraceOps.D
2c210 65 62 75 67 41 6e 64 54 72 61 63 65 28 54 72 61  ebugAndTrace(Tra
2c220 63 65 50 72 69 6f 72 69 74 79 2e 48 69 67 68 65  cePriority.Highe
2c230 73 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  st,..           
2c240 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65 62               deb
2c250 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63  ugCallback, trac
2c260 65 43 61 6c 6c 62 61 63 6b 2c 20 65 2c 20 74 72  eCallback, e, tr
2c270 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d  aceCategory);...
2c280 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2c290 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 46 61       error = "Fa
2c2a0 69 6c 65 64 20 74 6f 20 63 68 65 63 6b 20 69 6d  iled to check im
2c2b0 61 67 65 20 72 75 6e 74 69 6d 65 20 76 65 72 73  age runtime vers
2c2c0 69 6f 6e 2e 22 3b 0d 0a 20 20 20 20 20 20 20 20  ion.";..        
2c2d0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
2c2e0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
2c2f0 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20  urn false;..    
2c300 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
2c310 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f         #endregio
2c320 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n....           
2c330 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
2c340 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c350 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c360 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c370 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
2c380 20 20 20 20 23 72 65 67 69 6f 6e 20 50 72 69 76      #region Priv
2c390 61 74 65 20 4d 65 74 68 6f 64 73 0d 0a 20 20 20  ate Methods..   
2c3a0 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65           private
2c3b0 20 73 74 72 69 6e 67 20 47 65 74 49 6e 76 61 72   string GetInvar
2c3c0 69 61 6e 74 4e 61 6d 65 28 0d 0a 20 20 20 20 20  iantName(..     
2c3d0 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
2c3e0 74 72 61 63 65 0d 0a 20 20 20 20 20 20 20 20 20  trace..         
2c3f0 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
2c400 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
2c410 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
2c420 55 73 65 45 66 36 50 72 6f 76 69 64 65 72 28 74  UseEf6Provider(t
2c430 72 61 63 65 29 20 3f 0d 0a 20 20 20 20 20 20 20  race) ?..       
2c440 20 20 20 20 20 20 20 20 20 20 20 20 20 45 66 36               Ef6
2c450 49 6e 76 61 72 69 61 6e 74 4e 61 6d 65 20 3a 20  InvariantName : 
2c460 49 6e 76 61 72 69 61 6e 74 4e 61 6d 65 3b 0d 0a  InvariantName;..
2c470 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
2c480 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
2c490 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c4a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c4b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c4c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c4d0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2c4e0 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 49 73 53  private bool IsS
2c4f0 79 73 74 65 6d 45 66 36 41 73 73 65 6d 62 6c 79  ystemEf6Assembly
2c500 41 76 61 69 6c 61 62 6c 65 28 0d 0a 20 20 20 20  Available(..    
2c510 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
2c520 20 74 72 61 63 65 0d 0a 20 20 20 20 20 20 20 20   trace..        
2c530 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
2c540 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
2c550 20 20 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20            try.. 
2c560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
2c570 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2c580 20 20 20 20 20 20 69 66 20 28 73 79 73 74 65 6d        if (system
2c590 45 66 36 41 73 73 65 6d 62 6c 79 20 3d 3d 20 6e  Ef6Assembly == n
2c5a0 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
2c5b0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
2c5c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c5d0 20 20 20 20 20 73 79 73 74 65 6d 45 66 36 41 73       systemEf6As
2c5e0 73 65 6d 62 6c 79 20 3d 20 41 73 73 65 6d 62 6c  sembly = Assembl
2c5f0 79 2e 52 65 66 6c 65 63 74 69 6f 6e 4f 6e 6c 79  y.ReflectionOnly
2c600 4c 6f 61 64 28 0d 0a 20 20 20 20 20 20 20 20 20  Load(..         
2c610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c620 20 20 20 53 79 73 74 65 6d 45 66 36 41 73 73 65     SystemEf6Asse
2c630 6d 62 6c 79 4e 61 6d 65 29 3b 0d 0a 20 20 20 20  mblyName);..    
2c640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c650 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
2c660 20 20 20 20 20 20 20 20 20 69 66 20 28 73 79 73           if (sys
2c670 74 65 6d 45 66 36 41 73 73 65 6d 62 6c 79 20 21  temEf6Assembly !
2c680 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
2c690 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
2c6a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c6b0 20 20 20 20 20 20 20 20 69 66 20 28 74 72 61 63          if (trac
2c6c0 65 20 26 26 0d 0a 20 20 20 20 20 20 20 20 20 20  e &&..          
2c6d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c6e0 20 20 21 48 61 73 46 6c 61 67 73 28 50 72 6f 76    !HasFlags(Prov
2c6f0 69 64 65 72 46 6c 61 67 73 2e 44 69 64 45 66 36  iderFlags.DidEf6
2c700 52 65 73 6f 6c 76 65 54 72 61 63 65 2c 20 74 72  ResolveTrace, tr
2c710 75 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ue))..          
2c720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
2c730 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2c740 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61               Tra
2c750 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72  ceOps.DebugAndTr
2c760 61 63 65 28 54 72 61 63 65 50 72 69 6f 72 69 74  ace(TracePriorit
2c770 79 2e 48 69 67 68 65 73 74 2c 0d 0a 20 20 20 20  y.Highest,..    
2c780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c790 20 20 20 20 20 20 20 20 20 20 20 20 64 65 62 75              debu
2c7a0 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65  gCallback, trace
2c7b0 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67  Callback, String
2c7c0 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  .Format(..      
2c7d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c7e0 20 20 20 20 20 20 20 20 20 20 22 45 6e 74 69 74            "Entit
2c7f0 79 20 46 72 61 6d 65 77 6f 72 6b 20 36 20 61 73  y Framework 6 as
2c800 73 65 6d 62 6c 79 20 77 61 73 20 22 20 2b 0d 0a  sembly was " +..
2c810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c830 22 72 65 73 6f 6c 76 65 64 20 74 6f 20 7b 30 7d  "resolved to {0}
2c840 2e 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 0d  .", ForDisplay(.
2c850 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2c860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c870 20 73 79 73 74 65 6d 45 66 36 41 73 73 65 6d 62   systemEf6Assemb
2c880 6c 79 2e 4c 6f 63 61 74 69 6f 6e 29 29 2c 0d 0a  ly.Location)),..
2c890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c8a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c8b0 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
2c8c0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
2c8d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70                 p
2c8e0 72 6f 76 69 64 65 72 46 6c 61 67 73 20 7c 3d 20  roviderFlags |= 
2c8f0 50 72 6f 76 69 64 65 72 46 6c 61 67 73 2e 44 69  ProviderFlags.Di
2c900 64 45 66 36 52 65 73 6f 6c 76 65 54 72 61 63 65  dEf6ResolveTrace
2c910 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
2c920 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
2c930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c940 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74          return t
2c950 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  rue;..          
2c960 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
2c970 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
2c980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c990 63 61 74 63 68 0d 0a 20 20 20 20 20 20 20 20 20  catch..         
2c9a0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
2c9b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
2c9c0 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20   do nothing...  
2c9d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
2c9e0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
2c9f0 20 20 20 69 66 20 28 74 72 61 63 65 20 26 26 0d     if (trace &&.
2ca00 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2ca10 20 20 20 20 20 21 48 61 73 46 6c 61 67 73 28 50       !HasFlags(P
2ca20 72 6f 76 69 64 65 72 46 6c 61 67 73 2e 44 69 64  roviderFlags.Did
2ca30 45 66 36 52 65 73 6f 6c 76 65 54 72 61 63 65 2c  Ef6ResolveTrace,
2ca40 20 74 72 75 65 29 29 0d 0a 20 20 20 20 20 20 20   true))..       
2ca50 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
2ca60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ca70 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e  TraceOps.DebugAn
2ca80 64 54 72 61 63 65 28 54 72 61 63 65 50 72 69 6f  dTrace(TracePrio
2ca90 72 69 74 79 2e 48 69 67 68 65 73 74 2c 0d 0a 20  rity.Highest,.. 
2caa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cab0 20 20 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c         debugCall
2cac0 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62  back, traceCallb
2cad0 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ack,..          
2cae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 45                "E
2caf0 6e 74 69 74 79 20 46 72 61 6d 65 77 6f 72 6b 20  ntity Framework 
2cb00 36 20 61 73 73 65 6d 62 6c 79 20 77 61 73 20 6e  6 assembly was n
2cb10 6f 74 20 72 65 73 6f 6c 76 65 64 2e 22 2c 0d 0a  ot resolved.",..
2cb20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cb30 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74          traceCat
2cb40 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20  egory);....     
2cb50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70                 p
2cb60 72 6f 76 69 64 65 72 46 6c 61 67 73 20 7c 3d 20  roviderFlags |= 
2cb70 50 72 6f 76 69 64 65 72 46 6c 61 67 73 2e 44 69  ProviderFlags.Di
2cb80 64 45 66 36 52 65 73 6f 6c 76 65 54 72 61 63 65  dEf6ResolveTrace
2cb90 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
2cba0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
2cbb0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
2cbc0 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alse;..         
2cbd0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
2cbe0 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a    #endregion....
2cbf0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
2cc00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2cc10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2cc20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2cc30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
2cc40 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  ...            #
2cc50 72 65 67 69 6f 6e 20 50 75 62 6c 69 63 20 4d 65  region Public Me
2cc60 74 68 6f 64 73 0d 0a 20 20 20 20 20 20 20 20 20  thods..         
2cc70 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 48     public bool H
2cc80 61 73 46 6c 61 67 73 28 0d 0a 20 20 20 20 20 20  asFlags(..      
2cc90 20 20 20 20 20 20 20 20 20 20 49 6e 73 74 61 6c            Instal
2cca0 6c 46 6c 61 67 73 20 68 61 73 46 6c 61 67 73 2c  lFlags hasFlags,
2ccb0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2ccc0 20 20 62 6f 6f 6c 20 61 6c 6c 0d 0a 20 20 20 20    bool all..    
2ccd0 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
2cce0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
2ccf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
2cd00 20 28 61 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   (all)..        
2cd10 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
2cd20 72 6e 20 28 28 69 6e 73 74 61 6c 6c 46 6c 61 67  rn ((installFlag
2cd30 73 20 26 20 68 61 73 46 6c 61 67 73 29 20 3d 3d  s & hasFlags) ==
2cd40 20 68 61 73 46 6c 61 67 73 29 3b 0d 0a 20 20 20   hasFlags);..   
2cd50 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73               els
2cd60 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e..             
2cd70 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 28 28         return ((
2cd80 69 6e 73 74 61 6c 6c 46 6c 61 67 73 20 26 20 68  installFlags & h
2cd90 61 73 46 6c 61 67 73 29 20 21 3d 20 49 6e 73 74  asFlags) != Inst
2cda0 61 6c 6c 46 6c 61 67 73 2e 4e 6f 6e 65 29 3b 0d  allFlags.None);.
2cdb0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
2cdc0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
2cdd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2cde0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2cdf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ce00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ce10 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
2ce20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 48 61 73   public bool Has
2ce30 46 6c 61 67 73 28 0d 0a 20 20 20 20 20 20 20 20  Flags(..        
2ce40 20 20 20 20 20 20 20 20 50 72 6f 76 69 64 65 72          Provider
2ce50 46 6c 61 67 73 20 68 61 73 46 6c 61 67 73 2c 0d  Flags hasFlags,.
2ce60 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2ce70 20 62 6f 6f 6c 20 61 6c 6c 0d 0a 20 20 20 20 20   bool all..     
2ce80 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
2ce90 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
2cea0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
2ceb0 28 61 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  (all)..         
2cec0 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
2ced0 6e 20 28 28 70 72 6f 76 69 64 65 72 46 6c 61 67  n ((providerFlag
2cee0 73 20 26 20 68 61 73 46 6c 61 67 73 29 20 3d 3d  s & hasFlags) ==
2cef0 20 68 61 73 46 6c 61 67 73 29 3b 0d 0a 20 20 20   hasFlags);..   
2cf00 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73               els
2cf10 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e..             
2cf20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 28 28         return ((
2cf30 70 72 6f 76 69 64 65 72 46 6c 61 67 73 20 26 20  providerFlags & 
2cf40 68 61 73 46 6c 61 67 73 29 20 21 3d 20 50 72 6f  hasFlags) != Pro
2cf50 76 69 64 65 72 46 6c 61 67 73 2e 4e 6f 6e 65 29  viderFlags.None)
2cf60 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
2cf70 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2cf80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2cf90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2cfa0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2cfb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2cfc0 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
2cfd0 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 49     public bool I
2cfe0 73 4c 69 6e 71 53 75 70 70 6f 72 74 65 64 28 0d  sLinqSupported(.
2cff0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2d000 20 62 6f 6f 6c 20 74 72 61 63 65 0d 0a 20 20 20   bool trace..   
2d010 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a               )..
2d020 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
2d030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
2d040 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
2d050 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 43 68 65 63     // NOTE: Chec
2d060 6b 20 74 6f 20 73 65 65 20 69 66 20 74 68 65 20  k to see if the 
2d070 63 61 6c 6c 65 72 20 68 61 73 20 66 6f 72 63 65  caller has force
2d080 64 20 4c 49 4e 51 20 73 75 70 70 6f 72 74 20 74  d LINQ support t
2d090 6f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  o..             
2d0a0 20 20 20 2f 2f 20 20 20 20 20 20 20 62 65 20 65     //       be e
2d0b0 6e 61 62 6c 65 64 20 2d 4f 52 2d 20 64 69 73 61  nabled -OR- disa
2d0c0 62 6c 65 64 2c 20 74 68 65 72 65 62 79 20 62 79  bled, thereby by
2d0d0 70 61 73 73 69 6e 67 20 74 68 65 20 6e 65 65 64  passing the need
2d0e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2d0f0 20 20 2f 2f 20 20 20 20 20 20 20 66 6f 72 20 22    //       for "
2d100 61 75 74 6f 6d 61 74 69 63 20 64 65 74 65 63 74  automatic detect
2d110 69 6f 6e 22 20 62 79 20 74 68 69 73 20 6d 65 74  ion" by this met
2d120 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  hod...          
2d130 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
2d140 20 20 20 20 20 20 20 20 20 20 69 66 20 28 48 61            if (Ha
2d150 73 46 6c 61 67 73 28 50 72 6f 76 69 64 65 72 46  sFlags(ProviderF
2d160 6c 61 67 73 2e 46 6f 72 63 65 4c 69 6e 71 45 6e  lags.ForceLinqEn
2d170 61 62 6c 65 64 2c 20 74 72 75 65 29 29 0d 0a 20  abled, true)).. 
2d180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
2d190 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2d1a0 20 20 20 20 20 20 69 66 20 28 74 72 61 63 65 20        if (trace 
2d1b0 26 26 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  &&..            
2d1c0 20 20 20 20 20 20 20 20 20 20 20 20 21 48 61 73              !Has
2d1d0 46 6c 61 67 73 28 50 72 6f 76 69 64 65 72 46 6c  Flags(ProviderFl
2d1e0 61 67 73 2e 44 69 64 4c 69 6e 71 46 6f 72 63 65  ags.DidLinqForce
2d1f0 54 72 61 63 65 2c 20 74 72 75 65 29 29 0d 0a 20  Trace, true)).. 
2d200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d210 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
2d220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
2d230 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54  aceOps.DebugAndT
2d240 72 61 63 65 28 54 72 61 63 65 50 72 69 6f 72 69  race(TracePriori
2d250 74 79 2e 4d 65 64 69 75 6d 48 69 67 68 2c 0d 0a  ty.MediumHigh,..
2d260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d270 20 20 20 20 20 20 20 20 20 20 20 20 64 65 62 75              debu
2d280 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65  gCallback, trace
2d290 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20  Callback,..     
2d2a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d2b0 20 20 20 20 20 20 20 22 46 6f 72 63 65 64 20 74         "Forced t
2d2c0 6f 20 65 6e 61 62 6c 65 20 73 75 70 70 6f 72 74  o enable support
2d2d0 20 66 6f 72 20 5c 22 4c 69 6e 71 5c 22 2e 22 2c   for \"Linq\".",
2d2e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2d2f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
2d300 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d  aceCategory);...
2d310 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2d320 20 20 20 20 20 20 20 20 20 70 72 6f 76 69 64 65           provide
2d330 72 46 6c 61 67 73 20 7c 3d 20 50 72 6f 76 69 64  rFlags |= Provid
2d340 65 72 46 6c 61 67 73 2e 44 69 64 4c 69 6e 71 46  erFlags.DidLinqF
2d350 6f 72 63 65 54 72 61 63 65 3b 0d 0a 20 20 20 20  orceTrace;..    
2d360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d370 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
2d380 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
2d390 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  true;..         
2d3a0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
2d3b0 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69            else i
2d3c0 66 20 28 48 61 73 46 6c 61 67 73 28 50 72 6f 76  f (HasFlags(Prov
2d3d0 69 64 65 72 46 6c 61 67 73 2e 46 6f 72 63 65 4c  iderFlags.ForceL
2d3e0 69 6e 71 44 69 73 61 62 6c 65 64 2c 20 74 72 75  inqDisabled, tru
2d3f0 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e))..           
2d400 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
2d410 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
2d420 74 72 61 63 65 20 26 26 0d 0a 20 20 20 20 20 20  trace &&..      
2d430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d440 20 20 21 48 61 73 46 6c 61 67 73 28 50 72 6f 76    !HasFlags(Prov
2d450 69 64 65 72 46 6c 61 67 73 2e 44 69 64 4c 69 6e  iderFlags.DidLin
2d460 71 46 6f 72 63 65 54 72 61 63 65 2c 20 74 72 75  qForceTrace, tru
2d470 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e))..           
2d480 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
2d490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d4a0 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62      TraceOps.Deb
2d4b0 75 67 41 6e 64 54 72 61 63 65 28 54 72 61 63 65  ugAndTrace(Trace
2d4c0 50 72 69 6f 72 69 74 79 2e 4d 65 64 69 75 6d 48  Priority.MediumH
2d4d0 69 67 68 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  igh,..          
2d4e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d4f0 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c    debugCallback,
2d500 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 0d   traceCallback,.
2d510 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2d520 20 20 20 20 20 20 20 20 20 20 20 20 20 22 46 6f               "Fo
2d530 72 63 65 64 20 74 6f 20 64 69 73 61 62 6c 65 20  rced to disable 
2d540 73 75 70 70 6f 72 74 20 66 6f 72 20 5c 22 4c 69  support for \"Li
2d550 6e 71 5c 22 2e 22 2c 0d 0a 20 20 20 20 20 20 20  nq\".",..       
2d560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d570 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f       traceCatego
2d580 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
2d590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d5a0 70 72 6f 76 69 64 65 72 46 6c 61 67 73 20 7c 3d  providerFlags |=
2d5b0 20 50 72 6f 76 69 64 65 72 46 6c 61 67 73 2e 44   ProviderFlags.D
2d5c0 69 64 4c 69 6e 71 46 6f 72 63 65 54 72 61 63 65  idLinqForceTrace
2d5d0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
2d5e0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
2d5f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d600 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20  return false;.. 
2d610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
2d620 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2d630 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
2d640 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a          // NOTE:
2d650 20 52 65 74 75 72 6e 20 6e 6f 6e 2d 7a 65 72 6f   Return non-zero
2d660 20 69 66 20 74 68 65 20 53 79 73 74 65 6d 2e 44   if the System.D
2d670 61 74 61 2e 53 51 4c 69 74 65 2e 4c 69 6e 71 0d  ata.SQLite.Linq.
2d680 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2d690 20 2f 2f 20 20 20 20 20 20 20 61 73 73 65 6d 62   //       assemb
2d6a0 6c 79 20 73 68 6f 75 6c 64 20 62 65 20 70 72 6f  ly should be pro
2d6b0 63 65 73 73 65 64 20 64 75 72 69 6e 67 20 74 68  cessed during th
2d6c0 65 20 69 6e 73 74 61 6c 6c 2e 0d 0a 20 20 20 20  e install...    
2d6d0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
2d6e0 20 20 20 20 20 49 66 20 74 68 65 20 74 61 72 67       If the targ
2d6f0 65 74 20 69 73 20 56 69 73 75 61 6c 20 53 74 75  et is Visual Stu
2d700 64 69 6f 20 32 30 30 35 2c 20 74 68 69 73 20 6d  dio 2005, this m
2d710 75 73 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ust..           
2d720 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 72 65       //       re
2d730 74 75 72 6e 20 7a 65 72 6f 2e 0d 0a 20 20 20 20  turn zero...    
2d740 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
2d750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d760 72 65 74 75 72 6e 20 21 6e 6f 4e 65 74 46 78 33  return !noNetFx3
2d770 35 20 7c 7c 20 21 6e 6f 4e 65 74 46 78 34 30 20  5 || !noNetFx40 
2d780 7c 7c 20 21 6e 6f 4e 65 74 46 78 34 35 20 7c 7c  || !noNetFx45 ||
2d790 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2d7a0 20 20 20 20 20 20 21 6e 6f 4e 65 74 46 78 34 35        !noNetFx45
2d7b0 31 20 7c 7c 20 21 6e 6f 4e 65 74 46 78 34 35 32  1 || !noNetFx452
2d7c0 20 7c 7c 20 21 6e 6f 4e 65 74 46 78 34 36 20 7c   || !noNetFx46 |
2d7d0 7c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  |..             
2d7e0 20 20 20 20 20 20 20 21 6e 6f 4e 65 74 46 78 34         !noNetFx4
2d7f0 36 31 20 7c 7c 20 21 6e 6f 4e 65 74 46 78 34 36  61 || !noNetFx46
2d800 32 20 7c 7c 20 21 6e 6f 4e 65 74 46 78 34 37 20  2 || !noNetFx47 
2d810 7c 7c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ||..            
2d820 20 20 20 20 20 20 20 20 21 6e 6f 4e 65 74 46 78          !noNetFx
2d830 34 37 31 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  471;..          
2d840 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
2d850 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
2d860 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d870 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d880 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d890 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
2d8a0 20 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f        public boo
2d8b0 6c 20 49 73 45 66 36 53 75 70 70 6f 72 74 65 64  l IsEf6Supported
2d8c0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
2d8d0 20 20 20 62 6f 6f 6c 20 74 72 61 63 65 0d 0a 20     bool trace.. 
2d8e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29                 )
2d8f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
2d900 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2d910 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
2d920 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 43 68       // NOTE: Ch
2d930 65 63 6b 20 74 6f 20 73 65 65 20 69 66 20 74 68  eck to see if th
2d940 65 20 63 61 6c 6c 65 72 20 68 61 73 20 66 6f 72  e caller has for
2d950 63 65 64 20 45 46 36 20 73 75 70 70 6f 72 74 20  ced EF6 support 
2d960 74 6f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  to..            
2d970 20 20 20 20 2f 2f 20 20 20 20 20 20 20 62 65 20      //       be 
2d980 65 6e 61 62 6c 65 64 20 2d 4f 52 2d 20 64 69 73  enabled -OR- dis
2d990 61 62 6c 65 64 2c 20 74 68 65 72 65 62 79 20 62  abled, thereby b
2d9a0 79 70 61 73 73 69 6e 67 20 74 68 65 20 6e 65 65  ypassing the nee
2d9b0 64 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  d..             
2d9c0 20 20 20 2f 2f 20 20 20 20 20 20 20 66 6f 72 20     //       for 
2d9d0 22 61 75 74 6f 6d 61 74 69 63 20 64 65 74 65 63  "automatic detec
2d9e0 74 69 6f 6e 22 20 62 79 20 74 68 69 73 20 6d 65  tion" by this me
2d9f0 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 20  thod...         
2da00 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
2da10 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 48             if (H
2da20 61 73 46 6c 61 67 73 28 50 72 6f 76 69 64 65 72  asFlags(Provider
2da30 46 6c 61 67 73 2e 46 6f 72 63 65 45 66 36 45 6e  Flags.ForceEf6En
2da40 61 62 6c 65 64 2c 20 74 72 75 65 29 29 0d 0a 20  abled, true)).. 
2da50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
2da60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2da70 20 20 20 20 20 20 69 66 20 28 74 72 61 63 65 20        if (trace 
2da80 26 26 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  &&..            
2da90 20 20 20 20 20 20 20 20 20 20 20 20 21 48 61 73              !Has
2daa0 46 6c 61 67 73 28 50 72 6f 76 69 64 65 72 46 6c  Flags(ProviderFl
2dab0 61 67 73 2e 44 69 64 45 66 36 46 6f 72 63 65 54  ags.DidEf6ForceT
2dac0 72 61 63 65 2c 20 74 72 75 65 29 29 0d 0a 20 20  race, true))..  
2dad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2dae0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
2daf0 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61               Tra
2db00 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72  ceOps.DebugAndTr
2db10 61 63 65 28 54 72 61 63 65 50 72 69 6f 72 69 74  ace(TracePriorit
2db20 79 2e 4d 65 64 69 75 6d 48 69 67 68 2c 0d 0a 20  y.MediumHigh,.. 
2db30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2db40 20 20 20 20 20 20 20 20 20 20 20 64 65 62 75 67             debug
2db50 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43  Callback, traceC
2db60 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20  allback,..      
2db70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2db80 20 20 20 20 20 20 22 46 6f 72 63 65 64 20 74 6f        "Forced to
2db90 20 65 6e 61 62 6c 65 20 73 75 70 70 6f 72 74 20   enable support 
2dba0 66 6f 72 20 5c 22 45 66 36 5c 22 2e 22 2c 0d 0a  for \"Ef6\".",..
2dbb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2dbc0 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
2dbd0 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20  eCategory);.... 
2dbe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2dbf0 20 20 20 20 20 20 20 70 72 6f 76 69 64 65 72 46         providerF
2dc00 6c 61 67 73 20 7c 3d 20 50 72 6f 76 69 64 65 72  lags |= Provider
2dc10 46 6c 61 67 73 2e 44 69 64 45 66 36 46 6f 72 63  Flags.DidEf6Forc
2dc20 65 54 72 61 63 65 3b 0d 0a 20 20 20 20 20 20 20  eTrace;..       
2dc30 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
2dc40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2dc50 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75        return tru
2dc60 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
2dc70 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
2dc80 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28         else if (
2dc90 48 61 73 46 6c 61 67 73 28 50 72 6f 76 69 64 65  HasFlags(Provide
2dca0 72 46 6c 61 67 73 2e 46 6f 72 63 65 45 66 36 44  rFlags.ForceEf6D
2dcb0 69 73 61 62 6c 65 64 2c 20 74 72 75 65 29 29 0d  isabled, true)).
2dcc0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2dcd0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
2dce0 20 20 20 20 20 20 20 20 69 66 20 28 74 72 61 63          if (trac
2dcf0 65 20 26 26 0d 0a 20 20 20 20 20 20 20 20 20 20  e &&..          
2dd00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 21 48                !H
2dd10 61 73 46 6c 61 67 73 28 50 72 6f 76 69 64 65 72  asFlags(Provider
2dd20 46 6c 61 67 73 2e 44 69 64 45 66 36 46 6f 72 63  Flags.DidEf6Forc
2dd30 65 54 72 61 63 65 2c 20 74 72 75 65 29 29 0d 0a  eTrace, true))..
2dd40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2dd50 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
2dd60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
2dd70 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64  raceOps.DebugAnd
2dd80 54 72 61 63 65 28 54 72 61 63 65 50 72 69 6f 72  Trace(TracePrior
2dd90 69 74 79 2e 4d 65 64 69 75 6d 48 69 67 68 2c 0d  ity.MediumHigh,.
2dda0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2ddb0 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65 62               deb
2ddc0 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63  ugCallback, trac
2ddd0 65 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20  eCallback,..    
2dde0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ddf0 20 20 20 20 20 20 20 20 22 46 6f 72 63 65 64 20          "Forced 
2de00 74 6f 20 64 69 73 61 62 6c 65 20 73 75 70 70 6f  to disable suppo
2de10 72 74 20 66 6f 72 20 5c 22 45 66 36 5c 22 2e 22  rt for \"Ef6\"."
2de20 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
2de30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
2de40 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
2de50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2de60 20 20 20 20 20 20 20 20 20 20 70 72 6f 76 69 64            provid
2de70 65 72 46 6c 61 67 73 20 7c 3d 20 50 72 6f 76 69  erFlags |= Provi
2de80 64 65 72 46 6c 61 67 73 2e 44 69 64 45 66 36 46  derFlags.DidEf6F
2de90 6f 72 63 65 54 72 61 63 65 3b 0d 0a 20 20 20 20  orceTrace;..    
2dea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2deb0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
2dec0 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
2ded0 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20  false;..        
2dee0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
2def0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
2df00 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2df10 20 2f 2f 20 4e 4f 54 45 3a 20 52 65 74 75 72 6e   // NOTE: Return
2df20 20 6e 6f 6e 2d 7a 65 72 6f 20 69 66 20 74 68 65   non-zero if the
2df30 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c   System.Data.SQL
2df40 69 74 65 2e 45 46 36 0d 0a 20 20 20 20 20 20 20  ite.EF6..       
2df50 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
2df60 20 20 61 73 73 65 6d 62 6c 79 20 73 68 6f 75 6c    assembly shoul
2df70 64 20 62 65 20 70 72 6f 63 65 73 73 65 64 20 64  d be processed d
2df80 75 72 69 6e 67 20 74 68 65 20 69 6e 73 74 61 6c  uring the instal
2df90 6c 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l...            
2dfa0 20 20 20 20 2f 2f 20 20 20 20 20 20 20 49 66 20      //       If 
2dfb0 74 68 65 20 74 61 72 67 65 74 20 69 73 20 56 69  the target is Vi
2dfc0 73 75 61 6c 20 53 74 75 64 69 6f 20 32 30 30 35  sual Studio 2005
2dfd0 20 6f 72 20 56 69 73 75 61 6c 0d 0a 20 20 20 20   or Visual..    
2dfe0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
2dff0 20 20 20 20 20 53 74 75 64 69 6f 20 32 30 30 38       Studio 2008
2e000 2c 20 74 68 69 73 20 6d 75 73 74 20 72 65 74 75  , this must retu
2e010 72 6e 20 7a 65 72 6f 2e 0d 0a 20 20 20 20 20 20  rn zero...      
2e020 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
2e030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
2e040 20 28 6e 6f 4e 65 74 46 78 34 30 20 26 26 0d 0a   (noNetFx40 &&..
2e050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e060 20 20 20 20 6e 6f 4e 65 74 46 78 34 35 20 26 26      noNetFx45 &&
2e070 20 6e 6f 4e 65 74 46 78 34 35 31 20 26 26 20 6e   noNetFx451 && n
2e080 6f 4e 65 74 46 78 34 35 32 20 26 26 20 6e 6f 4e  oNetFx452 && noN
2e090 65 74 46 78 34 36 20 26 26 0d 0a 20 20 20 20 20  etFx46 &&..     
2e0a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e                 n
2e0b0 6f 4e 65 74 46 78 34 36 31 20 26 26 20 6e 6f 4e  oNetFx461 && noN
2e0c0 65 74 46 78 34 36 32 20 26 26 20 6e 6f 4e 65 74  etFx462 && noNet
2e0d0 46 78 34 37 20 26 26 20 6e 6f 4e 65 74 46 78 34  Fx47 && noNetFx4
2e0e0 37 31 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  71)..           
2e0f0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
2e100 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
2e110 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20  rn false;..     
2e120 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
2e130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e140 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
2e150 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 41 6c 73      // NOTE: Als
2e160 6f 2c 20 69 66 20 74 68 65 20 45 46 36 20 63 6f  o, if the EF6 co
2e170 72 65 20 61 73 73 65 6d 62 6c 79 20 69 73 20 75  re assembly is u
2e180 6e 61 76 61 69 6c 61 62 6c 65 2c 20 74 68 69 73  navailable, this
2e190 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2e1a0 20 20 2f 2f 20 20 20 20 20 20 20 6d 75 73 74 20    //       must 
2e1b0 72 65 74 75 72 6e 20 7a 65 72 6f 2e 0d 0a 20 20  return zero...  
2e1c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
2e1d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2e1e0 20 20 69 66 20 28 21 49 73 53 79 73 74 65 6d 45    if (!IsSystemE
2e1f0 66 36 41 73 73 65 6d 62 6c 79 41 76 61 69 6c 61  f6AssemblyAvaila
2e200 62 6c 65 28 74 72 61 63 65 29 29 0d 0a 20 20 20  ble(trace))..   
2e210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e220 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
2e230 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2e240 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
2e250 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 46        // NOTE: F
2e260 69 6e 61 6c 6c 79 2c 20 69 66 20 74 68 65 20 45  inally, if the E
2e270 46 36 20 63 6f 72 65 20 61 73 73 65 6d 62 6c 79  F6 core assembly
2e280 20 69 73 20 6e 6f 74 20 61 76 61 69 6c 61 62 6c   is not availabl
2e290 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e..             
2e2a0 20 20 20 2f 2f 20 20 20 20 20 20 20 67 6c 6f 62     //       glob
2e2b0 61 6c 6c 79 20 5b 61 6e 64 20 74 68 69 73 20 69  ally [and this i
2e2c0 73 20 61 20 72 65 71 75 69 72 65 6d 65 6e 74 20  s a requirement 
2e2d0 66 6f 72 20 74 68 65 20 63 75 72 72 65 6e 74 0d  for the current.
2e2e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2e2f0 20 2f 2f 20 20 20 20 20 20 20 69 6e 73 74 61 6c   //       instal
2e300 6c 5d 2c 20 72 65 74 75 72 6e 20 7a 65 72 6f 2e  l], return zero.
2e310 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2e320 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
2e330 20 20 20 20 20 20 72 65 74 75 72 6e 20 48 61 73        return Has
2e340 46 6c 61 67 73 28 50 72 6f 76 69 64 65 72 46 6c  Flags(ProviderFl
2e350 61 67 73 2e 53 79 73 74 65 6d 45 66 36 4d 75 73  ags.SystemEf6Mus
2e360 74 42 65 47 6c 6f 62 61 6c 2c 20 74 72 75 65 29  tBeGlobal, true)
2e370 20 3f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   ?..            
2e380 20 20 20 20 20 20 20 20 49 73 53 79 73 74 65 6d          IsSystem
2e390 45 66 36 41 73 73 65 6d 62 6c 79 47 6c 6f 62 61  Ef6AssemblyGloba
2e3a0 6c 28 29 20 3a 20 74 72 75 65 3b 0d 0a 20 20 20  l() : true;..   
2e3b0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
2e3c0 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
2e3d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e3e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e3f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e400 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
2e410 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69  .            pri
2e420 76 61 74 65 20 62 6f 6f 6c 20 49 73 45 66 36 41  vate bool IsEf6A
2e430 73 73 65 6d 62 6c 79 47 6c 6f 62 61 6c 28 29 0d  ssemblyGlobal().
2e440 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
2e450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e460 69 66 20 28 65 66 36 41 73 73 65 6d 62 6c 79 4e  if (ef6AssemblyN
2e470 61 6d 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  ame == null)..  
2e480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e490 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
2e4a0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
2e4b0 20 20 20 41 73 73 65 6d 62 6c 79 20 61 73 73 65     Assembly asse
2e4c0 6d 62 6c 79 20 3d 20 41 73 73 65 6d 62 6c 79 2e  mbly = Assembly.
2e4d0 52 65 66 6c 65 63 74 69 6f 6e 4f 6e 6c 79 4c 6f  ReflectionOnlyLo
2e4e0 61 64 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ad(..           
2e4f0 20 20 20 20 20 20 20 20 20 65 66 36 41 73 73 65           ef6Asse
2e500 6d 62 6c 79 4e 61 6d 65 2e 54 6f 53 74 72 69 6e  mblyName.ToStrin
2e510 67 28 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  g());....       
2e520 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
2e530 28 61 73 73 65 6d 62 6c 79 20 21 3d 20 6e 75 6c  (assembly != nul
2e540 6c 29 20 26 26 20 61 73 73 65 6d 62 6c 79 2e 47  l) && assembly.G
2e550 6c 6f 62 61 6c 41 73 73 65 6d 62 6c 79 43 61 63  lobalAssemblyCac
2e560 68 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  he;..           
2e570 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
2e580 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
2e590 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e5a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e5b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e5c0 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
2e5d0 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c       public bool
2e5e0 20 55 73 65 45 66 36 50 72 6f 76 69 64 65 72 28   UseEf6Provider(
2e5f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2e600 20 20 62 6f 6f 6c 20 74 72 61 63 65 0d 0a 20 20    bool trace..  
2e610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d                ).
2e620 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
2e630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e640 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
2e650 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 57 65 20      // NOTE: We 
2e660 63 61 6e 6e 6f 74 20 75 73 65 20 74 68 65 20 45  cannot use the E
2e670 46 36 20 61 73 73 65 6d 62 6c 79 20 61 73 20 74  F6 assembly as t
2e680 68 65 20 70 72 6f 76 69 64 65 72 20 69 66 20 69  he provider if i
2e690 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  t..             
2e6a0 20 20 20 2f 2f 20 20 20 20 20 20 20 69 73 20 6e     //       is n
2e6b0 6f 74 20 73 75 70 70 6f 72 74 65 64 20 62 79 20  ot supported by 
2e6c0 74 68 69 73 20 69 6e 73 74 61 6c 6c 61 74 69 6f  this installatio
2e6d0 6e 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n...            
2e6e0 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
2e6f0 20 20 20 20 20 20 20 20 69 66 20 28 21 49 73 45          if (!IsE
2e700 66 36 53 75 70 70 6f 72 74 65 64 28 74 72 61 63  f6Supported(trac
2e710 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e))..           
2e720 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
2e730 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  false;....      
2e740 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
2e750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
2e760 20 4e 4f 54 45 3a 20 46 6f 72 20 74 68 65 20 45   NOTE: For the E
2e770 46 36 20 61 73 73 65 6d 62 6c 79 20 74 6f 20 62  F6 assembly to b
2e780 65 20 75 73 61 62 6c 65 20 61 73 20 61 20 70 72  e usable as a pr
2e790 6f 76 69 64 65 72 20 69 6e 0d 0a 20 20 20 20 20  ovider in..     
2e7a0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
2e7b0 20 20 20 20 74 68 65 20 6d 61 63 68 69 6e 65 20      the machine 
2e7c0 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 66 69  configuration fi
2e7d0 6c 65 2c 20 69 74 20 6d 75 73 74 20 62 65 20 69  le, it must be i
2e7e0 6e 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 20  n the..         
2e7f0 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
2e800 67 6c 6f 62 61 6c 20 61 73 73 65 6d 62 6c 79 20  global assembly 
2e810 63 61 63 68 65 2e 0d 0a 20 20 20 20 20 20 20 20  cache...        
2e820 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
2e830 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
2e840 72 6e 20 49 73 45 66 36 41 73 73 65 6d 62 6c 79  rn IsEf6Assembly
2e850 47 6c 6f 62 61 6c 28 29 3b 0d 0a 20 20 20 20 20  Global();..     
2e860 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
2e870 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
2e880 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e890 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e8a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e8b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
2e8c0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 45             /* RE
2e8d0 51 55 49 52 45 44 20 2a 2f 0d 0a 20 20 20 20 20  QUIRED */..     
2e8e0 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 41 73         public As
2e8f0 73 65 6d 62 6c 79 4e 61 6d 65 20 47 65 74 43 6f  semblyName GetCo
2e900 72 65 41 73 73 65 6d 62 6c 79 4e 61 6d 65 28 0d  reAssemblyName(.
2e910 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2e920 20 62 6f 6f 6c 20 74 72 61 63 65 20 2f 2a 20 4e   bool trace /* N
2e930 4f 54 20 55 53 45 44 20 2a 2f 0d 0a 20 20 20 20  OT USED */..    
2e940 20 20 20 20 20 20 20 20 20 20 20 20 29 20 2f 2a              ) /*
2e950 20 74 68 72 6f 77 20 2a 2f 0d 0a 20 20 20 20 20   throw */..     
2e960 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
2e970 20 20 20 20 20 20 20 20 20 20 69 66 20 28 63 6f            if (co
2e980 72 65 41 73 73 65 6d 62 6c 79 4e 61 6d 65 20 3d  reAssemblyName =
2e990 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
2e9a0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
2e9b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e9c0 63 6f 72 65 41 73 73 65 6d 62 6c 79 4e 61 6d 65  coreAssemblyName
2e9d0 20 3d 20 41 73 73 65 6d 62 6c 79 4e 61 6d 65 2e   = AssemblyName.
2e9e0 47 65 74 41 73 73 65 6d 62 6c 79 4e 61 6d 65 28  GetAssemblyName(
2e9f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2ea00 20 20 20 20 20 20 20 20 20 20 43 6f 72 65 46 69            CoreFi
2ea10 6c 65 4e 61 6d 65 29 3b 20 2f 2a 20 74 68 72 6f  leName); /* thro
2ea20 77 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20  w */..          
2ea30 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
2ea40 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
2ea50 6e 20 63 6f 72 65 41 73 73 65 6d 62 6c 79 4e 61  n coreAssemblyNa
2ea60 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me;..           
2ea70 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
2ea80 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
2ea90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2eaa0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2eab0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2eac0 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
2ead0 20 20 20 20 20 2f 2a 20 4f 50 54 49 4f 4e 41 4c       /* OPTIONAL
2eae0 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   */..           
2eaf0 20 70 75 62 6c 69 63 20 41 73 73 65 6d 62 6c 79   public Assembly
2eb00 4e 61 6d 65 20 47 65 74 4c 69 6e 71 41 73 73 65  Name GetLinqAsse
2eb10 6d 62 6c 79 4e 61 6d 65 28 0d 0a 20 20 20 20 20  mblyName(..     
2eb20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
2eb30 74 72 61 63 65 0d 0a 20 20 20 20 20 20 20 20 20  trace..         
2eb40 20 20 20 20 20 20 20 29 20 2f 2a 20 74 68 72 6f         ) /* thro
2eb50 77 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20  w */..          
2eb60 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
2eb70 20 20 20 20 20 69 66 20 28 49 73 4c 69 6e 71 53       if (IsLinqS
2eb80 75 70 70 6f 72 74 65 64 28 74 72 61 63 65 29 20  upported(trace) 
2eb90 26 26 20 28 6c 69 6e 71 41 73 73 65 6d 62 6c 79  && (linqAssembly
2eba0 4e 61 6d 65 20 3d 3d 20 6e 75 6c 6c 29 29 0d 0a  Name == null))..
2ebb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ebc0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
2ebd0 20 20 20 20 20 20 20 6c 69 6e 71 41 73 73 65 6d         linqAssem
2ebe0 62 6c 79 4e 61 6d 65 20 3d 20 41 73 73 65 6d 62  blyName = Assemb
2ebf0 6c 79 4e 61 6d 65 2e 47 65 74 41 73 73 65 6d 62  lyName.GetAssemb
2ec00 6c 79 4e 61 6d 65 28 0d 0a 20 20 20 20 20 20 20  lyName(..       
2ec10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ec20 20 4c 69 6e 71 46 69 6c 65 4e 61 6d 65 29 3b 20   LinqFileName); 
2ec30 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a 20 20 20  /* throw */..   
2ec40 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
2ec50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2ec60 20 20 72 65 74 75 72 6e 20 6c 69 6e 71 41 73 73    return linqAss
2ec70 65 6d 62 6c 79 4e 61 6d 65 3b 0d 0a 20 20 20 20  emblyName;..    
2ec80 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
2ec90 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
2eca0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ecb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ecc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ecd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
2ece0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f              /* O
2ecf0 50 54 49 4f 4e 41 4c 20 2a 2f 0d 0a 20 20 20 20  PTIONAL */..    
2ed00 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 41          public A
2ed10 73 73 65 6d 62 6c 79 4e 61 6d 65 20 47 65 74 45  ssemblyName GetE
2ed20 66 36 41 73 73 65 6d 62 6c 79 4e 61 6d 65 28 0d  f6AssemblyName(.
2ed30 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2ed40 20 62 6f 6f 6c 20 74 72 61 63 65 0d 0a 20 20 20   bool trace..   
2ed50 20 20 20 20 20 20 20 20 20 20 20 20 20 29 20 2f               ) /
2ed60 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a 20 20 20 20  * throw */..    
2ed70 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
2ed80 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 49             if (I
2ed90 73 45 66 36 53 75 70 70 6f 72 74 65 64 28 74 72  sEf6Supported(tr
2eda0 61 63 65 29 20 26 26 20 28 65 66 36 41 73 73 65  ace) && (ef6Asse
2edb0 6d 62 6c 79 4e 61 6d 65 20 3d 3d 20 6e 75 6c 6c  mblyName == null
2edc0 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
2edd0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
2ede0 20 20 20 20 20 20 20 20 20 20 20 65 66 36 41 73             ef6As
2edf0 73 65 6d 62 6c 79 4e 61 6d 65 20 3d 20 41 73 73  semblyName = Ass
2ee00 65 6d 62 6c 79 4e 61 6d 65 2e 47 65 74 41 73 73  emblyName.GetAss
2ee10 65 6d 62 6c 79 4e 61 6d 65 28 0d 0a 20 20 20 20  emblyName(..    
2ee20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ee30 20 20 20 20 45 66 36 46 69 6c 65 4e 61 6d 65 29      Ef6FileName)
2ee40 3b 20 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a 20  ; /* throw */.. 
2ee50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
2ee60 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2ee70 20 20 20 20 72 65 74 75 72 6e 20 65 66 36 41 73      return ef6As
2ee80 73 65 6d 62 6c 79 4e 61 6d 65 3b 0d 0a 20 20 20  semblyName;..   
2ee90 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
2eea0 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
2eeb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2eec0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2eed0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2eee0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
2eef0 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  .            /* 
2ef00 52 45 51 55 49 52 45 44 20 2a 2f 0d 0a 20 20 20  REQUIRED */..   
2ef10 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
2ef20 41 73 73 65 6d 62 6c 79 4e 61 6d 65 20 47 65 74  AssemblyName Get
2ef30 44 65 73 69 67 6e 65 72 41 73 73 65 6d 62 6c 79  DesignerAssembly
2ef40 4e 61 6d 65 28 0d 0a 20 20 20 20 20 20 20 20 20  Name(..         
2ef50 20 20 20 20 20 20 20 62 6f 6f 6c 20 74 72 61 63         bool trac
2ef60 65 20 2f 2a 20 4e 4f 54 20 55 53 45 44 20 2a 2f  e /* NOT USED */
2ef70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2ef80 20 20 29 20 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d    ) /* throw */.
2ef90 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
2efa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2efb0 69 66 20 28 64 65 73 69 67 6e 65 72 41 73 73 65  if (designerAsse
2efc0 6d 62 6c 79 4e 61 6d 65 20 3d 3d 20 6e 75 6c 6c  mblyName == null
2efd0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
2efe0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
2eff0 20 20 20 20 20 20 20 20 20 20 64 65 73 69 67 6e            design
2f000 65 72 41 73 73 65 6d 62 6c 79 4e 61 6d 65 20 3d  erAssemblyName =
2f010 20 41 73 73 65 6d 62 6c 79 4e 61 6d 65 2e 47 65   AssemblyName.Ge
2f020 74 41 73 73 65 6d 62 6c 79 4e 61 6d 65 28 0d 0a  tAssemblyName(..
2f030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f040 20 20 20 20 20 20 20 20 44 65 73 69 67 6e 65 72          Designer
2f050 46 69 6c 65 4e 61 6d 65 29 3b 20 2f 2a 20 74 68  FileName); /* th
2f060 72 6f 77 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20  row */..        
2f070 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
2f080 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
2f090 75 72 6e 20 64 65 73 69 67 6e 65 72 41 73 73 65  urn designerAsse
2f0a0 6d 62 6c 79 4e 61 6d 65 3b 0d 0a 20 20 20 20 20  mblyName;..     
2f0b0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
2f0c0 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
2f0d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f0e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f0f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f100 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
2f110 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 45             /* RE
2f120 51 55 49 52 45 44 20 2a 2f 0d 0a 20 20 20 20 20  QUIRED */..     
2f130 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 41 73         public As
2f140 73 65 6d 62 6c 79 4e 61 6d 65 20 47 65 74 50 72  semblyName GetPr
2f150 6f 76 69 64 65 72 41 73 73 65 6d 62 6c 79 4e 61  oviderAssemblyNa
2f160 6d 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me(..           
2f170 20 20 20 20 20 62 6f 6f 6c 20 74 72 61 63 65 0d       bool trace.
2f180 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2f190 20 29 20 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a   ) /* throw */..
2f1a0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
2f1b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
2f1c0 65 74 75 72 6e 20 55 73 65 45 66 36 50 72 6f 76  eturn UseEf6Prov
2f1d0 69 64 65 72 28 74 72 61 63 65 29 20 3f 0d 0a 20  ider(trace) ?.. 
2f1e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f1f0 20 20 20 47 65 74 45 66 36 41 73 73 65 6d 62 6c     GetEf6Assembl
2f200 79 4e 61 6d 65 28 74 72 61 63 65 29 20 3a 20 47  yName(trace) : G
2f210 65 74 43 6f 72 65 41 73 73 65 6d 62 6c 79 4e 61  etCoreAssemblyNa
2f220 6d 65 28 74 72 61 63 65 29 3b 0d 0a 20 20 20 20  me(trace);..    
2f230 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
2f240 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
2f250 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f260 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f270 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f280 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
2f290 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
2f2a0 69 63 20 73 74 72 69 6e 67 20 47 65 74 43 6f 6e  ic string GetCon
2f2b0 66 69 67 49 6e 76 61 72 69 61 6e 74 4e 61 6d 65  figInvariantName
2f2c0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
2f2d0 20 20 20 62 6f 6f 6c 20 74 72 61 63 65 0d 0a 20     bool trace.. 
2f2e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29                 )
2f2f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
2f300 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2f310 20 72 65 74 75 72 6e 20 47 65 74 49 6e 76 61 72   return GetInvar
2f320 69 61 6e 74 4e 61 6d 65 28 74 72 61 63 65 29 3b  iantName(trace);
2f330 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
2f340 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
2f350 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f360 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f370 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f380 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f390 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
2f3a0 20 20 70 75 62 6c 69 63 20 73 74 72 69 6e 67 20    public string 
2f3b0 47 65 74 50 72 6f 76 69 64 65 72 49 6e 76 61 72  GetProviderInvar
2f3c0 69 61 6e 74 4e 61 6d 65 28 0d 0a 20 20 20 20 20  iantName(..     
2f3d0 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
2f3e0 74 72 61 63 65 0d 0a 20 20 20 20 20 20 20 20 20  trace..         
2f3f0 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
2f400 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
2f410 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
2f420 47 65 74 49 6e 76 61 72 69 61 6e 74 4e 61 6d 65  GetInvariantName
2f430 28 74 72 61 63 65 29 3b 0d 0a 20 20 20 20 20 20  (trace);..      
2f440 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
2f450 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
2f460 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f470 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f480 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f490 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
2f4a0 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
2f4b0 20 73 74 72 69 6e 67 20 47 65 74 46 61 63 74 6f   string GetFacto
2f4c0 72 79 54 79 70 65 4e 61 6d 65 28 0d 0a 20 20 20  ryTypeName(..   
2f4d0 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f               boo
2f4e0 6c 20 74 72 61 63 65 0d 0a 20 20 20 20 20 20 20  l trace..       
2f4f0 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
2f500 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
2f510 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
2f520 6e 20 55 73 65 45 66 36 50 72 6f 76 69 64 65 72  n UseEf6Provider
2f530 28 74 72 61 63 65 29 20 3f 0d 0a 20 20 20 20 20  (trace) ?..     
2f540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 45                 E
2f550 66 36 46 61 63 74 6f 72 79 54 79 70 65 4e 61 6d  f6FactoryTypeNam
2f560 65 20 3a 20 46 61 63 74 6f 72 79 54 79 70 65 4e  e : FactoryTypeN
2f570 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ame;..          
2f580 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
2f590 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
2f5a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f5b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f5c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f5d0 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
2f5e0 20 20 20 20 20 20 70 75 62 6c 69 63 20 76 6f 69        public voi
2f5f0 64 20 44 75 6d 70 28 0d 0a 20 20 20 20 20 20 20  d Dump(..       
2f600 20 20 20 20 20 20 20 20 20 54 72 61 63 65 43 61           TraceCa
2f610 6c 6c 62 61 63 6b 20 74 72 61 63 65 43 61 6c 6c  llback traceCall
2f620 62 61 63 6b 0d 0a 20 20 20 20 20 20 20 20 20 20  back..          
2f630 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
2f640 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
2f650 20 20 20 20 20 20 20 20 69 66 20 28 74 72 61 63          if (trac
2f660 65 43 61 6c 6c 62 61 63 6b 20 21 3d 20 6e 75 6c  eCallback != nul
2f670 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
2f680 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
2f690 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
2f6a0 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e  Callback(String.
2f6b0 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61  Format(NameAndVa
2f6c0 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20  lueFormat,..    
2f6d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f6e0 20 20 20 20 22 41 73 73 65 6d 62 6c 79 22 2c 20      "Assembly", 
2f6f0 46 6f 72 44 69 73 70 6c 61 79 28 61 73 73 65 6d  ForDisplay(assem
2f700 62 6c 79 29 29 2c 0d 0a 20 20 20 20 20 20 20 20  bly)),..        
2f710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f720 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
2f730 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
2f740 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c         traceCall
2f750 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d  back(String.Form
2f760 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46  at(NameAndValueF
2f770 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20  ormat,..        
2f780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f790 22 4c 6f 67 46 69 6c 65 4e 61 6d 65 22 2c 20 46  "LogFileName", F
2f7a0 6f 72 44 69 73 70 6c 61 79 28 6c 6f 67 46 69 6c  orDisplay(logFil
2f7b0 65 4e 61 6d 65 29 29 2c 0d 0a 20 20 20 20 20 20  eName)),..      
2f7c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f7d0 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29    traceCategory)
2f7e0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
2f7f0 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
2f800 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f  llback(String.Fo
2f810 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75  rmat(NameAndValu
2f820 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20  eFormat,..      
2f830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f840 20 20 22 52 65 67 69 73 74 72 79 4c 6f 67 46 69    "RegistryLogFi
2f850 6c 65 4e 61 6d 65 22 2c 0d 0a 20 20 20 20 20 20  leName",..      
2f860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f870 20 20 46 6f 72 44 69 73 70 6c 61 79 28 72 65 67    ForDisplay(reg
2f880 69 73 74 72 79 4c 6f 67 46 69 6c 65 4e 61 6d 65  istryLogFileName
2f890 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  )),..           
2f8a0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
2f8b0 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
2f8c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f8d0 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63      traceCallbac
2f8e0 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  k(String.Format(
2f8f0 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d  NameAndValueForm
2f900 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at,..           
2f910 20 20 20 20 20 20 20 20 20 20 20 20 20 22 44 69               "Di
2f920 72 65 63 74 6f 72 79 22 2c 20 46 6f 72 44 69 73  rectory", ForDis
2f930 70 6c 61 79 28 64 69 72 65 63 74 6f 72 79 29 29  play(directory))
2f940 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
2f950 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
2f960 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  Category);....  
2f970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f980 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28    traceCallback(
2f990 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61  String.Format(Na
2f9a0 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74  meAndValueFormat
2f9b0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
2f9c0 20 20 20 20 20 20 20 20 20 20 20 22 43 6f 72 65             "Core
2f9d0 46 69 6c 65 4e 61 6d 65 22 2c 20 46 6f 72 44 69  FileName", ForDi
2f9e0 73 70 6c 61 79 28 63 6f 72 65 46 69 6c 65 4e 61  splay(coreFileNa
2f9f0 6d 65 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  me)),..         
2fa00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
2fa10 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
2fa20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2fa30 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62        traceCallb
2fa40 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ack(String.Forma
2fa50 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f  t(NameAndValueFo
2fa60 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20  rmat,..         
2fa70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
2fa80 4c 69 6e 71 46 69 6c 65 4e 61 6d 65 22 2c 20 46  LinqFileName", F
2fa90 6f 72 44 69 73 70 6c 61 79 28 6c 69 6e 71 46 69  orDisplay(linqFi
2faa0 6c 65 4e 61 6d 65 29 29 2c 0d 0a 20 20 20 20 20  leName)),..     
2fab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fac0 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
2fad0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
2fae0 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
2faf0 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46  allback(String.F
2fb00 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c  ormat(NameAndVal
2fb10 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20  ueFormat,..     
2fb20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fb30 20 20 20 22 45 66 36 46 69 6c 65 4e 61 6d 65 22     "Ef6FileName"
2fb40 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 65 66 36  , ForDisplay(ef6
2fb50 46 69 6c 65 4e 61 6d 65 29 29 2c 0d 0a 20 20 20  FileName)),..   
2fb60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fb70 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f       traceCatego
2fb80 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
2fb90 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
2fba0 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67  eCallback(String
2fbb0 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56  .Format(NameAndV
2fbc0 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20  alueFormat,..   
2fbd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fbe0 20 20 20 20 20 22 44 65 73 69 67 6e 65 72 46 69       "DesignerFi
2fbf0 6c 65 4e 61 6d 65 22 2c 20 46 6f 72 44 69 73 70  leName", ForDisp
2fc00 6c 61 79 28 64 65 73 69 67 6e 65 72 46 69 6c 65  lay(designerFile
2fc10 4e 61 6d 65 29 29 2c 0d 0a 20 20 20 20 20 20 20  Name)),..       
2fc20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fc30 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
2fc40 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2fc50 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c          traceCal
2fc60 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72  lback(String.For
2fc70 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65  mat(NameAndValue
2fc80 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20  Format,..       
2fc90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fca0 20 22 52 65 67 69 73 74 72 79 56 65 72 73 69 6f   "RegistryVersio
2fcb0 6e 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 72  n", ForDisplay(r
2fcc0 65 67 69 73 74 72 79 56 65 72 73 69 6f 6e 29 29  egistryVersion))
2fcd0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
2fce0 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
2fcf0 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  Category);....  
2fd00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fd10 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28    traceCallback(
2fd20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61  String.Format(Na
2fd30 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74  meAndValueFormat
2fd40 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
2fd50 20 20 20 20 20 20 20 20 20 20 20 22 43 6f 6e 66             "Conf
2fd60 69 67 56 65 72 73 69 6f 6e 22 2c 20 46 6f 72 44  igVersion", ForD
2fd70 69 73 70 6c 61 79 28 63 6f 6e 66 69 67 56 65 72  isplay(configVer
2fd80 73 69 6f 6e 29 29 2c 0d 0a 20 20 20 20 20 20 20  sion)),..       
2fd90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fda0 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
2fdb0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2fdc0 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c          traceCal
2fdd0 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72  lback(String.For
2fde0 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65  mat(NameAndValue
2fdf0 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20  Format,..       
2fe00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fe10 20 22 56 73 56 65 72 73 69 6f 6e 53 75 66 66 69   "VsVersionSuffi
2fe20 78 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 76  x", ForDisplay(v
2fe30 73 56 65 72 73 69 6f 6e 53 75 66 66 69 78 29 29  sVersionSuffix))
2fe40 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
2fe50 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
2fe60 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  Category);....  
2fe70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fe80 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28    traceCallback(
2fe90 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61  String.Format(Na
2fea0 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74  meAndValueFormat
2feb0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
2fec0 20 20 20 20 20 20 20 20 20 20 20 22 44 65 62 75             "Debu
2fed0 67 46 6f 72 6d 61 74 22 2c 20 46 6f 72 44 69 73  gFormat", ForDis
2fee0 70 6c 61 79 28 64 65 62 75 67 46 6f 72 6d 61 74  play(debugFormat
2fef0 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  )),..           
2ff00 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
2ff10 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
2ff20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ff30 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63      traceCallbac
2ff40 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  k(String.Format(
2ff50 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d  NameAndValueForm
2ff60 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at,..           
2ff70 20 20 20 20 20 20 20 20 20 20 20 20 20 22 54 72               "Tr
2ff80 61 63 65 46 6f 72 6d 61 74 22 2c 20 46 6f 72 44  aceFormat", ForD
2ff90 69 73 70 6c 61 79 28 74 72 61 63 65 46 6f 72 6d  isplay(traceForm
2ffa0 61 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  at)),..         
2ffb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
2ffc0 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
2ffd0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2ffe0 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62        traceCallb
2fff0 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ack(String.Forma
30000 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f  t(NameAndValueFo
30010 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20  rmat,..         
30020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
30030 49 6e 73 74 61 6c 6c 46 6c 61 67 73 22 2c 20 46  InstallFlags", F
30040 6f 72 44 69 73 70 6c 61 79 28 69 6e 73 74 61 6c  orDisplay(instal
30050 6c 46 6c 61 67 73 29 29 2c 0d 0a 20 20 20 20 20  lFlags)),..     
30060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30070 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
30080 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
30090 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
300a0 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46  allback(String.F
300b0 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c  ormat(NameAndVal
300c0 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20  ueFormat,..     
300d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
300e0 20 20 20 22 50 72 6f 76 69 64 65 72 46 6c 61 67     "ProviderFlag
300f0 73 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 70  s", ForDisplay(p
30100 72 6f 76 69 64 65 72 46 6c 61 67 73 29 29 2c 0d  roviderFlags)),.
30110 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
30120 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
30130 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
30140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30150 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74  traceCallback(St
30160 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65  ring.Format(Name
30170 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d  AndValueFormat,.
30180 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
30190 20 20 20 20 20 20 20 20 20 22 44 65 62 75 67 50           "DebugP
301a0 72 69 6f 72 69 74 79 22 2c 20 46 6f 72 44 69 73  riority", ForDis
301b0 70 6c 61 79 28 64 65 62 75 67 50 72 69 6f 72 69  play(debugPriori
301c0 74 79 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  ty)),..         
301d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
301e0 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
301f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
30200 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62        traceCallb
30210 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ack(String.Forma
30220 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f  t(NameAndValueFo
30230 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20  rmat,..         
30240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
30250 54 72 61 63 65 50 72 69 6f 72 69 74 79 22 2c 20  TracePriority", 
30260 46 6f 72 44 69 73 70 6c 61 79 28 74 72 61 63 65  ForDisplay(trace
30270 50 72 69 6f 72 69 74 79 29 29 2c 0d 0a 20 20 20  Priority)),..   
30280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30290 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f       traceCatego
302a0 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
302b0 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
302c0 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67  eCallback(String
302d0 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56  .Format(NameAndV
302e0 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20  alueFormat,..   
302f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30300 20 20 20 20 20 22 50 65 72 55 73 65 72 22 2c 20       "PerUser", 
30310 46 6f 72 44 69 73 70 6c 61 79 28 70 65 72 55 73  ForDisplay(perUs
30320 65 72 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  er)),..         
30330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
30340 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
30350 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
30360 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62        traceCallb
30370 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ack(String.Forma
30380 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f  t(NameAndValueFo
30390 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20  rmat,..         
303a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
303b0 49 6e 73 74 61 6c 6c 22 2c 20 46 6f 72 44 69 73  Install", ForDis
303c0 70 6c 61 79 28 69 6e 73 74 61 6c 6c 29 29 2c 0d  play(install)),.
303d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
303e0 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
303f0 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
30400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30410 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74  traceCallback(St
30420 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65  ring.Format(Name
30430 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d  AndValueFormat,.
30440 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
30450 20 20 20 20 20 20 20 20 20 22 57 6f 77 36 34 22           "Wow64"
30460 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 77 6f 77  , ForDisplay(wow
30470 36 34 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  64)),..         
30480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
30490 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
304a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
304b0 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62        traceCallb
304c0 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ack(String.Forma
304d0 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f  t(NameAndValueFo
304e0 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20  rmat,..         
304f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
30500 4e 6f 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e  NoRuntimeVersion
30510 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 6e 6f  ", ForDisplay(no
30520 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 29 29  RuntimeVersion))
30530 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
30540 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
30550 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  Category);....  
30560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30570 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28    traceCallback(
30580 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61  String.Format(Na
30590 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74  meAndValueFormat
305a0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
305b0 20 20 20 20 20 20 20 20 20 20 20 22 4e 6f 44 65             "NoDe
305c0 73 6b 74 6f 70 22 2c 20 46 6f 72 44 69 73 70 6c  sktop", ForDispl
305d0 61 79 28 6e 6f 44 65 73 6b 74 6f 70 29 29 2c 0d  ay(noDesktop)),.
305e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
305f0 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
30600 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
30610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30620 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74  traceCallback(St
30630 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65  ring.Format(Name
30640 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d  AndValueFormat,.
30650 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
30660 20 20 20 20 20 20 20 20 20 22 4e 6f 43 6f 6d 70           "NoComp
30670 61 63 74 22 2c 20 46 6f 72 44 69 73 70 6c 61 79  act", ForDisplay
30680 28 6e 6f 43 6f 6d 70 61 63 74 29 29 2c 0d 0a 20  (noCompact)),.. 
30690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
306a0 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65         traceCate
306b0 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
306c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
306d0 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69  aceCallback(Stri
306e0 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e  ng.Format(NameAn
306f0 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20  dValueFormat,.. 
30700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30710 20 20 20 20 20 20 20 22 4e 6f 4e 65 74 46 78 32         "NoNetFx2
30720 30 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 6e  0", ForDisplay(n
30730 6f 4e 65 74 46 78 32 30 29 29 2c 0d 0a 20 20 20  oNetFx20)),..   
30740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30750 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f       traceCatego
30760 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
30770 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
30780 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67  eCallback(String
30790 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56  .Format(NameAndV
307a0 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20  alueFormat,..   
307b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
307c0 20 20 20 20 20 22 4e 6f 4e 65 74 46 78 33 35 22       "NoNetFx35"
307d0 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 6e 6f 4e  , ForDisplay(noN
307e0 65 74 46 78 33 35 29 29 2c 0d 0a 20 20 20 20 20  etFx35)),..     
307f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30800 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
30810 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
30820 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
30830 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46  allback(String.F
30840 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c  ormat(NameAndVal
30850 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20  ueFormat,..     
30860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30870 20 20 20 22 4e 6f 4e 65 74 46 78 34 30 22 2c 20     "NoNetFx40", 
30880 46 6f 72 44 69 73 70 6c 61 79 28 6e 6f 4e 65 74  ForDisplay(noNet
30890 46 78 34 30 29 29 2c 0d 0a 20 20 20 20 20 20 20  Fx40)),..       
308a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
308b0 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
308c0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
308d0 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c          traceCal
308e0 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72  lback(String.For
308f0 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65  mat(NameAndValue
30900 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20  Format,..       
30910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30920 20 22 4e 6f 4e 65 74 46 78 34 35 22 2c 20 46 6f   "NoNetFx45", Fo
30930 72 44 69 73 70 6c 61 79 28 6e 6f 4e 65 74 46 78  rDisplay(noNetFx
30940 34 35 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  45)),..         
30950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
30960 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
30970 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
30980 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62        traceCallb
30990 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ack(String.Forma
309a0 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f  t(NameAndValueFo
309b0 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20  rmat,..         
309c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
309d0 4e 6f 4e 65 74 46 78 34 35 31 22 2c 20 46 6f 72  NoNetFx451", For
309e0 44 69 73 70 6c 61 79 28 6e 6f 4e 65 74 46 78 34  Display(noNetFx4
309f0 35 31 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  51)),..         
30a00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
30a10 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
30a20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
30a30 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62        traceCallb
30a40 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ack(String.Forma
30a50 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f  t(NameAndValueFo
30a60 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20  rmat,..         
30a70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
30a80 4e 6f 4e 65 74 46 78 34 35 32 22 2c 20 46 6f 72  NoNetFx452", For
30a90 44 69 73 70 6c 61 79 28 6e 6f 4e 65 74 46 78 34  Display(noNetFx4
30aa0 35 32 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  52)),..         
30ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
30ac0 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
30ad0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
30ae0 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62        traceCallb
30af0 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ack(String.Forma
30b00 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f  t(NameAndValueFo
30b10 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20  rmat,..         
30b20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
30b30 4e 6f 4e 65 74 46 78 34 36 22 2c 20 46 6f 72 44  NoNetFx46", ForD
30b40 69 73 70 6c 61 79 28 6e 6f 4e 65 74 46 78 34 36  isplay(noNetFx46
30b50 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  )),..           
30b60 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
30b70 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
30b80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30b90 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63      traceCallbac
30ba0 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  k(String.Format(
30bb0 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d  NameAndValueForm
30bc0 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at,..           
30bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 4e 6f               "No
30be0 4e 65 74 46 78 34 36 31 22 2c 20 46 6f 72 44 69  NetFx461", ForDi
30bf0 73 70 6c 61 79 28 6e 6f 4e 65 74 46 78 34 36 31  splay(noNetFx461
30c00 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  )),..           
30c10 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
30c20 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
30c30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30c40 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63      traceCallbac
30c50 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  k(String.Format(
30c60 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d  NameAndValueForm
30c70 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at,..           
30c80 20 20 20 20 20 20 20 20 20 20 20 20 20 22 4e 6f               "No
30c90 4e 65 74 46 78 34 36 32 22 2c 20 46 6f 72 44 69  NetFx462", ForDi
30ca0 73 70 6c 61 79 28 6e 6f 4e 65 74 46 78 34 36 32  splay(noNetFx462
30cb0 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  )),..           
30cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
30cd0 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
30ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30cf0 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63      traceCallbac
30d00 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  k(String.Format(
30d10 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d  NameAndValueForm
30d20 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at,..           
30d30 20 20 20 20 20 20 20 20 20 20 20 20 20 22 4e 6f               "No
30d40 4e 65 74 46 78 34 37 22 2c 20 46 6f 72 44 69 73  NetFx47", ForDis
30d50 70 6c 61 79 28 6e 6f 4e 65 74 46 78 34 37 29 29  play(noNetFx47))
30d60 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
30d70 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
30d80 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  Category);....  
30d90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30da0 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28    traceCallback(
30db0 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61  String.Format(Na
30dc0 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74  meAndValueFormat
30dd0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
30de0 20 20 20 20 20 20 20 20 20 20 20 22 4e 6f 4e 65             "NoNe
30df0 74 46 78 34 37 31 22 2c 20 46 6f 72 44 69 73 70  tFx471", ForDisp
30e00 6c 61 79 28 6e 6f 4e 65 74 46 78 34 37 31 29 29  lay(noNetFx471))
30e10 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
30e20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
30e30 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  Category);....  
30e40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30e50 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28    traceCallback(
30e60 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61  String.Format(Na
30e70 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74  meAndValueFormat
30e80 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
30e90 20 20 20 20 20 20 20 20 20 20 20 22 4e 6f 56 73             "NoVs
30ea0 32 30 30 35 22 2c 20 46 6f 72 44 69 73 70 6c 61  2005", ForDispla
30eb0 79 28 6e 6f 56 73 32 30 30 35 29 29 2c 0d 0a 20  y(noVs2005)),.. 
30ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30ed0 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65         traceCate
30ee0 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
30ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
30f00 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69  aceCallback(Stri
30f10 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e  ng.Format(NameAn
30f20 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20  dValueFormat,.. 
30f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30f40 20 20 20 20 20 20 20 22 4e 6f 56 73 32 30 30 38         "NoVs2008
30f50 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 6e 6f  ", ForDisplay(no
30f60 56 73 32 30 30 38 29 29 2c 0d 0a 20 20 20 20 20  Vs2008)),..     
30f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30f80 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
30f90 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
30fa0 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
30fb0 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46  allback(String.F
30fc0 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c  ormat(NameAndVal
30fd0 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20  ueFormat,..     
30fe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30ff0 20 20 20 22 4e 6f 56 73 32 30 31 30 22 2c 20 46     "NoVs2010", F
31000 6f 72 44 69 73 70 6c 61 79 28 6e 6f 56 73 32 30  orDisplay(noVs20
31010 31 30 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  10)),..         
31020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
31030 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
31040 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
31050 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62        traceCallb
31060 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ack(String.Forma
31070 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f  t(NameAndValueFo
31080 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20  rmat,..         
31090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
310a0 4e 6f 56 73 32 30 31 32 22 2c 20 46 6f 72 44 69  NoVs2012", ForDi
310b0 73 70 6c 61 79 28 6e 6f 56 73 32 30 31 32 29 29  splay(noVs2012))
310c0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
310d0 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
310e0 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  Category);....  
310f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31100 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28    traceCallback(
31110 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61  String.Format(Na
31120 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74  meAndValueFormat
31130 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
31140 20 20 20 20 20 20 20 20 20 20 20 22 4e 6f 56 73             "NoVs
31150 32 30 31 33 22 2c 20 46 6f 72 44 69 73 70 6c 61  2013", ForDispla
31160 79 28 6e 6f 56 73 32 30 31 33 29 29 2c 0d 0a 20  y(noVs2013)),.. 
31170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31180 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65         traceCate
31190 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
311a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
311b0 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69  aceCallback(Stri
311c0 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e  ng.Format(NameAn
311d0 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20  dValueFormat,.. 
311e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
311f0 20 20 20 20 20 20 20 22 4e 6f 56 73 32 30 31 35         "NoVs2015
31200 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 6e 6f  ", ForDisplay(no
31210 56 73 32 30 31 35 29 29 2c 0d 0a 20 20 20 20 20  Vs2015)),..     
31220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31230 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
31240 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
31250 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
31260 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46  allback(String.F
31270 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c  ormat(NameAndVal
31280 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20  ueFormat,..     
31290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
312a0 20 20 20 22 4e 6f 56 73 32 30 31 37 22 2c 20 46     "NoVs2017", F
312b0 6f 72 44 69 73 70 6c 61 79 28 6e 6f 56 73 32 30  orDisplay(noVs20
312c0 31 37 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  17)),..         
312d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
312e0 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
312f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
31300 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62        traceCallb
31310 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ack(String.Forma
31320 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f  t(NameAndValueFo
31330 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20  rmat,..         
31340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
31350 4e 6f 54 72 61 63 65 22 2c 20 46 6f 72 44 69 73  NoTrace", ForDis
31360 70 6c 61 79 28 6e 6f 54 72 61 63 65 29 29 2c 0d  play(noTrace)),.
31370 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
31380 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
31390 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
313a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
313b0 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74  traceCallback(St
313c0 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65  ring.Format(Name
313d0 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d  AndValueFormat,.
313e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
313f0 20 20 20 20 20 20 20 20 20 22 4e 6f 43 6f 6e 73           "NoCons
31400 6f 6c 65 22 2c 20 46 6f 72 44 69 73 70 6c 61 79  ole", ForDisplay
31410 28 6e 6f 43 6f 6e 73 6f 6c 65 29 29 2c 0d 0a 20  (noConsole)),.. 
31420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31430 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65         traceCate
31440 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
31450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
31460 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69  aceCallback(Stri
31470 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e  ng.Format(NameAn
31480 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20  dValueFormat,.. 
31490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
314a0 20 20 20 20 20 20 20 22 4e 6f 4c 6f 67 22 2c 20         "NoLog", 
314b0 46 6f 72 44 69 73 70 6c 61 79 28 6e 6f 4c 6f 67  ForDisplay(noLog
314c0 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  )),..           
314d0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
314e0 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
314f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31500 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63      traceCallbac
31510 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  k(String.Format(
31520 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d  NameAndValueForm
31530 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at,..           
31540 20 20 20 20 20 20 20 20 20 20 20 20 20 22 54 68               "Th
31550 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 22 2c 20 46  rowOnMissing", F
31560 6f 72 44 69 73 70 6c 61 79 28 74 68 72 6f 77 4f  orDisplay(throwO
31570 6e 4d 69 73 73 69 6e 67 29 29 2c 0d 0a 20 20 20  nMissing)),..   
31580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31590 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f       traceCatego
315a0 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
315b0 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
315c0 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67  eCallback(String
315d0 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56  .Format(NameAndV
315e0 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20  alueFormat,..   
315f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31600 20 20 20 20 20 22 57 68 61 74 49 66 22 2c 20 46       "WhatIf", F
31610 6f 72 44 69 73 70 6c 61 79 28 77 68 61 74 49 66  orDisplay(whatIf
31620 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  )),..           
31630 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
31640 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
31650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31660 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63      traceCallbac
31670 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  k(String.Format(
31680 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d  NameAndValueForm
31690 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at,..           
316a0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 44 65               "De
316b0 62 75 67 22 2c 20 46 6f 72 44 69 73 70 6c 61 79  bug", ForDisplay
316c0 28 64 65 62 75 67 29 29 2c 0d 0a 20 20 20 20 20  (debug)),..     
316d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
316e0 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
316f0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
31700 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
31710 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46  allback(String.F
31720 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c  ormat(NameAndVal
31730 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20  ueFormat,..     
31740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31750 20 20 20 22 56 65 72 62 6f 73 65 22 2c 20 46 6f     "Verbose", Fo
31760 72 44 69 73 70 6c 61 79 28 76 65 72 62 6f 73 65  rDisplay(verbose
31770 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  )),..           
31780 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
31790 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
317a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
317b0 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63      traceCallbac
317c0 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  k(String.Format(
317d0 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d  NameAndValueForm
317e0 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at,..           
317f0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 43 6f               "Co
31800 6e 66 69 72 6d 22 2c 20 46 6f 72 44 69 73 70 6c  nfirm", ForDispl
31810 61 79 28 63 6f 6e 66 69 72 6d 29 29 2c 0d 0a 20  ay(confirm)),.. 
31820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31830 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65         traceCate
31840 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
31850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
31860 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31870 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31880 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31890 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
318a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
318b0 20 69 66 20 28 61 73 73 65 6d 62 6c 79 20 21 3d   if (assembly !=
318c0 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
318d0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
318e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
318f0 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c         traceCall
31900 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d  back(String.Form
31910 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46  at(NameAndValueF
31920 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20  ormat,..        
31930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31940 20 20 20 20 22 41 73 73 65 6d 62 6c 79 54 69 74      "AssemblyTit
31950 6c 65 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  le",..          
31960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31970 20 20 46 6f 72 44 69 73 70 6c 61 79 28 47 65 74    ForDisplay(Get
31980 41 73 73 65 6d 62 6c 79 54 69 74 6c 65 28 61 73  AssemblyTitle(as
31990 73 65 6d 62 6c 79 29 29 29 2c 0d 0a 20 20 20 20  sembly))),..    
319a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
319b0 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74          traceCat
319c0 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20  egory);....     
319d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
319e0 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b     traceCallback
319f0 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e  (String.Format(N
31a00 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61  ameAndValueForma
31a10 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t,..            
31a20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31a30 22 41 73 73 65 6d 62 6c 79 43 6f 6e 66 69 67 75  "AssemblyConfigu
31a40 72 61 74 69 6f 6e 22 2c 0d 0a 20 20 20 20 20 20  ration",..      
31a50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31a60 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79        ForDisplay
31a70 28 47 65 74 41 73 73 65 6d 62 6c 79 43 6f 6e 66  (GetAssemblyConf
31a80 69 67 75 72 61 74 69 6f 6e 28 61 73 73 65 6d 62  iguration(assemb
31a90 6c 79 29 29 29 2c 0d 0a 20 20 20 20 20 20 20 20  ly))),..        
31aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31ab0 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72      traceCategor
31ac0 79 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  y);..           
31ad0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
31ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31af0 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
31b00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31b10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31b20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
31b30 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
31b40 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61       traceCallba
31b50 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  ck(String.Format
31b60 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72  (NameAndValueFor
31b70 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  mat,..          
31b80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 49                "I
31b90 73 53 79 73 74 65 6d 45 66 36 41 73 73 65 6d 62  sSystemEf6Assemb
31ba0 6c 79 41 76 61 69 6c 61 62 6c 65 22 2c 20 46 6f  lyAvailable", Fo
31bb0 72 44 69 73 70 6c 61 79 28 0d 0a 20 20 20 20 20  rDisplay(..     
31bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31bd0 20 20 20 49 73 53 79 73 74 65 6d 45 66 36 41 73     IsSystemEf6As
31be0 73 65 6d 62 6c 79 41 76 61 69 6c 61 62 6c 65 28  semblyAvailable(
31bf0 66 61 6c 73 65 29 29 29 2c 0d 0a 20 20 20 20 20  false))),..     
31c00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31c10 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
31c20 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
31c30 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
31c40 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46  allback(String.F
31c50 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c  ormat(NameAndVal
31c60 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20  ueFormat,..     
31c70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31c80 20 20 20 22 49 73 53 79 73 74 65 6d 45 66 36 41     "IsSystemEf6A
31c90 73 73 65 6d 62 6c 79 47 6c 6f 62 61 6c 22 2c 20  ssemblyGlobal", 
31ca0 46 6f 72 44 69 73 70 6c 61 79 28 0d 0a 20 20 20  ForDisplay(..   
31cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31cc0 20 20 20 20 20 49 73 53 79 73 74 65 6d 45 66 36       IsSystemEf6
31cd0 41 73 73 65 6d 62 6c 79 47 6c 6f 62 61 6c 28 29  AssemblyGlobal()
31ce0 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  )),..           
31cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
31d00 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
31d10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31d20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
31d30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31d40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31d50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
31d60 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
31d70 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c         traceCall
31d80 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d  back(String.Form
31d90 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46  at(NameAndValueF
31da0 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20  ormat,..        
31db0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31dc0 22 49 73 4c 69 6e 71 53 75 70 70 6f 72 74 65 64  "IsLinqSupported
31dd0 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 49 73  ", ForDisplay(Is
31de0 4c 69 6e 71 53 75 70 70 6f 72 74 65 64 28 66 61  LinqSupported(fa
31df0 6c 73 65 29 29 29 2c 0d 0a 20 20 20 20 20 20 20  lse))),..       
31e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31e10 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
31e20 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
31e30 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c          traceCal
31e40 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72  lback(String.For
31e50 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65  mat(NameAndValue
31e60 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20  Format,..       
31e70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31e80 20 22 49 73 45 66 36 53 75 70 70 6f 72 74 65 64   "IsEf6Supported
31e90 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 49 73  ", ForDisplay(Is
31ea0 45 66 36 53 75 70 70 6f 72 74 65 64 28 66 61 6c  Ef6Supported(fal
31eb0 73 65 29 29 29 2c 0d 0a 20 20 20 20 20 20 20 20  se))),..        
31ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31ed0 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
31ee0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
31ef0 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c         traceCall
31f00 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d  back(String.Form
31f10 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46  at(NameAndValueF
31f20 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20  ormat,..        
31f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31f40 22 49 73 45 66 36 41 73 73 65 6d 62 6c 79 47 6c  "IsEf6AssemblyGl
31f50 6f 62 61 6c 22 2c 20 46 6f 72 44 69 73 70 6c 61  obal", ForDispla
31f60 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y(..            
31f70 20 20 20 20 20 20 20 20 20 20 20 20 49 73 45 66              IsEf
31f80 36 41 73 73 65 6d 62 6c 79 47 6c 6f 62 61 6c 28  6AssemblyGlobal(
31f90 29 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ))),..          
31fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
31fb0 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d  aceCategory);...
31fc0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
31fd0 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61       traceCallba
31fe0 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  ck(String.Format
31ff0 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72  (NameAndValueFor
32000 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  mat,..          
32010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 55                "U
32020 73 65 45 66 36 50 72 6f 76 69 64 65 72 22 2c 20  seEf6Provider", 
32030 46 6f 72 44 69 73 70 6c 61 79 28 55 73 65 45 66  ForDisplay(UseEf
32040 36 50 72 6f 76 69 64 65 72 28 66 61 6c 73 65 29  6Provider(false)
32050 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  )),..           
32060 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
32070 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
32080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32090 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
320a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
320b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
320c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
320d0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
320e0 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20         try..    
320f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32100 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
32110 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
32120 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e  Callback(String.
32130 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61  Format(NameAndVa
32140 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20  lueFormat,..    
32150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32160 20 20 20 20 20 20 20 20 22 47 65 74 43 6f 72 65          "GetCore
32170 41 73 73 65 6d 62 6c 79 4e 61 6d 65 22 2c 20 46  AssemblyName", F
32180 6f 72 44 69 73 70 6c 61 79 28 0d 0a 20 20 20 20  orDisplay(..    
32190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
321a0 20 20 20 20 20 20 20 20 47 65 74 43 6f 72 65 41          GetCoreA
321b0 73 73 65 6d 62 6c 79 4e 61 6d 65 28 66 61 6c 73  ssemblyName(fals
321c0 65 29 29 29 2c 20 74 72 61 63 65 43 61 74 65 67  e))), traceCateg
321d0 6f 72 79 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ory);..         
321e0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
321f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32200 20 20 63 61 74 63 68 20 28 45 78 63 65 70 74 69    catch (Excepti
32210 6f 6e 20 65 29 0d 0a 20 20 20 20 20 20 20 20 20  on e)..         
32220 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
32230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32240 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62        traceCallb
32250 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ack(String.Forma
32260 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f  t(NameAndValueFo
32270 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20  rmat,..         
32280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32290 20 20 20 22 47 65 74 43 6f 72 65 41 73 73 65 6d     "GetCoreAssem
322a0 62 6c 79 4e 61 6d 65 22 2c 20 46 6f 72 44 69 73  blyName", ForDis
322b0 70 6c 61 79 28 65 29 29 2c 0d 0a 20 20 20 20 20  play(e)),..     
322c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
322d0 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65         traceCate
322e0 67 6f 72 79 29 3b 0d 0a 20 20 20 20 20 20 20 20  gory);..        
322f0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
32300 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
32310 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
32320 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32330 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32340 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32350 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
32360 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20          try..   
32370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32380 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
32390 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
323a0 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67  eCallback(String
323b0 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56  .Format(NameAndV
323c0 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20  alueFormat,..   
323d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
323e0 20 20 20 20 20 20 20 20 20 22 47 65 74 4c 69 6e           "GetLin
323f0 71 41 73 73 65 6d 62 6c 79 4e 61 6d 65 22 2c 20  qAssemblyName", 
32400 46 6f 72 44 69 73 70 6c 61 79 28 0d 0a 20 20 20  ForDisplay(..   
32410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32420 20 20 20 20 20 20 20 20 20 47 65 74 4c 69 6e 71           GetLinq
32430 41 73 73 65 6d 62 6c 79 4e 61 6d 65 28 66 61 6c  AssemblyName(fal
32440 73 65 29 29 29 2c 20 74 72 61 63 65 43 61 74 65  se))), traceCate
32450 67 6f 72 79 29 3b 0d 0a 20 20 20 20 20 20 20 20  gory);..        
32460 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
32470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32480 20 20 20 63 61 74 63 68 20 28 45 78 63 65 70 74     catch (Except
32490 69 6f 6e 20 65 29 0d 0a 20 20 20 20 20 20 20 20  ion e)..        
324a0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
324b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
324c0 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c         traceCall
324d0 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d  back(String.Form
324e0 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46  at(NameAndValueF
324f0 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20  ormat,..        
32500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32510 20 20 20 20 22 47 65 74 4c 69 6e 71 41 73 73 65      "GetLinqAsse
32520 6d 62 6c 79 4e 61 6d 65 22 2c 20 46 6f 72 44 69  mblyName", ForDi
32530 73 70 6c 61 79 28 65 29 29 2c 0d 0a 20 20 20 20  splay(e)),..    
32540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32550 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74          traceCat
32560 65 67 6f 72 79 29 3b 0d 0a 20 20 20 20 20 20 20  egory);..       
32570 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
32580 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
32590 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
325a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
325b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
325c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
325d0 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
325e0 20 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20           try..  
325f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32600 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
32610 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
32620 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e  ceCallback(Strin
32630 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64  g.Format(NameAnd
32640 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20  ValueFormat,..  
32650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32660 20 20 20 20 20 20 20 20 20 20 22 47 65 74 45 66            "GetEf
32670 36 41 73 73 65 6d 62 6c 79 4e 61 6d 65 22 2c 20  6AssemblyName", 
32680 46 6f 72 44 69 73 70 6c 61 79 28 0d 0a 20 20 20  ForDisplay(..   
32690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
326a0 20 20 20 20 20 20 20 20 20 47 65 74 45 66 36 41           GetEf6A
326b0 73 73 65 6d 62 6c 79 4e 61 6d 65 28 66 61 6c 73  ssemblyName(fals
326c0 65 29 29 29 2c 20 74 72 61 63 65 43 61 74 65 67  e))), traceCateg
326d0 6f 72 79 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ory);..         
326e0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
326f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32700 20 20 63 61 74 63 68 20 28 45 78 63 65 70 74 69    catch (Excepti
32710 6f 6e 20 65 29 0d 0a 20 20 20 20 20 20 20 20 20  on e)..         
32720 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
32730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32740 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62        traceCallb
32750 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ack(String.Forma
32760 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f  t(NameAndValueFo
32770 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20  rmat,..         
32780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32790 20 20 20 22 47 65 74 45 66 36 41 73 73 65 6d 62     "GetEf6Assemb
327a0 6c 79 4e 61 6d 65 22 2c 20 46 6f 72 44 69 73 70  lyName", ForDisp
327b0 6c 61 79 28 65 29 29 2c 0d 0a 20 20 20 20 20 20  lay(e)),..      
327c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
327d0 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67        traceCateg
327e0 6f 72 79 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ory);..         
327f0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
32800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32810 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
32820 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32830 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32840 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
32850 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
32860 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20         try..    
32870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32880 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
32890 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
328a0 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e  Callback(String.
328b0 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61  Format(NameAndVa
328c0 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20  lueFormat,..    
328d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
328e0 20 20 20 20 20 20 20 20 22 47 65 74 44 65 73 69          "GetDesi
328f0 67 6e 65 72 41 73 73 65 6d 62 6c 79 4e 61 6d 65  gnerAssemblyName
32900 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 0d 0a  ", ForDisplay(..
32910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32920 20 20 20 20 20 20 20 20 20 20 20 20 47 65 74 44              GetD
32930 65 73 69 67 6e 65 72 41 73 73 65 6d 62 6c 79 4e  esignerAssemblyN
32940 61 6d 65 28 66 61 6c 73 65 29 29 29 2c 20 74 72  ame(false))), tr
32950 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 20  aceCategory);.. 
32960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32970 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
32980 20 20 20 20 20 20 20 20 20 20 63 61 74 63 68 20            catch 
32990 28 45 78 63 65 70 74 69 6f 6e 20 65 29 0d 0a 20  (Exception e).. 
329a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
329b0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
329c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
329d0 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69  aceCallback(Stri
329e0 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e  ng.Format(NameAn
329f0 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20  dValueFormat,.. 
32a00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32a10 20 20 20 20 20 20 20 20 20 20 20 22 47 65 74 44             "GetD
32a20 65 73 69 67 6e 65 72 41 73 73 65 6d 62 6c 79 4e  esignerAssemblyN
32a30 61 6d 65 22 2c 20 46 6f 72 44 69 73 70 6c 61 79  ame", ForDisplay
32a40 28 65 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  (e)),..         
32a50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32a60 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
32a70 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
32a80 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
32a90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32aa0 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
32ab0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32ac0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32ad0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
32ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32af0 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63      traceCallbac
32b00 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  k(String.Format(
32b10 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d  NameAndValueForm
32b20 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at,..           
32b30 20 20 20 20 20 20 20 20 20 20 20 20 20 22 47 65               "Ge
32b40 74 49 6e 76 61 72 69 61 6e 74 4e 61 6d 65 22 2c  tInvariantName",
32b50 20 46 6f 72 44 69 73 70 6c 61 79 28 47 65 74 49   ForDisplay(GetI
32b60 6e 76 61 72 69 61 6e 74 4e 61 6d 65 28 0d 0a 20  nvariantName(.. 
32b70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32b80 20 20 20 20 20 20 20 66 61 6c 73 65 29 29 29 2c         false))),
32b90 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
32ba0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
32bb0 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c          traceCal
32bc0 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72  lback(String.For
32bd0 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65  mat(NameAndValue
32be0 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20  Format,..       
32bf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32c00 20 22 47 65 74 43 6f 6e 66 69 67 49 6e 76 61 72   "GetConfigInvar
32c10 69 61 6e 74 4e 61 6d 65 22 2c 20 46 6f 72 44 69  iantName", ForDi
32c20 73 70 6c 61 79 28 0d 0a 20 20 20 20 20 20 20 20  splay(..        
32c30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32c40 47 65 74 43 6f 6e 66 69 67 49 6e 76 61 72 69 61  GetConfigInvaria
32c50 6e 74 4e 61 6d 65 28 66 61 6c 73 65 29 29 29 2c  ntName(false))),
32c60 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
32c70 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
32c80 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c          traceCal
32c90 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72  lback(String.For
32ca0 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65  mat(NameAndValue
32cb0 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20  Format,..       
32cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32cd0 20 22 47 65 74 50 72 6f 76 69 64 65 72 49 6e 76   "GetProviderInv
32ce0 61 72 69 61 6e 74 4e 61 6d 65 22 2c 20 46 6f 72  ariantName", For
32cf0 44 69 73 70 6c 61 79 28 0d 0a 20 20 20 20 20 20  Display(..      
32d00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32d10 20 20 47 65 74 50 72 6f 76 69 64 65 72 49 6e 76    GetProviderInv
32d20 61 72 69 61 6e 74 4e 61 6d 65 28 66 61 6c 73 65  ariantName(false
32d30 29 29 29 2c 20 74 72 61 63 65 43 61 74 65 67 6f  ))), traceCatego
32d40 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
32d50 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
32d60 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67  eCallback(String
32d70 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56  .Format(NameAndV
32d80 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20  alueFormat,..   
32d90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32da0 20 20 20 20 20 22 47 65 74 46 61 63 74 6f 72 79       "GetFactory
32db0 54 79 70 65 4e 61 6d 65 22 2c 20 46 6f 72 44 69  TypeName", ForDi
32dc0 73 70 6c 61 79 28 0d 0a 20 20 20 20 20 20 20 20  splay(..        
32dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32de0 47 65 74 46 61 63 74 6f 72 79 54 79 70 65 4e 61  GetFactoryTypeNa
32df0 6d 65 28 66 61 6c 73 65 29 29 29 2c 20 74 72 61  me(false))), tra
32e00 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
32e10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32e20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
32e30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32e40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32e50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
32e60 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
32e70 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20         try..    
32e80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32e90 7b 0d 0a 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 74 72 61 63 65             trace
32eb0 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e  Callback(String.
32ec0 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61  Format(NameAndVa
32ed0 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20  lueFormat,..    
32ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32ef0 20 20 20 20 20 20 20 20 22 47 65 74 50 72 6f 76          "GetProv
32f00 69 64 65 72 41 73 73 65 6d 62 6c 79 4e 61 6d 65  iderAssemblyName
32f10 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 0d 0a  ", ForDisplay(..
32f20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32f30 20 20 20 20 20 20 20 20 20 20 20 20 47 65 74 50              GetP
32f40 72 6f 76 69 64 65 72 41 73 73 65 6d 62 6c 79 4e  roviderAssemblyN
32f50 61 6d 65 28 66 61 6c 73 65 29 29 29 2c 20 74 72  ame(false))), tr
32f60 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 20  aceCategory);.. 
32f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32f80 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
32f90 20 20 20 20 20 20 20 20 20 20 63 61 74 63 68 20            catch 
32fa0 28 45 78 63 65 70 74 69 6f 6e 20 65 29 0d 0a 20  (Exception e).. 
32fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32fc0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
32fd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
32fe0 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69  aceCallback(Stri
32ff0 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e  ng.Format(NameAn
33000 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20  dValueFormat,.. 
33010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33020 20 20 20 20 20 20 20 20 20 20 20 22 47 65 74 50             "GetP
33030 72 6f 76 69 64 65 72 41 73 73 65 6d 62 6c 79 4e  roviderAssemblyN
33040 61 6d 65 22 2c 20 46 6f 72 44 69 73 70 6c 61 79  ame", ForDisplay
33050 28 65 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  (e)),..         
33060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33070 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
33080 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
33090 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
330a0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
330b0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
330c0 20 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67           #endreg
330d0 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ion....         
330e0 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
330f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33100 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33110 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33120 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
33130 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50 75        #region Pu
33140 62 6c 69 63 20 50 72 6f 70 65 72 74 69 65 73 0d  blic Properties.
33150 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69  .            pri
33160 76 61 74 65 20 41 73 73 65 6d 62 6c 79 20 61 73  vate Assembly as
33170 73 65 6d 62 6c 79 3b 0d 0a 20 20 20 20 20 20 20  sembly;..       
33180 20 20 20 20 20 70 75 62 6c 69 63 20 41 73 73 65       public Asse
33190 6d 62 6c 79 20 41 73 73 65 6d 62 6c 79 0d 0a 20  mbly Assembly.. 
331a0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
331b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65                ge
331c0 74 20 7b 20 72 65 74 75 72 6e 20 61 73 73 65 6d  t { return assem
331d0 62 6c 79 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  bly; }..        
331e0 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 61 73          set { as
331f0 73 65 6d 62 6c 79 20 3d 20 76 61 6c 75 65 3b 20  sembly = value; 
33200 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
33210 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
33220 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33230 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33240 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33250 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33260 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
33270 20 20 20 70 72 69 76 61 74 65 20 73 74 72 69 6e     private strin
33280 67 20 6c 6f 67 46 69 6c 65 4e 61 6d 65 3b 0d 0a  g logFileName;..
33290 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
332a0 69 63 20 73 74 72 69 6e 67 20 4c 6f 67 46 69 6c  ic string LogFil
332b0 65 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 20  eName..         
332c0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
332d0 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75        get { retu
332e0 72 6e 20 6c 6f 67 46 69 6c 65 4e 61 6d 65 3b 20  rn logFileName; 
332f0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
33300 20 20 20 73 65 74 20 7b 20 6c 6f 67 46 69 6c 65     set { logFile
33310 4e 61 6d 65 20 3d 20 76 61 6c 75 65 3b 20 7d 0d  Name = value; }.
33320 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
33330 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
33340 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33350 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33360 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33370 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33380 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
33390 20 70 72 69 76 61 74 65 20 73 74 72 69 6e 67 20   private string 
333a0 72 65 67 69 73 74 72 79 4c 6f 67 46 69 6c 65 4e  registryLogFileN
333b0 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ame;..          
333c0 20 20 70 75 62 6c 69 63 20 73 74 72 69 6e 67 20    public string 
333d0 52 65 67 69 73 74 72 79 4c 6f 67 46 69 6c 65 4e  RegistryLogFileN
333e0 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ame..           
333f0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
33400 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e      get { return
33410 20 72 65 67 69 73 74 72 79 4c 6f 67 46 69 6c 65   registryLogFile
33420 4e 61 6d 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20  Name; }..       
33430 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 72           set { r
33440 65 67 69 73 74 72 79 4c 6f 67 46 69 6c 65 4e 61  egistryLogFileNa
33450 6d 65 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20  me = value; }.. 
33460 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
33470 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
33480 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33490 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
334a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
334b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
334c0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
334d0 72 69 76 61 74 65 20 73 74 72 69 6e 67 20 64 69  rivate string di
334e0 72 65 63 74 6f 72 79 3b 0d 0a 20 20 20 20 20 20  rectory;..      
334f0 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 72        public str
33500 69 6e 67 20 44 69 72 65 63 74 6f 72 79 0d 0a 20  ing Directory.. 
33510 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
33520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65                ge
33530 74 20 7b 20 72 65 74 75 72 6e 20 64 69 72 65 63  t { return direc
33540 74 6f 72 79 3b 20 7d 0d 0a 20 20 20 20 20 20 20  tory; }..       
33550 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 64           set { d
33560 69 72 65 63 74 6f 72 79 20 3d 20 76 61 6c 75 65  irectory = value
33570 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
33580 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
33590 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
335a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
335b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
335c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
335d0 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
335e0 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 72       private str
335f0 69 6e 67 20 63 6f 72 65 46 69 6c 65 4e 61 6d 65  ing coreFileName
33600 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ;..            p
33610 75 62 6c 69 63 20 73 74 72 69 6e 67 20 43 6f 72  ublic string Cor
33620 65 46 69 6c 65 4e 61 6d 65 0d 0a 20 20 20 20 20  eFileName..     
33630 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
33640 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20            get { 
33650 72 65 74 75 72 6e 20 63 6f 72 65 46 69 6c 65 4e  return coreFileN
33660 61 6d 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  ame; }..        
33670 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 63 6f          set { co
33680 72 65 46 69 6c 65 4e 61 6d 65 20 3d 20 76 61 6c  reFileName = val
33690 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  ue; }..         
336a0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
336b0 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
336c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
336d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
336e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
336f0 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
33700 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
33710 74 72 69 6e 67 20 6c 69 6e 71 46 69 6c 65 4e 61  tring linqFileNa
33720 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me;..           
33730 20 70 75 62 6c 69 63 20 73 74 72 69 6e 67 20 4c   public string L
33740 69 6e 71 46 69 6c 65 4e 61 6d 65 0d 0a 20 20 20  inqFileName..   
33750 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
33760 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20              get 
33770 7b 20 72 65 74 75 72 6e 20 6c 69 6e 71 46 69 6c  { return linqFil
33780 65 4e 61 6d 65 3b 20 7d 0d 0a 20 20 20 20 20 20  eName; }..      
33790 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20            set { 
337a0 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 20 3d 20 76  linqFileName = v
337b0 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20  alue; }..       
337c0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
337d0 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
337e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
337f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33800 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33810 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
33820 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65           private
33830 20 73 74 72 69 6e 67 20 65 66 36 46 69 6c 65 4e   string ef6FileN
33840 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ame;..          
33850 20 20 70 75 62 6c 69 63 20 73 74 72 69 6e 67 20    public string 
33860 45 66 36 46 69 6c 65 4e 61 6d 65 0d 0a 20 20 20  Ef6FileName..   
33870 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
33880 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20              get 
33890 7b 20 72 65 74 75 72 6e 20 65 66 36 46 69 6c 65  { return ef6File
338a0 4e 61 6d 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20  Name; }..       
338b0 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 65           set { e
338c0 66 36 46 69 6c 65 4e 61 6d 65 20 3d 20 76 61 6c  f6FileName = val
338d0 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  ue; }..         
338e0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
338f0 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
33900 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33910 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33920 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33930 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
33940 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
33950 74 72 69 6e 67 20 64 65 73 69 67 6e 65 72 46 69  tring designerFi
33960 6c 65 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20  leName;..       
33970 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 72 69       public stri
33980 6e 67 20 44 65 73 69 67 6e 65 72 46 69 6c 65 4e  ng DesignerFileN
33990 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ame..           
339a0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
339b0 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e      get { return
339c0 20 64 65 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d   designerFileNam
339d0 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  e; }..          
339e0 20 20 20 20 20 20 73 65 74 20 7b 20 64 65 73 69        set { desi
339f0 67 6e 65 72 46 69 6c 65 4e 61 6d 65 20 3d 20 76  gnerFileName = v
33a00 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20  alue; }..       
33a10 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
33a20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
33a30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33a40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33a50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33a60 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
33a70 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65           private
33a80 20 73 74 72 69 6e 67 20 72 65 67 69 73 74 72 79   string registry
33a90 56 65 72 73 69 6f 6e 3b 0d 0a 20 20 20 20 20 20  Version;..      
33aa0 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 72        public str
33ab0 69 6e 67 20 52 65 67 69 73 74 72 79 56 65 72 73  ing RegistryVers
33ac0 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ion..           
33ad0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
33ae0 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e      get { return
33af0 20 72 65 67 69 73 74 72 79 56 65 72 73 69 6f 6e   registryVersion
33b00 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
33b10 20 20 20 20 20 73 65 74 20 7b 20 72 65 67 69 73       set { regis
33b20 74 72 79 56 65 72 73 69 6f 6e 20 3d 20 76 61 6c  tryVersion = val
33b30 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  ue; }..         
33b40 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
33b50 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
33b60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33b70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33b80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33b90 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
33ba0 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
33bb0 74 72 69 6e 67 20 63 6f 6e 66 69 67 56 65 72 73  tring configVers
33bc0 69 6f 6e 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ion;..          
33bd0 20 20 70 75 62 6c 69 63 20 73 74 72 69 6e 67 20    public string 
33be0 43 6f 6e 66 69 67 56 65 72 73 69 6f 6e 0d 0a 20  ConfigVersion.. 
33bf0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
33c00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65                ge
33c10 74 20 7b 20 72 65 74 75 72 6e 20 63 6f 6e 66 69  t { return confi
33c20 67 56 65 72 73 69 6f 6e 3b 20 7d 0d 0a 20 20 20  gVersion; }..   
33c30 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74               set
33c40 20 7b 20 63 6f 6e 66 69 67 56 65 72 73 69 6f 6e   { configVersion
33c50 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20   = value; }..   
33c60 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
33c70 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
33c80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33c90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33ca0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33cb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
33cc0 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69  .            pri
33cd0 76 61 74 65 20 73 74 72 69 6e 67 20 76 73 56 65  vate string vsVe
33ce0 72 73 69 6f 6e 53 75 66 66 69 78 3b 0d 0a 20 20  rsionSuffix;..  
33cf0 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
33d00 20 73 74 72 69 6e 67 20 56 73 56 65 72 73 69 6f   string VsVersio
33d10 6e 53 75 66 66 69 78 0d 0a 20 20 20 20 20 20 20  nSuffix..       
33d20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
33d30 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65          get { re
33d40 74 75 72 6e 20 76 73 56 65 72 73 69 6f 6e 53 75  turn vsVersionSu
33d50 66 66 69 78 3b 20 7d 0d 0a 20 20 20 20 20 20 20  ffix; }..       
33d60 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 76           set { v
33d70 73 56 65 72 73 69 6f 6e 53 75 66 66 69 78 20 3d  sVersionSuffix =
33d80 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20   value; }..     
33d90 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
33da0 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
33db0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33dc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33dd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33de0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
33df0 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
33e00 74 65 20 73 74 72 69 6e 67 20 64 65 62 75 67 46  te string debugF
33e10 6f 72 6d 61 74 3b 0d 0a 20 20 20 20 20 20 20 20  ormat;..        
33e20 20 20 20 20 70 75 62 6c 69 63 20 73 74 72 69 6e      public strin
33e30 67 20 44 65 62 75 67 46 6f 72 6d 61 74 0d 0a 20  g DebugFormat.. 
33e40 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
33e50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65                ge
33e60 74 20 7b 20 72 65 74 75 72 6e 20 64 65 62 75 67  t { return debug
33e70 46 6f 72 6d 61 74 3b 20 7d 0d 0a 20 20 20 20 20  Format; }..     
33e80 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b             set {
33e90 20 64 65 62 75 67 46 6f 72 6d 61 74 20 3d 20 76   debugFormat = v
33ea0 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20  alue; }..       
33eb0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
33ec0 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
33ed0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33ee0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33ef0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33f00 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
33f10 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65           private
33f20 20 73 74 72 69 6e 67 20 74 72 61 63 65 46 6f 72   string traceFor
33f30 6d 61 74 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  mat;..          
33f40 20 20 70 75 62 6c 69 63 20 73 74 72 69 6e 67 20    public string 
33f50 54 72 61 63 65 46 6f 72 6d 61 74 0d 0a 20 20 20  TraceFormat..   
33f60 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
33f70 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20              get 
33f80 7b 20 72 65 74 75 72 6e 20 74 72 61 63 65 46 6f  { return traceFo
33f90 72 6d 61 74 3b 20 7d 0d 0a 20 20 20 20 20 20 20  rmat; }..       
33fa0 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 74           set { t
33fb0 72 61 63 65 46 6f 72 6d 61 74 20 3d 20 76 61 6c  raceFormat = val
33fc0 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  ue; }..         
33fd0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
33fe0 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
33ff0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34000 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34010 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34020 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
34030 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 49         private I
34040 6e 73 74 61 6c 6c 46 6c 61 67 73 20 69 6e 73 74  nstallFlags inst
34050 61 6c 6c 46 6c 61 67 73 3b 0d 0a 20 20 20 20 20  allFlags;..     
34060 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 49 6e         public In
34070 73 74 61 6c 6c 46 6c 61 67 73 20 49 6e 73 74 61  stallFlags Insta
34080 6c 6c 46 6c 61 67 73 0d 0a 20 20 20 20 20 20 20  llFlags..       
34090 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
340a0 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65          get { re
340b0 74 75 72 6e 20 69 6e 73 74 61 6c 6c 46 6c 61 67  turn installFlag
340c0 73 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  s; }..          
340d0 20 20 20 20 20 20 73 65 74 20 7b 20 69 6e 73 74        set { inst
340e0 61 6c 6c 46 6c 61 67 73 20 3d 20 76 61 6c 75 65  allFlags = value
340f0 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
34100 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
34110 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
34120 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34130 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34140 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34150 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
34160 20 20 20 20 20 70 72 69 76 61 74 65 20 50 72 6f       private Pro
34170 76 69 64 65 72 46 6c 61 67 73 20 70 72 6f 76 69  viderFlags provi
34180 64 65 72 46 6c 61 67 73 3b 0d 0a 20 20 20 20 20  derFlags;..     
34190 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 50 72         public Pr
341a0 6f 76 69 64 65 72 46 6c 61 67 73 20 50 72 6f 76  oviderFlags Prov
341b0 69 64 65 72 46 6c 61 67 73 0d 0a 20 20 20 20 20  iderFlags..     
341c0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
341d0 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20            get { 
341e0 72 65 74 75 72 6e 20 70 72 6f 76 69 64 65 72 46  return providerF
341f0 6c 61 67 73 3b 20 7d 0d 0a 20 20 20 20 20 20 20  lags; }..       
34200 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 70           set { p
34210 72 6f 76 69 64 65 72 46 6c 61 67 73 20 3d 20 76  roviderFlags = v
34220 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20  alue; }..       
34230 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
34240 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
34250 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34260 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34270 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34280 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
34290 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65           private
342a0 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 20 64   TracePriority d
342b0 65 62 75 67 50 72 69 6f 72 69 74 79 3b 0d 0a 20  ebugPriority;.. 
342c0 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
342d0 63 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 20  c TracePriority 
342e0 44 65 62 75 67 50 72 69 6f 72 69 74 79 0d 0a 20  DebugPriority.. 
342f0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
34300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65                ge
34310 74 20 7b 20 72 65 74 75 72 6e 20 64 65 62 75 67  t { return debug
34320 50 72 69 6f 72 69 74 79 3b 20 7d 0d 0a 20 20 20  Priority; }..   
34330 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74               set
34340 20 7b 20 64 65 62 75 67 50 72 69 6f 72 69 74 79   { debugPriority
34350 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20   = value; }..   
34360 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
34370 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
34380 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34390 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
343a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
343b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
343c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69  .            pri
343d0 76 61 74 65 20 54 72 61 63 65 50 72 69 6f 72 69  vate TracePriori
343e0 74 79 20 74 72 61 63 65 50 72 69 6f 72 69 74 79  ty tracePriority
343f0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ;..            p
34400 75 62 6c 69 63 20 54 72 61 63 65 50 72 69 6f 72  ublic TracePrior
34410 69 74 79 20 54 72 61 63 65 50 72 69 6f 72 69 74  ity TracePriorit
34420 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  y..            {
34430 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
34440 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 74    get { return t
34450 72 61 63 65 50 72 69 6f 72 69 74 79 3b 20 7d 0d  racePriority; }.
34460 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
34470 20 73 65 74 20 7b 20 74 72 61 63 65 50 72 69 6f   set { tracePrio
34480 72 69 74 79 20 3d 20 76 61 6c 75 65 3b 20 7d 0d  rity = value; }.
34490 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
344a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
344b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
344c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
344d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
344e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
344f0 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
34500 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 70 65   private bool pe
34510 72 55 73 65 72 3b 0d 0a 20 20 20 20 20 20 20 20  rUser;..        
34520 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20      public bool 
34530 50 65 72 55 73 65 72 0d 0a 20 20 20 20 20 20 20  PerUser..       
34540 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
34550 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65          get { re
34560 74 75 72 6e 20 70 65 72 55 73 65 72 3b 20 7d 0d  turn perUser; }.
34570 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
34580 20 73 65 74 20 7b 20 70 65 72 55 73 65 72 20 3d   set { perUser =
34590 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20   value; }..     
345a0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
345b0 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
345c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
345d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
345e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
345f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
34600 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
34610 74 65 20 62 6f 6f 6c 20 69 6e 73 74 61 6c 6c 3b  te bool install;
34620 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
34630 62 6c 69 63 20 62 6f 6f 6c 20 49 6e 73 74 61 6c  blic bool Instal
34640 6c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  l..            {
34650 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
34660 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 69    get { return i
34670 6e 73 74 61 6c 6c 3b 20 7d 0d 0a 20 20 20 20 20  nstall; }..     
34680 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b             set {
34690 20 69 6e 73 74 61 6c 6c 20 3d 20 76 61 6c 75 65   install = value
346a0 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
346b0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
346c0 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
346d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
346e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
346f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34700 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
34710 20 20 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f       private boo
34720 6c 20 77 6f 77 36 34 3b 0d 0a 20 20 20 20 20 20  l wow64;..      
34730 20 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f        public boo
34740 6c 20 57 6f 77 36 34 0d 0a 20 20 20 20 20 20 20  l Wow64..       
34750 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
34760 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65          get { re
34770 74 75 72 6e 20 77 6f 77 36 34 3b 20 7d 0d 0a 20  turn wow64; }.. 
34780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
34790 65 74 20 7b 20 77 6f 77 36 34 20 3d 20 76 61 6c  et { wow64 = val
347a0 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  ue; }..         
347b0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
347c0 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
347d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
347e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
347f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34800 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
34810 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 62         private b
34820 6f 6f 6c 20 6e 6f 52 75 6e 74 69 6d 65 56 65 72  ool noRuntimeVer
34830 73 69 6f 6e 3b 0d 0a 20 20 20 20 20 20 20 20 20  sion;..         
34840 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 4e     public bool N
34850 6f 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 0d  oRuntimeVersion.
34860 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
34870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34880 67 65 74 20 7b 20 72 65 74 75 72 6e 20 6e 6f 52  get { return noR
34890 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 3b 20 7d  untimeVersion; }
348a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
348b0 20 20 73 65 74 20 7b 20 6e 6f 52 75 6e 74 69 6d    set { noRuntim
348c0 65 56 65 72 73 69 6f 6e 20 3d 20 76 61 6c 75 65  eVersion = value
348d0 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
348e0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
348f0 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
34900 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34910 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34920 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34930 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
34940 20 20 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f       private boo
34950 6c 20 6e 6f 44 65 73 6b 74 6f 70 3b 0d 0a 20 20  l noDesktop;..  
34960 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
34970 20 62 6f 6f 6c 20 4e 6f 44 65 73 6b 74 6f 70 0d   bool NoDesktop.
34980 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
34990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
349a0 67 65 74 20 7b 20 72 65 74 75 72 6e 20 6e 6f 44  get { return noD
349b0 65 73 6b 74 6f 70 3b 20 7d 0d 0a 20 20 20 20 20  esktop; }..     
349c0 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b             set {
349d0 20 6e 6f 44 65 73 6b 74 6f 70 20 3d 20 76 61 6c   noDesktop = val
349e0 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  ue; }..         
349f0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
34a00 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
34a10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34a20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34a30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34a40 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
34a50 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 62         private b
34a60 6f 6f 6c 20 6e 6f 43 6f 6d 70 61 63 74 3b 0d 0a  ool noCompact;..
34a70 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
34a80 69 63 20 62 6f 6f 6c 20 4e 6f 43 6f 6d 70 61 63  ic bool NoCompac
34a90 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  t..            {
34aa0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
34ab0 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 6e    get { return n
34ac0 6f 43 6f 6d 70 61 63 74 3b 20 7d 0d 0a 20 20 20  oCompact; }..   
34ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74               set
34ae0 20 7b 20 6e 6f 43 6f 6d 70 61 63 74 20 3d 20 76   { noCompact = v
34af0 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20  alue; }..       
34b00 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
34b10 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
34b20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34b30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34b40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34b50 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
34b60 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65           private
34b70 20 62 6f 6f 6c 20 6e 6f 4e 65 74 46 78 32 30 3b   bool noNetFx20;
34b80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
34b90 62 6c 69 63 20 62 6f 6f 6c 20 4e 6f 4e 65 74 46  blic bool NoNetF
34ba0 78 32 30 0d 0a 20 20 20 20 20 20 20 20 20 20 20  x20..           
34bb0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
34bc0 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e      get { return
34bd0 20 6e 6f 4e 65 74 46 78 32 30 3b 20 7d 0d 0a 20   noNetFx20; }.. 
34be0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
34bf0 65 74 20 7b 20 6e 6f 4e 65 74 46 78 32 30 20 3d  et { noNetFx20 =
34c00 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20   value; }..     
34c10 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
34c20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
34c30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34c40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34c50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34c60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
34c70 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
34c80 74 65 20 62 6f 6f 6c 20 6e 6f 4e 65 74 46 78 33  te bool noNetFx3
34c90 35 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  5;..            
34ca0 70 75 62 6c 69 63 20 62 6f 6f 6c 20 4e 6f 4e 65  public bool NoNe
34cb0 74 46 78 33 35 0d 0a 20 20 20 20 20 20 20 20 20  tFx35..         
34cc0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
34cd0 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75        get { retu
34ce0 72 6e 20 6e 6f 4e 65 74 46 78 33 35 3b 20 7d 0d  rn noNetFx35; }.
34cf0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
34d00 20 73 65 74 20 7b 20 6e 6f 4e 65 74 46 78 33 35   set { noNetFx35
34d10 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20   = value; }..   
34d20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
34d30 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
34d40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34d50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34d60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34d70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
34d80 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69  .            pri
34d90 76 61 74 65 20 62 6f 6f 6c 20 6e 6f 4e 65 74 46  vate bool noNetF
34da0 78 34 30 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  x40;..          
34db0 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 4e 6f    public bool No
34dc0 4e 65 74 46 78 34 30 0d 0a 20 20 20 20 20 20 20  NetFx40..       
34dd0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
34de0 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65          get { re
34df0 74 75 72 6e 20 6e 6f 4e 65 74 46 78 34 30 3b 20  turn noNetFx40; 
34e00 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
34e10 20 20 20 73 65 74 20 7b 20 6e 6f 4e 65 74 46 78     set { noNetFx
34e20 34 30 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20  40 = value; }.. 
34e30 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
34e40 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
34e50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34e60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34e70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34e80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
34e90 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
34ea0 72 69 76 61 74 65 20 62 6f 6f 6c 20 6e 6f 4e 65  rivate bool noNe
34eb0 74 46 78 34 35 3b 0d 0a 20 20 20 20 20 20 20 20  tFx45;..        
34ec0 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20      public bool 
34ed0 4e 6f 4e 65 74 46 78 34 35 0d 0a 20 20 20 20 20  NoNetFx45..     
34ee0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
34ef0 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20            get { 
34f00 72 65 74 75 72 6e 20 6e 6f 4e 65 74 46 78 34 35  return noNetFx45
34f10 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
34f20 20 20 20 20 20 73 65 74 20 7b 20 6e 6f 4e 65 74       set { noNet
34f30 46 78 34 35 20 3d 20 76 61 6c 75 65 3b 20 7d 0d  Fx45 = value; }.
34f40 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
34f50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
34f60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34f70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34f80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34f90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34fa0 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
34fb0 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 6e 6f   private bool no
34fc0 4e 65 74 46 78 34 35 31 3b 0d 0a 20 20 20 20 20  NetFx451;..     
34fd0 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f         public bo
34fe0 6f 6c 20 4e 6f 4e 65 74 46 78 34 35 31 0d 0a 20  ol NoNetFx451.. 
34ff0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
35000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65                ge
35010 74 20 7b 20 72 65 74 75 72 6e 20 6e 6f 4e 65 74  t { return noNet
35020 46 78 34 35 31 3b 20 7d 0d 0a 20 20 20 20 20 20  Fx451; }..      
35030 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20            set { 
35040 6e 6f 4e 65 74 46 78 34 35 31 20 3d 20 76 61 6c  noNetFx451 = val
35050 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  ue; }..         
35060 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
35070 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
35080 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35090 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
350a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
350b0 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
350c0 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 62         private b
350d0 6f 6f 6c 20 6e 6f 4e 65 74 46 78 34 35 32 3b 0d  ool noNetFx452;.
350e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
350f0 6c 69 63 20 62 6f 6f 6c 20 4e 6f 4e 65 74 46 78  lic bool NoNetFx
35100 34 35 32 0d 0a 20 20 20 20 20 20 20 20 20 20 20  452..           
35110 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
35120 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e      get { return
35130 20 6e 6f 4e 65 74 46 78 34 35 32 3b 20 7d 0d 0a   noNetFx452; }..
35140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35150 73 65 74 20 7b 20 6e 6f 4e 65 74 46 78 34 35 32  set { noNetFx452
35160 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20   = value; }..   
35170 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
35180 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
35190 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
351a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
351b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
351c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
351d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69  .            pri
351e0 76 61 74 65 20 62 6f 6f 6c 20 6e 6f 4e 65 74 46  vate bool noNetF
351f0 78 34 36 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  x46;..          
35200 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 4e 6f    public bool No
35210 4e 65 74 46 78 34 36 0d 0a 20 20 20 20 20 20 20  NetFx46..       
35220 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
35230 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65          get { re
35240 74 75 72 6e 20 6e 6f 4e 65 74 46 78 34 36 3b 20  turn noNetFx46; 
35250 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
35260 20 20 20 73 65 74 20 7b 20 6e 6f 4e 65 74 46 78     set { noNetFx
35270 34 36 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20  46 = value; }.. 
35280 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
35290 20 20 20 20 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
352c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
352d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
352e0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
352f0 72 69 76 61 74 65 20 62 6f 6f 6c 20 6e 6f 4e 65  rivate bool noNe
35300 74 46 78 34 36 31 3b 0d 0a 20 20 20 20 20 20 20  tFx461;..       
35310 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c       public bool
35320 20 4e 6f 4e 65 74 46 78 34 36 31 0d 0a 20 20 20   NoNetFx461..   
35330 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
35340 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20              get 
35350 7b 20 72 65 74 75 72 6e 20 6e 6f 4e 65 74 46 78  { return noNetFx
35360 34 36 31 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  461; }..        
35370 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 6e 6f          set { no
35380 4e 65 74 46 78 34 36 31 20 3d 20 76 61 6c 75 65  NetFx461 = value
35390 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
353a0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
353b0 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
353c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
353d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
353e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
353f0 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
35400 20 20 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f       private boo
35410 6c 20 6e 6f 4e 65 74 46 78 34 36 32 3b 0d 0a 20  l noNetFx462;.. 
35420 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
35430 63 20 62 6f 6f 6c 20 4e 6f 4e 65 74 46 78 34 36  c bool NoNetFx46
35440 32 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  2..            {
35450 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
35460 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 6e    get { return n
35470 6f 4e 65 74 46 78 34 36 32 3b 20 7d 0d 0a 20 20  oNetFx462; }..  
35480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65                se
35490 74 20 7b 20 6e 6f 4e 65 74 46 78 34 36 32 20 3d  t { noNetFx462 =
354a0 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20   value; }..     
354b0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
354c0 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
354d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
354e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
354f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35500 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
35510 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
35520 74 65 20 62 6f 6f 6c 20 6e 6f 4e 65 74 46 78 34  te bool noNetFx4
35530 37 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  7;..            
35540 70 75 62 6c 69 63 20 62 6f 6f 6c 20 4e 6f 4e 65  public bool NoNe
35550 74 46 78 34 37 0d 0a 20 20 20 20 20 20 20 20 20  tFx47..         
35560 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
35570 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75        get { retu
35580 72 6e 20 6e 6f 4e 65 74 46 78 34 37 3b 20 7d 0d  rn noNetFx47; }.
35590 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
355a0 20 73 65 74 20 7b 20 6e 6f 4e 65 74 46 78 34 37   set { noNetFx47
355b0 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20   = value; }..   
355c0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
355d0 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
355e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
355f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35600 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35610 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
35620 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69  .            pri
35630 76 61 74 65 20 62 6f 6f 6c 20 6e 6f 4e 65 74 46  vate bool noNetF
35640 78 34 37 31 3b 0d 0a 20 20 20 20 20 20 20 20 20  x471;..         
35650 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 4e     public bool N
35660 6f 4e 65 74 46 78 34 37 31 0d 0a 20 20 20 20 20  oNetFx471..     
35670 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
35680 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20            get { 
35690 72 65 74 75 72 6e 20 6e 6f 4e 65 74 46 78 34 37  return noNetFx47
356a0 31 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  1; }..          
356b0 20 20 20 20 20 20 73 65 74 20 7b 20 6e 6f 4e 65        set { noNe
356c0 74 46 78 34 37 31 20 3d 20 76 61 6c 75 65 3b 20  tFx471 = value; 
356d0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
356e0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
356f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35700 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35710 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35720 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35730 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
35740 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20     private bool 
35750 6e 6f 56 73 32 30 30 35 3b 0d 0a 20 20 20 20 20  noVs2005;..     
35760 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f         public bo
35770 6f 6c 20 4e 6f 56 73 32 30 30 35 0d 0a 20 20 20  ol NoVs2005..   
35780 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
35790 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20              get 
357a0 7b 20 72 65 74 75 72 6e 20 6e 6f 56 73 32 30 30  { return noVs200
357b0 35 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  5; }..          
357c0 20 20 20 20 20 20 73 65 74 20 7b 20 6e 6f 56 73        set { noVs
357d0 32 30 30 35 20 3d 20 76 61 6c 75 65 3b 20 7d 0d  2005 = value; }.
357e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
357f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
35800 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35810 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35820 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35830 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35840 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
35850 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 6e 6f   private bool no
35860 56 73 32 30 30 38 3b 0d 0a 20 20 20 20 20 20 20  Vs2008;..       
35870 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c       public bool
35880 20 4e 6f 56 73 32 30 30 38 0d 0a 20 20 20 20 20   NoVs2008..     
35890 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
358a0 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20            get { 
358b0 72 65 74 75 72 6e 20 6e 6f 56 73 32 30 30 38 3b  return noVs2008;
358c0 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
358d0 20 20 20 20 73 65 74 20 7b 20 6e 6f 56 73 32 30      set { noVs20
358e0 30 38 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20  08 = value; }.. 
358f0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
35900 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
35910 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35920 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35930 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35940 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
35950 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
35960 72 69 76 61 74 65 20 62 6f 6f 6c 20 6e 6f 56 73  rivate bool noVs
35970 32 30 31 30 3b 0d 0a 20 20 20 20 20 20 20 20 20  2010;..         
35980 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 4e     public bool N
35990 6f 56 73 32 30 31 30 0d 0a 20 20 20 20 20 20 20  oVs2010..       
359a0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
359b0 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65          get { re
359c0 74 75 72 6e 20 6e 6f 56 73 32 30 31 30 3b 20 7d  turn noVs2010; }
359d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
359e0 20 20 73 65 74 20 7b 20 6e 6f 56 73 32 30 31 30    set { noVs2010
359f0 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20   = value; }..   
35a00 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
35a10 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
35a20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35a30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35a40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35a50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
35a60 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69  .            pri
35a70 76 61 74 65 20 62 6f 6f 6c 20 6e 6f 56 73 32 30  vate bool noVs20
35a80 31 32 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  12;..           
35a90 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 4e 6f 56   public bool NoV
35aa0 73 32 30 31 32 0d 0a 20 20 20 20 20 20 20 20 20  s2012..         
35ab0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
35ac0 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75        get { retu
35ad0 72 6e 20 6e 6f 56 73 32 30 31 32 3b 20 7d 0d 0a  rn noVs2012; }..
35ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35af0 73 65 74 20 7b 20 6e 6f 56 73 32 30 31 32 20 3d  set { noVs2012 =
35b00 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20   value; }..     
35b10 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
35b20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
35b30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35b40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35b50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35b60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
35b70 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
35b80 74 65 20 62 6f 6f 6c 20 6e 6f 56 73 32 30 31 33  te bool noVs2013
35b90 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ;..            p
35ba0 75 62 6c 69 63 20 62 6f 6f 6c 20 4e 6f 56 73 32  ublic bool NoVs2
35bb0 30 31 33 0d 0a 20 20 20 20 20 20 20 20 20 20 20  013..           
35bc0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
35bd0 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e      get { return
35be0 20 6e 6f 56 73 32 30 31 33 3b 20 7d 0d 0a 20 20   noVs2013; }..  
35bf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65                se
35c00 74 20 7b 20 6e 6f 56 73 32 30 31 33 20 3d 20 76  t { noVs2013 = v
35c10 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20  alue; }..       
35c20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
35c30 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
35c40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35c50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35c60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35c70 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
35c80 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65           private
35c90 20 62 6f 6f 6c 20 6e 6f 56 73 32 30 31 35 3b 0d   bool noVs2015;.
35ca0 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
35cb0 6c 69 63 20 62 6f 6f 6c 20 4e 6f 56 73 32 30 31  lic bool NoVs201
35cc0 35 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  5..            {
35cd0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
35ce0 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 6e    get { return n
35cf0 6f 56 73 32 30 31 35 3b 20 7d 0d 0a 20 20 20 20  oVs2015; }..    
35d00 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20              set 
35d10 7b 20 6e 6f 56 73 32 30 31 35 20 3d 20 76 61 6c  { noVs2015 = val
35d20 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  ue; }..         
35d30 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
35d40 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
35d50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35d60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35d70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35d80 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
35d90 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 62         private b
35da0 6f 6f 6c 20 6e 6f 56 73 32 30 31 37 3b 0d 0a 20  ool noVs2017;.. 
35db0 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
35dc0 63 20 62 6f 6f 6c 20 4e 6f 56 73 32 30 31 37 0d  c bool NoVs2017.
35dd0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
35de0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35df0 67 65 74 20 7b 20 72 65 74 75 72 6e 20 6e 6f 56  get { return noV
35e00 73 32 30 31 37 3b 20 7d 0d 0a 20 20 20 20 20 20  s2017; }..      
35e10 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20            set { 
35e20 6e 6f 56 73 32 30 31 37 20 3d 20 76 61 6c 75 65  noVs2017 = value
35e30 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
35e40 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
35e50 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35e80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35e90 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
35ea0 20 20 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f       private boo
35eb0 6c 20 6e 6f 54 72 61 63 65 3b 0d 0a 20 20 20 20  l noTrace;..    
35ec0 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 62          public b
35ed0 6f 6f 6c 20 4e 6f 54 72 61 63 65 0d 0a 20 20 20  ool NoTrace..   
35ee0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
35ef0 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20              get 
35f00 7b 20 72 65 74 75 72 6e 20 6e 6f 54 72 61 63 65  { return noTrace
35f10 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
35f20 20 20 20 20 20 73 65 74 20 7b 20 6e 6f 54 72 61       set { noTra
35f30 63 65 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20  ce = value; }.. 
35f40 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
35f50 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
35f60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35f70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35f80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35f90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
35fa0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
35fb0 72 69 76 61 74 65 20 62 6f 6f 6c 20 6e 6f 43 6f  rivate bool noCo
35fc0 6e 73 6f 6c 65 3b 0d 0a 20 20 20 20 20 20 20 20  nsole;..        
35fd0 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20      public bool 
35fe0 4e 6f 43 6f 6e 73 6f 6c 65 0d 0a 20 20 20 20 20  NoConsole..     
35ff0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
36000 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20            get { 
36010 72 65 74 75 72 6e 20 6e 6f 43 6f 6e 73 6f 6c 65  return noConsole
36020 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
36030 20 20 20 20 20 73 65 74 20 7b 20 6e 6f 43 6f 6e       set { noCon
36040 73 6f 6c 65 20 3d 20 76 61 6c 75 65 3b 20 7d 0d  sole = value; }.
36050 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
36060 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
36070 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36080 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36090 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
360a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
360b0 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
360c0 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 6e 6f   private bool no
360d0 4c 6f 67 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  Log;..          
360e0 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 4e 6f    public bool No
360f0 4c 6f 67 0d 0a 20 20 20 20 20 20 20 20 20 20 20  Log..           
36100 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
36110 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e      get { return
36120 20 6e 6f 4c 6f 67 3b 20 7d 0d 0a 20 20 20 20 20   noLog; }..     
36130 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b             set {
36140 20 6e 6f 4c 6f 67 20 3d 20 76 61 6c 75 65 3b 20   noLog = value; 
36150 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
36160 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
36170 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36180 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36190 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
361a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
361b0 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
361c0 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20     private bool 
361d0 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 3b 0d  throwOnMissing;.
361e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
361f0 6c 69 63 20 62 6f 6f 6c 20 54 68 72 6f 77 4f 6e  lic bool ThrowOn
36200 4d 69 73 73 69 6e 67 0d 0a 20 20 20 20 20 20 20  Missing..       
36210 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
36220 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65          get { re
36230 74 75 72 6e 20 74 68 72 6f 77 4f 6e 4d 69 73 73  turn throwOnMiss
36240 69 6e 67 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  ing; }..        
36250 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 74 68          set { th
36260 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 20 3d 20 76  rowOnMissing = v
36270 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20  alue; }..       
36280 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
36290 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
362a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
362b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
362c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
362d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
362e0 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65           private
362f0 20 62 6f 6f 6c 20 77 68 61 74 49 66 3b 0d 0a 20   bool whatIf;.. 
36300 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
36310 63 20 62 6f 6f 6c 20 57 68 61 74 49 66 0d 0a 20  c bool WhatIf.. 
36320 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
36330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65                ge
36340 74 20 7b 20 72 65 74 75 72 6e 20 77 68 61 74 49  t { return whatI
36350 66 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  f; }..          
36360 20 20 20 20 20 20 73 65 74 20 7b 20 77 68 61 74        set { what
36370 49 66 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20  If = value; }.. 
36380 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
36390 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
363a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
363b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
363c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
363d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
363e0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
363f0 72 69 76 61 74 65 20 62 6f 6f 6c 20 64 65 62 75  rivate bool debu
36400 67 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  g;..            
36410 70 75 62 6c 69 63 20 62 6f 6f 6c 20 44 65 62 75  public bool Debu
36420 67 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  g..            {
36430 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
36440 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 64    get { return d
36450 65 62 75 67 3b 20 7d 0d 0a 20 20 20 20 20 20 20  ebug; }..       
36460 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 64           set { d
36470 65 62 75 67 20 3d 20 76 61 6c 75 65 3b 20 7d 0d  ebug = value; }.
36480 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
36490 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
364a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
364b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
364c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
364d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
364e0 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
364f0 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 76 65   private bool ve
36500 72 62 6f 73 65 3b 0d 0a 20 20 20 20 20 20 20 20  rbose;..        
36510 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20      public bool 
36520 56 65 72 62 6f 73 65 0d 0a 20 20 20 20 20 20 20  Verbose..       
36530 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
36540 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65          get { re
36550 74 75 72 6e 20 76 65 72 62 6f 73 65 3b 20 7d 0d  turn verbose; }.
36560 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
36570 20 73 65 74 20 7b 20 76 65 72 62 6f 73 65 20 3d   set { verbose =
36580 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20   value; }..     
36590 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
365a0 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
365b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
365c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
365d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
365e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
365f0 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
36600 74 65 20 62 6f 6f 6c 20 63 6f 6e 66 69 72 6d 3b  te bool confirm;
36610 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
36620 62 6c 69 63 20 62 6f 6f 6c 20 43 6f 6e 66 69 72  blic bool Confir
36630 6d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  m..            {
36640 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
36650 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 63    get { return c
36660 6f 6e 66 69 72 6d 3b 20 7d 0d 0a 20 20 20 20 20  onfirm; }..     
36670 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b             set {
36680 20 63 6f 6e 66 69 72 6d 20 3d 20 76 61 6c 75 65   confirm = value
36690 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
366a0 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
366b0 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 20 20 20 20  #endregion..    
366c0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23      }..        #
366d0 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20  endregion....   
366e0 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
366f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36700 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36710 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36720 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
36730 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20          #region 
36740 46 72 61 6d 65 77 6f 72 6b 4c 69 73 74 20 43 6c  FrameworkList Cl
36750 61 73 73 0d 0a 20 20 20 20 20 20 20 20 70 72 69  ass..        pri
36760 76 61 74 65 20 73 65 61 6c 65 64 20 63 6c 61 73  vate sealed clas
36770 73 20 46 72 61 6d 65 77 6f 72 6b 4c 69 73 74 0d  s FrameworkList.
36780 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
36790 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20          #region 
367a0 50 75 62 6c 69 63 20 43 6f 6e 73 74 72 75 63 74  Public Construct
367b0 6f 72 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ors..           
367c0 20 70 75 62 6c 69 63 20 46 72 61 6d 65 77 6f 72   public Framewor
367d0 6b 4c 69 73 74 28 29 0d 0a 20 20 20 20 20 20 20  kList()..       
367e0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
367f0 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f          // do no
36800 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20  thing...        
36810 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
36820 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
36830 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
36840 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36850 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36860 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36870 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36880 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
36890 23 72 65 67 69 6f 6e 20 50 75 62 6c 69 63 20 4d  #region Public M
368a0 65 74 68 6f 64 73 0d 0a 20 20 20 20 20 20 20 20  ethods..        
368b0 20 20 20 20 70 72 69 76 61 74 65 20 4d 6f 63 6b      private Mock
368c0 52 65 67 69 73 74 72 79 4b 65 79 20 72 6f 6f 74  RegistryKey root
368d0 4b 65 79 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  Key;..          
368e0 20 20 70 75 62 6c 69 63 20 4d 6f 63 6b 52 65 67    public MockReg
368f0 69 73 74 72 79 4b 65 79 20 52 6f 6f 74 4b 65 79  istryKey RootKey
36900 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
36910 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
36920 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 72 6f   get { return ro
36930 6f 74 4b 65 79 3b 20 7d 0d 0a 20 20 20 20 20 20  otKey; }..      
36940 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20            set { 
36950 72 6f 6f 74 4b 65 79 20 3d 20 76 61 6c 75 65 3b  rootKey = value;
36960 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
36970 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
36980 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
36990 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
369a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
369b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
369c0 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
369d0 20 20 20 20 70 72 69 76 61 74 65 20 53 74 72 69      private Stri
369e0 6e 67 4c 69 73 74 20 6e 61 6d 65 73 3b 0d 0a 20  ngList names;.. 
369f0 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
36a00 63 20 53 74 72 69 6e 67 4c 69 73 74 20 4e 61 6d  c StringList Nam
36a10 65 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  es..            
36a20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
36a30 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20     get { return 
36a40 6e 61 6d 65 73 3b 20 7d 0d 0a 20 20 20 20 20 20  names; }..      
36a50 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20            set { 
36a60 6e 61 6d 65 73 20 3d 20 76 61 6c 75 65 3b 20 7d  names = value; }
36a70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
36a80 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
36a90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36aa0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36ab0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36ac0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36ad0 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
36ae0 20 20 70 72 69 76 61 74 65 20 56 65 72 73 69 6f    private Versio
36af0 6e 4d 61 70 20 76 65 72 73 69 6f 6e 73 3b 0d 0a  nMap versions;..
36b00 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
36b10 69 63 20 56 65 72 73 69 6f 6e 4d 61 70 20 56 65  ic VersionMap Ve
36b20 72 73 69 6f 6e 73 0d 0a 20 20 20 20 20 20 20 20  rsions..        
36b30 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
36b40 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74         get { ret
36b50 75 72 6e 20 76 65 72 73 69 6f 6e 73 3b 20 7d 0d  urn versions; }.
36b60 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
36b70 20 73 65 74 20 7b 20 76 65 72 73 69 6f 6e 73 20   set { versions 
36b80 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20  = value; }..    
36b90 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
36ba0 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
36bb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36bc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36bd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36be0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
36bf0 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76              priv
36c00 61 74 65 20 53 74 72 69 6e 67 4c 69 73 74 20 70  ate StringList p
36c10 6c 61 74 66 6f 72 6d 4e 61 6d 65 73 3b 0d 0a 20  latformNames;.. 
36c20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
36c30 63 20 53 74 72 69 6e 67 4c 69 73 74 20 50 6c 61  c StringList Pla
36c40 74 66 6f 72 6d 4e 61 6d 65 73 0d 0a 20 20 20 20  tformNames..    
36c50 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
36c60 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b             get {
36c70 20 72 65 74 75 72 6e 20 70 6c 61 74 66 6f 72 6d   return platform
36c80 4e 61 6d 65 73 3b 20 7d 0d 0a 20 20 20 20 20 20  Names; }..      
36c90 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20            set { 
36ca0 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 73 20 3d 20  platformNames = 
36cb0 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20  value; }..      
36cc0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
36cd0 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d       #endregion.
36ce0 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..    
36cf0 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
36d00 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
36d10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36d20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36d30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36d40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36d50 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65  /....        #re
36d60 67 69 6f 6e 20 56 73 4c 69 73 74 20 43 6c 61 73  gion VsList Clas
36d70 73 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61  s..        priva
36d80 74 65 20 73 65 61 6c 65 64 20 63 6c 61 73 73 20  te sealed class 
36d90 56 73 4c 69 73 74 0d 0a 20 20 20 20 20 20 20 20  VsList..        
36da0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  {..            #
36db0 72 65 67 69 6f 6e 20 50 75 62 6c 69 63 20 43 6f  region Public Co
36dc0 6e 73 74 72 75 63 74 6f 72 73 0d 0a 20 20 20 20  nstructors..    
36dd0 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 56          public V
36de0 73 4c 69 73 74 28 29 0d 0a 20 20 20 20 20 20 20  sList()..       
36df0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
36e00 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f          // do no
36e10 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20  thing...        
36e20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
36e30 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
36e40 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
36e50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36e60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36e70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36e80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36e90 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
36ea0 23 72 65 67 69 6f 6e 20 50 75 62 6c 69 63 20 50  #region Public P
36eb0 72 6f 70 65 72 74 69 65 73 0d 0a 20 20 20 20 20  roperties..     
36ec0 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 4d         private M
36ed0 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 72  ockRegistryKey r
36ee0 6f 6f 74 4b 65 79 3b 0d 0a 20 20 20 20 20 20 20  ootKey;..       
36ef0 20 20 20 20 20 70 75 62 6c 69 63 20 4d 6f 63 6b       public Mock
36f00 52 65 67 69 73 74 72 79 4b 65 79 20 52 6f 6f 74  RegistryKey Root
36f10 4b 65 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20  Key..           
36f20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
36f30 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e      get { return
36f40 20 72 6f 6f 74 4b 65 79 3b 20 7d 0d 0a 20 20 20   rootKey; }..   
36f50 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74               set
36f60 20 7b 20 72 6f 6f 74 4b 65 79 20 3d 20 76 61 6c   { rootKey = val
36f70 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  ue; }..         
36f80 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
36f90 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
36fa0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36fb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36fc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36fd0 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
36fe0 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 56         private V
36ff0 65 72 73 69 6f 6e 4c 69 73 74 20 76 65 72 73 69  ersionList versi
37000 6f 6e 73 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ons;..          
37010 20 20 70 75 62 6c 69 63 20 56 65 72 73 69 6f 6e    public Version
37020 4c 69 73 74 20 56 65 72 73 69 6f 6e 73 0d 0a 20  List Versions.. 
37030 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
37040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65                ge
37050 74 20 7b 20 72 65 74 75 72 6e 20 76 65 72 73 69  t { return versi
37060 6f 6e 73 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  ons; }..        
37070 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 76 65          set { ve
37080 72 73 69 6f 6e 73 20 3d 20 76 61 6c 75 65 3b 20  rsions = value; 
37090 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
370a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 65  ..            #e
370b0 6e 64 72 65 67 69 6f 6e 0d 0a 20 20 20 20 20 20  ndregion..      
370c0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e    }..        #en
370d0 64 72 65 67 69 6f 6e 0d 0a 20 20 20 20 20 20 20  dregion..       
370e0 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20   #endregion.... 
370f0 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
37100 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37110 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37120 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37130 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
37140 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f  ..        #regio
37150 6e 20 50 72 69 76 61 74 65 20 43 6f 6e 73 74 61  n Private Consta
37160 6e 74 20 44 61 74 61 0d 0a 20 20 20 20 20 20 20  nt Data..       
37170 20 23 72 65 67 69 6f 6e 20 50 61 63 6b 61 67 65   #region Package
37180 20 26 20 50 72 6f 76 69 64 65 72 20 4e 61 6d 65   & Provider Name
37190 73 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61  s..        priva
371a0 74 65 20 63 6f 6e 73 74 20 73 74 72 69 6e 67 20  te const string 
371b0 43 6f 72 65 46 69 6c 65 4e 61 6d 65 20 3d 20 22  CoreFileName = "
371c0 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69  System.Data.SQLi
371d0 74 65 2e 64 6c 6c 22 3b 0d 0a 20 20 20 20 20 20  te.dll";..      
371e0 20 20 70 72 69 76 61 74 65 20 63 6f 6e 73 74 20    private const 
371f0 73 74 72 69 6e 67 20 4c 69 6e 71 46 69 6c 65 4e  string LinqFileN
37200 61 6d 65 20 3d 20 22 53 79 73 74 65 6d 2e 44 61  ame = "System.Da
37210 74 61 2e 53 51 4c 69 74 65 2e 4c 69 6e 71 2e 64  ta.SQLite.Linq.d
37220 6c 6c 22 3b 0d 0a 20 20 20 20 20 20 20 20 70 72  ll";..        pr
37230 69 76 61 74 65 20 63 6f 6e 73 74 20 73 74 72 69  ivate const stri
37240 6e 67 20 45 66 36 46 69 6c 65 4e 61 6d 65 20 3d  ng Ef6FileName =
37250 20 22 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51   "System.Data.SQ
37260 4c 69 74 65 2e 45 46 36 2e 64 6c 6c 22 3b 0d 0a  Lite.EF6.dll";..
37270 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
37280 63 6f 6e 73 74 20 73 74 72 69 6e 67 20 44 65 73  const string Des
37290 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65 20 3d 20  ignerFileName = 
372a0 22 53 51 4c 69 74 65 2e 44 65 73 69 67 6e 65 72  "SQLite.Designer
372b0 2e 64 6c 6c 22 3b 0d 0a 20 20 20 20 20 20 20 20  .dll";..        
372c0 70 72 69 76 61 74 65 20 63 6f 6e 73 74 20 73 74  private const st
372d0 72 69 6e 67 20 50 72 6f 76 69 64 65 72 4e 61 6d  ring ProviderNam
372e0 65 20 3d 20 22 53 51 4c 69 74 65 20 44 61 74 61  e = "SQLite Data
372f0 20 50 72 6f 76 69 64 65 72 22 3b 0d 0a 20 20 20   Provider";..   
37300 20 20 20 20 20 70 72 69 76 61 74 65 20 63 6f 6e       private con
37310 73 74 20 73 74 72 69 6e 67 20 50 72 6f 6a 65 63  st string Projec
37320 74 4e 61 6d 65 20 3d 20 22 53 79 73 74 65 6d 2e  tName = "System.
37330 44 61 74 61 2e 53 51 4c 69 74 65 22 3b 0d 0a 20  Data.SQLite";.. 
37340 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 63         private c
37350 6f 6e 73 74 20 73 74 72 69 6e 67 20 4c 65 67 61  onst string Lega
37360 63 79 50 72 6f 6a 65 63 74 4e 61 6d 65 20 3d 20  cyProjectName = 
37370 22 53 51 4c 69 74 65 22 3b 0d 0a 0d 0a 20 20 20  "SQLite";....   
37380 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
37390 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
373a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
373b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
373c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
373d0 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
373e0 63 6f 6e 73 74 20 73 74 72 69 6e 67 20 44 65 73  const string Des
373f0 63 72 69 70 74 69 6f 6e 20 3d 0d 0a 20 20 20 20  cription =..    
37400 20 20 20 20 20 20 20 20 22 2e 4e 45 54 20 46 72          ".NET Fr
37410 61 6d 65 77 6f 72 6b 20 44 61 74 61 20 50 72 6f  amework Data Pro
37420 76 69 64 65 72 20 66 6f 72 20 53 51 4c 69 74 65  vider for SQLite
37430 22 3b 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64  ";..        #end
37440 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20  region....      
37450 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
37460 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37470 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37480 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37490 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
374a0 20 20 20 20 20 70 72 69 76 61 74 65 20 63 6f 6e       private con
374b0 73 74 20 73 74 72 69 6e 67 20 44 69 73 70 6c 61  st string Displa
374c0 79 4e 75 6c 6c 20 3d 20 22 3c 6e 75 6c 6c 3e 22  yNull = "<null>"
374d0 3b 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61  ;..        priva
374e0 74 65 20 63 6f 6e 73 74 20 73 74 72 69 6e 67 20  te const string 
374f0 44 69 73 70 6c 61 79 45 6d 70 74 79 20 3d 20 22  DisplayEmpty = "
37500 3c 65 6d 70 74 79 3e 22 3b 0d 0a 0d 0a 20 20 20  <empty>";....   
37510 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
37520 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37530 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37540 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37550 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
37560 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
37570 63 6f 6e 73 74 20 73 74 72 69 6e 67 20 43 4c 52  const string CLR
37580 76 32 49 6d 61 67 65 52 75 6e 74 69 6d 65 56 65  v2ImageRuntimeVe
37590 72 73 69 6f 6e 20 3d 20 22 76 32 2e 30 2e 35 30  rsion = "v2.0.50
375a0 37 32 37 22 3b 0d 0a 20 20 20 20 20 20 20 20 70  727";..        p
375b0 72 69 76 61 74 65 20 63 6f 6e 73 74 20 73 74 72  rivate const str
375c0 69 6e 67 20 43 4c 52 76 34 49 6d 61 67 65 52 75  ing CLRv4ImageRu
375d0 6e 74 69 6d 65 56 65 72 73 69 6f 6e 20 3d 20 22  ntimeVersion = "
375e0 76 34 2e 30 2e 33 30 33 31 39 22 3b 0d 0a 0d 0a  v4.0.30319";....
375f0 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
37600 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37610 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37620 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37630 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
37640 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61  ...        priva
37650 74 65 20 63 6f 6e 73 74 20 73 74 72 69 6e 67 20  te const string 
37660 53 79 73 74 65 6d 45 66 36 41 73 73 65 6d 62 6c  SystemEf6Assembl
37670 79 4e 61 6d 65 20 3d 20 22 45 6e 74 69 74 79 46  yName = "EntityF
37680 72 61 6d 65 77 6f 72 6b 2c 20 22 20 2b 0d 0a 20  ramework, " +.. 
37690 20 20 20 20 20 20 20 20 20 20 20 22 56 65 72 73             "Vers
376a0 69 6f 6e 3d 36 2e 30 2e 30 2e 30 2c 20 43 75 6c  ion=6.0.0.0, Cul
376b0 74 75 72 65 3d 6e 65 75 74 72 61 6c 2c 20 50 75  ture=neutral, Pu
376c0 62 6c 69 63 4b 65 79 54 6f 6b 65 6e 3d 62 37 37  blicKeyToken=b77
376d0 61 35 63 35 36 31 39 33 34 65 30 38 39 22 3b 0d  a5c561934e089";.
376e0 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
376f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37700 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37710 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37720 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37730 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72  //....        pr
37740 69 76 61 74 65 20 63 6f 6e 73 74 20 73 74 72 69  ivate const stri
37750 6e 67 20 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46  ng NameAndValueF
37760 6f 72 6d 61 74 20 3d 20 22 7b 30 7d 3a 20 7b 31  ormat = "{0}: {1
37770 7d 22 3b 0d 0a 20 20 20 20 20 20 20 20 70 72 69  }";..        pri
37780 76 61 74 65 20 63 6f 6e 73 74 20 73 74 72 69 6e  vate const strin
37790 67 20 4c 6f 67 46 69 6c 65 53 75 66 66 69 78 20  g LogFileSuffix 
377a0 3d 20 22 2e 6c 6f 67 22 3b 0d 0a 0d 0a 20 20 20  = ".log";....   
377b0 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
377c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
377d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
377e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
377f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
37800 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
37810 63 6f 6e 73 74 20 73 74 72 69 6e 67 20 56 73 44  const string VsD
37820 65 76 45 6e 76 53 65 74 75 70 46 6f 72 6d 61 74  evEnvSetupFormat
37830 20 3d 20 22 7b 30 7d 3a 20 7b 31 7d 22 3b 0d 0a   = "{0}: {1}";..
37840 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
37850 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37860 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37870 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37880 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37890 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69  /....        pri
378a0 76 61 74 65 20 63 6f 6e 73 74 20 73 74 72 69 6e  vate const strin
378b0 67 20 52 6f 6f 74 4b 65 79 4e 61 6d 65 20 3d 20  g RootKeyName = 
378c0 22 53 6f 66 74 77 61 72 65 22 3b 0d 0a 20 20 20  "Software";..   
378d0 20 20 20 20 20 70 72 69 76 61 74 65 20 63 6f 6e       private con
378e0 73 74 20 73 74 72 69 6e 67 20 57 6f 77 36 34 53  st string Wow64S
378f0 75 62 4b 65 79 4e 61 6d 65 20 3d 20 22 57 6f 77  ubKeyName = "Wow
37900 36 34 33 32 4e 6f 64 65 22 3b 0d 0a 0d 0a 20 20  6432Node";....  
37910 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
37920 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37930 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37940 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37950 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
37960 0a 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20  .        //..   
37970 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 54 68       // NOTE: Th
37980 65 20 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72 6b  e .NET Framework
37990 20 68 61 73 20 62 6f 74 68 20 33 32 2d 62 69 74   has both 32-bit
379a0 20 61 6e 64 20 36 34 2d 62 69 74 20 65 64 69 74   and 64-bit edit
379b0 69 6f 6e 73 2e 0d 0a 20 20 20 20 20 20 20 20 2f  ions...        /
379c0 2f 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61  /..        priva
379d0 74 65 20 73 74 61 74 69 63 20 72 65 61 64 6f 6e  te static readon
379e0 6c 79 20 62 6f 6f 6c 20 4e 65 74 46 78 49 73 33  ly bool NetFxIs3
379f0 32 42 69 74 4f 6e 6c 79 20 3d 20 66 61 6c 73 65  2BitOnly = false
37a00 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ;....        ///
37a10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37a20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37a30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37a40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37a50 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
37a60 2f 2f 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 4e  //..        // N
37a70 4f 54 45 3a 20 46 6f 72 20 6e 6f 77 2c 20 56 69  OTE: For now, Vi
37a80 73 75 61 6c 20 53 74 75 64 69 6f 20 69 73 20 61  sual Studio is a
37a90 6c 77 61 79 73 20 61 20 33 32 2d 62 69 74 20 61  lways a 32-bit a
37aa0 70 70 6c 69 63 61 74 69 6f 6e 2e 0d 0a 20 20 20  pplication...   
37ab0 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
37ac0 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20   private static 
37ad0 72 65 61 64 6f 6e 6c 79 20 62 6f 6f 6c 20 56 73  readonly bool Vs
37ae0 49 73 33 32 42 69 74 4f 6e 6c 79 20 3d 20 74 72  Is32BitOnly = tr
37af0 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f  ue;....        /
37b00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37b10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37b20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37b30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37b40 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
37b50 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63    private static
37b60 20 72 65 61 64 6f 6e 6c 79 20 73 74 72 69 6e 67   readonly string
37b70 20 56 73 49 64 46 6f 72 6d 61 74 20 3d 20 22 42   VsIdFormat = "B
37b80 22 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ";....        //
37b90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37ba0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37bb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37bc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37bd0 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
37be0 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20   private static 
37bf0 72 65 61 64 6f 6e 6c 79 20 73 74 72 69 6e 67 20  readonly string 
37c00 58 50 61 74 68 46 6f 72 41 64 64 45 6c 65 6d 65  XPathForAddEleme
37c10 6e 74 20 3d 0d 0a 20 20 20 20 20 20 20 20 20 20  nt =..          
37c20 20 20 22 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e    "configuration
37c30 2f 73 79 73 74 65 6d 2e 64 61 74 61 2f 44 62 50  /system.data/DbP
37c40 72 6f 76 69 64 65 72 46 61 63 74 6f 72 69 65 73  roviderFactories
37c50 2f 61 64 64 5b 40 69 6e 76 61 72 69 61 6e 74 3d  /add[@invariant=
37c60 5c 22 7b 30 7d 5c 22 5d 22 3b 0d 0a 0d 0a 20 20  \"{0}\"]";....  
37c70 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74        private st
37c80 61 74 69 63 20 72 65 61 64 6f 6e 6c 79 20 73 74  atic readonly st
37c90 72 69 6e 67 20 58 50 61 74 68 46 6f 72 52 65 6d  ring XPathForRem
37ca0 6f 76 65 45 6c 65 6d 65 6e 74 20 3d 0d 0a 20 20  oveElement =..  
37cb0 20 20 20 20 20 20 20 20 20 20 22 63 6f 6e 66 69            "confi
37cc0 67 75 72 61 74 69 6f 6e 2f 73 79 73 74 65 6d 2e  guration/system.
37cd0 64 61 74 61 2f 44 62 50 72 6f 76 69 64 65 72 46  data/DbProviderF
37ce0 61 63 74 6f 72 69 65 73 2f 72 65 6d 6f 76 65 5b  actories/remove[
37cf0 40 69 6e 76 61 72 69 61 6e 74 3d 5c 22 7b 30 7d  @invariant=\"{0}
37d00 5c 22 5d 22 3b 0d 0a 20 20 20 20 20 20 20 20 23  \"]";..        #
37d10 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20  endregion....   
37d20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
37d30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37d40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37d50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37d60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
37d70 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20          #region 
37d80 50 72 69 76 61 74 65 20 53 74 61 74 69 63 20 44  Private Static D
37d90 61 74 61 0d 0a 20 20 20 20 20 20 20 20 23 72 65  ata..        #re
37da0 67 69 6f 6e 20 44 69 61 67 6e 6f 73 74 69 63 73  gion Diagnostics
37db0 20 26 20 4c 6f 67 67 69 6e 67 0d 0a 20 20 20 20   & Logging..    
37dc0 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
37dd0 2f 2f 20 4e 4f 54 45 3a 20 43 61 63 68 65 20 74  // NOTE: Cache t
37de0 68 65 20 63 75 72 72 65 6e 74 20 70 72 6f 63 65  he current proce
37df0 73 73 20 61 6e 64 20 61 73 73 65 6d 62 6c 79 20  ss and assembly 
37e00 61 73 20 74 68 65 79 20 64 6f 20 6e 6f 74 20 63  as they do not c
37e10 68 61 6e 67 65 0d 0a 20 20 20 20 20 20 20 20 2f  hange..        /
37e20 2f 20 20 20 20 20 20 20 61 6e 64 20 6d 61 79 20  /       and may 
37e30 62 65 20 6e 65 65 64 65 64 20 69 6e 20 71 75 69  be needed in qui
37e40 74 65 20 61 20 66 65 77 20 64 69 66 66 65 72 65  te a few differe
37e50 6e 74 20 70 6c 61 63 65 73 2e 0d 0a 20 20 20 20  nt places...    
37e60 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
37e70 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 50  private static P
37e80 72 6f 63 65 73 73 20 74 68 69 73 50 72 6f 63 65  rocess thisProce
37e90 73 73 20 3d 20 50 72 6f 63 65 73 73 2e 47 65 74  ss = Process.Get
37ea0 43 75 72 72 65 6e 74 50 72 6f 63 65 73 73 28 29  CurrentProcess()
37eb0 3b 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61  ;..        priva
37ec0 74 65 20 73 74 61 74 69 63 20 41 73 73 65 6d 62  te static Assemb
37ed0 6c 79 20 74 68 69 73 41 73 73 65 6d 62 6c 79 20  ly thisAssembly 
37ee0 3d 20 41 73 73 65 6d 62 6c 79 2e 47 65 74 45 78  = Assembly.GetEx
37ef0 65 63 75 74 69 6e 67 41 73 73 65 6d 62 6c 79 28  ecutingAssembly(
37f00 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  );....        //
37f10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37f20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37f30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37f40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37f50 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
37f60 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20   //..        // 
37f70 4e 4f 54 45 3a 20 54 68 65 20 74 72 61 63 65 20  NOTE: The trace 
37f80 63 61 74 65 67 6f 72 79 20 69 73 20 74 68 65 20  category is the 
37f90 73 61 6d 65 20 66 6f 72 20 62 6f 74 68 20 74 68  same for both th
37fa0 65 20 64 65 62 75 67 20 61 6e 64 20 74 72 61 63  e debug and trac
37fb0 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 20 20  e..        //   
37fc0 20 20 20 20 63 61 6c 6c 62 61 63 6b 73 2e 0d 0a      callbacks...
37fd0 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
37fe0 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74      private stat
37ff0 69 63 20 73 74 72 69 6e 67 20 74 72 61 63 65 43  ic string traceC
38000 61 74 65 67 6f 72 79 20 3d 20 28 74 68 69 73 41  ategory = (thisA
38010 73 73 65 6d 62 6c 79 20 21 3d 20 6e 75 6c 6c 29  ssembly != null)
38020 20 3f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   ?..            
38030 50 61 74 68 2e 47 65 74 46 69 6c 65 4e 61 6d 65  Path.GetFileName
38040 28 74 68 69 73 41 73 73 65 6d 62 6c 79 2e 4c 6f  (thisAssembly.Lo
38050 63 61 74 69 6f 6e 29 20 3a 20 6e 75 6c 6c 3b 0d  cation) : null;.
38060 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
38070 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
38080 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
38090 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
380a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
380b0 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  //....        //
380c0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54  ..        // NOT
380d0 45 3a 20 53 65 74 20 74 68 65 20 64 65 62 75 67  E: Set the debug
380e0 20 61 6e 64 20 74 72 61 63 65 20 6c 6f 67 67 69   and trace loggi
380f0 6e 67 20 63 61 6c 6c 62 61 63 6b 73 20 75 73 65  ng callbacks use
38100 64 20 62 79 20 74 68 65 0d 0a 20 20 20 20 20 20  d by the..      
38110 20 20 2f 2f 20 20 20 20 20 20 20 61 70 70 6c 69    //       appli
38120 63 61 74 69 6f 6e 2e 0d 0a 20 20 20 20 20 20 20  cation...       
38130 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 70 72 69   //..        pri
38140 76 61 74 65 20 73 74 61 74 69 63 20 54 72 61 63  vate static Trac
38150 65 43 61 6c 6c 62 61 63 6b 20 64 65 62 75 67 43  eCallback debugC
38160 61 6c 6c 62 61 63 6b 20 3d 20 41 70 70 44 65 62  allback = AppDeb
38170 75 67 3b 0d 0a 20 20 20 20 20 20 20 20 70 72 69  ug;..        pri
38180 76 61 74 65 20 73 74 61 74 69 63 20 54 72 61 63  vate static Trac
38190 65 43 61 6c 6c 62 61 63 6b 20 74 72 61 63 65 43  eCallback traceC
381a0 61 6c 6c 62 61 63 6b 20 3d 20 41 70 70 54 72 61  allback = AppTra
381b0 63 65 3b 0d 0a 20 20 20 20 20 20 20 20 23 65 6e  ce;..        #en
381c0 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20  dregion....     
381d0 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
381e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
381f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
38200 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
38210 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
38220 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 53 79        #region Sy
38230 73 74 65 6d 20 44 69 72 65 63 74 6f 72 79 0d 0a  stem Directory..
38240 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
38250 73 74 61 74 69 63 20 73 74 72 69 6e 67 20 73 79  static string sy
38260 73 74 65 6d 44 69 72 65 63 74 6f 72 79 20 3d 20  stemDirectory = 
38270 6e 75 6c 6c 3b 0d 0a 0d 0a 23 69 66 20 57 49 4e  null;....#if WIN
38280 44 4f 57 53 0d 0a 20 20 20 20 20 20 20 20 70 72  DOWS..        pr
38290 69 76 61 74 65 20 73 74 61 74 69 63 20 73 74 72  ivate static str
382a0 69 6e 67 20 73 79 73 74 65 6d 44 69 72 65 63 74  ing systemDirect
382b0 6f 72 79 57 6f 77 36 34 20 3d 20 6e 75 6c 6c 3b  oryWow64 = null;
382c0 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20  ..#endif..      
382d0 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a    #endregion....
382e0 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
382f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
38300 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
38310 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
38320 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
38330 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69  ...        #regi
38340 6f 6e 20 52 65 67 69 73 74 72 79 20 53 74 61 74  on Registry Stat
38350 69 73 74 69 63 73 0d 0a 20 20 20 20 20 20 20 20  istics..        
38360 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 69  private static i
38370 6e 74 20 66 69 6c 65 73 43 72 65 61 74 65 64 20  nt filesCreated 
38380 3d 20 30 3b 0d 0a 20 20 20 20 20 20 20 20 70 72  = 0;..        pr
38390 69 76 61 74 65 20 73 74 61 74 69 63 20 69 6e 74  ivate static int
383a0 20 66 69 6c 65 73 4d 6f 64 69 66 69 65 64 20 3d   filesModified =
383b0 20 30 3b 0d 0a 20 20 20 20 20 20 20 20 70 72 69   0;..        pri
383c0 76 61 74 65 20 73 74 61 74 69 63 20 69 6e 74 20  vate static int 
383d0 66 69 6c 65 73 44 65 6c 65 74 65 64 20 3d 20 30  filesDeleted = 0
383e0 3b 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72  ;..        #endr
383f0 65 67 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20 23  egion..        #
38400 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20  endregion....   
38410 20 20 20 20 20 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 2f 0d 0a 0d 0a  ////////////....
38460 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20          #region 
38470 54 72 61 63 65 20 48 61 6e 64 6c 69 6e 67 0d 0a  Trace Handling..
38480 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
38490 73 74 61 74 69 63 20 73 74 72 69 6e 67 20 47 65  static string Ge
384a0 74 4c 6f 67 46 69 6c 65 4e 61 6d 65 28 0d 0a 20  tLogFileName(.. 
384b0 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
384c0 67 20 74 79 70 65 4e 61 6d 65 0d 0a 20 20 20 20  g typeName..    
384d0 20 20 20 20 20 20 20 20 29 20 2f 2a 20 74 68 72          ) /* thr
384e0 6f 77 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 7b  ow */..        {
384f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74  ..            st
38500 72 69 6e 67 20 66 69 6c 65 4e 61 6d 65 20 3d 20  ring fileName = 
38510 50 61 74 68 2e 47 65 74 54 65 6d 70 46 69 6c 65  Path.GetTempFile
38520 4e 61 6d 65 28 29 3b 0d 0a 20 20 20 20 20 20 20  Name();..       
38530 20 20 20 20 20 73 74 72 69 6e 67 20 64 69 72 65       string dire
38540 63 74 6f 72 79 20 3d 20 50 61 74 68 2e 47 65 74  ctory = Path.Get
38550 44 69 72 65 63 74 6f 72 79 4e 61 6d 65 28 66 69  DirectoryName(fi
38560 6c 65 4e 61 6d 65 29 3b 0d 0a 20 20 20 20 20 20  leName);..      
38570 20 20 20 20 20 20 73 74 72 69 6e 67 20 66 69 6c        string fil
38580 65 4e 61 6d 65 4f 6e 6c 79 20 3d 20 50 61 74 68  eNameOnly = Path
38590 2e 47 65 74 46 69 6c 65 4e 61 6d 65 57 69 74 68  .GetFileNameWith
385a0 6f 75 74 45 78 74 65 6e 73 69 6f 6e 28 66 69 6c  outExtension(fil
385b0 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20  eName);....     
385c0 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6e 65         string ne
385d0 77 46 69 6c 65 4e 61 6d 65 20 3d 20 50 61 74 68  wFileName = Path
385e0 2e 43 6f 6d 62 69 6e 65 28 64 69 72 65 63 74 6f  .Combine(directo
385f0 72 79 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ry, String.Forma
38600 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
38610 20 20 20 20 22 7b 30 7d 7b 31 7d 7b 32 7d 22 2c      "{0}{1}{2}",
38620 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 2c 20   traceCategory, 
38630 21 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72  !String.IsNullOr
38640 45 6d 70 74 79 28 74 79 70 65 4e 61 6d 65 29 20  Empty(typeName) 
38650 3f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ?..             
38660 20 20 20 20 20 20 20 22 2e 22 20 2b 20 74 79 70         "." + typ
38670 65 4e 61 6d 65 20 3a 20 53 74 72 69 6e 67 2e 45  eName : String.E
38680 6d 70 74 79 2c 20 22 2e 22 20 2b 20 66 69 6c 65  mpty, "." + file
38690 4e 61 6d 65 4f 6e 6c 79 20 2b 0d 0a 20 20 20 20  NameOnly +..    
386a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
386b0 4c 6f 67 46 69 6c 65 53 75 66 66 69 78 29 29 3b  LogFileSuffix));
386c0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
386d0 46 69 6c 65 2e 4d 6f 76 65 28 66 69 6c 65 4e 61  File.Move(fileNa
386e0 6d 65 2c 20 6e 65 77 46 69 6c 65 4e 61 6d 65 29  me, newFileName)
386f0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
38700 20 72 65 74 75 72 6e 20 6e 65 77 46 69 6c 65 4e   return newFileN
38710 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  ame;..        }.
38720 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
38730 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
38740 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
38750 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
38760 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
38770 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72  //....        pr
38780 69 76 61 74 65 20 73 74 61 74 69 63 20 76 6f 69  ivate static voi
38790 64 20 41 70 70 44 65 62 75 67 28 0d 0a 20 20 20  d AppDebug(..   
387a0 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
387b0 6d 65 73 73 61 67 65 2c 0d 0a 20 20 20 20 20 20  message,..      
387c0 20 20 20 20 20 20 73 74 72 69 6e 67 20 63 61 74        string cat
387d0 65 67 6f 72 79 0d 0a 20 20 20 20 20 20 20 20 20  egory..         
387e0 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d     )..        {.
387f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61  .            Tra
38800 63 65 4f 70 73 2e 44 65 62 75 67 43 6f 72 65 28  ceOps.DebugCore(
38810 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
38820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38830 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 46 6f  TraceOps.DebugFo
38840 72 6d 61 74 2c 20 54 72 61 63 65 4f 70 73 2e 4e  rmat, TraceOps.N
38850 65 78 74 44 65 62 75 67 49 64 28 29 2c 0d 0a 20  extDebugId(),.. 
38860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
38870 72 61 63 65 4f 70 73 2e 54 69 6