<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=us-ascii">
<meta name="ProgId" content="Word.Document">
<meta name="Generator" content="Microsoft Word 15">
<meta name="Originator" content="Microsoft Word 15">
<link rel="File-List" href="cid:filelist.xml@01D5B414.B2F42CF0"><link rel="Edit-Time-Data" href="cid:editdata.mso"><!--[if !mso]><style>v\:* {behavior:url(#default#VML);}
o\:* {behavior:url(#default#VML);}
w\:* {behavior:url(#default#VML);}
.shape {behavior:url(#default#VML);}
</style><![endif]--><!--[if gte mso 9]><xml>
<o:OfficeDocumentSettings>
<o:AllowPNG/>
</o:OfficeDocumentSettings>
</xml><![endif]--><!--[if gte mso 9]><xml>
<w:WordDocument>
<w:Zoom>90</w:Zoom>
<w:SpellingState>Clean</w:SpellingState>
<w:DocumentKind>DocumentEmail</w:DocumentKind>
<w:TrackMoves/>
<w:TrackFormatting/>
<w:EnvelopeVis/>
<w:ValidateAgainstSchemas/>
<w:SaveIfXMLInvalid>false</w:SaveIfXMLInvalid>
<w:IgnoreMixedContent>false</w:IgnoreMixedContent>
<w:AlwaysShowPlaceholderText>false</w:AlwaysShowPlaceholderText>
<w:DoNotPromoteQF/>
<w:LidThemeOther>EN-US</w:LidThemeOther>
<w:LidThemeAsian>X-NONE</w:LidThemeAsian>
<w:LidThemeComplexScript>X-NONE</w:LidThemeComplexScript>
<w:Compatibility>
<w:DoNotExpandShiftReturn/>
<w:BreakWrappedTables/>
<w:SplitPgBreakAndParaMark/>
<w:EnableOpenTypeKerning/>
</w:Compatibility>
<w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
<m:mathPr>
<m:mathFont m:val="Cambria Math"/>
<m:brkBin m:val="before"/>
<m:brkBinSub m:val="--"/>
<m:smallFrac m:val="off"/>
<m:dispDef/>
<m:lMargin m:val="0"/>
<m:rMargin m:val="0"/>
<m:defJc m:val="centerGroup"/>
<m:wrapIndent m:val="1440"/>
<m:intLim m:val="subSup"/>
<m:naryLim m:val="undOvr"/>
</m:mathPr></w:WordDocument>
</xml><![endif]--><!--[if gte mso 9]><xml>
<w:LatentStyles DefLockedState="false" DefUnhideWhenUsed="false" DefSemiHidden="false" DefQFormat="false" DefPriority="99" LatentStyleCount="375">
<w:LsdException Locked="false" Priority="0" QFormat="true" Name="Normal"/>
<w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 1"/>
<w:LsdException Locked="false" Priority="9" SemiHidden="true" UnhideWhenUsed="true" QFormat="true" Name="heading 2"/>
<w:LsdException Locked="false" Priority="9" SemiHidden="true" UnhideWhenUsed="true" QFormat="true" Name="heading 3"/>
<w:LsdException Locked="false" Priority="9" SemiHidden="true" UnhideWhenUsed="true" QFormat="true" Name="heading 4"/>
<w:LsdException Locked="false" Priority="9" SemiHidden="true" UnhideWhenUsed="true" QFormat="true" Name="heading 5"/>
<w:LsdException Locked="false" Priority="9" SemiHidden="true" UnhideWhenUsed="true" QFormat="true" Name="heading 6"/>
<w:LsdException Locked="false" Priority="9" SemiHidden="true" UnhideWhenUsed="true" QFormat="true" Name="heading 7"/>
<w:LsdException Locked="false" Priority="9" SemiHidden="true" UnhideWhenUsed="true" QFormat="true" Name="heading 8"/>
<w:LsdException Locked="false" Priority="9" SemiHidden="true" UnhideWhenUsed="true" QFormat="true" Name="heading 9"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="index 1"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="index 2"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="index 3"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="index 4"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="index 5"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="index 6"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="index 7"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="index 8"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="index 9"/>
<w:LsdException Locked="false" Priority="39" SemiHidden="true" UnhideWhenUsed="true" Name="toc 1"/>
<w:LsdException Locked="false" Priority="39" SemiHidden="true" UnhideWhenUsed="true" Name="toc 2"/>
<w:LsdException Locked="false" Priority="39" SemiHidden="true" UnhideWhenUsed="true" Name="toc 3"/>
<w:LsdException Locked="false" Priority="39" SemiHidden="true" UnhideWhenUsed="true" Name="toc 4"/>
<w:LsdException Locked="false" Priority="39" SemiHidden="true" UnhideWhenUsed="true" Name="toc 5"/>
<w:LsdException Locked="false" Priority="39" SemiHidden="true" UnhideWhenUsed="true" Name="toc 6"/>
<w:LsdException Locked="false" Priority="39" SemiHidden="true" UnhideWhenUsed="true" Name="toc 7"/>
<w:LsdException Locked="false" Priority="39" SemiHidden="true" UnhideWhenUsed="true" Name="toc 8"/>
<w:LsdException Locked="false" Priority="39" SemiHidden="true" UnhideWhenUsed="true" Name="toc 9"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Normal Indent"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="footnote text"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="annotation text"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="header"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="footer"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="index heading"/>
<w:LsdException Locked="false" Priority="35" SemiHidden="true" UnhideWhenUsed="true" QFormat="true" Name="caption"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="table of figures"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="envelope address"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="envelope return"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="footnote reference"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="annotation reference"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="line number"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="page number"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="endnote reference"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="endnote text"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="table of authorities"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="macro"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="toa heading"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="List"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="List Bullet"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="List Number"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="List 2"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="List 3"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="List 4"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="List 5"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="List Bullet 2"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="List Bullet 3"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="List Bullet 4"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="List Bullet 5"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="List Number 2"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="List Number 3"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="List Number 4"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="List Number 5"/>
<w:LsdException Locked="false" Priority="10" QFormat="true" Name="Title"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Closing"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Signature"/>
<w:LsdException Locked="false" Priority="1" SemiHidden="true" UnhideWhenUsed="true" Name="Default Paragraph Font"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Body Text"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Body Text Indent"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="List Continue"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="List Continue 2"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="List Continue 3"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="List Continue 4"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="List Continue 5"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Message Header"/>
<w:LsdException Locked="false" Priority="11" QFormat="true" Name="Subtitle"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Salutation"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Date"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Body Text First Indent"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Body Text First Indent 2"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Note Heading"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Body Text 2"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Body Text 3"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Body Text Indent 2"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Body Text Indent 3"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Block Text"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Hyperlink"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="FollowedHyperlink"/>
<w:LsdException Locked="false" Priority="22" QFormat="true" Name="Strong"/>
<w:LsdException Locked="false" Priority="20" QFormat="true" Name="Emphasis"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Document Map"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Plain Text"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="E-mail Signature"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="HTML Top of Form"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="HTML Bottom of Form"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Normal (Web)"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="HTML Acronym"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="HTML Address"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="HTML Cite"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="HTML Code"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="HTML Definition"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="HTML Keyboard"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="HTML Preformatted"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="HTML Sample"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="HTML Typewriter"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="HTML Variable"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Normal Table"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="annotation subject"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="No List"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Outline List 1"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Outline List 2"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Outline List 3"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Table Simple 1"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Table Simple 2"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Table Simple 3"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Table Classic 1"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Table Classic 2"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Table Classic 3"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Table Classic 4"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Table Colorful 1"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Table Colorful 2"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Table Colorful 3"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Table Columns 1"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Table Columns 2"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Table Columns 3"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Table Columns 4"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Table Columns 5"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Table Grid 1"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Table Grid 2"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Table Grid 3"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Table Grid 4"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Table Grid 5"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Table Grid 6"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Table Grid 7"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Table Grid 8"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Table List 1"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Table List 2"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Table List 3"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Table List 4"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Table List 5"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Table List 6"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Table List 7"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Table List 8"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Table 3D effects 1"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Table 3D effects 2"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Table 3D effects 3"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Table Contemporary"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Table Elegant"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Table Professional"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Table Subtle 1"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Table Subtle 2"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Table Web 1"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Table Web 2"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Table Web 3"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Balloon Text"/>
<w:LsdException Locked="false" Priority="39" Name="Table Grid"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Table Theme"/>
<w:LsdException Locked="false" SemiHidden="true" Name="Placeholder Text"/>
<w:LsdException Locked="false" Priority="1" QFormat="true" Name="No Spacing"/>
<w:LsdException Locked="false" Priority="60" Name="Light Shading"/>
<w:LsdException Locked="false" Priority="61" Name="Light List"/>
<w:LsdException Locked="false" Priority="62" Name="Light Grid"/>
<w:LsdException Locked="false" Priority="63" Name="Medium Shading 1"/>
<w:LsdException Locked="false" Priority="64" Name="Medium Shading 2"/>
<w:LsdException Locked="false" Priority="65" Name="Medium List 1"/>
<w:LsdException Locked="false" Priority="66" Name="Medium List 2"/>
<w:LsdException Locked="false" Priority="67" Name="Medium Grid 1"/>
<w:LsdException Locked="false" Priority="68" Name="Medium Grid 2"/>
<w:LsdException Locked="false" Priority="69" Name="Medium Grid 3"/>
<w:LsdException Locked="false" Priority="70" Name="Dark List"/>
<w:LsdException Locked="false" Priority="71" Name="Colorful Shading"/>
<w:LsdException Locked="false" Priority="72" Name="Colorful List"/>
<w:LsdException Locked="false" Priority="73" Name="Colorful Grid"/>
<w:LsdException Locked="false" Priority="60" Name="Light Shading Accent 1"/>
<w:LsdException Locked="false" Priority="61" Name="Light List Accent 1"/>
<w:LsdException Locked="false" Priority="62" Name="Light Grid Accent 1"/>
<w:LsdException Locked="false" Priority="63" Name="Medium Shading 1 Accent 1"/>
<w:LsdException Locked="false" Priority="64" Name="Medium Shading 2 Accent 1"/>
<w:LsdException Locked="false" Priority="65" Name="Medium List 1 Accent 1"/>
<w:LsdException Locked="false" SemiHidden="true" Name="Revision"/>
<w:LsdException Locked="false" Priority="34" QFormat="true" Name="List Paragraph"/>
<w:LsdException Locked="false" Priority="29" QFormat="true" Name="Quote"/>
<w:LsdException Locked="false" Priority="30" QFormat="true" Name="Intense Quote"/>
<w:LsdException Locked="false" Priority="66" Name="Medium List 2 Accent 1"/>
<w:LsdException Locked="false" Priority="67" Name="Medium Grid 1 Accent 1"/>
<w:LsdException Locked="false" Priority="68" Name="Medium Grid 2 Accent 1"/>
<w:LsdException Locked="false" Priority="69" Name="Medium Grid 3 Accent 1"/>
<w:LsdException Locked="false" Priority="70" Name="Dark List Accent 1"/>
<w:LsdException Locked="false" Priority="71" Name="Colorful Shading Accent 1"/>
<w:LsdException Locked="false" Priority="72" Name="Colorful List Accent 1"/>
<w:LsdException Locked="false" Priority="73" Name="Colorful Grid Accent 1"/>
<w:LsdException Locked="false" Priority="60" Name="Light Shading Accent 2"/>
<w:LsdException Locked="false" Priority="61" Name="Light List Accent 2"/>
<w:LsdException Locked="false" Priority="62" Name="Light Grid Accent 2"/>
<w:LsdException Locked="false" Priority="63" Name="Medium Shading 1 Accent 2"/>
<w:LsdException Locked="false" Priority="64" Name="Medium Shading 2 Accent 2"/>
<w:LsdException Locked="false" Priority="65" Name="Medium List 1 Accent 2"/>
<w:LsdException Locked="false" Priority="66" Name="Medium List 2 Accent 2"/>
<w:LsdException Locked="false" Priority="67" Name="Medium Grid 1 Accent 2"/>
<w:LsdException Locked="false" Priority="68" Name="Medium Grid 2 Accent 2"/>
<w:LsdException Locked="false" Priority="69" Name="Medium Grid 3 Accent 2"/>
<w:LsdException Locked="false" Priority="70" Name="Dark List Accent 2"/>
<w:LsdException Locked="false" Priority="71" Name="Colorful Shading Accent 2"/>
<w:LsdException Locked="false" Priority="72" Name="Colorful List Accent 2"/>
<w:LsdException Locked="false" Priority="73" Name="Colorful Grid Accent 2"/>
<w:LsdException Locked="false" Priority="60" Name="Light Shading Accent 3"/>
<w:LsdException Locked="false" Priority="61" Name="Light List Accent 3"/>
<w:LsdException Locked="false" Priority="62" Name="Light Grid Accent 3"/>
<w:LsdException Locked="false" Priority="63" Name="Medium Shading 1 Accent 3"/>
<w:LsdException Locked="false" Priority="64" Name="Medium Shading 2 Accent 3"/>
<w:LsdException Locked="false" Priority="65" Name="Medium List 1 Accent 3"/>
<w:LsdException Locked="false" Priority="66" Name="Medium List 2 Accent 3"/>
<w:LsdException Locked="false" Priority="67" Name="Medium Grid 1 Accent 3"/>
<w:LsdException Locked="false" Priority="68" Name="Medium Grid 2 Accent 3"/>
<w:LsdException Locked="false" Priority="69" Name="Medium Grid 3 Accent 3"/>
<w:LsdException Locked="false" Priority="70" Name="Dark List Accent 3"/>
<w:LsdException Locked="false" Priority="71" Name="Colorful Shading Accent 3"/>
<w:LsdException Locked="false" Priority="72" Name="Colorful List Accent 3"/>
<w:LsdException Locked="false" Priority="73" Name="Colorful Grid Accent 3"/>
<w:LsdException Locked="false" Priority="60" Name="Light Shading Accent 4"/>
<w:LsdException Locked="false" Priority="61" Name="Light List Accent 4"/>
<w:LsdException Locked="false" Priority="62" Name="Light Grid Accent 4"/>
<w:LsdException Locked="false" Priority="63" Name="Medium Shading 1 Accent 4"/>
<w:LsdException Locked="false" Priority="64" Name="Medium Shading 2 Accent 4"/>
<w:LsdException Locked="false" Priority="65" Name="Medium List 1 Accent 4"/>
<w:LsdException Locked="false" Priority="66" Name="Medium List 2 Accent 4"/>
<w:LsdException Locked="false" Priority="67" Name="Medium Grid 1 Accent 4"/>
<w:LsdException Locked="false" Priority="68" Name="Medium Grid 2 Accent 4"/>
<w:LsdException Locked="false" Priority="69" Name="Medium Grid 3 Accent 4"/>
<w:LsdException Locked="false" Priority="70" Name="Dark List Accent 4"/>
<w:LsdException Locked="false" Priority="71" Name="Colorful Shading Accent 4"/>
<w:LsdException Locked="false" Priority="72" Name="Colorful List Accent 4"/>
<w:LsdException Locked="false" Priority="73" Name="Colorful Grid Accent 4"/>
<w:LsdException Locked="false" Priority="60" Name="Light Shading Accent 5"/>
<w:LsdException Locked="false" Priority="61" Name="Light List Accent 5"/>
<w:LsdException Locked="false" Priority="62" Name="Light Grid Accent 5"/>
<w:LsdException Locked="false" Priority="63" Name="Medium Shading 1 Accent 5"/>
<w:LsdException Locked="false" Priority="64" Name="Medium Shading 2 Accent 5"/>
<w:LsdException Locked="false" Priority="65" Name="Medium List 1 Accent 5"/>
<w:LsdException Locked="false" Priority="66" Name="Medium List 2 Accent 5"/>
<w:LsdException Locked="false" Priority="67" Name="Medium Grid 1 Accent 5"/>
<w:LsdException Locked="false" Priority="68" Name="Medium Grid 2 Accent 5"/>
<w:LsdException Locked="false" Priority="69" Name="Medium Grid 3 Accent 5"/>
<w:LsdException Locked="false" Priority="70" Name="Dark List Accent 5"/>
<w:LsdException Locked="false" Priority="71" Name="Colorful Shading Accent 5"/>
<w:LsdException Locked="false" Priority="72" Name="Colorful List Accent 5"/>
<w:LsdException Locked="false" Priority="73" Name="Colorful Grid Accent 5"/>
<w:LsdException Locked="false" Priority="60" Name="Light Shading Accent 6"/>
<w:LsdException Locked="false" Priority="61" Name="Light List Accent 6"/>
<w:LsdException Locked="false" Priority="62" Name="Light Grid Accent 6"/>
<w:LsdException Locked="false" Priority="63" Name="Medium Shading 1 Accent 6"/>
<w:LsdException Locked="false" Priority="64" Name="Medium Shading 2 Accent 6"/>
<w:LsdException Locked="false" Priority="65" Name="Medium List 1 Accent 6"/>
<w:LsdException Locked="false" Priority="66" Name="Medium List 2 Accent 6"/>
<w:LsdException Locked="false" Priority="67" Name="Medium Grid 1 Accent 6"/>
<w:LsdException Locked="false" Priority="68" Name="Medium Grid 2 Accent 6"/>
<w:LsdException Locked="false" Priority="69" Name="Medium Grid 3 Accent 6"/>
<w:LsdException Locked="false" Priority="70" Name="Dark List Accent 6"/>
<w:LsdException Locked="false" Priority="71" Name="Colorful Shading Accent 6"/>
<w:LsdException Locked="false" Priority="72" Name="Colorful List Accent 6"/>
<w:LsdException Locked="false" Priority="73" Name="Colorful Grid Accent 6"/>
<w:LsdException Locked="false" Priority="19" QFormat="true" Name="Subtle Emphasis"/>
<w:LsdException Locked="false" Priority="21" QFormat="true" Name="Intense Emphasis"/>
<w:LsdException Locked="false" Priority="31" QFormat="true" Name="Subtle Reference"/>
<w:LsdException Locked="false" Priority="32" QFormat="true" Name="Intense Reference"/>
<w:LsdException Locked="false" Priority="33" QFormat="true" Name="Book Title"/>
<w:LsdException Locked="false" Priority="37" SemiHidden="true" UnhideWhenUsed="true" Name="Bibliography"/>
<w:LsdException Locked="false" Priority="39" SemiHidden="true" UnhideWhenUsed="true" QFormat="true" Name="TOC Heading"/>
<w:LsdException Locked="false" Priority="41" Name="Plain Table 1"/>
<w:LsdException Locked="false" Priority="42" Name="Plain Table 2"/>
<w:LsdException Locked="false" Priority="43" Name="Plain Table 3"/>
<w:LsdException Locked="false" Priority="44" Name="Plain Table 4"/>
<w:LsdException Locked="false" Priority="45" Name="Plain Table 5"/>
<w:LsdException Locked="false" Priority="40" Name="Grid Table Light"/>
<w:LsdException Locked="false" Priority="46" Name="Grid Table 1 Light"/>
<w:LsdException Locked="false" Priority="47" Name="Grid Table 2"/>
<w:LsdException Locked="false" Priority="48" Name="Grid Table 3"/>
<w:LsdException Locked="false" Priority="49" Name="Grid Table 4"/>
<w:LsdException Locked="false" Priority="50" Name="Grid Table 5 Dark"/>
<w:LsdException Locked="false" Priority="51" Name="Grid Table 6 Colorful"/>
<w:LsdException Locked="false" Priority="52" Name="Grid Table 7 Colorful"/>
<w:LsdException Locked="false" Priority="46" Name="Grid Table 1 Light Accent 1"/>
<w:LsdException Locked="false" Priority="47" Name="Grid Table 2 Accent 1"/>
<w:LsdException Locked="false" Priority="48" Name="Grid Table 3 Accent 1"/>
<w:LsdException Locked="false" Priority="49" Name="Grid Table 4 Accent 1"/>
<w:LsdException Locked="false" Priority="50" Name="Grid Table 5 Dark Accent 1"/>
<w:LsdException Locked="false" Priority="51" Name="Grid Table 6 Colorful Accent 1"/>
<w:LsdException Locked="false" Priority="52" Name="Grid Table 7 Colorful Accent 1"/>
<w:LsdException Locked="false" Priority="46" Name="Grid Table 1 Light Accent 2"/>
<w:LsdException Locked="false" Priority="47" Name="Grid Table 2 Accent 2"/>
<w:LsdException Locked="false" Priority="48" Name="Grid Table 3 Accent 2"/>
<w:LsdException Locked="false" Priority="49" Name="Grid Table 4 Accent 2"/>
<w:LsdException Locked="false" Priority="50" Name="Grid Table 5 Dark Accent 2"/>
<w:LsdException Locked="false" Priority="51" Name="Grid Table 6 Colorful Accent 2"/>
<w:LsdException Locked="false" Priority="52" Name="Grid Table 7 Colorful Accent 2"/>
<w:LsdException Locked="false" Priority="46" Name="Grid Table 1 Light Accent 3"/>
<w:LsdException Locked="false" Priority="47" Name="Grid Table 2 Accent 3"/>
<w:LsdException Locked="false" Priority="48" Name="Grid Table 3 Accent 3"/>
<w:LsdException Locked="false" Priority="49" Name="Grid Table 4 Accent 3"/>
<w:LsdException Locked="false" Priority="50" Name="Grid Table 5 Dark Accent 3"/>
<w:LsdException Locked="false" Priority="51" Name="Grid Table 6 Colorful Accent 3"/>
<w:LsdException Locked="false" Priority="52" Name="Grid Table 7 Colorful Accent 3"/>
<w:LsdException Locked="false" Priority="46" Name="Grid Table 1 Light Accent 4"/>
<w:LsdException Locked="false" Priority="47" Name="Grid Table 2 Accent 4"/>
<w:LsdException Locked="false" Priority="48" Name="Grid Table 3 Accent 4"/>
<w:LsdException Locked="false" Priority="49" Name="Grid Table 4 Accent 4"/>
<w:LsdException Locked="false" Priority="50" Name="Grid Table 5 Dark Accent 4"/>
<w:LsdException Locked="false" Priority="51" Name="Grid Table 6 Colorful Accent 4"/>
<w:LsdException Locked="false" Priority="52" Name="Grid Table 7 Colorful Accent 4"/>
<w:LsdException Locked="false" Priority="46" Name="Grid Table 1 Light Accent 5"/>
<w:LsdException Locked="false" Priority="47" Name="Grid Table 2 Accent 5"/>
<w:LsdException Locked="false" Priority="48" Name="Grid Table 3 Accent 5"/>
<w:LsdException Locked="false" Priority="49" Name="Grid Table 4 Accent 5"/>
<w:LsdException Locked="false" Priority="50" Name="Grid Table 5 Dark Accent 5"/>
<w:LsdException Locked="false" Priority="51" Name="Grid Table 6 Colorful Accent 5"/>
<w:LsdException Locked="false" Priority="52" Name="Grid Table 7 Colorful Accent 5"/>
<w:LsdException Locked="false" Priority="46" Name="Grid Table 1 Light Accent 6"/>
<w:LsdException Locked="false" Priority="47" Name="Grid Table 2 Accent 6"/>
<w:LsdException Locked="false" Priority="48" Name="Grid Table 3 Accent 6"/>
<w:LsdException Locked="false" Priority="49" Name="Grid Table 4 Accent 6"/>
<w:LsdException Locked="false" Priority="50" Name="Grid Table 5 Dark Accent 6"/>
<w:LsdException Locked="false" Priority="51" Name="Grid Table 6 Colorful Accent 6"/>
<w:LsdException Locked="false" Priority="52" Name="Grid Table 7 Colorful Accent 6"/>
<w:LsdException Locked="false" Priority="46" Name="List Table 1 Light"/>
<w:LsdException Locked="false" Priority="47" Name="List Table 2"/>
<w:LsdException Locked="false" Priority="48" Name="List Table 3"/>
<w:LsdException Locked="false" Priority="49" Name="List Table 4"/>
<w:LsdException Locked="false" Priority="50" Name="List Table 5 Dark"/>
<w:LsdException Locked="false" Priority="51" Name="List Table 6 Colorful"/>
<w:LsdException Locked="false" Priority="52" Name="List Table 7 Colorful"/>
<w:LsdException Locked="false" Priority="46" Name="List Table 1 Light Accent 1"/>
<w:LsdException Locked="false" Priority="47" Name="List Table 2 Accent 1"/>
<w:LsdException Locked="false" Priority="48" Name="List Table 3 Accent 1"/>
<w:LsdException Locked="false" Priority="49" Name="List Table 4 Accent 1"/>
<w:LsdException Locked="false" Priority="50" Name="List Table 5 Dark Accent 1"/>
<w:LsdException Locked="false" Priority="51" Name="List Table 6 Colorful Accent 1"/>
<w:LsdException Locked="false" Priority="52" Name="List Table 7 Colorful Accent 1"/>
<w:LsdException Locked="false" Priority="46" Name="List Table 1 Light Accent 2"/>
<w:LsdException Locked="false" Priority="47" Name="List Table 2 Accent 2"/>
<w:LsdException Locked="false" Priority="48" Name="List Table 3 Accent 2"/>
<w:LsdException Locked="false" Priority="49" Name="List Table 4 Accent 2"/>
<w:LsdException Locked="false" Priority="50" Name="List Table 5 Dark Accent 2"/>
<w:LsdException Locked="false" Priority="51" Name="List Table 6 Colorful Accent 2"/>
<w:LsdException Locked="false" Priority="52" Name="List Table 7 Colorful Accent 2"/>
<w:LsdException Locked="false" Priority="46" Name="List Table 1 Light Accent 3"/>
<w:LsdException Locked="false" Priority="47" Name="List Table 2 Accent 3"/>
<w:LsdException Locked="false" Priority="48" Name="List Table 3 Accent 3"/>
<w:LsdException Locked="false" Priority="49" Name="List Table 4 Accent 3"/>
<w:LsdException Locked="false" Priority="50" Name="List Table 5 Dark Accent 3"/>
<w:LsdException Locked="false" Priority="51" Name="List Table 6 Colorful Accent 3"/>
<w:LsdException Locked="false" Priority="52" Name="List Table 7 Colorful Accent 3"/>
<w:LsdException Locked="false" Priority="46" Name="List Table 1 Light Accent 4"/>
<w:LsdException Locked="false" Priority="47" Name="List Table 2 Accent 4"/>
<w:LsdException Locked="false" Priority="48" Name="List Table 3 Accent 4"/>
<w:LsdException Locked="false" Priority="49" Name="List Table 4 Accent 4"/>
<w:LsdException Locked="false" Priority="50" Name="List Table 5 Dark Accent 4"/>
<w:LsdException Locked="false" Priority="51" Name="List Table 6 Colorful Accent 4"/>
<w:LsdException Locked="false" Priority="52" Name="List Table 7 Colorful Accent 4"/>
<w:LsdException Locked="false" Priority="46" Name="List Table 1 Light Accent 5"/>
<w:LsdException Locked="false" Priority="47" Name="List Table 2 Accent 5"/>
<w:LsdException Locked="false" Priority="48" Name="List Table 3 Accent 5"/>
<w:LsdException Locked="false" Priority="49" Name="List Table 4 Accent 5"/>
<w:LsdException Locked="false" Priority="50" Name="List Table 5 Dark Accent 5"/>
<w:LsdException Locked="false" Priority="51" Name="List Table 6 Colorful Accent 5"/>
<w:LsdException Locked="false" Priority="52" Name="List Table 7 Colorful Accent 5"/>
<w:LsdException Locked="false" Priority="46" Name="List Table 1 Light Accent 6"/>
<w:LsdException Locked="false" Priority="47" Name="List Table 2 Accent 6"/>
<w:LsdException Locked="false" Priority="48" Name="List Table 3 Accent 6"/>
<w:LsdException Locked="false" Priority="49" Name="List Table 4 Accent 6"/>
<w:LsdException Locked="false" Priority="50" Name="List Table 5 Dark Accent 6"/>
<w:LsdException Locked="false" Priority="51" Name="List Table 6 Colorful Accent 6"/>
<w:LsdException Locked="false" Priority="52" Name="List Table 7 Colorful Accent 6"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Mention"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Smart Hyperlink"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Hashtag"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Unresolved Mention"/>
</w:LatentStyles>
</xml><![endif]--><style><!--
/* Font Definitions */
@font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;
        mso-font-alt:"Calisto MT";
        mso-font-charset:0;
        mso-generic-font-family:roman;
        mso-font-pitch:variable;
        mso-font-signature:-536869121 1107305727 33554432 0 415 0;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;
        mso-font-alt:"Century Gothic";
        mso-font-charset:0;
        mso-generic-font-family:swiss;
        mso-font-pitch:variable;
        mso-font-signature:-536858881 -1073732485 9 0 511 0;}
@font-face
        {font-family:Consolas;
        panose-1:2 11 6 9 2 2 4 3 2 4;
        mso-font-charset:0;
        mso-generic-font-family:modern;
        mso-font-pitch:fixed;
        mso-font-signature:-536869121 64767 1 0 415 0;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {mso-style-unhide:no;
        mso-style-qformat:yes;
        mso-style-parent:"";
        margin:0in;
        margin-bottom:.0001pt;
        mso-pagination:widow-orphan;
        font-size:11.0pt;
        font-family:"Calibri",sans-serif;
        mso-fareast-font-family:Calibri;}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;
        text-underline:single;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-noshow:yes;
        mso-style-priority:99;
        color:#954F72;
        text-decoration:underline;
        text-underline:single;}
p.MsoListParagraph, li.MsoListParagraph, div.MsoListParagraph
        {mso-style-priority:34;
        mso-style-unhide:no;
        mso-style-qformat:yes;
        mso-margin-top-alt:auto;
        margin-right:0in;
        mso-margin-bottom-alt:auto;
        margin-left:0in;
        mso-pagination:widow-orphan;
        font-size:11.0pt;
        font-family:"Calibri",sans-serif;
        mso-fareast-font-family:Calibri;}
p.msonormal0, li.msonormal0, div.msonormal0
        {mso-style-name:msonormal;
        mso-style-unhide:no;
        mso-margin-top-alt:auto;
        margin-right:0in;
        mso-margin-bottom-alt:auto;
        margin-left:0in;
        mso-pagination:widow-orphan;
        font-size:11.0pt;
        font-family:"Calibri",sans-serif;
        mso-fareast-font-family:Calibri;}
p.xmsonormal, li.xmsonormal, div.xmsonormal
        {mso-style-name:x_msonormal;
        mso-style-unhide:no;
        margin:0in;
        margin-bottom:.0001pt;
        mso-pagination:widow-orphan;
        font-size:11.0pt;
        font-family:"Calibri",sans-serif;
        mso-fareast-font-family:Calibri;}
p.xmsolistparagraph, li.xmsolistparagraph, div.xmsolistparagraph
        {mso-style-name:x_msolistparagraph;
        mso-style-unhide:no;
        mso-margin-top-alt:auto;
        margin-right:0in;
        mso-margin-bottom-alt:auto;
        margin-left:0in;
        mso-pagination:widow-orphan;
        font-size:11.0pt;
        font-family:"Calibri",sans-serif;
        mso-fareast-font-family:Calibri;}
span.xapple-converted-space
        {mso-style-name:x_apple-converted-space;
        mso-style-unhide:no;}
span.xspelle
        {mso-style-name:x_spelle;
        mso-style-unhide:no;}
span.EmailStyle23
        {mso-style-type:personal;
        mso-style-noshow:yes;
        mso-style-unhide:no;
        font-family:"Calibri",sans-serif;
        mso-ascii-font-family:Calibri;
        mso-hansi-font-family:Calibri;
        mso-bidi-font-family:Calibri;
        color:windowtext;}
span.EmailStyle26
        {mso-style-type:personal-reply;
        mso-style-noshow:yes;
        mso-style-unhide:no;
        mso-ansi-font-size:11.0pt;
        mso-bidi-font-size:11.0pt;
        font-family:"Calibri",sans-serif;
        mso-ascii-font-family:Calibri;
        mso-fareast-font-family:Calibri;
        mso-hansi-font-family:Calibri;
        mso-bidi-font-family:"Times New Roman";
        color:windowtext;}
span.SpellE
        {mso-style-name:"";
        mso-spl-e:yes;}
.MsoChpDefault
        {mso-style-type:export-only;
        mso-default-props:yes;
        font-size:10.0pt;
        mso-ansi-font-size:10.0pt;
        mso-bidi-font-size:10.0pt;}
@page WordSection1
        {size:8.5in 11.0in;
        margin:1.0in 1.0in 1.0in 1.0in;
        mso-header-margin:.5in;
        mso-footer-margin:.5in;
        mso-paper-source:0;}
div.WordSection1
        {page:WordSection1;}
/* List Definitions */
@list l0
        {mso-list-id:22636118;
        mso-list-template-ids:-1;}
@list l0:level1
        {mso-level-start-at:11;
        mso-level-tab-stop:.5in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l0:level2
        {mso-level-number-format:alpha-lower;
        mso-level-tab-stop:1.0in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l0:level3
        {mso-level-tab-stop:1.5in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l0:level4
        {mso-level-tab-stop:2.0in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l0:level5
        {mso-level-tab-stop:2.5in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l0:level6
        {mso-level-tab-stop:3.0in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l0:level7
        {mso-level-tab-stop:3.5in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l0:level8
        {mso-level-tab-stop:4.0in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l0:level9
        {mso-level-tab-stop:4.5in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l1
        {mso-list-id:321860966;
        mso-list-template-ids:-1;}
@list l1:level1
        {mso-level-start-at:5;
        mso-level-tab-stop:.5in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l1:level2
        {mso-level-number-format:alpha-lower;
        mso-level-tab-stop:1.0in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l1:level3
        {mso-level-tab-stop:1.5in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l1:level4
        {mso-level-tab-stop:2.0in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l1:level5
        {mso-level-tab-stop:2.5in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l1:level6
        {mso-level-tab-stop:3.0in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l1:level7
        {mso-level-tab-stop:3.5in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l1:level8
        {mso-level-tab-stop:4.0in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l1:level9
        {mso-level-tab-stop:4.5in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l2
        {mso-list-id:339891531;
        mso-list-template-ids:-1;}
@list l2:level1
        {mso-level-start-at:14;
        mso-level-tab-stop:.5in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l2:level2
        {mso-level-tab-stop:1.0in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l2:level3
        {mso-level-tab-stop:1.5in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l2:level4
        {mso-level-tab-stop:2.0in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l2:level5
        {mso-level-tab-stop:2.5in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l2:level6
        {mso-level-tab-stop:3.0in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l2:level7
        {mso-level-tab-stop:3.5in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l2:level8
        {mso-level-tab-stop:4.0in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l2:level9
        {mso-level-tab-stop:4.5in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l3
        {mso-list-id:346711867;
        mso-list-template-ids:-1;}
@list l3:level1
        {mso-level-start-at:11;
        mso-level-tab-stop:.5in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l3:level2
        {mso-level-tab-stop:1.0in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l3:level3
        {mso-level-tab-stop:1.5in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l3:level4
        {mso-level-tab-stop:2.0in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l3:level5
        {mso-level-tab-stop:2.5in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l3:level6
        {mso-level-tab-stop:3.0in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l3:level7
        {mso-level-tab-stop:3.5in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l3:level8
        {mso-level-tab-stop:4.0in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l3:level9
        {mso-level-tab-stop:4.5in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l4
        {mso-list-id:517547297;
        mso-list-template-ids:-1;}
@list l4:level1
        {mso-level-start-at:5;
        mso-level-tab-stop:.5in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l4:level2
        {mso-level-tab-stop:1.0in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l4:level3
        {mso-level-tab-stop:1.5in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l4:level4
        {mso-level-tab-stop:2.0in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l4:level5
        {mso-level-tab-stop:2.5in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l4:level6
        {mso-level-tab-stop:3.0in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l4:level7
        {mso-level-tab-stop:3.5in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l4:level8
        {mso-level-tab-stop:4.0in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l4:level9
        {mso-level-tab-stop:4.5in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l5
        {mso-list-id:692806874;
        mso-list-template-ids:-1;}
@list l5:level1
        {mso-level-start-at:15;
        mso-level-tab-stop:.5in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l5:level2
        {mso-level-tab-stop:1.0in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l5:level3
        {mso-level-tab-stop:1.5in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l5:level4
        {mso-level-tab-stop:2.0in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l5:level5
        {mso-level-tab-stop:2.5in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l5:level6
        {mso-level-tab-stop:3.0in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l5:level7
        {mso-level-tab-stop:3.5in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l5:level8
        {mso-level-tab-stop:4.0in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l5:level9
        {mso-level-tab-stop:4.5in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l6
        {mso-list-id:837960096;
        mso-list-template-ids:-1;}
@list l6:level1
        {mso-level-start-at:7;
        mso-level-tab-stop:.5in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l6:level2
        {mso-level-number-format:alpha-lower;
        mso-level-tab-stop:1.0in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l6:level3
        {mso-level-tab-stop:1.5in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l6:level4
        {mso-level-tab-stop:2.0in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l6:level5
        {mso-level-tab-stop:2.5in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l6:level6
        {mso-level-tab-stop:3.0in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l6:level7
        {mso-level-tab-stop:3.5in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l6:level8
        {mso-level-tab-stop:4.0in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l6:level9
        {mso-level-tab-stop:4.5in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l7
        {mso-list-id:1066564298;
        mso-list-template-ids:-1;}
@list l7:level1
        {mso-level-start-at:6;
        mso-level-tab-stop:.5in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l7:level2
        {mso-level-number-format:alpha-lower;
        mso-level-tab-stop:1.0in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l7:level3
        {mso-level-tab-stop:1.5in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l7:level4
        {mso-level-tab-stop:2.0in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l7:level5
        {mso-level-tab-stop:2.5in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l7:level6
        {mso-level-tab-stop:3.0in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l7:level7
        {mso-level-tab-stop:3.5in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l7:level8
        {mso-level-tab-stop:4.0in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l7:level9
        {mso-level-tab-stop:4.5in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l8
        {mso-list-id:1087650489;
        mso-list-template-ids:-1;}
@list l8:level1
        {mso-level-start-at:13;
        mso-level-tab-stop:.5in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l8:level2
        {mso-level-number-format:alpha-lower;
        mso-level-tab-stop:1.0in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l8:level3
        {mso-level-tab-stop:1.5in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l8:level4
        {mso-level-tab-stop:2.0in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l8:level5
        {mso-level-tab-stop:2.5in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l8:level6
        {mso-level-tab-stop:3.0in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l8:level7
        {mso-level-tab-stop:3.5in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l8:level8
        {mso-level-tab-stop:4.0in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l8:level9
        {mso-level-tab-stop:4.5in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l9
        {mso-list-id:1088233152;
        mso-list-template-ids:-1;}
@list l9:level1
        {mso-level-tab-stop:.5in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l9:level2
        {mso-level-number-format:alpha-lower;
        mso-level-tab-stop:1.0in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l9:level3
        {mso-level-tab-stop:1.5in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l9:level4
        {mso-level-tab-stop:2.0in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l9:level5
        {mso-level-tab-stop:2.5in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l9:level6
        {mso-level-tab-stop:3.0in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l9:level7
        {mso-level-tab-stop:3.5in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l9:level8
        {mso-level-tab-stop:4.0in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l9:level9
        {mso-level-tab-stop:4.5in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l10
        {mso-list-id:1089961504;
        mso-list-template-ids:-1;}
@list l10:level1
        {mso-level-start-at:15;
        mso-level-tab-stop:.5in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l10:level2
        {mso-level-number-format:alpha-lower;
        mso-level-tab-stop:1.0in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l10:level3
        {mso-level-tab-stop:1.5in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l10:level4
        {mso-level-tab-stop:2.0in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l10:level5
        {mso-level-tab-stop:2.5in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l10:level6
        {mso-level-tab-stop:3.0in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l10:level7
        {mso-level-tab-stop:3.5in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l10:level8
        {mso-level-tab-stop:4.0in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l10:level9
        {mso-level-tab-stop:4.5in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l11
        {mso-list-id:1090155059;
        mso-list-template-ids:-1;}
@list l11:level1
        {mso-level-start-at:9;
        mso-level-tab-stop:.5in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l11:level2
        {mso-level-number-format:alpha-lower;
        mso-level-tab-stop:1.0in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l11:level3
        {mso-level-tab-stop:1.5in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l11:level4
        {mso-level-tab-stop:2.0in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l11:level5
        {mso-level-tab-stop:2.5in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l11:level6
        {mso-level-tab-stop:3.0in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l11:level7
        {mso-level-tab-stop:3.5in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l11:level8
        {mso-level-tab-stop:4.0in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l11:level9
        {mso-level-tab-stop:4.5in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l12
        {mso-list-id:1097597496;
        mso-list-template-ids:-1;}
@list l12:level1
        {mso-level-start-at:6;
        mso-level-tab-stop:.5in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l12:level2
        {mso-level-tab-stop:1.0in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l12:level3
        {mso-level-tab-stop:1.5in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l12:level4
        {mso-level-tab-stop:2.0in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l12:level5
        {mso-level-tab-stop:2.5in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l12:level6
        {mso-level-tab-stop:3.0in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l12:level7
        {mso-level-tab-stop:3.5in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l12:level8
        {mso-level-tab-stop:4.0in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l12:level9
        {mso-level-tab-stop:4.5in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l13
        {mso-list-id:1100760336;
        mso-list-template-ids:-1;}
@list l13:level1
        {mso-level-tab-stop:.5in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l13:level2
        {mso-level-tab-stop:1.0in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l13:level3
        {mso-level-tab-stop:1.5in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l13:level4
        {mso-level-tab-stop:2.0in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l13:level5
        {mso-level-tab-stop:2.5in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l13:level6
        {mso-level-tab-stop:3.0in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l13:level7
        {mso-level-tab-stop:3.5in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l13:level8
        {mso-level-tab-stop:4.0in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l13:level9
        {mso-level-tab-stop:4.5in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l14
        {mso-list-id:1320695770;
        mso-list-template-ids:-1;}
@list l14:level1
        {mso-level-start-at:10;
        mso-level-tab-stop:.5in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l14:level2
        {mso-level-tab-stop:1.0in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l14:level3
        {mso-level-tab-stop:1.5in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l14:level4
        {mso-level-tab-stop:2.0in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l14:level5
        {mso-level-tab-stop:2.5in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l14:level6
        {mso-level-tab-stop:3.0in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l14:level7
        {mso-level-tab-stop:3.5in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l14:level8
        {mso-level-tab-stop:4.0in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l14:level9
        {mso-level-tab-stop:4.5in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l15
        {mso-list-id:1362709170;
        mso-list-template-ids:-1;}
@list l15:level1
        {mso-level-start-at:12;
        mso-level-tab-stop:.5in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l15:level2
        {mso-level-tab-stop:1.0in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l15:level3
        {mso-level-tab-stop:1.5in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l15:level4
        {mso-level-tab-stop:2.0in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l15:level5
        {mso-level-tab-stop:2.5in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l15:level6
        {mso-level-tab-stop:3.0in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l15:level7
        {mso-level-tab-stop:3.5in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l15:level8
        {mso-level-tab-stop:4.0in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l15:level9
        {mso-level-tab-stop:4.5in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l16
        {mso-list-id:1424691101;
        mso-list-template-ids:-1;}
@list l16:level1
        {mso-level-start-at:14;
        mso-level-tab-stop:.5in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l16:level2
        {mso-level-number-format:alpha-lower;
        mso-level-tab-stop:1.0in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l16:level3
        {mso-level-tab-stop:1.5in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l16:level4
        {mso-level-tab-stop:2.0in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l16:level5
        {mso-level-tab-stop:2.5in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l16:level6
        {mso-level-tab-stop:3.0in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l16:level7
        {mso-level-tab-stop:3.5in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l16:level8
        {mso-level-tab-stop:4.0in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l16:level9
        {mso-level-tab-stop:4.5in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l17
        {mso-list-id:1518301422;
        mso-list-type:hybrid;
        mso-list-template-ids:1767908998 67698705 67698713 67698715 67698703 67698713 67698715 67698703 67698713 67698715;}
@list l17:level1
        {mso-level-text:"%1\)";
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l17:level2
        {mso-level-number-format:alpha-lower;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l17:level3
        {mso-level-number-format:roman-lower;
        mso-level-tab-stop:none;
        mso-level-number-position:right;
        text-indent:-9.0pt;}
@list l17:level4
        {mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l17:level5
        {mso-level-number-format:alpha-lower;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l17:level6
        {mso-level-number-format:roman-lower;
        mso-level-tab-stop:none;
        mso-level-number-position:right;
        text-indent:-9.0pt;}
@list l17:level7
        {mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l17:level8
        {mso-level-number-format:alpha-lower;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l17:level9
        {mso-level-number-format:roman-lower;
        mso-level-tab-stop:none;
        mso-level-number-position:right;
        text-indent:-9.0pt;}
@list l18
        {mso-list-id:1556971471;
        mso-list-template-ids:-1;}
@list l18:level1
        {mso-level-start-at:8;
        mso-level-tab-stop:.5in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l18:level2
        {mso-level-tab-stop:1.0in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l18:level3
        {mso-level-tab-stop:1.5in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l18:level4
        {mso-level-tab-stop:2.0in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l18:level5
        {mso-level-tab-stop:2.5in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l18:level6
        {mso-level-tab-stop:3.0in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l18:level7
        {mso-level-tab-stop:3.5in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l18:level8
        {mso-level-tab-stop:4.0in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l18:level9
        {mso-level-tab-stop:4.5in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l19
        {mso-list-id:1592541955;
        mso-list-template-ids:-1;}
@list l19:level1
        {mso-level-start-at:2;
        mso-level-tab-stop:.5in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l19:level2
        {mso-level-tab-stop:1.0in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l19:level3
        {mso-level-tab-stop:1.5in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l19:level4
        {mso-level-tab-stop:2.0in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l19:level5
        {mso-level-tab-stop:2.5in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l19:level6
        {mso-level-tab-stop:3.0in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l19:level7
        {mso-level-tab-stop:3.5in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l19:level8
        {mso-level-tab-stop:4.0in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l19:level9
        {mso-level-tab-stop:4.5in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l20
        {mso-list-id:1597983390;
        mso-list-template-ids:-1;}
@list l20:level1
        {mso-level-start-at:9;
        mso-level-tab-stop:.5in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l20:level2
        {mso-level-tab-stop:1.0in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l20:level3
        {mso-level-tab-stop:1.5in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l20:level4
        {mso-level-tab-stop:2.0in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l20:level5
        {mso-level-tab-stop:2.5in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l20:level6
        {mso-level-tab-stop:3.0in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l20:level7
        {mso-level-tab-stop:3.5in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l20:level8
        {mso-level-tab-stop:4.0in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l20:level9
        {mso-level-tab-stop:4.5in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l21
        {mso-list-id:1638801833;
        mso-list-template-ids:-1;}
@list l21:level1
        {mso-level-start-at:16;
        mso-level-tab-stop:.5in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l21:level2
        {mso-level-number-format:alpha-lower;
        mso-level-tab-stop:1.0in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l21:level3
        {mso-level-tab-stop:1.5in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l21:level4
        {mso-level-tab-stop:2.0in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l21:level5
        {mso-level-tab-stop:2.5in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l21:level6
        {mso-level-tab-stop:3.0in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l21:level7
        {mso-level-tab-stop:3.5in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l21:level8
        {mso-level-tab-stop:4.0in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l21:level9
        {mso-level-tab-stop:4.5in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l22
        {mso-list-id:1665278194;
        mso-list-template-ids:-1;}
@list l22:level1
        {mso-level-start-at:10;
        mso-level-tab-stop:.5in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l22:level2
        {mso-level-number-format:alpha-lower;
        mso-level-tab-stop:1.0in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l22:level3
        {mso-level-tab-stop:1.5in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l22:level4
        {mso-level-tab-stop:2.0in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l22:level5
        {mso-level-tab-stop:2.5in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l22:level6
        {mso-level-tab-stop:3.0in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l22:level7
        {mso-level-tab-stop:3.5in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l22:level8
        {mso-level-tab-stop:4.0in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l22:level9
        {mso-level-tab-stop:4.5in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l23
        {mso-list-id:1802963413;
        mso-list-template-ids:-1;}
@list l23:level1
        {mso-level-start-at:16;
        mso-level-tab-stop:.5in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l23:level2
        {mso-level-tab-stop:1.0in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l23:level3
        {mso-level-tab-stop:1.5in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l23:level4
        {mso-level-tab-stop:2.0in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l23:level5
        {mso-level-tab-stop:2.5in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l23:level6
        {mso-level-tab-stop:3.0in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l23:level7
        {mso-level-tab-stop:3.5in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l23:level8
        {mso-level-tab-stop:4.0in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l23:level9
        {mso-level-tab-stop:4.5in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l24
        {mso-list-id:2016031821;
        mso-list-template-ids:-1;}
@list l24:level1
        {mso-level-start-at:7;
        mso-level-tab-stop:.5in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l24:level2
        {mso-level-tab-stop:1.0in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l24:level3
        {mso-level-tab-stop:1.5in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l24:level4
        {mso-level-tab-stop:2.0in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l24:level5
        {mso-level-tab-stop:2.5in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l24:level6
        {mso-level-tab-stop:3.0in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l24:level7
        {mso-level-tab-stop:3.5in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l24:level8
        {mso-level-tab-stop:4.0in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l24:level9
        {mso-level-tab-stop:4.5in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l25
        {mso-list-id:2035382899;
        mso-list-template-ids:-1;}
@list l25:level1
        {mso-level-start-at:8;
        mso-level-tab-stop:.5in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l25:level2
        {mso-level-number-format:alpha-lower;
        mso-level-tab-stop:1.0in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l25:level3
        {mso-level-tab-stop:1.5in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l25:level4
        {mso-level-tab-stop:2.0in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l25:level5
        {mso-level-tab-stop:2.5in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l25:level6
        {mso-level-tab-stop:3.0in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l25:level7
        {mso-level-tab-stop:3.5in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l25:level8
        {mso-level-tab-stop:4.0in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l25:level9
        {mso-level-tab-stop:4.5in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l26
        {mso-list-id:2074501817;
        mso-list-template-ids:-1;}
@list l26:level1
        {mso-level-start-at:4;
        mso-level-tab-stop:.5in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l26:level2
        {mso-level-number-format:alpha-lower;
        mso-level-tab-stop:1.0in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l26:level3
        {mso-level-tab-stop:1.5in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l26:level4
        {mso-level-tab-stop:2.0in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l26:level5
        {mso-level-tab-stop:2.5in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l26:level6
        {mso-level-tab-stop:3.0in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l26:level7
        {mso-level-tab-stop:3.5in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l26:level8
        {mso-level-tab-stop:4.0in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l26:level9
        {mso-level-tab-stop:4.5in;
        mso-level-number-position:left;
        text-indent:-.25in;}
ol
        {margin-bottom:0in;}
ul
        {margin-bottom:0in;}
--></style><!--[if gte mso 10]><style>/* Style Definitions */
table.MsoNormalTable
        {mso-style-name:"Table Normal";
        mso-tstyle-rowband-size:0;
        mso-tstyle-colband-size:0;
        mso-style-noshow:yes;
        mso-style-priority:99;
        mso-style-parent:"";
        mso-padding-alt:0in 5.4pt 0in 5.4pt;
        mso-para-margin:0in;
        mso-para-margin-bottom:.0001pt;
        mso-pagination:widow-orphan;
        font-size:10.0pt;
        font-family:"Times New Roman",serif;}
</style><![endif]--><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]-->
</head>
<body lang="EN-US" link="blue" vlink="#954F72" style="tab-interval:.5in">
<div class="WordSection1">
<p class="MsoNormal"><span style="mso-ascii-font-family:Calibri;mso-hansi-font-family:Calibri;mso-bidi-font-family:"Times New Roman"">Hi Jiewen,<o:p></o:p></span></p>
<p class="MsoNormal"><span style="mso-ascii-font-family:Calibri;mso-hansi-font-family:Calibri;mso-bidi-font-family:"Times New Roman""><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="mso-ascii-font-family:Calibri;mso-hansi-font-family:Calibri;mso-bidi-font-family:"Times New Roman"">Many of your responses are related to fuzz testing.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="mso-ascii-font-family:Calibri;mso-hansi-font-family:Calibri;mso-bidi-font-family:"Times New Roman""><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="mso-ascii-font-family:Calibri;mso-hansi-font-family:Calibri;mso-bidi-font-family:"Times New Roman"">Can we focus current infrastructure on host based unit testing and minimizing the content to support that testing type.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="mso-ascii-font-family:Calibri;mso-hansi-font-family:Calibri;mso-bidi-font-family:"Times New Roman""><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="mso-ascii-font-family:Calibri;mso-hansi-font-family:Calibri;mso-bidi-font-family:"Times New Roman"">Then, add a new subdirectory below Test in the future to support fuzz testing.<span style="mso-spacerun:yes"> 
</span>This way, lib instances can be tuned to the test infrastructure/subsystem in use.<span style="mso-spacerun:yes"> 
</span>Trying to make one version of the host libs for multiple test methodologies it making is more complex and hander to maintain.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="mso-ascii-font-family:Calibri;mso-hansi-font-family:Calibri;mso-bidi-font-family:"Times New Roman""><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="mso-ascii-font-family:Calibri;mso-hansi-font-family:Calibri;mso-bidi-font-family:"Times New Roman"">Thanks,<o:p></o:p></span></p>
<p class="MsoNormal"><span style="mso-ascii-font-family:Calibri;mso-hansi-font-family:Calibri;mso-bidi-font-family:"Times New Roman""><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="mso-ascii-font-family:Calibri;mso-hansi-font-family:Calibri;mso-bidi-font-family:"Times New Roman"">Mike<o:p></o:p></span></p>
<p class="MsoNormal"><span style="mso-ascii-font-family:Calibri;mso-hansi-font-family:Calibri;mso-bidi-font-family:"Times New Roman""><o:p> </o:p></span></p>
<div style="border:none;border-left:solid blue 1.5pt;padding:0in 0in 0in 4.0pt">
<div>
<div style="border:none;border-top:solid #E1E1E1 1.0pt;padding:3.0pt 0in 0in 0in">
<p class="MsoNormal"><b><span style="mso-fareast-font-family:"Times New Roman"">From:</span></b><span style="mso-fareast-font-family:"Times New Roman""> Yao, Jiewen <jiewen.yao@intel.com>
<br>
<b>Sent:</b> Saturday, December 14, 2019 4:38 PM<br>
<b>To:</b> devel@edk2.groups.io; bret.barkelew@microsoft.com; Andrew Fish <afish@apple.com>; Kinney, Michael D <michael.d.kinney@intel.com><br>
<b>Cc:</b> rfc@edk2.groups.io<br>
<b>Subject:</b> RE: [EXTERNAL] Re: [edk2-devel] EDK2 Host-Based Unit Test RFC (Now with docs!)<o:p></o:p></span></p>
</div>
</div>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Answer the question 5,6,7,8, which are related to HBFA.<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">For other MSFT unit test, I don’t have strong opinion. I am OK with that.<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Thank you<o:p></o:p></p>
<p class="MsoNormal">Yao Jiewen<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<div>
<div style="border:none;border-top:solid #E1E1E1 1.0pt;padding:3.0pt 0in 0in 0in">
<p class="MsoNormal" style="mso-outline-level:1"><a name="_____replyseparator"></a><b>From:</b>
<a href="mailto:devel@edk2.groups.io">devel@edk2.groups.io</a> <<a href="mailto:devel@edk2.groups.io">devel@edk2.groups.io</a>>
<b>On Behalf Of </b>Bret Barkelew via Groups.Io<br>
<b>Sent:</b> Saturday, December 14, 2019 8:47 AM<br>
<b>To:</b> <a href="mailto:devel@edk2.groups.io">devel@edk2.groups.io</a>; Andrew Fish <<a href="mailto:afish@apple.com">afish@apple.com</a>>; Kinney, Michael D <<a href="mailto:michael.d.kinney@intel.com">michael.d.kinney@intel.com</a>><br>
<b>Cc:</b> <a href="mailto:rfc@edk2.groups.io">rfc@edk2.groups.io</a><br>
<b>Subject:</b> Re: [EXTERNAL] Re: [edk2-devel] EDK2 Host-Based Unit Test RFC (Now with docs!)<o:p></o:p></p>
</div>
</div>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Mike,<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">I think I’ve gotten all the feedback here and all the action items from our call. The current branch should be good to go, minus the couple of things that Intel was going to look into.<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Thanks!<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">- Bret<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<div style="border:none;border-top:solid #E1E1E1 1.0pt;padding:3.0pt 0in 0in 0in">
<p class="MsoNormal" style="mso-outline-level:1"><b>From: </b><a href="mailto:Bret.Barkelew@microsoft.com">Bret Barkelew</a><br>
<b>Sent: </b>Friday, December 6, 2019 2:21 PM<br>
<b>To: </b><a href="mailto:devel@edk2.groups.io">devel@edk2.groups.io</a>; <a href="mailto:afish@apple.com">
Andrew Fish</a>; <a href="mailto:michael.d.kinney@intel.com">Kinney, Michael D</a><br>
<b>Cc: </b><a href="mailto:rfc@edk2.groups.io">rfc@edk2.groups.io</a><br>
<b>Subject: </b>RE: [EXTERNAL] Re: [edk2-devel] EDK2 Host-Based Unit Test RFC (Now with docs!)<o:p></o:p></p>
</div>
<p class="MsoNormal"><o:p> </o:p></p>
<ol style="margin-top:0in" start="1" type="1">
<li class="MsoListParagraph" style="margin-top:0in;margin-bottom:0in;margin-bottom:.0001pt;mso-list:l17 level1 lfo1">
<span style="mso-fareast-font-family:"Times New Roman"">I see that MdePkg adds a dependency on UnitTestPkg.  This makes UnitTestPkg the root package when building and running host based unit tests.  This makes sense, but good to highlight that all packages
 that use host based tests will introduce a new package dependency on UnitTestPkg.
<o:p></o:p></span></li></ol>
<ol style="margin-top:0in" start="1" type="1">
<ol style="margin-top:0in" start="1" type="a">
<li class="MsoListParagraph" style="margin-top:0in;margin-bottom:0in;margin-bottom:.0001pt;mso-list:l17 level2 lfo1">
<span style="mso-fareast-font-family:"Times New Roman"">Since the dependency only applies to unit tests, can we update the DependencyCheck plugin to support listing dependencies for FW components separate from dependencies for unit tests?<o:p></o:p></span></li><li class="MsoListParagraph" style="margin-top:0in;margin-bottom:0in;margin-bottom:.0001pt;mso-list:l17 level2 lfo1">
<span style="mso-fareast-font-family:"Times New Roman";color:red">Can move. Capability is there, but mistakenly added to the wrong section.</span><span style="mso-fareast-font-family:"Times New Roman""><o:p></o:p></span></li></ol>
</ol>
<ol style="margin-top:0in" start="2" type="1">
<li class="MsoListParagraph" style="margin-top:0in;margin-bottom:0in;margin-bottom:.0001pt;mso-list:l17 level1 lfo1">
<span style="mso-fareast-font-family:"Times New Roman"">I see UnitTestPkg declares 6 new lib classes.  Are all 6 classes intended to be used directly from a unit test case?  If some of these are only intended to be used from the framework inside the UnitTestPkg
 can we make them private?<o:p></o:p></span></li></ol>
<ol style="margin-top:0in" start="2" type="1">
<ol style="margin-top:0in" start="1" type="a">
<li class="MsoListParagraph" style="margin-top:0in;margin-bottom:0in;margin-bottom:.0001pt;mso-list:l17 level2 lfo1">
<span style="mso-fareast-font-family:"Times New Roman";color:red">Because there are different instances in multiple places (and conceivably more in the future), we don’t see how we could make them private.</span><span style="mso-fareast-font-family:"Times New Roman""><o:p></o:p></span></li></ol>
</ol>
<ol style="margin-top:0in" start="3" type="1">
<li class="MsoListParagraph" style="margin-top:0in;margin-bottom:0in;margin-bottom:.0001pt;mso-list:l17 level1 lfo1">
<span style="mso-fareast-font-family:"Times New Roman"">In the MdePkg, I see a new top level directory called ‘HostLibrary’. Since these lib instances are only used from a host based test, can they be moved into  the ‘Test’ directory?<o:p></o:p></span></li></ol>
<ol style="margin-top:0in" start="3" type="1">
<ol style="margin-top:0in" start="1" type="a">
<li class="MsoListParagraph" style="margin-top:0in;margin-bottom:0in;margin-bottom:.0001pt;mso-list:l17 level2 lfo1">
<span style="mso-fareast-font-family:"Times New Roman";color:red">Can move.</span><span style="mso-fareast-font-family:"Times New Roman""><o:p></o:p></span></li></ol>
</ol>
<ol style="margin-top:0in" start="4" type="1">
<li class="MsoListParagraph" style="margin-top:0in;margin-bottom:0in;margin-bottom:.0001pt;mso-list:l17 level1 lfo1">
<span style="mso-fareast-font-family:"Times New Roman"">MdePkg/MdePkgTest.dsc.  <o:p>
</o:p></span></li></ol>
<ol style="margin-top:0in" start="4" type="1">
<ol style="margin-top:0in" start="1" type="a">
<li class="MsoListParagraph" style="margin-top:0in;margin-bottom:0in;margin-bottom:.0001pt;mso-list:l17 level2 lfo1">
<span style="mso-fareast-font-family:"Times New Roman"">Can this DSC file be moved into the ‘Test’ directory?
<o:p></o:p></span></li></ol>
</ol>
<p class="MsoListParagraph" style="mso-margin-top-alt:0in;margin-right:0in;margin-bottom:0in;margin-left:1.5in;margin-bottom:.0001pt;text-indent:-1.5in;mso-text-indent-alt:-9.0pt;mso-list:l17 level3 lfo1">
<![if !supportLists]><span style="mso-fareast-font-family:Calibri"><span style="mso-list:Ignore"><span style="font:7.0pt "Times New Roman"">                                                                 
</span>i.<span style="font:7.0pt "Times New Roman"">      </span></span></span><![endif]><span style="color:red">Yes</span><o:p></o:p></p>
<ol style="margin-top:0in" start="4" type="1">
<ol style="margin-top:0in" start="2" type="a">
<li class="MsoListParagraph" style="margin-top:0in;margin-bottom:0in;margin-bottom:.0001pt;mso-list:l17 level2 lfo1">
<span style="mso-fareast-font-family:"Times New Roman"">I see this DSC file only supports VS today.  How much work is it to add GCC support?<o:p></o:p></span></li></ol>
</ol>
<p class="MsoListParagraph" style="mso-margin-top-alt:0in;margin-right:0in;margin-bottom:0in;margin-left:1.5in;margin-bottom:.0001pt;text-indent:-1.5in;mso-text-indent-alt:-9.0pt;mso-list:l17 level3 lfo1">
<![if !supportLists]><span style="mso-fareast-font-family:Calibri"><span style="mso-list:Ignore"><span style="font:7.0pt "Times New Roman"">                                                                 
</span>i.<span style="font:7.0pt "Times New Roman"">      </span></span></span><![endif]><span style="color:red">Don’t know. This is an item on our list, but lower priority and not a blocker.</span><o:p></o:p></p>
<ol style="margin-top:0in" start="5" type="1">
<li class="MsoListParagraph" style="margin-top:0in;margin-bottom:0in;margin-bottom:.0001pt;mso-list:l17 level1 lfo1">
<span style="mso-fareast-font-family:"Times New Roman"">MdePkg/HostLibrary/BaseLibHost
<o:p></o:p></span></li></ol>
<ol style="margin-top:0in" start="5" type="1">
<ol style="margin-top:0in" start="1" type="a">
<li class="MsoListParagraph" style="margin-top:0in;margin-bottom:0in;margin-bottom:.0001pt;mso-list:l17 level2 lfo1">
<span style="mso-fareast-font-family:"Times New Roman"">Why are there 2 INFs.  One with ASM and one without ASM?  Can we just use the one with ASM and assume NASM is installed?<o:p></o:p></span></li><li class="MsoListParagraph" style="margin-top:0in;margin-bottom:0in;margin-bottom:.0001pt;mso-list:l17 level2 lfo1">
<span style="mso-fareast-font-family:"Times New Roman"">I see the purpose of this lib instance is to call the
<o:p></o:p></span></li><li class="MsoListParagraph" style="margin-top:0in;margin-bottom:0in;margin-bottom:.0001pt;mso-list:l17 level2 lfo1">
<span style="mso-fareast-font-family:"Times New Roman"">SetJump()/LongJump().  So these implementations always work?  It looks like it assumes BASE_LIBRARY_JUMP_BUFFER is identical to the host OS user mode application setjmp()/longjmp() state.<o:p></o:p></span></li><li class="MsoListParagraph" style="margin-top:0in;margin-bottom:0in;margin-bottom:.0001pt;mso-list:l17 level2 lfo1">
<span style="mso-fareast-font-family:"Times New Roman"">Why are DRx and CRx registers emulated?  I would think and code that depends on read/writing these registers would not be compatible with host based testing.  Can we change to ASSERT (FALSE)?<o:p></o:p></span></li><li class="MsoListParagraph" style="margin-top:0in;margin-bottom:0in;margin-bottom:.0001pt;mso-list:l17 level2 lfo1">
<span style="mso-fareast-font-family:"Times New Roman"">PatchInstructionX86() – I suspect this will not work in a host based environment because it is self modifying code.  Should it be ASSERT (FALSE)?<o:p></o:p></span></li><li class="MsoListParagraph" style="margin-top:0in;margin-bottom:0in;margin-bottom:.0001pt;mso-list:l17 level2 lfo1">
<span style="mso-fareast-font-family:"Times New Roman";color:red">Libraries were taken directly from the Intel work in HBFA. They worked so we kept them. We’re just as interested in the answers to these questions as you are.</span><span style="mso-fareast-font-family:"Times New Roman""><o:p></o:p></span></li></ol>
</ol>
<p class="MsoNormal">[Jiewen] Here is the answer:<o:p></o:p></p>
<p class="MsoListParagraph" style="margin-left:.75in">Some tools requires source build, such AFL-CC or KLEE to get the result or optimization. They do analysis besides compiling. These tools only work on C-language. That why we need non-asm build.<o:p></o:p></p>
<p class="MsoListParagraph" style="margin-left:.75in">Some test case need access CRx/DRx just as the pre-condition and post-condition, such as MTRR test. We cannot use ASSERT.<o:p></o:p></p>
<p class="MsoListParagraph" style="margin-left:.75in">Generally, a big problem of current based lib is that it mixes the hardware register access (such as CR/DR, CPUIR, MSR, mode switch) into a common software lib (such as linked list, math, string, checksum).
 I hope we can refactory the based lib to separate the hardware access part, such as a BaseRegAccessLib, similar to IoLib, PciLib.<o:p></o:p></p>
<p class="MsoListParagraph" style="margin-left:.75in">Agree on PatchInstructionX86(). We should use ASSERT(). If we encounter a case that requires this function, we consider how to make it work later.<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<ol style="margin-top:0in" start="6" type="1">
<li class="MsoListParagraph" style="margin-top:0in;margin-bottom:0in;margin-bottom:.0001pt;mso-list:l17 level1 lfo1">
<span style="mso-fareast-font-family:"Times New Roman"">MdePkg/HostLibrary/DebugLibHost
<o:p></o:p></span></li></ol>
<ol style="margin-top:0in" start="6" type="1">
<ol style="margin-top:0in" start="1" type="a">
<li class="MsoListParagraph" style="margin-top:0in;margin-bottom:0in;margin-bottom:.0001pt;mso-list:l17 level2 lfo1">
<span style="mso-fareast-font-family:"Times New Roman"">What is ‘#ifndef TEST_WITH_KLEE’<o:p></o:p></span></li><li class="MsoListParagraph" style="margin-top:0in;margin-bottom:0in;margin-bottom:.0001pt;mso-list:l17 level2 lfo1">
<span style="mso-fareast-font-family:"Times New Roman"">What is the ‘PatchFormat()’ function?  It is always disabled with if (0).<o:p></o:p></span></li><li class="MsoListParagraph" style="margin-top:0in;margin-bottom:0in;margin-bottom:.0001pt;mso-list:l17 level2 lfo1">
<span style="mso-fareast-font-family:"Times New Roman"">Are the PCDs to set the debug message levels disabled on purpose? (DebugPrintEnabled(), DebugPrintLevelEnabled(), DebugCodeEnabled())<o:p></o:p></span></li><li class="MsoListParagraph" style="margin-top:0in;margin-bottom:0in;margin-bottom:.0001pt;mso-list:l17 level2 lfo1">
<span style="mso-fareast-font-family:"Times New Roman";color:red">Libraries were taken directly from the Intel work in HBFA. They worked so we kept them. We’re just as interested in the answers to these questions as you are.</span><span style="mso-fareast-font-family:"Times New Roman""><o:p></o:p></span></li></ol>
</ol>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">[Jiewen] Here is the answer:<o:p></o:p></p>
<p class="MsoNormal">               This is special optimization for KLEE – a symbolic execution tool. We hope to reduce the unnecessary branch. Or the KELL might not resolve the function.<o:p></o:p></p>
<p class="MsoNormal">               PatchFormat() is an old function. Deadcode can be removed now.<o:p></o:p></p>
<p class="MsoNormal">               In the beginning, PCD is not supported. And we don’t find a use case to control PCD in such detail level. To simplify thing, we just don’t use it. An on/off control (via
<span style="font-size:9.5pt;font-family:Consolas;color:black">HOST_DEBUG_MESSAGE</span>) is good enough. If there is real use case coming up, we can see how to enable it.<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<ol style="margin-top:0in" start="7" type="1">
<li class="MsoListParagraph" style="margin-top:0in;margin-bottom:0in;margin-bottom:.0001pt;mso-list:l17 level1 lfo1">
<span style="mso-fareast-font-family:"Times New Roman"">MdePkg/HostLibrary/BaseMemoryLibHost
<o:p></o:p></span></li></ol>
<ol style="margin-top:0in" start="7" type="1">
<ol style="margin-top:0in" start="1" type="a">
<li class="MsoListParagraph" style="margin-top:0in;margin-bottom:0in;margin-bottom:.0001pt;mso-list:l17 level2 lfo1">
<span style="mso-fareast-font-family:"Times New Roman"">Why can’t we use MdePkg/Library/BaseMemoryLib/BaseMemoryLib/inf instead and reduce the number of host specific lib instances?
<o:p></o:p></span></li><li class="MsoListParagraph" style="margin-top:0in;margin-bottom:0in;margin-bottom:.0001pt;mso-list:l17 level2 lfo1">
<span style="mso-fareast-font-family:"Times New Roman";color:red">Libraries were taken directly from the Intel work in HBFA. They worked so we kept them. We’re just as interested in the answers to these questions as you are.</span><span style="mso-fareast-font-family:"Times New Roman""><o:p></o:p></span></li></ol>
</ol>
<p class="MsoNormal">[Jiewen] Here is the answer:<o:p></o:p></p>
<p class="MsoNormal">               This is special optimization for fuzzing tool. If we use standard C lib, the compiler knows it and don’t insert branch analysis. If we use our own implementation, the compiler has no idea, and try to do analysis. That is
 unnecessary.<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<ol style="margin-top:0in" start="8" type="1">
<li class="MsoListParagraph" style="margin-top:0in;margin-bottom:0in;margin-bottom:.0001pt;mso-list:l17 level1 lfo1">
<span style="mso-fareast-font-family:"Times New Roman"">MdePkg/HostLibrary/MemoryAllocationLibHost
<o:p></o:p></span></li></ol>
<ol style="margin-top:0in" start="8" type="1">
<ol style="margin-top:0in" start="1" type="a">
<li class="MsoListParagraph" style="margin-top:0in;margin-bottom:0in;margin-bottom:.0001pt;mso-list:l17 level2 lfo1">
<span style="mso-fareast-font-family:"Times New Roman"">Why is are memcpy(), assert(), memset() used in this lib?  I would expect this lib instance to match the UefiMemoryAllocationLib with the only the use of malloc() and free() to replace the UEFI Boot Services
 calls. <o:p></o:p></span></li><li class="MsoListParagraph" style="margin-top:0in;margin-bottom:0in;margin-bottom:.0001pt;mso-list:l17 level2 lfo1">
<span style="mso-fareast-font-family:"Times New Roman";color:red">Libraries were taken directly from the Intel work in HBFA. They worked so we kept them. We’re just as interested in the answers to these questions as you are.</span><span style="mso-fareast-font-family:"Times New Roman""><o:p></o:p></span></li></ol>
</ol>
<p class="MsoNormal">[Jiewen] Here is the answer:<o:p></o:p></p>
<p class="MsoNormal">               Similar to 7, using standard-C function can reduce the unnecessary analysis for analysis tool.<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<ol style="margin-top:0in" start="9" type="1">
<li class="MsoListParagraph" style="margin-top:0in;margin-bottom:0in;margin-bottom:.0001pt;mso-list:l17 level1 lfo1">
<span style="mso-fareast-font-family:"Times New Roman"">Host library instance naming conventions.
<o:p></o:p></span></li></ol>
<ol style="margin-top:0in" start="9" type="1">
<ol style="margin-top:0in" start="1" type="a">
<li class="MsoListParagraph" style="margin-top:0in;margin-bottom:0in;margin-bottom:.0001pt;mso-list:l17 level2 lfo1">
<span style="mso-fareast-font-family:"Times New Roman"">The current naming convention uses the environment as a prefix(e.g. Pei, Smm, Uefi) and the services the lib instance uses as a post fix.  Would it make more sense to use ‘Host’ as a prefix instead of
 a postfix in the lib instance names?<o:p></o:p></span></li><li class="MsoListParagraph" style="margin-top:0in;margin-bottom:0in;margin-bottom:.0001pt;mso-list:l17 level2 lfo1">
<span style="mso-fareast-font-family:"Times New Roman";color:red">I don’t know if there’s a 1:1 relationship with these. For some library classes (that you might have host versions of), the class itself is the PeiSomethingLib, and the host version would be
 the PeiSomethingLibHost. No?</span><span style="mso-fareast-font-family:"Times New Roman""><o:p></o:p></span></li></ol>
</ol>
<ol style="margin-top:0in" start="10" type="1">
<li class="MsoListParagraph" style="margin-top:0in;margin-bottom:0in;margin-bottom:.0001pt;mso-list:l17 level1 lfo1">
<span style="mso-fareast-font-family:"Times New Roman"">Unicode vs ASCII strings <o:p>
</o:p></span></li></ol>
<ol style="margin-top:0in" start="10" type="1">
<ol style="margin-top:0in" start="1" type="a">
<li class="MsoListParagraph" style="margin-top:0in;margin-bottom:0in;margin-bottom:.0001pt;mso-list:l17 level2 lfo1">
<span style="mso-fareast-font-family:"Times New Roman"">I see InitUnitTestFramework(), CreateUnitTestSuite(), and AddTestCase() all take Unicode strings for the labels.  I also see extra code to convert gEfiCallerBaseName from ASCII to Unicode to use it as
 a short name of a test framework.  I think it would be simpler if the parameters to these APIs were ASCII and the framework can convert to Unicode if needed.<o:p></o:p></span></li><li class="MsoListParagraph" style="margin-top:0in;margin-bottom:0in;margin-bottom:.0001pt;mso-list:l17 level2 lfo1">
<span style="mso-fareast-font-family:"Times New Roman";color:red">No strong feelings, but we already have a bunch of tests written this way. Since the UnitTestLib is an abstraction that works as well in Shell as in the Host, going with Unicode strings seemed
 to match the art for Shell apps (since the framework was written for Shell first).</span><span style="mso-fareast-font-family:"Times New Roman""><o:p></o:p></span></li></ol>
</ol>
<ol style="margin-top:0in" start="11" type="1">
<li class="MsoListParagraph" style="margin-top:0in;margin-bottom:0in;margin-bottom:.0001pt;mso-list:l17 level1 lfo1">
<span style="mso-fareast-font-family:"Times New Roman"">Will InitUnitTestFramework() and CreateUnitTestSuite() always be called in pairs?  If so, can we combine these to a single API? 
<o:p></o:p></span></li></ol>
<ol style="margin-top:0in" start="11" type="1">
<ol style="margin-top:0in" start="1" type="a">
<li class="MsoListParagraph" style="margin-top:0in;margin-bottom:0in;margin-bottom:.0001pt;mso-list:l17 level2 lfo1">
<span style="mso-fareast-font-family:"Times New Roman"">I see the SafeIntLib example create a single framework and multiple test suites.  Perhaps we can have a single CreateUnitTestSuite() API where Framework is an IN/OUT and if it is passed in as NULL, the
 Framework handle is created.<o:p></o:p></span></li></ol>
</ol>
<p class="MsoListParagraph" style="mso-margin-top-alt:0in;margin-right:0in;margin-bottom:0in;margin-left:1.5in;margin-bottom:.0001pt;text-indent:-1.5in;mso-text-indent-alt:-9.0pt;mso-list:l17 level3 lfo1">
<![if !supportLists]><span style="mso-fareast-font-family:Calibri"><span style="mso-list:Ignore"><span style="font:7.0pt "Times New Roman"">                                                                 
</span>i.<span style="font:7.0pt "Times New Roman"">      </span></span></span><![endif]><span style="color:red">It’s not always in pairs. You would only have a single framework init, but could have multiple suites.</span><o:p></o:p></p>
<ol style="margin-top:0in" start="11" type="1">
<ol style="margin-top:0in" start="2" type="a">
<li class="MsoListParagraph" style="margin-top:0in;margin-bottom:0in;margin-bottom:.0001pt;mso-list:l17 level2 lfo1">
<span style="mso-fareast-font-family:"Times New Roman"">I see a pattern where the CreateUnitTestSuite() ‘Package’ parameter is used as a prefix to every call to AddTestCase() in the ‘ClassName’ parameter.  Can we simplify AddTestCase() so it only need to pass
 in the name of the unit test case, and the framework can append Package  and the unit test case name?<o:p></o:p></span></li></ol>
</ol>
<p class="MsoListParagraph" style="mso-margin-top-alt:0in;margin-right:0in;margin-bottom:0in;margin-left:1.5in;margin-bottom:.0001pt;text-indent:-1.5in;mso-text-indent-alt:-9.0pt;mso-list:l17 level3 lfo1">
<![if !supportLists]><span style="mso-fareast-font-family:Calibri"><span style="mso-list:Ignore"><span style="font:7.0pt "Times New Roman"">                                                                 
</span>i.<span style="font:7.0pt "Times New Roman"">      </span></span></span><![endif]><span style="color:red">Right now, our tests just coincidentally share similar names with the packages, but we don’t feel this is axiomatic and don’t want to force this
 naming on others, who may be trying to bolt into other reporting structures.</span><o:p></o:p></p>
<ol style="margin-top:0in" start="12" type="1">
<li class="MsoListParagraph" style="margin-top:0in;margin-bottom:0in;margin-bottom:.0001pt;mso-list:l17 level1 lfo1">
<span style="mso-fareast-font-family:"Times New Roman"">I see the use of the ‘Fw’ variable as a shorthand for ‘Framework’.  Can we use something other than ‘Fw’.  It may be confused with ‘Firmware’. 
<o:p></o:p></span></li></ol>
<ol style="margin-top:0in" start="12" type="1">
<ol style="margin-top:0in" start="1" type="a">
<li class="MsoListParagraph" style="margin-top:0in;margin-bottom:0in;margin-bottom:.0001pt;mso-list:l17 level2 lfo1">
<span style="mso-fareast-font-family:"Times New Roman";color:red">No real arguments. Wouldn’t fight a find-replace, but it’ll just be a bunch of touches as we commit.</span><span style="mso-fareast-font-family:"Times New Roman""><o:p></o:p></span></li></ol>
</ol>
<ol style="margin-top:0in" start="13" type="1">
<li class="MsoListParagraph" style="margin-top:0in;margin-bottom:0in;margin-bottom:.0001pt;mso-list:l17 level1 lfo1">
<span style="mso-fareast-font-family:"Times New Roman"">UnitTestPkg/Include/UnitTestTypes.h
<o:p></o:p></span></li></ol>
<ol style="margin-top:0in" start="13" type="1">
<ol style="margin-top:0in" start="1" type="a">
<li class="MsoListParagraph" style="margin-top:0in;margin-bottom:0in;margin-bottom:.0001pt;mso-list:l17 level2 lfo1">
<span style="mso-fareast-font-family:"Times New Roman"">I see several hard coded string lengths.  Since this runs in a host environment and strings can always be allocated, can the hard coded lengths be removed?  Update the structs to use pointers to strings
 instead of string arrays, and the framework can manage alloc() and free()?<o:p></o:p></span></li></ol>
</ol>
<p class="MsoListParagraph" style="mso-margin-top-alt:0in;margin-right:0in;margin-bottom:0in;margin-left:1.5in;margin-bottom:.0001pt;text-indent:-1.5in;mso-text-indent-alt:-9.0pt;mso-list:l17 level3 lfo1">
<![if !supportLists]><span style="mso-fareast-font-family:Calibri"><span style="mso-list:Ignore"><span style="font:7.0pt "Times New Roman"">                                                                 
</span>i.<span style="font:7.0pt "Times New Roman"">      </span></span></span><![endif]><span style="color:red">Given that this framework is designed to be nimble enough to work in PEI and SMM and other constrictive environments, we wanted to keep fixed sizing.</span><o:p></o:p></p>
<ol style="margin-top:0in" start="13" type="1">
<ol style="margin-top:0in" start="2" type="a">
<li class="MsoListParagraph" style="margin-top:0in;margin-bottom:0in;margin-bottom:.0001pt;mso-list:l17 level2 lfo1">
<span style="mso-fareast-font-family:"Times New Roman"">How are Fingerprints used?  The idea of using as hash as a unique identifier is a good idea.  How is the hash calculated?  What unit test code artifacts are used so developers know what parameters must
 be unique?  Can we just decide to use a specific hash algorithm/size and the structure can be a pointer to an allocated buffer instead of a fixed size array to make it easy to change the algorithm/size in the future?<o:p></o:p></span></li></ol>
</ol>
<p class="MsoListParagraph" style="mso-margin-top-alt:0in;margin-right:0in;margin-bottom:0in;margin-left:1.5in;margin-bottom:.0001pt;text-indent:-1.5in;mso-text-indent-alt:-9.0pt;mso-list:l17 level3 lfo1">
<![if !supportLists]><span style="mso-fareast-font-family:Calibri"><span style="mso-list:Ignore"><span style="font:7.0pt "Times New Roman"">                                                                 
</span>i.<span style="font:7.0pt "Times New Roman"">      </span></span></span><![endif]><span style="color:red">Fingerprints are unique IDs to make sure that serialize/unserialized state matches the tests upon re-entry. I’m not married to MD5, but it needs
 to be predictably unique, and carried with the framework. I would not want to make any requirements on CryptoLib, since these aren’t crypto-strong.</span><o:p></o:p></p>
<ol style="margin-top:0in" start="13" type="1">
<ol style="margin-top:0in" start="3" type="a">
<li class="MsoListParagraph" style="margin-top:0in;margin-bottom:0in;margin-bottom:.0001pt;mso-list:l17 level2 lfo1">
<span style="mso-fareast-font-family:"Times New Roman"">Update all the strings to be ASCII?  See Unicode vs ASCII above.<o:p></o:p></span></li></ol>
</ol>
<p class="MsoListParagraph" style="mso-margin-top-alt:0in;margin-right:0in;margin-bottom:0in;margin-left:1.5in;margin-bottom:.0001pt;text-indent:-1.5in;mso-text-indent-alt:-9.0pt;mso-list:l17 level3 lfo1">
<![if !supportLists]><span style="mso-fareast-font-family:Calibri"><span style="mso-list:Ignore"><span style="font:7.0pt "Times New Roman"">                                                                 
</span>i.<span style="font:7.0pt "Times New Roman"">      </span></span></span><![endif]><span style="color:red">Ideally not, unless there’s a strong use case.</span><o:p></o:p></p>
<ol style="margin-top:0in" start="13" type="1">
<ol style="margin-top:0in" start="4" type="a">
<li class="MsoListParagraph" style="margin-top:0in;margin-bottom:0in;margin-bottom:.0001pt;mso-list:l17 level2 lfo1">
<span style="mso-fareast-font-family:"Times New Roman"">UNIT_TEST_SAVE_TEST – The last field is a variable sized array, so it can be a formal field.<o:p></o:p></span></li></ol>
</ol>
<p class="MsoListParagraph" style="mso-margin-top-alt:0in;margin-right:0in;margin-bottom:0in;margin-left:1.5in;margin-bottom:.0001pt;text-indent:-1.5in;mso-text-indent-alt:-9.0pt;mso-list:l17 level3 lfo1">
<![if !supportLists]><span style="mso-fareast-font-family:Calibri"><span style="mso-list:Ignore"><span style="font:7.0pt "Times New Roman"">                                                                 
</span>i.<span style="font:7.0pt "Times New Roman"">      </span></span></span><![endif]><span style="color:red">Not opposed, but don’t really want to make the change myself. Is there a style guide that this is breaking?</span><o:p></o:p></p>
<ol style="margin-top:0in" start="13" type="1">
<ol style="margin-top:0in" start="5" type="a">
<li class="MsoListParagraph" style="margin-top:0in;margin-bottom:0in;margin-bottom:.0001pt;mso-list:l17 level2 lfo1">
<span style="mso-fareast-font-family:"Times New Roman"">UNIT_TEST_SAVE_CONTEXT - – The last field is a variable sized array, so it can be a formal field.<o:p></o:p></span></li><li class="MsoListParagraph" style="margin-top:0in;margin-bottom:0in;margin-bottom:.0001pt;mso-list:l17 level2 lfo1">
<span style="mso-fareast-font-family:"Times New Roman"">UNIT_TEST_SAVE_HEADER – Can the last 3 fields be changed to pointers and be formal fields?<o:p></o:p></span></li><li class="MsoListParagraph" style="margin-top:0in;margin-bottom:0in;margin-bottom:.0001pt;mso-list:l17 level2 lfo1">
<span style="mso-fareast-font-family:"Times New Roman"">Do the structures really need to be packed?  Specially with the changes suggested above?  Is the intent to potentially share data stored on disk between different host execution environments that may have
 different width architectures?<o:p></o:p></span></li></ol>
</ol>
<p class="MsoListParagraph" style="mso-margin-top-alt:0in;margin-right:0in;margin-bottom:0in;margin-left:1.5in;margin-bottom:.0001pt;text-indent:-1.5in;mso-text-indent-alt:-9.0pt;mso-list:l17 level3 lfo1">
<![if !supportLists]><span style="mso-fareast-font-family:Calibri"><span style="mso-list:Ignore"><span style="font:7.0pt "Times New Roman"">                                                                 
</span>i.<span style="font:7.0pt "Times New Roman"">      </span></span></span><![endif]><span style="color:red">That’s an interesting point. Could you draw up your suggestion and submit a PR?</span><o:p></o:p></p>
<ol style="margin-top:0in" start="14" type="1">
<li class="MsoListParagraph" style="margin-top:0in;margin-bottom:0in;margin-bottom:.0001pt;mso-list:l17 level1 lfo1">
<span style="mso-fareast-font-family:"Times New Roman"">UnitTestPkg – UnitTestLib.h
<o:p></o:p></span></li></ol>
<ol style="margin-top:0in" start="14" type="1">
<ol style="margin-top:0in" start="1" type="a">
<li class="MsoListParagraph" style="margin-top:0in;margin-bottom:0in;margin-bottom:.0001pt;mso-list:l17 level2 lfo1">
<span style="mso-fareast-font-family:"Times New Roman"">Can you provide more context for the APIs SaveFrameworkState(), SaveFrameworkStateAndQuit(), SaveFrameworkStateAndReboot(), SetFrameworkBootNextDevice().  I do not see any Load() functions, so how would
 a set of tests be resumed?  If these do not apply to host based tests, should these be split out to a different lib class?<o:p></o:p></span></li></ol>
</ol>
<p class="MsoListParagraph" style="mso-margin-top-alt:0in;margin-right:0in;margin-bottom:0in;margin-left:1.5in;margin-bottom:.0001pt;text-indent:-1.5in;mso-text-indent-alt:-9.0pt;mso-list:l17 level3 lfo1">
<![if !supportLists]><span style="mso-fareast-font-family:Calibri"><span style="mso-list:Ignore"><span style="font:7.0pt "Times New Roman"">                                                                 
</span>i.<span style="font:7.0pt "Times New Roman"">      </span></span></span><![endif]><span style="color:red">I’ll improve the documentation around these functions. I will acknowledge, however, that this is an interface that I expect to evolve as we figure
 out what kinds of tests the community wants support for “out of the box”. If we want to easily enable tests around – for example – ExitBootServices, we will likely want to tweak this going forward to its simplest form. The version we have here was sufficient
 to enable the test cases that we’ve currently written.</span><o:p></o:p></p>
<ol style="margin-top:0in" start="15" type="1">
<li class="MsoListParagraph" style="margin-top:0in;margin-bottom:0in;margin-bottom:.0001pt;mso-list:l17 level1 lfo1">
<span style="mso-fareast-font-family:"Times New Roman"">UnitTestPkg/Library/UnitTestLib
<o:p></o:p></span></li></ol>
<ol style="margin-top:0in" start="15" type="1">
<ol style="margin-top:0in" start="1" type="a">
<li class="MsoListParagraph" style="margin-top:0in;margin-bottom:0in;margin-bottom:.0001pt;mso-list:l17 level2 lfo1">
<span style="mso-fareast-font-family:"Times New Roman"">I see an implementation of MD5.  We should not do our own.  We should use an approved implementation such as OpenSSL.<o:p></o:p></span></li></ol>
</ol>
<p class="MsoListParagraph" style="mso-margin-top-alt:0in;margin-right:0in;margin-bottom:0in;margin-left:1.5in;margin-bottom:.0001pt;text-indent:-1.5in;mso-text-indent-alt:-9.0pt;mso-list:l17 level3 lfo1">
<![if !supportLists]><span style="mso-fareast-font-family:Calibri"><span style="mso-list:Ignore"><span style="font:7.0pt "Times New Roman"">                                                                 
</span>i.<span style="font:7.0pt "Times New Roman"">      </span></span></span><![endif]><span style="color:red">Happy to discuss another implementation, but this is not crypto-strong. It’s just for uniqueness. A sufficiently long CRC would probably work, too.</span><o:p></o:p></p>
<ol style="margin-top:0in" start="16" type="1">
<li class="MsoListParagraph" style="margin-top:0in;margin-bottom:0in;margin-bottom:.0001pt;mso-list:l17 level1 lfo1">
<span style="mso-fareast-font-family:"Times New Roman"">UnitTestPkg/Library/UnitTestTerminationLibTbd
<o:p></o:p></span></li></ol>
<ol style="margin-top:0in" start="16" type="1">
<ol style="margin-top:0in" start="1" type="a">
<li class="MsoListParagraph" style="margin-top:0in;margin-bottom:0in;margin-bottom:.0001pt;mso-list:l17 level2 lfo1">
<span style="mso-fareast-font-family:"Times New Roman"">Do we really need this lib instance now?<o:p></o:p></span></li></ol>
</ol>
<p class="MsoListParagraph" style="mso-margin-top-alt:0in;margin-right:0in;margin-bottom:0in;margin-left:1.5in;margin-bottom:.0001pt;text-indent:-1.5in;mso-text-indent-alt:-9.0pt;mso-list:l17 level3 lfo1">
<![if !supportLists]><span style="mso-fareast-font-family:Calibri"><span style="mso-list:Ignore"><span style="font:7.0pt "Times New Roman"">                                                                 
</span>i.<span style="font:7.0pt "Times New Roman"">      </span></span></span><![endif]><span style="color:red">This is here so that we can figure out what this should look like for a host. Host obviously wouldn’t reset, but could conceivably quit. Or maybe
 that doesn’t make any sense for a host.</span><o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">- Bret<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><img border="0" width="555" height="2" id="Horizontal_x0020_Line_x0020_1" src="cid:image002.png@01D5B414.B2CBE470"><o:p></o:p></p>
<div id="divRplyFwdMsg">
<p class="MsoNormal" style="mso-outline-level:1"><b><span style="color:black">From:</span></b><span style="color:black">
<a href="mailto:devel@edk2.groups.io">devel@edk2.groups.io</a> <<a href="mailto:devel@edk2.groups.io">devel@edk2.groups.io</a>> on behalf of Bret Barkelew via Groups.Io <<a href="mailto:bret.barkelew=microsoft.com@groups.io">bret.barkelew=microsoft.com@groups.io</a>><br>
<b>Sent:</b> Wednesday, December 4, 2019 10:24:21 AM<br>
<b>To:</b> Andrew Fish <<a href="mailto:afish@apple.com">afish@apple.com</a>>; <a href="mailto:devel@edk2.groups.io">
devel@edk2.groups.io</a> <<a href="mailto:devel@edk2.groups.io">devel@edk2.groups.io</a>>; Kinney, Michael D <<a href="mailto:michael.d.kinney@intel.com">michael.d.kinney@intel.com</a>><br>
<b>Cc:</b> <a href="mailto:rfc@edk2.groups.io">rfc@edk2.groups.io</a> <<a href="mailto:rfc@edk2.groups.io">rfc@edk2.groups.io</a>><br>
<b>Subject:</b> Re: [EXTERNAL] Re: [edk2-devel] EDK2 Host-Based Unit Test RFC (Now with docs!)</span>
<o:p></o:p></p>
<div>
<p class="MsoNormal"> <o:p></o:p></p>
</div>
</div>
<div>
<div>
<p class="xmsonormal">Andrew,<o:p></o:p></p>
<p class="xmsonormal">I agree with your points.<o:p></o:p></p>
<p class="xmsonormal"> <o:p></o:p></p>
<p class="xmsonormal">Mike,<o:p></o:p></p>
<p class="xmsonormal">You’ve got a lot more there. Let me take a look and update the draft. I’ll ping back ASAP.<o:p></o:p></p>
<p class="xmsonormal"> <o:p></o:p></p>
<p class="xmsonormal">- Bret<o:p></o:p></p>
<p class="xmsonormal"> <o:p></o:p></p>
<div style="border:none;border-top:solid #E1E1E1 1.0pt;padding:3.0pt 0in 0in 0in">
<p class="xmsonormal" style="mso-outline-level:1"><b>From: </b><a href="mailto:afish@apple.com">Andrew Fish</a><br>
<b>Sent: </b>Wednesday, December 4, 2019 9:50 AM<br>
<b>To: </b><a href="mailto:devel@edk2.groups.io">devel@edk2.groups.io</a>; <a href="mailto:michael.d.kinney@intel.com">
Kinney, Michael D</a><br>
<b>Cc: </b><a href="mailto:Bret.Barkelew@microsoft.com">Bret Barkelew</a>; <a href="mailto:rfc@edk2.groups.io">
rfc@edk2.groups.io</a><br>
<b>Subject: </b>[EXTERNAL] Re: [edk2-devel] EDK2 Host-Based Unit Test RFC (Now with docs!)<o:p></o:p></p>
</div>
<p class="xmsonormal"> <o:p></o:p></p>
<p class="xmsonormal">Mike, <o:p></o:p></p>
<div>
<p class="xmsonormal"> <o:p></o:p></p>
</div>
<div>
<p class="xmsonormal">I like and agree with your comments.<o:p></o:p></p>
</div>
<div>
<p class="xmsonormal"> <o:p></o:p></p>
</div>
<div>
<p class="xmsonormal">On the UnitTestPkg(s) dependency issue I think it would make sense to move as much as possible into the *Pkg/Test/ ( *Pkg/HostLibrary,  MdePkg/MdePkgTest.dsc, etc.) directory structure. It looks like for implementation specific tests we
 skip the Test directory and drop the UnitTest or FuzzTest directly into modules directory. Maybe we should follow the same pattern as *Pkg/Test and have a Test directory? This will help minimize the number of "reserved" directories we need for managing the
 testing. Have a standardized directory structure will make it easier to differentiate the code from tests while doing `git grep` or other forms of code spelunking. <o:p></o:p></p>
</div>
<div>
<p class="xmsonormal"> <o:p></o:p></p>
</div>
<div>
<p class="xmsonormal">A Host-Based Unit Test for a Library makes sense as you can link directly against the library and test it. A Host-Based Unit Test for Protocol/PPI/GUID [1] seems a little more complex. It is easy enough to write tests for the interfaces
 but what APIs do you call to get access to the protocol? <o:p></o:p></p>
</div>
<div>
<p class="xmsonormal"> <o:p></o:p></p>
</div>
<div>
<p class="xmsonormal">Per our conversation at the Stewards meeting I think make sense to try to roll out the testing of libraries as the 1st phase. The mocking required for drivers could get quite complex and let us not get bogged down in all that to get something
 working. <o:p></o:p></p>
</div>
<div>
<p class="xmsonormal"> <o:p></o:p></p>
</div>
<div>
<p class="xmsonormal">[1] *Pkg/Test/UnitTest/[Library|Protocol|Ppi|Guid] <o:p></o:p></p>
</div>
<div>
<p class="xmsonormal"> <o:p></o:p></p>
</div>
<div>
<p class="xmsonormal">Thanks,<o:p></o:p></p>
</div>
<div>
<p class="xmsonormal"> <o:p></o:p></p>
</div>
<div>
<p class="xmsonormal">Andrew Fish<o:p></o:p></p>
</div>
<div>
<p class="xmsonormal"> <o:p></o:p></p>
<div>
<p class="xmsonormal" style="margin-bottom:12.0pt"><o:p> </o:p></p>
<blockquote style="margin-top:5.0pt;margin-bottom:5.0pt">
<div>
<p class="xmsonormal">On Dec 2, 2019, at 3:12 PM, Michael D Kinney <<a href="mailto:michael.d.kinney@intel.com">michael.d.kinney@intel.com</a>> wrote:<o:p></o:p></p>
</div>
<p class="xmsonormal"> <o:p></o:p></p>
<div>
<div>
<p class="xmsonormal">Hi Bret,<o:p></o:p></p>
</div>
<div>
<p class="xmsonormal"> <o:p></o:p></p>
</div>
<div>
<p class="xmsonormal">Thanks for posting this content. <span class="xapple-converted-space"> </span>Host based unit testing is a very valuable addition to the CI checks.<o:p></o:p></p>
</div>
<div>
<p class="xmsonormal"> <o:p></o:p></p>
</div>
<div>
<p class="xmsonormal">I have the following comments:<o:p></o:p></p>
</div>
<div>
<p class="xmsonormal"> <o:p></o:p></p>
</div>
<ol style="margin-top:0in" start="1" type="1">
<li class="xmsolistparagraph" style="margin-top:0in;margin-bottom:0in;margin-bottom:.0001pt;mso-list:l13 level1 lfo2;tab-stops:list .5in">
<span style="mso-fareast-font-family:"Times New Roman"">I see that<span class="xapple-converted-space"> </span><span class="xspelle">MdePkg</span><span class="xapple-converted-space"> </span>adds a dependency on<span class="xapple-converted-space"> </span><span class="xspelle">UnitTestPkg</span>. <span class="xapple-converted-space"> </span>This
 makes<span class="xapple-converted-space"> </span><span class="xspelle">UnitTestPkg</span><span class="xapple-converted-space"> </span>the root package when building and running host based unit tests. <span class="xapple-converted-space"> </span>This makes
 sense, but good to highlight that all packages that use host based tests will introduce a new package dependency on<span class="xapple-converted-space"> </span><span class="xspelle">UnitTestPkg</span>.
<o:p></o:p></span></li></ol>
<ol style="margin-top:0in" start="1" type="1">
<ol style="margin-top:0in" start="1" type="a">
<li class="xmsolistparagraph" style="margin-top:0in;margin-bottom:0in;margin-bottom:.0001pt;mso-list:l9 level2 lfo3;tab-stops:list 1.0in">
<span style="mso-fareast-font-family:"Times New Roman"">Since the dependency only applies to unit tests, can we update the<span class="xapple-converted-space"> </span><span class="xspelle">DependencyCheck</span><span class="xapple-converted-space"> </span>plugin
 to support listing dependencies for FW components separate from dependencies for unit tests?<o:p></o:p></span></li></ol>
</ol>
<ol style="margin-top:0in" start="2" type="1">
<li class="xmsolistparagraph" style="margin-top:0in;margin-bottom:0in;margin-bottom:.0001pt;mso-list:l19 level1 lfo4;tab-stops:list .5in">
<span style="mso-fareast-font-family:"Times New Roman"">I see<span class="xapple-converted-space"> </span><span class="xspelle">UnitTestPkg</span><span class="xapple-converted-space"> </span>declares 6 new lib classes. <span class="xapple-converted-space"> </span>Are
 all 6 classes intended to be used directly from a unit test case? <span class="xapple-converted-space"> </span>If some of these are only intended to be used from the framework inside the<span class="xapple-converted-space"> </span><span class="xspelle">UnitTestPkg</span><span class="xapple-converted-space"> </span>can
 we make them private?<o:p></o:p></span></li><li class="xmsolistparagraph" style="margin-top:0in;margin-bottom:0in;margin-bottom:.0001pt;mso-list:l19 level1 lfo4;tab-stops:list .5in">
<span style="mso-fareast-font-family:"Times New Roman"">In the<span class="xapple-converted-space"> </span><span class="xspelle">MdePkg</span>, I see a new top level directory called ‘<span class="xspelle">HostLibrary</span>’. Since these lib instances are
 only used from a host based test, can they be moved into<span class="xapple-converted-space"> </span> the ‘Test’ directory?<o:p></o:p></span></li><li class="xmsolistparagraph" style="margin-top:0in;margin-bottom:0in;margin-bottom:.0001pt;mso-list:l19 level1 lfo4;tab-stops:list .5in">
<span class="xspelle"><span style="mso-fareast-font-family:"Times New Roman"">MdePkg</span></span><span style="mso-fareast-font-family:"Times New Roman"">/<span class="xspelle">MdePkgTest.dsc</span>. 
<o:p></o:p></span></li></ol>
<ol style="margin-top:0in" start="4" type="1">
<ol style="margin-top:0in" start="1" type="a">
<li class="xmsolistparagraph" style="margin-top:0in;margin-bottom:0in;margin-bottom:.0001pt;mso-list:l26 level2 lfo5;tab-stops:list 1.0in">
<span style="mso-fareast-font-family:"Times New Roman"">Can this DSC file be moved into the ‘Test’ directory? <o:p></o:p></span></li><li class="xmsolistparagraph" style="margin-top:0in;margin-bottom:0in;margin-bottom:.0001pt;mso-list:l26 level2 lfo5;tab-stops:list 1.0in">
<span style="mso-fareast-font-family:"Times New Roman"">I see this DSC file only supports VS today. <span class="xapple-converted-space"> </span>How much work is it to add GCC support?<o:p></o:p></span></li></ol>
</ol>
<ol style="margin-top:0in" start="5" type="1">
<li class="xmsolistparagraph" style="margin-top:0in;margin-bottom:0in;margin-bottom:.0001pt;mso-list:l4 level1 lfo6;tab-stops:list .5in">
<span class="xspelle"><span style="mso-fareast-font-family:"Times New Roman"">MdePkg</span></span><span style="mso-fareast-font-family:"Times New Roman"">/<span class="xspelle">HostLibrary</span>/<span class="xspelle">BaseLibHost</span>
<o:p></o:p></span></li></ol>
<ol style="margin-top:0in" start="5" type="1">
<ol style="margin-top:0in" start="1" type="a">
<li class="xmsolistparagraph" style="margin-top:0in;margin-bottom:0in;margin-bottom:.0001pt;mso-list:l1 level2 lfo7;tab-stops:list 1.0in">
<span style="mso-fareast-font-family:"Times New Roman"">Why are there 2<span class="xapple-converted-space"> </span><span class="xspelle">INFs.</span> <span class="xapple-converted-space"> </span>One with ASM and one without ASM? <span class="xapple-converted-space"> </span>Can
 we just use the one with ASM and assume NASM is installed?<o:p></o:p></span></li><li class="xmsolistparagraph" style="margin-top:0in;margin-bottom:0in;margin-bottom:.0001pt;mso-list:l1 level2 lfo7;tab-stops:list 1.0in">
<span style="mso-fareast-font-family:"Times New Roman"">I see the purpose of this lib instance is to call the<o:p></o:p></span></li><li class="xmsolistparagraph" style="margin-top:0in;margin-bottom:0in;margin-bottom:.0001pt;mso-list:l1 level2 lfo7;tab-stops:list 1.0in">
<span class="xspelle"><span style="mso-fareast-font-family:"Times New Roman"">SetJump</span></span><span style="mso-fareast-font-family:"Times New Roman"">()/<span class="xspelle">LongJump</span>(). <span class="xapple-converted-space"> </span>So these implementations
 always work? <span class="xapple-converted-space"> </span>It looks like it assumes BASE_LIBRARY_JUMP_BUFFER is identical to the host OS user mode application<span class="xspelle">setjmp</span>()/<span class="xspelle">longjmp</span>() state.<o:p></o:p></span></li><li class="xmsolistparagraph" style="margin-top:0in;margin-bottom:0in;margin-bottom:.0001pt;mso-list:l1 level2 lfo7;tab-stops:list 1.0in">
<span style="mso-fareast-font-family:"Times New Roman"">Why are<span class="xapple-converted-space"> </span><span class="xspelle">DRx</span><span class="xapple-converted-space"> </span>and<span class="xapple-converted-space"> </span><span class="xspelle">CRx</span><span class="xapple-converted-space"> </span>registers
 emulated? <span class="xapple-converted-space"> </span>I would think and code that depends on read/writing these registers would not be compatible with host based testing. <span class="xapple-converted-space"> </span>Can we change to ASSERT (FALSE)?<o:p></o:p></span></li><li class="xmsolistparagraph" style="margin-top:0in;margin-bottom:0in;margin-bottom:.0001pt;mso-list:l1 level2 lfo7;tab-stops:list 1.0in">
<span style="mso-fareast-font-family:"Times New Roman"">PatchInstructionX86() – I suspect this will not work in a host based environment because it is<span class="xapple-converted-space"> </span><span class="xspelle">self modifying</span><span class="xapple-converted-space"> </span>code. <span class="xapple-converted-space"> </span>Should
 it be ASSERT (FALSE)?<o:p></o:p></span></li></ol>
</ol>
<ol style="margin-top:0in" start="6" type="1">
<li class="xmsolistparagraph" style="margin-top:0in;margin-bottom:0in;margin-bottom:.0001pt;mso-list:l12 level1 lfo8;tab-stops:list .5in">
<span class="xspelle"><span style="mso-fareast-font-family:"Times New Roman"">MdePkg</span></span><span style="mso-fareast-font-family:"Times New Roman"">/<span class="xspelle">HostLibrary</span>/<span class="xspelle">DebugLibHost</span>
<o:p></o:p></span></li></ol>
<ol style="margin-top:0in" start="6" type="1">
<ol style="margin-top:0in" start="1" type="a">
<li class="xmsolistparagraph" style="margin-top:0in;margin-bottom:0in;margin-bottom:.0001pt;mso-list:l7 level2 lfo9;tab-stops:list 1.0in">
<span style="mso-fareast-font-family:"Times New Roman"">What is ‘#<span class="xspelle">ifndef</span><span class="xapple-converted-space"> </span>TEST_WITH_KLEE’<o:p></o:p></span></li><li class="xmsolistparagraph" style="margin-top:0in;margin-bottom:0in;margin-bottom:.0001pt;mso-list:l7 level2 lfo9;tab-stops:list 1.0in">
<span style="mso-fareast-font-family:"Times New Roman"">What is the ‘<span class="xspelle">PatchFormat</span>()’ function? <span class="xapple-converted-space"> </span>It is always disabled with if (0).<o:p></o:p></span></li><li class="xmsolistparagraph" style="margin-top:0in;margin-bottom:0in;margin-bottom:.0001pt;mso-list:l7 level2 lfo9;tab-stops:list 1.0in">
<span style="mso-fareast-font-family:"Times New Roman"">Are the PCDs to set the debug message levels disabled on purpose? (<span class="xspelle">DebugPrintEnabled</span>(),<span class="xapple-converted-space"> </span><span class="xspelle">DebugPrintLevelEnabled</span>(),<span class="xapple-converted-space"> </span><span class="xspelle">DebugCodeEnabled</span>())<o:p></o:p></span></li></ol>
</ol>
<ol style="margin-top:0in" start="7" type="1">
<li class="xmsolistparagraph" style="margin-top:0in;margin-bottom:0in;margin-bottom:.0001pt;mso-list:l24 level1 lfo10;tab-stops:list .5in">
<span class="xspelle"><span style="mso-fareast-font-family:"Times New Roman"">MdePkg</span></span><span style="mso-fareast-font-family:"Times New Roman"">/<span class="xspelle">HostLibrary</span>/<span class="xspelle">BaseMemoryLibHost</span>
<o:p></o:p></span></li></ol>
<ol style="margin-top:0in" start="7" type="1">
<ol style="margin-top:0in" start="1" type="a">
<li class="xmsolistparagraph" style="margin-top:0in;margin-bottom:0in;margin-bottom:.0001pt;mso-list:l6 level2 lfo11;tab-stops:list 1.0in">
<span style="mso-fareast-font-family:"Times New Roman"">Why can’t we use<span class="xapple-converted-space"> </span><span class="xspelle">MdePkg</span>/Library/<span class="xspelle">BaseMemoryLib</span>/<span class="xspelle">BaseMemoryLib</span>/inf instead
 and reduce the number of host specific lib instances?<o:p></o:p></span></li></ol>
</ol>
<ol style="margin-top:0in" start="8" type="1">
<li class="xmsolistparagraph" style="margin-top:0in;margin-bottom:0in;margin-bottom:.0001pt;mso-list:l18 level1 lfo12;tab-stops:list .5in">
<span class="xspelle"><span style="mso-fareast-font-family:"Times New Roman"">MdePkg</span></span><span style="mso-fareast-font-family:"Times New Roman"">/<span class="xspelle">HostLibrary</span>/<span class="xspelle">MemoryAllocationLibHost</span>
<o:p></o:p></span></li></ol>
<ol style="margin-top:0in" start="8" type="1">
<ol style="margin-top:0in" start="1" type="a">
<li class="xmsolistparagraph" style="margin-top:0in;margin-bottom:0in;margin-bottom:.0001pt;mso-list:l25 level2 lfo13;tab-stops:list 1.0in">
<span style="mso-fareast-font-family:"Times New Roman"">Why is are<span class="xapple-converted-space"> </span><span class="xspelle">memcpy</span>(), assert(),<span class="xapple-converted-space"> </span><span class="xspelle">memset</span>() used in this lib? <span class="xapple-converted-space"> </span>I
 would expect this lib instance to match the<span class="xapple-converted-space"> </span><span class="xspelle">UefiMemoryAllocationLib</span><span class="xapple-converted-space"> </span>with the only the use of malloc() and free() to replace the UEFI Boot Services
 calls.<o:p></o:p></span></li></ol>
</ol>
<ol style="margin-top:0in" start="9" type="1">
<li class="xmsolistparagraph" style="margin-top:0in;margin-bottom:0in;margin-bottom:.0001pt;mso-list:l20 level1 lfo14;tab-stops:list .5in">
<span style="mso-fareast-font-family:"Times New Roman"">Host library instance naming conventions.
<o:p></o:p></span></li></ol>
<ol style="margin-top:0in" start="9" type="1">
<ol style="margin-top:0in" start="1" type="a">
<li class="xmsolistparagraph" style="margin-top:0in;margin-bottom:0in;margin-bottom:.0001pt;mso-list:l11 level2 lfo15;tab-stops:list 1.0in">
<span style="mso-fareast-font-family:"Times New Roman"">The current naming convention uses the environment as a prefix(e.g. Pei,<span class="xapple-converted-space"> </span><span class="xspelle">Smm</span>,<span class="xapple-converted-space"> </span><span class="xspelle">Uefi</span>)
 and the services the lib instance uses as a post fix. <span class="xapple-converted-space"> </span>Would it make more sense to use ‘Host’ as a prefix instead of a postfix in the lib instance names?<o:p></o:p></span></li></ol>
</ol>
<ol style="margin-top:0in" start="10" type="1">
<li class="xmsolistparagraph" style="margin-top:0in;margin-bottom:0in;margin-bottom:.0001pt;mso-list:l14 level1 lfo16;tab-stops:list .5in">
<span style="mso-fareast-font-family:"Times New Roman"">Unicode vs ASCII strings <o:p>
</o:p></span></li></ol>
<ol style="margin-top:0in" start="10" type="1">
<ol style="margin-top:0in" start="1" type="a">
<li class="xmsolistparagraph" style="margin-top:0in;margin-bottom:0in;margin-bottom:.0001pt;mso-list:l22 level2 lfo17;tab-stops:list 1.0in">
<span style="mso-fareast-font-family:"Times New Roman"">I see<span class="xapple-converted-space"> </span><span class="xspelle">InitUnitTestFramework</span>(),<span class="xapple-converted-space"> </span><span class="xspelle">CreateUnitTestSuite</span>(), and<span class="xapple-converted-space"> </span><span class="xspelle">AddTestCase</span>()
 all take Unicode strings for the labels. <span class="xapple-converted-space"> </span>I also see extra code to convert<span class="xapple-converted-space"> </span><span class="xspelle">gEfiCallerBaseName</span><span class="xapple-converted-space"> </span>from
 ASCII to Unicode to use it as a short name of a test framework. <span class="xapple-converted-space"> </span>I think it would be simpler if the parameters to these APIs were ASCII and the framework can convert to Unicode if needed.<o:p></o:p></span></li></ol>
</ol>
<ol style="margin-top:0in" start="11" type="1">
<li class="xmsolistparagraph" style="margin-top:0in;margin-bottom:0in;margin-bottom:.0001pt;mso-list:l3 level1 lfo18;tab-stops:list .5in">
<span style="mso-fareast-font-family:"Times New Roman"">Will<span class="xapple-converted-space"> </span><span class="xspelle">InitUnitTestFramework</span>() and<span class="xapple-converted-space"> </span><span class="xspelle">CreateUnitTestSuite</span>()
 always be called in pairs? <span class="xapple-converted-space"> </span>If so, can we combine these to a single API? 
<o:p></o:p></span></li></ol>
<ol style="margin-top:0in" start="11" type="1">
<ol style="margin-top:0in" start="1" type="a">
<li class="xmsolistparagraph" style="margin-top:0in;margin-bottom:0in;margin-bottom:.0001pt;mso-list:l0 level2 lfo19;tab-stops:list 1.0in">
<span style="mso-fareast-font-family:"Times New Roman"">I see the<span class="xapple-converted-space"> </span><span class="xspelle">SafeIntLib</span><span class="xapple-converted-space"> </span>example create a single framework and multiple test suites. <span class="xapple-converted-space"> </span>Perhaps
 we can have a single<span class="xapple-converted-space"> </span><span class="xspelle">CreateUnitTestSuite</span>() API where Framework is an IN/OUT and if it is passed in as NULL, the Framework handle is created.<o:p></o:p></span></li><li class="xmsolistparagraph" style="margin-top:0in;margin-bottom:0in;margin-bottom:.0001pt;mso-list:l0 level2 lfo19;tab-stops:list 1.0in">
<span style="mso-fareast-font-family:"Times New Roman"">I see a pattern where the<span class="xapple-converted-space"> </span><span class="xspelle">CreateUnitTestSuite</span>() ‘Package’ parameter is used as a prefix to every call to<span class="xapple-converted-space"> </span><span class="xspelle">AddTestCase</span>()
 in the ‘<span class="xspelle">ClassName</span>’ parameter. <span class="xapple-converted-space"> </span>Can we simplify<span class="xapple-converted-space"> </span><span class="xspelle">AddTestCase</span>() so it only need to pass in the name of the unit test
 case, and the framework can append Package <span class="xapple-converted-space"> </span>and the unit test case name?<o:p></o:p></span></li></ol>
</ol>
<ol style="margin-top:0in" start="12" type="1">
<li class="xmsolistparagraph" style="margin-top:0in;margin-bottom:0in;margin-bottom:.0001pt;mso-list:l15 level1 lfo20;tab-stops:list .5in">
<span style="mso-fareast-font-family:"Times New Roman"">I see the use of the ‘<span class="xspelle">Fw</span>’ variable as a shorthand for ‘Framework’. <span class="xapple-converted-space"> </span>Can we use something other than ‘<span class="xspelle">Fw</span>’. <span class="xapple-converted-space"> </span>It
 may be confused with ‘Firmware’. <span class="xapple-converted-space"> </span><o:p></o:p></span></li><li class="xmsolistparagraph" style="margin-top:0in;margin-bottom:0in;margin-bottom:.0001pt;mso-list:l15 level1 lfo20;tab-stops:list .5in">
<span class="xspelle"><span style="mso-fareast-font-family:"Times New Roman"">UnitTestPkg</span></span><span style="mso-fareast-font-family:"Times New Roman"">/Include/<span class="xspelle">UnitTestTypes.h</span>
<o:p></o:p></span></li></ol>
<ol style="margin-top:0in" start="13" type="1">
<ol style="margin-top:0in" start="1" type="a">
<li class="xmsolistparagraph" style="margin-top:0in;margin-bottom:0in;margin-bottom:.0001pt;mso-list:l8 level2 lfo21;tab-stops:list 1.0in">
<span style="mso-fareast-font-family:"Times New Roman"">I see several hard coded string lengths. <span class="xapple-converted-space"> </span>Since this runs in a host environment and strings can always be allocated, can the hard coded lengths be removed? <span class="xapple-converted-space"> </span>Update
 the structs to use pointers to strings instead of string arrays, and the framework can manage<span class="xapple-converted-space"> </span><span class="xspelle">alloc</span>() and free()?<o:p></o:p></span></li><li class="xmsolistparagraph" style="margin-top:0in;margin-bottom:0in;margin-bottom:.0001pt;mso-list:l8 level2 lfo21;tab-stops:list 1.0in">
<span style="mso-fareast-font-family:"Times New Roman"">How are Fingerprints used? <span class="xapple-converted-space"> </span>The idea of using as hash as a unique identifier is a good idea. <span class="xapple-converted-space"> </span>How is the hash calculated? <span class="xapple-converted-space"> </span>What
 unit test code artifacts are used so developers know what parameters must be unique? <span class="xapple-converted-space"> </span>Can we just decide to use a specific hash algorithm/size and the structure can be a pointer to an allocated buffer instead of
 a fixed size array to make it easy to change the algorithm/size in the future?<o:p></o:p></span></li><li class="xmsolistparagraph" style="margin-top:0in;margin-bottom:0in;margin-bottom:.0001pt;mso-list:l8 level2 lfo21;tab-stops:list 1.0in">
<span style="mso-fareast-font-family:"Times New Roman"">Update all the strings to be ASCII? <span class="xapple-converted-space"> </span>See Unicode vs ASCII above.<o:p></o:p></span></li><li class="xmsolistparagraph" style="margin-top:0in;margin-bottom:0in;margin-bottom:.0001pt;mso-list:l8 level2 lfo21;tab-stops:list 1.0in">
<span style="mso-fareast-font-family:"Times New Roman"">UNIT_TEST_SAVE_TEST – The last field is a variable sized array, so it can be a formal field.<o:p></o:p></span></li><li class="xmsolistparagraph" style="margin-top:0in;margin-bottom:0in;margin-bottom:.0001pt;mso-list:l8 level2 lfo21;tab-stops:list 1.0in">
<span style="mso-fareast-font-family:"Times New Roman"">UNIT_TEST_SAVE_CONTEXT - – The last field is a variable sized array, so it can be a formal field.<o:p></o:p></span></li><li class="xmsolistparagraph" style="margin-top:0in;margin-bottom:0in;margin-bottom:.0001pt;mso-list:l8 level2 lfo21;tab-stops:list 1.0in">
<span style="mso-fareast-font-family:"Times New Roman"">UNIT_TEST_SAVE_HEADER – Can the last 3 fields be changed to pointers and be formal fields?<o:p></o:p></span></li><li class="xmsolistparagraph" style="margin-top:0in;margin-bottom:0in;margin-bottom:.0001pt;mso-list:l8 level2 lfo21;tab-stops:list 1.0in">
<span style="mso-fareast-font-family:"Times New Roman"">Do the structures really need to be packed? <span class="xapple-converted-space"> </span>Specially with the changes suggested above? <span class="xapple-converted-space"> </span>Is the intent to potentially
 share data stored on disk between different host execution environments that may have different width architectures?<o:p></o:p></span></li></ol>
</ol>
<ol style="margin-top:0in" start="14" type="1">
<li class="xmsolistparagraph" style="margin-top:0in;margin-bottom:0in;margin-bottom:.0001pt;mso-list:l2 level1 lfo22;tab-stops:list .5in">
<span class="xspelle"><span style="mso-fareast-font-family:"Times New Roman"">UnitTestPkg</span></span><span class="xapple-converted-space"><span style="mso-fareast-font-family:"Times New Roman""> </span></span><span style="mso-fareast-font-family:"Times New Roman"">–<span class="xapple-converted-space"> </span><span class="xspelle">UnitTestLib.h</span>
<o:p></o:p></span></li></ol>
<ol style="margin-top:0in" start="14" type="1">
<ol style="margin-top:0in" start="1" type="a">
<li class="xmsolistparagraph" style="margin-top:0in;margin-bottom:0in;margin-bottom:.0001pt;mso-list:l16 level2 lfo23;tab-stops:list 1.0in">
<span style="mso-fareast-font-family:"Times New Roman"">Can you provide more context for the APIs<span class="xapple-converted-space"> </span><span class="xspelle">SaveFrameworkState</span>(),<span class="xapple-converted-space"> </span><span class="xspelle">SaveFrameworkStateAndQuit</span>(),<span class="xapple-converted-space"> </span><span class="xspelle">SaveFrameworkStateAndReboot</span>(),<span class="xapple-converted-space"> </span><span class="xspelle">SetFrameworkBootNextDevice</span>(). <span class="xapple-converted-space"> </span>I
 do not see any Load() functions, so how would a set of tests be resumed? <span class="xapple-converted-space"> </span>If these do not apply to host based tests, should these be split out to a different lib class?<o:p></o:p></span></li></ol>
</ol>
<ol style="margin-top:0in" start="15" type="1">
<li class="xmsolistparagraph" style="margin-top:0in;margin-bottom:0in;margin-bottom:.0001pt;mso-list:l5 level1 lfo24;tab-stops:list .5in">
<span class="xspelle"><span style="mso-fareast-font-family:"Times New Roman"">UnitTestPkg</span></span><span style="mso-fareast-font-family:"Times New Roman"">/Library/<span class="xspelle">UnitTestLib</span>
<o:p></o:p></span></li></ol>
<ol style="margin-top:0in" start="15" type="1">
<ol style="margin-top:0in" start="1" type="a">
<li class="xmsolistparagraph" style="margin-top:0in;margin-bottom:0in;margin-bottom:.0001pt;mso-list:l10 level2 lfo25;tab-stops:list 1.0in">
<span style="mso-fareast-font-family:"Times New Roman"">I see an implementation of MD5. <span class="xapple-converted-space"> </span>We should not do our own. <span class="xapple-converted-space"> </span>We should use an approved implementation such as OpenSSL.<o:p></o:p></span></li></ol>
</ol>
<ol style="margin-top:0in" start="16" type="1">
<li class="xmsolistparagraph" style="margin-top:0in;margin-bottom:0in;margin-bottom:.0001pt;mso-list:l23 level1 lfo26;tab-stops:list .5in">
<span class="xspelle"><span style="mso-fareast-font-family:"Times New Roman"">UnitTestPkg</span></span><span style="mso-fareast-font-family:"Times New Roman"">/Library/<span class="xspelle">UnitTestTerminationLibTbd</span>
<o:p></o:p></span></li></ol>
<ol style="margin-top:0in" start="16" type="1">
<ol style="margin-top:0in" start="1" type="a">
<li class="xmsolistparagraph" style="margin-top:0in;margin-bottom:0in;margin-bottom:.0001pt;mso-list:l21 level2 lfo27;tab-stops:list 1.0in">
<span style="mso-fareast-font-family:"Times New Roman"">Do we really need this lib instance now?<o:p></o:p></span></li></ol>
</ol>
<div>
<p class="xmsonormal"> <o:p></o:p></p>
</div>
<div>
<p class="xmsonormal">Thanks,<o:p></o:p></p>
</div>
<div>
<p class="xmsonormal"> <o:p></o:p></p>
</div>
<div>
<p class="xmsonormal">Mike<o:p></o:p></p>
</div>
<div>
<p class="xmsonormal"> <o:p></o:p></p>
</div>
<div>
<div style="border:none;border-top:solid #E1E1E1 1.0pt;padding:3.0pt 0in 0in 0in">
<div>
<p class="xmsonormal" style="mso-outline-level:1"><b>From:</b><span class="xapple-converted-space"> </span><a href="mailto:devel@edk2.groups.io"><span style="color:#954F72">devel@edk2.groups.io</span></a><span class="xapple-converted-space"> </span><<a href="mailto:devel@edk2.groups.io"><span style="color:#954F72">devel@edk2.groups.io</span></a>><span class="xapple-converted-space"> </span><b>On
 Behalf Of<span class="xapple-converted-space"> </span></b>Bret Barkelew via Groups.Io<br>
<b>Sent:</b><span class="xapple-converted-space"> </span>Thursday, November 21, 2019 11:39 PM<br>
<b>To:</b><span class="xapple-converted-space"> </span><a href="mailto:devel@edk2.groups.io"><span style="color:#954F72">devel@edk2.groups.io</span></a><br>
<b>Subject:</b><span class="xapple-converted-space"> </span>[edk2-devel] EDK2 Host-Based Unit Test RFC (Now with docs!)<o:p></o:p></p>
</div>
</div>
</div>
<div>
<p class="xmsonormal"> <o:p></o:p></p>
</div>
<p class="xmsonormal" style="margin-bottom:12.0pt">Now that CI has landed in edk2/master, we'd like to get the basic framework for unittesting staged as well. Target intercept date would be immediately after the 2019/11 stabilization, so we wanted to go ahead
 and get comments now.<br>
<br>
The host unittest framework consists of five primary pieces:<br>
- The test library (Cmocka)<br>
- Support libraries (Found in UnitTestPkg)<br>
- The test support plugins (HostUnitTestComilerPlugin, HostUnitTestDxeCompleteCheck, HostBasedUnitTestRunner)<br>
- The configuration in the package-based *.ci.yaml file and package-based Test.dsc<br>
- The tests themselves<br>
<br>
We have a demo branch set up at:<br>
<a href="https://nam06.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgithub.com%2Fcorthon%2Fedk2-staging%2Ftree%2Fedk2-host-test_v2&data=02%7C01%7Cbret.barkelew%40microsoft.com%7C6eac9932f3f640dd65ac08d778e731e3%7C72f988bf86f141af91ab2d7cd011db47%7C1%7C0%7C637110806683189828&sdata=JQ%2BoWxlEBOK2sH55cRAPVa3OpAxTsm6eHcdbWSo9CVo%3D&reserved=0"><span style="color:#954F72">https://github.com/corthon/edk2-staging/tree/edk2-host-test_v2</span></a><br>
We also have a demo build pipeline at:<br>
<a href="https://nam06.safelinks.protection.outlook.com/?url=https%3A%2F%2Fdev.azure.com%2Ftianocore%2Fedk2-ci-play%2F_build%3FdefinitionId%3D36%26_a%3Dsummary&data=02%7C01%7Cbret.barkelew%40microsoft.com%7C6eac9932f3f640dd65ac08d778e731e3%7C72f988bf86f141af91ab2d7cd011db47%7C1%7C0%7C637110806683189828&sdata=wBwn1ehjyTmYNKVSvlEZSXK5qyeu4EPAL7FzdYntnt4%3D&reserved=0"><span style="color:#954F72">https://dev.azure.com/tianocore/edk2-ci-play/_build?definitionId=36&_a=summary</span></a><br>
<br>
The current demo branch contains a single test in MdePkg for SafeIntLib (module file MdePkg\Test\UnitTest\Library\BaseSafeIntLib\TestBaseSafeIntLib.inf). This test is automatically detected by the HostUnitTestComilerPlugin and run by the HostBasedUnitTestRunner
 as part of the CI process.<br>
<br>
A few notes about the current demo:<br>
1) The demo currently only works on Windows build chains, but there's no reason to believe that it can't work equally well on Linux build chains, and are happy to work with anyone to get it there.<br>
<br>
2) The demo currently has four failing conditions that can be seen towards the end of MdePkg "Build and Test" log file for this build:<br>
<a href="https://nam06.safelinks.protection.outlook.com/?url=https%3A%2F%2Fdev.azure.com%2Ftianocore%2Fedk2-ci-play%2F_build%2Fresults%3FbuildId%3D2590&data=02%7C01%7Cbret.barkelew%40microsoft.com%7C6eac9932f3f640dd65ac08d778e731e3%7C72f988bf86f141af91ab2d7cd011db47%7C1%7C0%7C637110806683199782&sdata=1zd2oq8zRZUn3%2FUiGDuJZEZ5M0srtc2bqoa0%2BLbZB3s%3D&reserved=0"><span style="color:#954F72">https://dev.azure.com/tianocore/edk2-ci-play/_build/results?buildId=2813</span></a><br>
"WARNING -   Test SafeInt16ToChar8 - Status<br>
d:\a\1\s\MdePkg\Test\UnitTest\Library\BaseSafeIntLib\TestBaseSafeIntLib.c:302: error: Failure!<br>
WARNING - TestBaseSafeIntLib.exe Test Failed<br>
WARNING -   Test SafeInt32ToChar8 - Status<br>
d:\a\1\s\MdePkg\Test\UnitTest\Library\BaseSafeIntLib\TestBaseSafeIntLib.c:638: error: Failure!<br>
WARNING - TestBaseSafeIntLib.exe Test Failed<br>
WARNING -   Test SafeIntnToChar8 - Status<br>
d:\a\1\s\MdePkg\Test\UnitTest\Library\BaseSafeIntLib\TestBaseSafeIntLib.c:1051: error: Failure!<br>
WARNING - TestBaseSafeIntLib.exe Test Failed<br>
WARNING -   Test SafeInt64ToChar8 - Status<br>
d:\a\1\s\MdePkg\Test\UnitTest\Library\BaseSafeIntLib\TestBaseSafeIntLib.c:1456: error: Failure!"<br>
These failures seem to be legitimate and further work should be done by the community to decide whether the test case is correct or the library is correct, but one of them needs to change.<br>
<br>
3) Current demo pulls in test collateral from a fork of the edk2-test repo. This repo is currently *very* heavy due to the history of the UEFI SCT project and the number of binaries that it pulls down. It's possible that we (the community) need to select a
 better place for this code to live. Maybe in edk2 primary (though it's not explicitly firmware code, so it seems unnecessary). Maybe in a new edk2-test2 repo or something like that.<o:p></o:p></p>
<p class="xmsonormal" style="margin-bottom:12.0pt">There’s an RFC doc here:<span class="xapple-converted-space"> </span><a href="https://nam06.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgithub.com%2Fcorthon%2Fedk2-staging%2Fblob%2Fedk2-host-test_v2%2FReadme-RFC.md&data=02%7C01%7Cbret.barkelew%40microsoft.com%7C6eac9932f3f640dd65ac08d778e731e3%7C72f988bf86f141af91ab2d7cd011db47%7C1%7C0%7C637110806683199782&sdata=1nq1mHjsbSZj4IQM5RBwSrvaQxO5cmDlTvf7VYNDV%2FA%3D&reserved=0"><span style="color:#954F72">https://github.com/corthon/edk2-staging/blob/edk2-host-test_v2/Readme-RFC.md</span></a><o:p></o:p></p>
<p class="xmsonormal" style="margin-bottom:12.0pt">And a usage guide here:<span class="xapple-converted-space"> </span><a href="https://nam06.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgithub.com%2Fcorthon%2Fedk2-staging%2Fblob%2Fedk2-host-test_v2%2FUnitTestPkg%2FReadMe.md&data=02%7C01%7Cbret.barkelew%40microsoft.com%7C6eac9932f3f640dd65ac08d778e731e3%7C72f988bf86f141af91ab2d7cd011db47%7C1%7C0%7C637110806683209750&sdata=0jRQ2Rzr9PWSYJ1YDs7l2aFS3PfAnTbTousYYe8IWTw%3D&reserved=0"><span style="color:#954F72">https://github.com/corthon/edk2-staging/blob/edk2-host-test_v2/UnitTestPkg/ReadMe.md</span></a><o:p></o:p></p>
<p class="xmsonormal" style="margin-bottom:12.0pt"><br>
Once again, would love to get this into EDK2 master after stabilization, and most of this has previously been shopped around in other discussion threads. This is just where the rubber meets the road and is the minimal subset of code that needs to land for folks
 to start contributing unittests against the core libraries that can be run as part of any CI pass.<br>
<br>
Thanks!<br>
- Bret<o:p></o:p></p>
</div>
</blockquote>
</div>
</div>
<p class="xmsonormal"> <o:p></o:p></p>
<p class="xmsonormal"> <o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
</div>
<div>
<p class="MsoNormal"></o:p></span></p>
</div>
</div>
</div>
</body>
</html>

<div width="1" style="color:white;clear:both">_._,_._,_</div>
<hr>
Groups.io Links:<p>

You receive all messages sent to this group.


<p>

<a target="_blank" href="https://edk2.groups.io/g/devel/message/52261">View/Reply Online (#52261)</a> |


  


|


  
    <a target="_blank" href="https://groups.io/mt/67560953/1813853">Mute This Topic</a>
  

| <a href="https://edk2.groups.io/g/devel/post">New Topic</a><br>



<br>

<a href="https://edk2.groups.io/g/devel/editsub/1813853">Your Subscription</a> |
<a href="mailto:devel+owner@edk2.groups.io">Contact Group Owner</a> |

<a href="https://edk2.groups.io/g/devel/unsub">Unsubscribe</a>

 [edk2-devel-archive@redhat.com]<br>
<div width="1" style="color:white;clear:both">_._,_._,_</div>